diff --git a/src/core/store_query.c b/src/core/store_query.c
index 90d45bf521c9d093b2dc34a153f465ef4e24712e..341cb16b1da7e5ebcf8d3cfaa5d04e2138856811 100644 (file)
--- a/src/core/store_query.c
+++ b/src/core/store_query.c
/*
- * SysDB - src/core/store_lookup.c
+ * SysDB - src/core/store_query.c
* Copyright (C) 2014-2015 Sebastian 'tokkee' Harl <sh@tokkee.org>
* All rights reserved.
*
#include <assert.h>
-static sdb_store_matcher_t *
+static sdb_memstore_matcher_t *
node_to_matcher(sdb_ast_node_t *n);
-static sdb_store_expr_t *
+static sdb_memstore_expr_t *
node_to_expr(sdb_ast_node_t *n)
{
- sdb_store_expr_t *left = NULL, *right = NULL;
- sdb_store_expr_t *e;
+ sdb_memstore_expr_t *left = NULL, *right = NULL;
+ sdb_memstore_expr_t *e;
int op;
if (! n) {
return NULL;
}
op = SDB_AST_OP_TO_DATA_OP(SDB_AST_OP(n)->kind);
- e = sdb_store_expr_create(op, left, right);
+ e = sdb_memstore_expr_create(op, left, right);
break;
case SDB_AST_TYPE_CONST:
- return sdb_store_expr_constvalue(&SDB_AST_CONST(n)->value);
+ return sdb_memstore_expr_constvalue(&SDB_AST_CONST(n)->value);
case SDB_AST_TYPE_VALUE:
if (SDB_AST_VALUE(n)->type == SDB_ATTRIBUTE)
- return sdb_store_expr_attrvalue(SDB_AST_VALUE(n)->name);
- return sdb_store_expr_fieldvalue(SDB_AST_VALUE(n)->type);
+ return sdb_memstore_expr_attrvalue(SDB_AST_VALUE(n)->name);
+ return sdb_memstore_expr_fieldvalue(SDB_AST_VALUE(n)->type);
case SDB_AST_TYPE_TYPED:
right = node_to_expr(SDB_AST_TYPED(n)->expr);
if (! right)
return NULL;
- e = sdb_store_expr_typed(SDB_AST_TYPED(n)->type, right);
+ e = sdb_memstore_expr_typed(SDB_AST_TYPED(n)->type, right);
break;
default:
return e;
} /* node_to_expr */
-static sdb_store_matcher_t *
+static sdb_memstore_matcher_t *
logical_to_matcher(sdb_ast_node_t *n)
{
- sdb_store_matcher_t *left = NULL, *right;
- sdb_store_matcher_t *m;
+ sdb_memstore_matcher_t *left = NULL, *right;
+ sdb_memstore_matcher_t *m;
if (SDB_AST_OP(n)->left) {
left = node_to_matcher(SDB_AST_OP(n)->left);
switch (SDB_AST_OP(n)->kind) {
case SDB_AST_AND:
- m = sdb_store_con_matcher(left, right);
+ m = sdb_memstore_con_matcher(left, right);
break;
case SDB_AST_OR:
- m = sdb_store_dis_matcher(left, right);
+ m = sdb_memstore_dis_matcher(left, right);
break;
case SDB_AST_NOT:
- m = sdb_store_inv_matcher(right);
+ m = sdb_memstore_inv_matcher(right);
break;
default:
return m;
} /* logical_to_matcher */
-static sdb_store_matcher_t *
+static sdb_memstore_matcher_t *
cmp_to_matcher(sdb_ast_node_t *n)
{
- sdb_store_expr_t *left = NULL, *right;
- sdb_store_matcher_t *m;
+ sdb_memstore_expr_t *left = NULL, *right;
+ sdb_memstore_matcher_t *m;
if (SDB_AST_OP(n)->left) {
left = node_to_expr(SDB_AST_OP(n)->left);
switch (SDB_AST_OP(n)->kind) {
case SDB_AST_LT:
- m = sdb_store_lt_matcher(left, right);
+ m = sdb_memstore_lt_matcher(left, right);
break;
case SDB_AST_LE:
- m = sdb_store_le_matcher(left, right);
+ m = sdb_memstore_le_matcher(left, right);
break;
case SDB_AST_EQ:
- m = sdb_store_eq_matcher(left, right);
+ m = sdb_memstore_eq_matcher(left, right);
break;
case SDB_AST_NE:
- m = sdb_store_ne_matcher(left, right);
+ m = sdb_memstore_ne_matcher(left, right);
break;
case SDB_AST_GE:
- m = sdb_store_ge_matcher(left, right);
+ m = sdb_memstore_ge_matcher(left, right);
break;
case SDB_AST_GT:
- m = sdb_store_gt_matcher(left, right);
+ m = sdb_memstore_gt_matcher(left, right);
break;
case SDB_AST_REGEX:
- m = sdb_store_regex_matcher(left, right);
+ m = sdb_memstore_regex_matcher(left, right);
break;
case SDB_AST_NREGEX:
- m = sdb_store_nregex_matcher(left, right);
+ m = sdb_memstore_nregex_matcher(left, right);
break;
case SDB_AST_ISNULL:
- m = sdb_store_isnull_matcher(right);
+ m = sdb_memstore_isnull_matcher(right);
+ break;
+ case SDB_AST_ISTRUE:
+ m = sdb_memstore_istrue_matcher(right);
+ break;
+ case SDB_AST_ISFALSE:
+ m = sdb_memstore_isfalse_matcher(right);
break;
case SDB_AST_IN:
- m = sdb_store_in_matcher(left, right);
+ m = sdb_memstore_in_matcher(left, right);
break;
default:
return m;
} /* cmp_to_matcher */
-static sdb_store_matcher_t *
+static sdb_memstore_matcher_t *
iter_to_matcher(sdb_ast_node_t *n)
{
- sdb_store_expr_t *iter;
- sdb_store_matcher_t *expr, *m;
+ sdb_memstore_expr_t *iter;
+ sdb_memstore_matcher_t *expr, *m;
assert((SDB_AST_ITER(n)->expr->type == SDB_AST_TYPE_OPERATOR)
&& (! SDB_AST_OP(SDB_AST_ITER(n)->expr)->left));
switch (SDB_AST_ITER(n)->kind) {
case SDB_AST_ALL:
- m = sdb_store_all_matcher(iter, expr);
+ m = sdb_memstore_all_matcher(iter, expr);
break;
case SDB_AST_ANY:
- m = sdb_store_any_matcher(iter, expr);
+ m = sdb_memstore_any_matcher(iter, expr);
break;
default:
return m;
} /* iter_to_matcher */
-static sdb_store_matcher_t *
+static sdb_memstore_matcher_t *
node_to_matcher(sdb_ast_node_t *n)
{
int kind;
} /* node_to_matcher */
/*
- * matcher type
+ * query type
*/
static int
-query_matcher_init(sdb_object_t *obj, va_list ap)
+query_init(sdb_object_t *obj, va_list ap)
{
sdb_ast_node_t *ast = va_arg(ap, sdb_ast_node_t *);
sdb_ast_node_t *matcher = NULL, *filter = NULL;
- M(obj)->type = MATCHER_QUERY;
-
- QUERY_M(obj)->ast = ast;
+ QUERY(obj)->ast = ast;
sdb_object_ref(SDB_OBJ(ast));
switch (ast->type) {
}
if (matcher) {
- QUERY_M(obj)->matcher = node_to_matcher(matcher);
- if (! QUERY_M(obj)->matcher)
+ QUERY(obj)->matcher = node_to_matcher(matcher);
+ if (! QUERY(obj)->matcher)
return -1;
}
if (filter) {
- QUERY_M(obj)->filter = node_to_matcher(filter);
- if (! QUERY_M(obj)->filter)
+ QUERY(obj)->filter = node_to_matcher(filter);
+ if (! QUERY(obj)->filter)
return -1;
}
return 0;
-} /* query_matcher_init */
+} /* query_init */
static void
-query_matcher_destroy(sdb_object_t *obj)
+query_destroy(sdb_object_t *obj)
{
- sdb_object_deref(SDB_OBJ(QUERY_M(obj)->ast));
- sdb_object_deref(SDB_OBJ(QUERY_M(obj)->matcher));
- sdb_object_deref(SDB_OBJ(QUERY_M(obj)->filter));
-} /* query_matcher_destroy */
+ sdb_object_deref(SDB_OBJ(QUERY(obj)->ast));
+ sdb_object_deref(SDB_OBJ(QUERY(obj)->matcher));
+ sdb_object_deref(SDB_OBJ(QUERY(obj)->filter));
+} /* query_destroy */
static sdb_type_t query_type = {
- /* size = */ sizeof(query_matcher_t),
- /* init = */ query_matcher_init,
- /* destroy = */ query_matcher_destroy,
+ /* size = */ sizeof(sdb_memstore_query_t),
+ /* init = */ query_init,
+ /* destroy = */ query_destroy,
};
/*
* public API
*/
-sdb_store_matcher_t *
-sdb_store_query_prepare(sdb_ast_node_t *ast)
+sdb_memstore_query_t *
+sdb_memstore_query_prepare(sdb_ast_node_t *ast)
{
if (! ast)
return NULL;
- return M(sdb_object_create(SDB_AST_TYPE_TO_STRING(ast), query_type, ast));
-} /* sdb_store_query_prepare */
+ return QUERY(sdb_object_create(SDB_AST_TYPE_TO_STRING(ast), query_type, ast));
+} /* sdb_memstore_query_prepare */
+
+sdb_memstore_matcher_t *
+sdb_memstore_query_prepare_matcher(sdb_ast_node_t *ast)
+{
+ return node_to_matcher(ast);
+} /* sdb_memstore_query_prepare_matcher */
/* vim: set tw=78 sw=4 ts=4 noexpandtab : */