git » nmdb » master » tree

[master] / nmdb / be.c

#include <string.h>		/* strcmp() */
#include "be.h"

/* Openers for each supported backend, defined on each be-X.c file */
struct db_conn *qdbm_open(const char *name, int flags);
struct db_conn *bdb_open(const char *name, int flags);
struct db_conn *tc_open(const char *name, int flags);
struct db_conn *xtdb_open(const char *name, int flags);
struct db_conn *xleveldb_open(const char *name, int flags);
struct db_conn *null_open(const char *name, int flags);


struct db_conn *db_open(enum backend_type type, const char *name, int flags)
{
	switch (type) {
	case BE_QDBM:
		return qdbm_open(name, flags);
	case BE_BDB:
		return bdb_open(name, flags);
	case BE_TC:
		return tc_open(name, flags);
	case BE_TDB:
		return xtdb_open(name, flags);
	case BE_LEVELDB:
		return xleveldb_open(name, flags);
	case BE_NULL:
		return null_open(name, flags);
	default:
		return NULL;
	}
}

enum backend_type be_type_from_str(const char *name)
{
	if (strcmp(name, "qdbm") == 0)
		return BE_ENABLE_QDBM ? BE_QDBM : BE_UNSUPPORTED;
	if (strcmp(name, "bdb") == 0)
		return BE_ENABLE_BDB ? BE_BDB : BE_UNSUPPORTED;
	if (strcmp(name, "tc") == 0)
		return BE_ENABLE_TC ? BE_TC : BE_UNSUPPORTED;
	if (strcmp(name, "tdb") == 0)
		return BE_ENABLE_TDB ? BE_TDB : BE_UNSUPPORTED;
	if (strcmp(name, "leveldb") == 0)
		return BE_ENABLE_LEVELDB ? BE_LEVELDB : BE_UNSUPPORTED;
	if (strcmp(name, "null") == 0)
		return BE_ENABLE_NULL ? BE_NULL : BE_UNSUPPORTED;
	return BE_UNKNOWN;
}


const char *be_str_from_type(enum backend_type type)
{
	if (type == BE_QDBM)
		return "qdbm";
	if (type == BE_BDB)
		return "bdb";
	if (type == BE_TC)
		return "tc";
	if (type == BE_TDB)
		return "tdb";
	if (type == BE_LEVELDB)
		return "leveldb";
	if (type == BE_NULL)
		return "null";
	return "unknown";
}