diff --git a/src/parser/grammar.y b/src/parser/grammar.y
index bdba4ea4e453022c19e8a8eaa5f7b80852fa53d4..1b6d208c385736bdb828adeedc4bb460d7d35782 100644 (file)
--- 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 <str> IDENTIFIER STRING
fetch_statement:
FETCH object_type STRING filter_clause
{
- $$ = sdb_ast_fetch_create($2, $3, NULL, $4);
+ $$ = sdb_ast_fetch_create($2, NULL, $3, $4);
CK_OOM($$);
}
|
|
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($$);
}
|
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);
BACKEND_T { $$ = SDB_FIELD_BACKEND; }
|
VALUE_T { $$ = SDB_FIELD_VALUE; }
+ |
+ TIMESERIES { $$ = SDB_FIELD_TIMESERIES; }
;
cmp: