Code

Renamed in-memory store types and functions to sdb_memstore*.
[sysdb.git] / src / core / store-private.h
index 97e8a6c2fcce7fff076b2f0275ead0a2ae42306a..2f9d96cd068b989f908ad94b88c071bbf19f3924 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 /*
- * private data structures used by the store module
+ * private data structures used by the memstore module
  */
 
 #ifndef SDB_CORE_STORE_PRIVATE_H
@@ -46,8 +46,9 @@ extern "C" {
  * core types
  */
 
-struct sdb_store_obj {
+struct sdb_memstore_obj {
        sdb_object_t super;
+#define _name super.name
 
        /* object type */
        int type;
@@ -57,52 +58,64 @@ struct sdb_store_obj {
        sdb_time_t interval; /* moving average */
        char **backends;
        size_t backends_num;
-       sdb_store_obj_t *parent;
+       sdb_memstore_obj_t *parent;
 };
-#define STORE_OBJ(obj) ((sdb_store_obj_t *)(obj))
-#define STORE_CONST_OBJ(obj) ((const sdb_store_obj_t *)(obj))
+#define STORE_OBJ(obj) ((sdb_memstore_obj_t *)(obj))
+#define STORE_CONST_OBJ(obj) ((const sdb_memstore_obj_t *)(obj))
 
 typedef struct {
-       sdb_store_obj_t super;
+       sdb_memstore_obj_t super;
 
        sdb_data_t value;
-} sdb_attribute_t;
-#define ATTR(obj) ((sdb_attribute_t *)(obj))
-#define CONST_ATTR(obj) ((const sdb_attribute_t *)(obj))
+} attr_t;
+#define ATTR(obj) ((attr_t *)(obj))
+#define CONST_ATTR(obj) ((const attr_t *)(obj))
 
 typedef struct {
-       sdb_store_obj_t super;
+       sdb_memstore_obj_t super;
 
        sdb_avltree_t *attributes;
-} sdb_service_t;
-#define SVC(obj) ((sdb_service_t *)(obj))
-#define CONST_SVC(obj) ((const sdb_service_t *)(obj))
+} service_t;
+#define SVC(obj) ((service_t *)(obj))
+#define CONST_SVC(obj) ((const service_t *)(obj))
 
 typedef struct {
-       sdb_store_obj_t super;
+       sdb_memstore_obj_t super;
 
        sdb_avltree_t *attributes;
        struct {
                char *type;
                char *id;
        } store;
-} sdb_metric_t;
-#define METRIC(obj) ((sdb_metric_t *)(obj))
+} metric_t;
+#define METRIC(obj) ((metric_t *)(obj))
 
 typedef struct {
-       sdb_store_obj_t super;
+       sdb_memstore_obj_t super;
 
        sdb_avltree_t *services;
        sdb_avltree_t *metrics;
        sdb_avltree_t *attributes;
-} sdb_host_t;
-#define HOST(obj) ((sdb_host_t *)(obj))
-#define CONST_HOST(obj) ((const sdb_host_t *)(obj))
+} host_t;
+#define HOST(obj) ((host_t *)(obj))
+#define CONST_HOST(obj) ((const host_t *)(obj))
 
 /* shortcuts for accessing service/host attributes */
 #define _last_update super.last_update
 #define _interval super.interval
 
+/*
+ * querying
+ */
+
+struct sdb_memstore_query {
+       sdb_object_t super;
+       sdb_ast_node_t *ast;
+       sdb_memstore_matcher_t *matcher;
+       sdb_memstore_matcher_t *filter;
+};
+#define QUERY(m) ((sdb_memstore_query_t *)(m))
+
 /*
  * expressions
  */
@@ -115,17 +128,18 @@ enum {
        /* >0: operator id */
 };
 
-struct sdb_store_expr {
+struct sdb_memstore_expr {
        sdb_object_t super;
 
        int type; /* see above */
        int data_type;
 
-       sdb_store_expr_t *left;
-       sdb_store_expr_t *right;
+       sdb_memstore_expr_t *left;
+       sdb_memstore_expr_t *right;
 
        sdb_data_t data;
 };
+#define CONST_EXPR(v) { SDB_OBJECT_INIT, 0, (v).type, NULL, NULL, (v) }
 #define EXPR_TO_STRING(e) \
        (((e)->type == TYPED_EXPR) ? "<typed>" \
                : ((e)->type == ATTR_VALUE) ? "attribute" \
@@ -150,7 +164,8 @@ enum {
 
        /* unary operators */
        MATCHER_ISNULL,
-       MATCHER_ISNNULL,
+       MATCHER_ISTRUE,
+       MATCHER_ISFALSE,
 
        /* ary operators */
        MATCHER_LT,
@@ -161,6 +176,9 @@ enum {
        MATCHER_GT,
        MATCHER_REGEX,
        MATCHER_NREGEX,
+
+       /* a generic query */
+       MATCHER_QUERY,
 };
 
 #define MATCHER_SYM(t) \
@@ -171,7 +189,8 @@ enum {
                : ((t) == MATCHER_ALL) ? "ALL" \
                : ((t) == MATCHER_IN) ? "IN" \
                : ((t) == MATCHER_ISNULL) ? "IS NULL" \
-               : ((t) == MATCHER_ISNNULL) ? "IS NOT NULL" \
+               : ((t) == MATCHER_ISTRUE) ? "IS TRUE" \
+               : ((t) == MATCHER_ISFALSE) ? "IS FALSE" \
                : ((t) == MATCHER_LT) ? "<" \
                : ((t) == MATCHER_LE) ? "<=" \
                : ((t) == MATCHER_EQ) ? "=" \
@@ -180,58 +199,59 @@ enum {
                : ((t) == MATCHER_GT) ? ">" \
                : ((t) == MATCHER_REGEX) ? "=~" \
                : ((t) == MATCHER_NREGEX) ? "!~" \
+               : ((t) == MATCHER_QUERY) ? "QUERY" \
                : "UNKNOWN")
 
 /* matcher base type */
-struct sdb_store_matcher {
+struct sdb_memstore_matcher {
        sdb_object_t super;
        /* type of the matcher */
        int type;
 };
-#define M(m) ((sdb_store_matcher_t *)(m))
+#define M(m) ((sdb_memstore_matcher_t *)(m))
 
 /* infix operator matcher */
 typedef struct {
-       sdb_store_matcher_t super;
+       sdb_memstore_matcher_t super;
 
        /* left and right hand operands */
-       sdb_store_matcher_t *left;
-       sdb_store_matcher_t *right;
+       sdb_memstore_matcher_t *left;
+       sdb_memstore_matcher_t *right;
 } op_matcher_t;
 #define OP_M(m) ((op_matcher_t *)(m))
 
 /* unary operator matcher */
 typedef struct {
-       sdb_store_matcher_t super;
+       sdb_memstore_matcher_t super;
 
        /* operand */
-       sdb_store_matcher_t *op;
+       sdb_memstore_matcher_t *op;
 } uop_matcher_t;
 #define UOP_M(m) ((uop_matcher_t *)(m))
 
 /* iter matcher */
 typedef struct {
-       sdb_store_matcher_t super;
-       int type;
-       sdb_store_matcher_t *m;
+       sdb_memstore_matcher_t super;
+       sdb_memstore_expr_t *iter;
+       sdb_memstore_matcher_t *m;
 } iter_matcher_t;
 #define ITER_M(m) ((iter_matcher_t *)(m))
 
 /* compare operator matcher */
 typedef struct {
-       sdb_store_matcher_t super;
+       sdb_memstore_matcher_t super;
 
        /* left and right hand expressions */
-       sdb_store_expr_t *left;
-       sdb_store_expr_t *right;
+       sdb_memstore_expr_t *left;
+       sdb_memstore_expr_t *right;
 } cmp_matcher_t;
 #define CMP_M(m) ((cmp_matcher_t *)(m))
 
 typedef struct {
-       sdb_store_matcher_t super;
-       sdb_store_expr_t *expr;
-} isnull_matcher_t;
-#define ISNULL_M(m) ((isnull_matcher_t *)(m))
+       sdb_memstore_matcher_t super;
+       sdb_memstore_expr_t *expr;
+} unary_matcher_t;
+#define UNARY_M(m) ((unary_matcher_t *)(m))
 
 #ifdef __cplusplus
 } /* extern "C" */