index 6a86d06890d70d42c4de3773307b3ff04d489677..110ee082a93402d11319ac3b8a63145e8a145b88 100644 (file)
--- a/src/include/parser/ast.h
+++ b/src/include/parser/ast.h
|| (((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) \
|| (((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) \
: ((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" \
{ { SDB_OBJECT_INIT, SDB_AST_TYPE_CONST, -1 }, SDB_DATA_INIT }
/*
- * sdb_ast_value_t represents an object-specific value: sibling nodes,
+ * sdb_ast_value_t represents an object-specific value:
* attributes, or field values.
*/
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.
/* metric specific */
char *store_type;
char *store_id;
+ sdb_time_t store_last_update;
/* attribute specific */
sdb_data_t value;
#define SDB_AST_STORE(obj) ((sdb_ast_store_t *)(obj))
#define SDB_AST_STORE_INIT \
{ { SDB_OBJECT_INIT, SDB_AST_TYPE_STORE, -1 }, \
- -1, NULL, -1, NULL, NULL, 0, NULL, NULL, SDB_DATA_INIT }
+ -1, NULL, -1, NULL, NULL, 0, NULL, NULL, 0, SDB_DATA_INIT }
/*
* sdb_ast_timeseries_t represents a TIMESERIES command.
sdb_ast_node_t super;
char *hostname;
char *metric;
+ char **data_names;
+ size_t data_names_len;
sdb_time_t start;
sdb_time_t end;
} sdb_ast_timeseries_t;
#define SDB_AST_TIMESERIES(obj) ((sdb_ast_timeseries_t *)(obj))
#define SDB_AST_TIMESERIES_INIT \
- { { SDB_OBJECT_INIT, SDB_AST_TYPE_TIMESERIES, -1 }, NULL, NULL, 0, 0 }
+ { { SDB_OBJECT_INIT, SDB_AST_TYPE_TIMESERIES, -1 }, NULL, NULL, NULL, 0, 0, 0 }
/*
* AST constructors:
* 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:
sdb_ast_node_t *
sdb_ast_store_create(int obj_type, char *hostname,
int parent_type, char *parent, char *name, sdb_time_t last_update,
- char *store_type, char *store_id, sdb_data_t value);
+ char *store_type, char *store_id, sdb_time_t store_last_update,
+ sdb_data_t value);
/*
* sdb_ast_timeseries_create:
* Creates an AST node representing a TIMESERIES command. The newly created
- * node takes ownership of the strings.
+ * node takes ownership of the strings and string vectors.
*/
sdb_ast_node_t *
sdb_ast_timeseries_create(char *hostname, char *metric,
+ char **data_names, size_t data_names_len,
sdb_time_t start, sdb_time_t end);
#ifdef __cplusplus