X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fstore.h;h=e5e011875e1775a1592c0511e06d5f3928121b50;hb=57b25f1ca39421037c6b8e3a9604108b86214d36;hp=15f435fefdc6136a83fdb2e53a004a5cac82e8a9;hpb=9345a64b2fa015c30d6b3fcba76211f8d0d7cfd6;p=sysdb.git diff --git a/src/include/core/store.h b/src/include/core/store.h index 15f435f..e5e0118 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -94,6 +94,14 @@ enum { : ((f) == SDB_FIELD_TIMESERIES) ? SDB_TYPE_BOOLEAN \ : -1) +/* + * sdb_store_t represents an in-memory store. It inherits from sdb_object_t + * and may safely be case to a generic object. + */ +struct sdb_store; +typedef struct sdb_store sdb_store_t; +#define SDB_STORE(obj) ((sdb_store_t *)(obj)) + /* * sdb_store_obj_t represents the super-class of any object stored in the * database. It inherits from sdb_object_t and may safely be cast to a generic @@ -144,6 +152,9 @@ typedef struct sdb_store_matcher sdb_store_matcher_t; /* * A JSON formatter converts stored objects into the JSON format. * See http://www.ietf.org/rfc/rfc4627.txt + * + * A JSON formatter object inherits from sdb_object_t and, thus, may safely be + * cast to a generic object. */ struct sdb_store_json_formatter; typedef struct sdb_store_json_formatter sdb_store_json_formatter_t; @@ -226,6 +237,53 @@ typedef struct { sdb_object_t *user_data); } sdb_store_writer_t; +/* + * sdb_store_writer: + * A store writer implementation that provides an in-memory object store. It + * expects a store object as its user-data argument. + */ +extern sdb_store_writer_t sdb_store_writer; + +/* + * A store reader describes the interface to query a store implementation. + */ +typedef struct { + /* + * prepare_query: + * Prepare the query described by 'ast' for execution. + */ + sdb_object_t *(*prepare_query)(sdb_ast_node_t *ast, + sdb_strbuf_t *errbuf, sdb_object_t *user_data); + + /* + * execute_query: + * Execute a previously prepared query. The callback may expect that only + * queries prepared by its respective prepare callback will be passed to + * this function. + * + * TODO: Instead of letting the executor write directly to a string buffer + * (which cannot easily be merged with other results), let it hand + * all objects to a store-writer. + */ + int (*execute_query)(sdb_object_t *q, + sdb_strbuf_t *buf, sdb_strbuf_t *errbuf, + sdb_object_t *user_data); +} sdb_store_reader_t; + +/* + * sdb_store_reader: + * A store reader implementation that uses an in-memory object store. It + * expects a store object as its user-data argument. + */ +extern sdb_store_reader_t sdb_store_reader; + +/* + * sdb_store_create: + * Allocate a new in-memory store. + */ +sdb_store_t * +sdb_store_create(void); + /* * sdb_store_init: * Initialize the store sub-system. This function has to be called before @@ -246,16 +304,12 @@ void sdb_store_clear(void); /* - * sdb_store_has_host: * sdb_store_get_host: * Query the store for a host by its (canonicalized) name. * - * sdb_store_get_host increments the ref count of the host object. The caller - * needs to deref it when no longer using it. + * The function increments the ref count of the host object. The caller needs + * to deref it when no longer using it. */ -bool -sdb_store_has_host(const char *name); - sdb_store_obj_t * sdb_store_get_host(const char *name);