X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fparser%2Fast.h;h=01446abbd84b86e4b0395e2715f700fbad04a9dd;hp=80b5a533a539ed57b0c656458b7bf6d6f7b42690;hb=07dada8e5c614f0ef90fed8e86183ba7acd0e6e8;hpb=f1975b0bdc00eff623288b34961b9de7d83e7ba1 diff --git a/src/include/parser/ast.h b/src/include/parser/ast.h index 80b5a53..01446ab 100644 --- a/src/include/parser/ast.h +++ b/src/include/parser/ast.h @@ -76,20 +76,22 @@ typedef enum { || (((n)->type == SDB_AST_TYPE_ITERATOR) \ && ((SDB_AST_ALL <= SDB_AST_ITER(n)->kind) \ && (SDB_AST_ITER(n)->kind <= SDB_AST_ANY)))) - SDB_AST_AND = 1000, - SDB_AST_OR = 1001, - SDB_AST_NOT = 1002, - - SDB_AST_LT = 1010, - SDB_AST_LE = 1011, - SDB_AST_EQ = 1012, - SDB_AST_NE = 1013, - SDB_AST_GE = 1014, - SDB_AST_GT = 1015, - SDB_AST_REGEX = 1016, - SDB_AST_NREGEX = 1017, - SDB_AST_ISNULL = 1018, - SDB_AST_IN = 1019, + SDB_AST_AND = 1000, + SDB_AST_OR = 1001, + SDB_AST_NOT = 1002, + + SDB_AST_LT = 1010, + SDB_AST_LE = 1011, + SDB_AST_EQ = 1012, + SDB_AST_NE = 1013, + SDB_AST_GE = 1014, + SDB_AST_GT = 1015, + SDB_AST_REGEX = 1016, + SDB_AST_NREGEX = 1017, + SDB_AST_ISNULL = 1018, + SDB_AST_ISTRUE = 1019, + SDB_AST_ISFALSE = 1020, + SDB_AST_IN = 1021, /* arithmetic expressions */ #define SDB_AST_IS_ARITHMETIC(n) \ @@ -99,20 +101,20 @@ typedef enum { || (((n)->type == SDB_AST_TYPE_OPERATOR) \ && ((SDB_AST_ADD <= SDB_AST_OP(n)->kind) \ && (SDB_AST_OP(n)->kind <= SDB_AST_CONCAT)))) - SDB_AST_ADD = 2000, - SDB_AST_SUB = 2001, - SDB_AST_MUL = 2002, - SDB_AST_DIV = 2003, - SDB_AST_MOD = 2004, - SDB_AST_CONCAT = 2005, + SDB_AST_ADD = 2000, + SDB_AST_SUB = 2001, + SDB_AST_MUL = 2002, + SDB_AST_DIV = 2003, + SDB_AST_MOD = 2004, + SDB_AST_CONCAT = 2005, /* iterators */ #define SDB_AST_IS_ITERATOR(n) \ (((n)->type == SDB_AST_TYPE_ITERATOR) \ && ((SDB_AST_ALL <= SDB_AST_ITER(n)->kind) \ && (SDB_AST_ITER(n)->kind <= SDB_AST_ANY))) - SDB_AST_ALL = 3000, - SDB_AST_ANY = 3001, + SDB_AST_ALL = 3000, + SDB_AST_ANY = 3001, } sdb_ast_operator_t; #define SDB_AST_OP_TO_STRING(op) \ @@ -127,7 +129,9 @@ typedef enum { : ((op) == SDB_AST_GT) ? "GT" \ : ((op) == SDB_AST_REGEX) ? "REGEX" \ : ((op) == SDB_AST_NREGEX) ? "NREGEX" \ - : ((op) == SDB_AST_ISNULL) ? "ISNULL" \ + : ((op) == SDB_AST_ISNULL) ? "IS NULL" \ + : ((op) == SDB_AST_ISTRUE) ? "IS TRUE" \ + : ((op) == SDB_AST_ISFALSE) ? "IS FALSE" \ : ((op) == SDB_AST_IN) ? "IN" \ : ((op) == SDB_AST_ADD) ? "ADD" \ : ((op) == SDB_AST_SUB) ? "SUB" \ @@ -253,12 +257,17 @@ typedef struct { sdb_ast_node_t super; int obj_type; char *hostname; /* optional */ + int parent_type; /* optional */ + char *parent; /* optional */ char *name; + /* whether to include the full object, that is, + * including all attributes and all children */ + bool full; sdb_ast_node_t *filter; /* optional */ } sdb_ast_fetch_t; #define SDB_AST_FETCH(obj) ((sdb_ast_fetch_t *)(obj)) #define SDB_AST_FETCH_INIT \ - { { SDB_OBJECT_INIT, SDB_AST_TYPE_FETCH, -1 }, -1, NULL, NULL, NULL } + { { SDB_OBJECT_INIT, SDB_AST_TYPE_FETCH, -1 }, -1, NULL, -1, NULL, NULL, 0, NULL } /* * sdb_ast_list_t represents a LIST command. @@ -380,8 +389,9 @@ sdb_ast_value_create(int type, char *name); * takes ownership of the strings and the filter node. */ sdb_ast_node_t * -sdb_ast_fetch_create(int obj_type, char *hostname, char *name, - sdb_ast_node_t *filter); +sdb_ast_fetch_create(int obj_type, char *hostname, + int parent_type, char *parent, char *name, + bool full, sdb_ast_node_t *filter); /* * sdb_ast_list_create: