index d2ea3f9a08c9f443584a4d021df97e02d1638111..2b6b09662f36a91bad7821ed8baacd152ac7e98c 100644 (file)
--- a/src/core/store-private.h
+++ b/src/core/store-private.h
*/
enum {
+ TYPED_EXPR = -3, /* obj type stored in data.data.integer */
ATTR_VALUE = -2, /* attr name stored in data.data.string */
FIELD_VALUE = -1, /* field type stored in data.data.integer */
/* 0: const value (stored in data) */
sdb_data_t data;
};
+#define EXPR_INIT { SDB_OBJECT_INIT, 0, -1, NULL, NULL, SDB_DATA_INIT }
+#define EXPR_TO_STRING(e) \
+ (((e)->type == TYPED_EXPR) ? "<typed>" \
+ : ((e)->type == ATTR_VALUE) ? "attribute" \
+ : ((e)->type == FIELD_VALUE) ? SDB_FIELD_TO_NAME((e)->data.data.integer) \
+ : ((e)->type == 0) ? "<constant>" \
+ : ((e)->type > 0) ? SDB_DATA_OP_TO_STRING((e)->type) \
+ : "<unknown>")
/*
* matchers
MATCHER_ANY,
MATCHER_ALL,
MATCHER_IN,
+ MATCHER_NIN,
/* unary operators */
MATCHER_ISNULL,
: ((t) == MATCHER_ANY) ? "ANY" \
: ((t) == MATCHER_ALL) ? "ALL" \
: ((t) == MATCHER_IN) ? "IN" \
+ : ((t) == MATCHER_NIN) ? "NOT IN" \
: ((t) == MATCHER_ISNULL) ? "IS NULL" \
: ((t) == MATCHER_ISNNULL) ? "IS NOT NULL" \
: ((t) == MATCHER_LT) ? "<" \
/* iter matcher */
typedef struct {
sdb_store_matcher_t super;
- int type;
+ sdb_store_expr_t *iter;
sdb_store_matcher_t *m;
} iter_matcher_t;
#define ITER_M(m) ((iter_matcher_t *)(m))