X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fstore_query.c;h=ff7089c42e51b0294eae53b4780e4d517bfcd6cb;hp=88b076a81a8cd0d19a38ac053fa98eeef23cd043;hb=b75718ea9fe4d6c90f1794e517a0712729553c0c;hpb=740f1a8839faaf3033ea23f4cf2eea0dc0209d13 diff --git a/src/core/store_query.c b/src/core/store_query.c index 88b076a..ff7089c 100644 --- a/src/core/store_query.c +++ b/src/core/store_query.c @@ -177,6 +177,12 @@ cmp_to_matcher(sdb_ast_node_t *n) case SDB_AST_ISNULL: m = sdb_store_isnull_matcher(right); break; + case SDB_AST_ISTRUE: + m = sdb_store_istrue_matcher(right); + break; + case SDB_AST_ISFALSE: + m = sdb_store_isfalse_matcher(right); + break; case SDB_AST_IN: m = sdb_store_in_matcher(left, right); break; @@ -265,18 +271,16 @@ node_to_matcher(sdb_ast_node_t *n) } /* 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) { @@ -302,43 +306,49 @@ query_matcher_init(sdb_object_t *obj, va_list ap) } 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_store_query_t), + /* init = */ query_init, + /* destroy = */ query_destroy, }; /* * public API */ -sdb_store_matcher_t * +sdb_store_query_t * sdb_store_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)); + return QUERY(sdb_object_create(SDB_AST_TYPE_TO_STRING(ast), query_type, ast)); } /* sdb_store_query_prepare */ +sdb_store_matcher_t * +sdb_store_query_prepare_matcher(sdb_ast_node_t *ast) +{ + return node_to_matcher(ast); +} /* sdb_store_query_prepare_matcher */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */