Code

Add support for fetching arbitrary objects, including attributes.
[sysdb.git] / src / parser / grammar.y
index 801462617755d305739e4ef28ac237dd8ce4d5cd..c350d54365a03c5d9d8cb9faaf00234064f4ace5 100644 (file)
@@ -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 <str> 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($$);
                }
        ;
@@ -481,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);
@@ -604,6 +634,8 @@ field:
        BACKEND_T { $$ = SDB_FIELD_BACKEND; }
        |
        VALUE_T { $$ = SDB_FIELD_VALUE; }
+       |
+       TIMESERIES { $$ = SDB_FIELD_TIMESERIES; }
        ;
 
 cmp: