Code

parser: Let the TIMESERIES command accept optional data-source names.
[sysdb.git] / src / parser / ast.c
index a64178bdd6e35e6fce4f43b2db4dace1d899806a..1db342cadf6e6b796fafd8ed05c39d985efce23b 100644 (file)
@@ -85,6 +85,8 @@ fetch_destroy(sdb_object_t *obj)
        sdb_ast_fetch_t *fetch = SDB_AST_FETCH(obj);
        if (fetch->hostname)
                free(fetch->hostname);
+       if (fetch->parent)
+               free(fetch->parent);
        if (fetch->name)
                free(fetch->name);
        fetch->hostname = fetch->name = NULL;
@@ -139,6 +141,13 @@ timeseries_destroy(sdb_object_t *obj)
                free(timeseries->hostname);
        if (timeseries->metric)
                free(timeseries->metric);
+       if (timeseries->data_names) {
+               size_t i;
+               for (i = 0; i < timeseries->data_names_len; i++)
+                       free(timeseries->data_names[i]);
+               free(timeseries->data_names);
+               timeseries->data_names = NULL;
+       }
        timeseries->hostname = timeseries->metric = NULL;
 } /* timeseries_destroy */
 
@@ -223,8 +232,7 @@ sdb_ast_op_create(int kind, sdb_ast_node_t *left, sdb_ast_node_t *right)
 } /* sdb_ast_op_create */
 
 sdb_ast_node_t *
-sdb_ast_iter_create(int kind, int op,
-               sdb_ast_node_t *iter, sdb_ast_node_t *expr)
+sdb_ast_iter_create(int kind, sdb_ast_node_t *iter, sdb_ast_node_t *expr)
 {
        sdb_ast_iter_t *i;
        i = SDB_AST_ITER(sdb_object_create(SDB_AST_OP_TO_STRING(kind), iter_type));
@@ -234,7 +242,6 @@ sdb_ast_iter_create(int kind, int op,
        i->super.type = SDB_AST_TYPE_ITERATOR;
 
        i->kind = kind;
-       i->op = op;
        i->iter = iter;
        i->expr = expr;
        return SDB_AST_NODE(i);
@@ -291,8 +298,9 @@ sdb_ast_value_create(int type, char *name)
 } /* sdb_ast_value_create */
 
 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_fetch_t *fetch;
        fetch = SDB_AST_FETCH(sdb_object_create("FETCH", fetch_type));
@@ -303,7 +311,10 @@ sdb_ast_fetch_create(int obj_type, char *hostname, char *name,
 
        fetch->obj_type = obj_type;
        fetch->hostname = hostname;
+       fetch->parent_type = parent_type;
+       fetch->parent = parent;
        fetch->name = name;
+       fetch->full = full;
        fetch->filter = filter;
        return SDB_AST_NODE(fetch);
 } /* sdb_ast_fetch_create */
@@ -343,7 +354,8 @@ sdb_ast_lookup_create(int obj_type, sdb_ast_node_t *matcher,
 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_store_t *store;
        store = SDB_AST_STORE(sdb_object_create("STORE", st_type));
@@ -360,12 +372,14 @@ sdb_ast_store_create(int obj_type, char *hostname,
        store->last_update = last_update;
        store->store_type = store_type;
        store->store_id = store_id;
+       store->store_last_update = store_last_update;
        store->value = value;
        return SDB_AST_NODE(store);
 } /* sdb_ast_store_create */
 
 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)
 {
        sdb_ast_timeseries_t *timeseries;
@@ -377,6 +391,8 @@ sdb_ast_timeseries_create(char *hostname, char *metric,
 
        timeseries->hostname = hostname;
        timeseries->metric = metric;
+       timeseries->data_names = data_names;
+       timeseries->data_names_len = data_names_len;
        timeseries->start = start;
        timeseries->end = end;
        return SDB_AST_NODE(timeseries);