X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fparser%2Fgrammar.y;h=c350d54365a03c5d9d8cb9faaf00234064f4ace5;hp=ed2b070dbb23fef9b2af493286ba3fea4653ac97;hb=07dada8e5c614f0ef90fed8e86183ba7acd0e6e8;hpb=f2b0636cfbd8f109b49c7cd288a5ae9d53a75baf diff --git a/src/parser/grammar.y b/src/parser/grammar.y index ed2b070..c350d54 100644 --- a/src/parser/grammar.y +++ b/src/parser/grammar.y @@ -127,6 +127,8 @@ sdb_parser_yyerrorf(YYLTYPE *lval, sdb_parser_yyscan_t scanner, const char *fmt, /* NULL token */ %token NULL_T +%token TRUE FALSE + %token FETCH LIST LOOKUP STORE TIMESERIES %token IDENTIFIER STRING @@ -279,13 +281,13 @@ statement: fetch_statement: FETCH object_type STRING filter_clause { - $$ = sdb_ast_fetch_create($2, NULL, $3, $4); + $$ = sdb_ast_fetch_create($2, NULL, -1, NULL, $3, 1, $4); CK_OOM($$); } | FETCH object_type STRING '.' STRING filter_clause { - $$ = sdb_ast_fetch_create($2, $3, $5, $6); + $$ = sdb_ast_fetch_create($2, $3, -1, NULL, $5, 1, $6); CK_OOM($$); } ; @@ -453,13 +455,17 @@ comparison: | ANY expression cmp expression { - $$ = sdb_ast_iter_create(SDB_AST_ANY, $3, $2, $4); + sdb_ast_node_t *n = sdb_ast_op_create($3, NULL, $4); + CK_OOM(n); + $$ = sdb_ast_iter_create(SDB_AST_ANY, $2, n); CK_OOM($$); } | ALL expression cmp expression { - $$ = sdb_ast_iter_create(SDB_AST_ALL, $3, $2, $4); + sdb_ast_node_t *n = sdb_ast_op_create($3, NULL, $4); + CK_OOM(n); + $$ = sdb_ast_iter_create(SDB_AST_ALL, $2, n); CK_OOM($$); } | @@ -477,6 +483,34 @@ comparison: CK_OOM($$); } | + expression IS TRUE + { + $$ = sdb_ast_op_create(SDB_AST_ISTRUE, NULL, $1); + CK_OOM($$); + } + | + expression IS NOT TRUE + { + $$ = sdb_ast_op_create(SDB_AST_ISTRUE, NULL, $1); + CK_OOM($$); + $$ = sdb_ast_op_create(SDB_AST_NOT, NULL, $$); + CK_OOM($$); + } + | + expression IS FALSE + { + $$ = sdb_ast_op_create(SDB_AST_ISFALSE, NULL, $1); + CK_OOM($$); + } + | + expression IS NOT FALSE + { + $$ = sdb_ast_op_create(SDB_AST_ISFALSE, NULL, $1); + CK_OOM($$); + $$ = sdb_ast_op_create(SDB_AST_NOT, NULL, $$); + CK_OOM($$); + } + | expression IN expression { $$ = sdb_ast_op_create(SDB_AST_IN, $1, $3); @@ -600,6 +634,8 @@ field: BACKEND_T { $$ = SDB_FIELD_BACKEND; } | VALUE_T { $$ = SDB_FIELD_VALUE; } + | + TIMESERIES { $$ = SDB_FIELD_TIMESERIES; } ; cmp: