Update SiriDB to work with libcleri 1.x
authorJeroen van der Heijden <jeroen@cesbit.com>
Mon, 27 Dec 2021 20:29:29 +0000 (21:29 +0100)
committerJeroen van der Heijden <jeroen@cesbit.com>
Mon, 27 Dec 2021 20:29:29 +0000 (21:29 +0100)
include/siri/db/access.h
include/siri/grammar/gramp.h
include/siri/version.h
src/cexpr/cexpr.c
src/siri/db/access.c
src/siri/db/aggregate.c
src/siri/db/listener.c
src/siri/db/presuf.c
src/siri/db/query.c
src/siri/db/replicate.c

index 8587f18d8aff38d747a79e1a90601f0289ef116f..ea8a7353023cd3dddf3bc982ac4eb4666fb55750 100644 (file)
@@ -44,6 +44,7 @@
 typedef struct siridb_access_repr_s siridb_access_repr_t;
 
 #include <cleri/cleri.h>
+#include <siri/grammar/gramp.h>
 
 uint32_t siridb_access_from_strn(const char * str, size_t n);
 
index df8d81f9e8092b3e25ef8dd0bcfd2dd64a91240a..439ccb10665f7616933ee6ae059679cfe4dccdb7 100644 (file)
 #define HELP_OFFSET CLERI_GID_HELP_ACCESS
 #define HELP_COUNT CLERI_GID_HELP_TIMEZONES + 1 - HELP_OFFSET
 
+#if CLERI_VERSION_MAJOR >= 1
+typedef struct cleri_node_s cleri_children_t;
+#define cleri_gn(__child) (__child)
+
+#else
+#define cleri_gn(__child) (__child)->node
+#endif
+
 
 
-#if CLERI_VERSION_MINOR >= 12
+#if CLERI_VERSION_MAJOR >= 1 || CLERI_VERSION_MINOR >= 12
 #if SIRIDB_IS64BIT
 #define CLERI_NODE_DATA(__node) ((int64_t)(__node)->data)
 #define CLERI_NODE_DATA_ADDR(__node) ((int64_t *) &(__node)->data)
index a08aababd276c9c7127b984ac402051ad68255a4..19ffb3f6a421157b0a7c2f3d1e22cc1f45419f57 100644 (file)
@@ -6,7 +6,7 @@
 
 #define SIRIDB_VERSION_MAJOR 2
 #define SIRIDB_VERSION_MINOR 0
-#define SIRIDB_VERSION_PATCH 44
+#define SIRIDB_VERSION_PATCH 45
 
 /*
  * Use SIRIDB_VERSION_PRE_RELEASE for alpha release versions.
@@ -15,7 +15,7 @@
  * Note that debian alpha packages should use versions like this:
  *   2.0.34-0alpha0
  */
-#define SIRIDB_VERSION_PRE_RELEASE ""
+#define SIRIDB_VERSION_PRE_RELEASE "-alpha-0"
 
 #ifndef NDEBUG
 #define SIRIDB_VERSION_BUILD_RELEASE "+debug"
index 81b82d5fbcf23c164ef57bb8b50e0c340f90ac30..113862c6d02da689df7329f7a072d248093bd3ab 100644 (file)
@@ -532,10 +532,10 @@ static cexpr_t * CEXPR_walk_node(
 
     cleri_children_t * current = node->children;
 
-    while (current != NULL && current->node != NULL)
+    while (current != NULL && cleri_gn(current) != NULL)
     {
         cexpr = CEXPR_walk_node(
-                current->node,
+                cleri_gn(current),
                 cexpr,
                 list,
                 condition,
index 8cc862c2be6883a0ffed37422071ae52f13fd0f6..0c34946b0e7f3df76dbf595a2ae9d623fc08fa1c 100644 (file)
@@ -2,6 +2,7 @@
  * access.c - Access constants and functions.
  */
 #include <siri/db/access.h>
+#include <siri/grammar/gramp.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -54,8 +55,8 @@ uint32_t siridb_access_from_children(cleri_children_t * children)
     while (children != NULL)
     {
         access_bit |= siridb_access_from_strn(
-                children->node->str,
-                children->node->len);
+                cleri_gn(children)->str,
+                cleri_gn(children)->len);
         if (children->next == NULL)
             break;
         children = children->next->next;
index 8ff99dbfc85f00807881b67f47987ceb4c336bde..2dad9014d83bbf14e308ed22e55a10fc175419bf 100644 (file)
@@ -8,6 +8,7 @@
 #include <siri/db/median.h>
 #include <siri/db/variance.h>
 #include <siri/grammar/grammar.h>
+#include <siri/grammar/gramp.h>
 #include <siri/db/re.h>
 #include <vec/vec.h>
 #include <stddef.h>
@@ -216,15 +217,16 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
     /* Loop over all aggregations */
     while (1)
     {
-        gid = children->node->children->node->cl_obj->gid;
+        gid = cleri_gn(cleri_gn(children)->children)->cl_obj->gid;
 
         switch (gid)
         {
         case CLERI_GID_F_LIMIT:
             AGGR_NEW
             {
-                int64_t limit = CLERI_NODE_DATA(children->node->children->node->
-                    children->next->next->node);
+                int64_t limit = CLERI_NODE_DATA(
+                        cleri_gn(cleri_gn(cleri_gn(children)
+                        ->children)->children->next->next));
 
                 if (limit <= 0)
                 {
@@ -238,9 +240,9 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
 
                 aggr->limit = limit;
 
-                gid = children->node->children->node->children->next->
-                        next->next->next->node->children->node->
-                        cl_obj->gid;
+                gid = cleri_gn(cleri_gn(cleri_gn(
+                        cleri_gn(children)->children)->children->next->
+                        next->next->next)->children)->cl_obj->gid;
 
                 switch (gid)
                 {
@@ -329,23 +331,21 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
             AGGR_NEW
             {
                 cleri_node_t * onode;
-                if (    children->node->children->node->children->
+                if (    cleri_gn(cleri_gn(children)->children)->children->
                         next->next->next->next == NULL)
                 {
                     aggr->filter_opr = CEXPR_EQ;
-                    onode = children->node->children->node->
-                            children->next->next->node->
-                            children->node;
+                    onode = cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+                            ->children)->children->next->next)->children);
                 }
                 else
                 {
                     aggr->filter_opr = cexpr_operator_fn(
-                            children->node->children->node->
-                            children->next->next->node->
-                            children->node);
-                    onode = children->node->children->node->
-                            children->next->next->next->node->
-                            children->node;
+                            cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+                            ->children)->children->next->next)->children));
+                    onode = cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+                            ->children)->children->next->next->next)->
+                            children);
                 }
                 if (AGGREGATE_init_filter(aggr, onode, err_msg))
                 {
@@ -362,14 +362,14 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
         case CLERI_GID_F_DERIVATIVE:
             AGGR_NEW
             {
-                cleri_node_t * dlist = children->node->children->
-                        node->children->next->next->node;
+                cleri_node_t * dlist = cleri_gn(cleri_gn(cleri_gn(children)
+                        ->children)->children->next->next);
 
-                if (dlist->children != NULL && dlist->children->node != NULL)
+                if (dlist->children != NULL && cleri_gn(dlist->children) != NULL)
                 {
                     /* result is at least positive, checked earlier */
                     aggr->timespan =
-                            (double) CLERI_NODE_DATA(dlist->children->node);
+                            (double) CLERI_NODE_DATA(cleri_gn(dlist->children));
 
                     if (!aggr->timespan)
                     {
@@ -385,7 +385,7 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
                     {
                         /* result is always positive */
                         aggr->group_by = CLERI_NODE_DATA(
-                                dlist->children->next->next->node);
+                                cleri_gn(dlist->children->next->next));
 
                         if (!aggr->group_by)
                         {
@@ -421,14 +421,13 @@ vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
         case CLERI_GID_F_FIRST:
         case CLERI_GID_F_LAST:
             AGGR_NEW
-            if (children->node->children->node->children->
-                        next->next->next != NULL)
+            if (cleri_gn(cleri_gn(children)->children)
+                    ->children->next->next->next != NULL)
             {
                 /* result is always positive, checked earlier */
                 aggr->group_by = CLERI_NODE_DATA(
-                        children->node->children->node->
-                        children->next->next->node->children->
-                        node);
+                        cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+                        ->children)->children->next->next)->children));
 
                 if (!aggr->group_by)
                 {
@@ -487,8 +486,8 @@ void siridb_aggregate_list_free(vec_t * alist)
  */
 int siridb_aggregate_can_skip(cleri_children_t * children)
 {
-    cleri_node_t * nd = \
-            children->node->children->node->children->node->children->node;
+    cleri_node_t * nd = cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+            ->children)->children)->children);
 
     switch (nd->cl_obj->gid)
     {
index 9dc65e30b714487b99377892c195c79d9348e821..ec42c8c94eeaf77ecb440c412a0cb4ce78ee91b0 100644 (file)
@@ -578,8 +578,8 @@ static void enter_alter_group(uv_async_t * handle)
 
     MASTER_CHECK_ACCESSIBLE(siridb)
 
-    cleri_node_t * group_node =
-                    query->nodes->node->children->next->node;
+    cleri_node_t * group_node = \
+            cleri_gn(query->nodes->node->children->next);
     siridb_group_t * group;
 
     char name[group_node->len - 1];
@@ -611,7 +611,7 @@ static void enter_alter_tag(uv_async_t * handle)
 
     MASTER_CHECK_ACCESSIBLE(siridb)
 
-    cleri_node_t * tag_node = query->nodes->node->children->next->node;
+    cleri_node_t * tag_node = cleri_gn(query->nodes->node->children->next);
     siridb_tag_t * tag;
 
     char name[tag_node->len - 1];
@@ -655,7 +655,7 @@ static void enter_alter_server(uv_async_t * handle)
     query_alter_t * q_alter = (query_alter_t *) query->data;
     siridb_server_t * server = siridb_server_from_node(
             siridb,
-            query->nodes->node->children->next->node->children->node,
+            cleri_gn(cleri_gn(query->nodes->node->children->next)->children),
             query->err_msg);
 
     if (server == NULL)
@@ -716,7 +716,7 @@ static void enter_alter_user(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * user_node =
-                query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     query_alter_t * q_alter = (query_alter_t *) query->data;
     siridb_user_t * user;
 
@@ -845,7 +845,7 @@ static void enter_grant_user(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * user_node =
-                query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     siridb_user_t * user;
     char username[user_node->len - 1];
     xstr_extract_string(username, user_node->str, user_node->len);
@@ -1003,7 +1003,7 @@ static void enter_limit_expr(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     siridb_t * siridb = query->client->siridb;
     query_list_t * qlist = (query_list_t *) query->data;
-    int64_t limit = CLERI_NODE_DATA(query->nodes->node->children->next->node);
+    int64_t limit = CLERI_NODE_DATA(cleri_gn(query->nodes->node->children->next));
 
     if (limit <= 0 || limit > siridb->list_limit)
     {
@@ -1059,7 +1059,7 @@ static void enter_merge_as(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
     query_select_t * q_select = query->data;
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     q_select->merge_as = malloc(node->len - 1);
 
     if (q_select->merge_as == NULL)
@@ -1072,8 +1072,9 @@ static void enter_merge_as(uv_async_t * handle)
     if (IS_MASTER && query->nodes->node->children->next->next->next != NULL)
     {
         q_select->mlist = siridb_aggregate_list(
-                query->nodes->node->children->next->next->next->node->
-                    children->node->children->next->node->children,
+                cleri_gn(cleri_gn(cleri_gn(
+                    query->nodes->node->children->next->next->next)->
+                    children)->children->next)->children,
                 query->err_msg);
 
         if (q_select->mlist == NULL)
@@ -1095,7 +1096,7 @@ static void enter_revoke_user(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * user_node =
-                query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     siridb_user_t * user;
     char username[user_node->len - 1];
     xstr_extract_string(username, user_node->str, user_node->len);
@@ -1156,7 +1157,7 @@ static void enter_select_stmt(uv_async_t * handle)
                     NULL : imap_new();
 
     /* child is always the ',' and child->next the node */
-    child = query->nodes->node->children->next->node->children;
+    child = cleri_gn(query->nodes->node->children->next)->children;
     skip_get_points = siridb_aggregate_can_skip(child);
 
     child = child->next;
@@ -1192,7 +1193,7 @@ static void enter_set_expression(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
     siridb_t * siridb = query->client->siridb;
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     query_alter_t * q_alter = (query_alter_t *) query->data;
 
     if (siridb_group_update_expression(
@@ -1215,7 +1216,8 @@ static void enter_set_ignore_threshold(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     query_wrapper_t * q_wrapper = (query_wrapper_t *) query->data;
 
-    if (    query->nodes->node->children->next->next->node->children->node->
+    if (    cleri_gn(cleri_gn(
+            query->nodes->node->children->next->next)->children)->
             cl_obj->gid == CLERI_GID_K_TRUE)
     {
         q_wrapper->flags |= QUERIES_IGNORE_DROP_THRESHOLD;
@@ -1229,7 +1231,7 @@ static void enter_set_name(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     siridb_t * siridb = query->client->siridb;
     cleri_node_t * name_node =
-                query->nodes->node->children->next->next->node;
+            cleri_gn(query->nodes->node->children->next->next);
 
     char name[name_node->len - 1];
     xstr_extract_string(name, name_node->str, name_node->len);
@@ -1286,7 +1288,7 @@ static void enter_set_password(uv_async_t * handle)
     siridb_user_t * user = ((query_alter_t *) query->data)->via.user;
 
     cleri_node_t * pw_node =
-            query->nodes->node->children->next->next->node;
+            cleri_gn(query->nodes->node->children->next->next);
 
     char password[pw_node->len - 1];
     xstr_extract_string(password, pw_node->str, pw_node->len);
@@ -1631,7 +1633,7 @@ static void enter_series_setopr(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     query_wrapper_t * q_wrapper = query->data;
 
-    switch (query->nodes->node->children->node->cl_obj->gid)
+    switch (cleri_gn(query->nodes->node->children)->cl_obj->gid)
     {
     case CLERI_GID_K_UNION:
         q_wrapper->update_cb = &imap_union_ref;
@@ -1700,7 +1702,7 @@ static void enter_tag_series(uv_async_t * handle)
     MASTER_CHECK_VERSION(siridb, "2.0.38")
 
     cleri_node_t * tag_node =
-                    query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     siridb_tag_t * tag;
     char name[tag_node->len - 1];
     xstr_extract_string(name, tag_node->str, tag_node->len);
@@ -1819,7 +1821,7 @@ static void enter_untag_series(uv_async_t * handle)
     MASTER_CHECK_VERSION(siridb, "2.0.38")
 
     cleri_node_t * tag_node =
-                    query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     siridb_tag_t * tag;
 
     char name[tag_node->len - 1];
@@ -1889,7 +1891,7 @@ static void enter_where_xxx(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
     cexpr_t * cexpr =
-            cexpr_from_node(query->nodes->node->children->next->node);
+            cexpr_from_node(cleri_gn(query->nodes->node->children->next));
 
     if (cexpr == NULL)
     {
@@ -1920,12 +1922,12 @@ static void enter_xxx_columns(uv_async_t * handle)
     {
         qp_add_raw(
                 query->packer,
-                (const unsigned char *) columns->node->str,
-                columns->node->len);
+                (const unsigned char *) cleri_gn(columns)->str,
+                cleri_gn(columns)->len);
 
         if (vec_append_safe(
                 &qlist->props,
-                &columns->node->children->node->cl_obj->gid))
+                &cleri_gn(cleri_gn(columns)->children)->cl_obj->gid))
         {
             MEM_ERR_RET
         }
@@ -1950,7 +1952,7 @@ static void exit_after_expr(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     ((query_select_t *) query->data)->start_ts =
             (uint64_t *) CLERI_NODE_DATA_ADDR(
-                    query->nodes->node->children->next->node);
+                    cleri_gn(query->nodes->node->children->next));
 
     SIRIPARSER_NEXT_NODE
 }
@@ -2046,7 +2048,7 @@ static void exit_before_expr(uv_async_t * handle)
 
     ((query_select_t *) query->data)->end_ts =
             (uint64_t *) CLERI_NODE_DATA_ADDR(
-                    query->nodes->node->children->next->node);
+                    cleri_gn(query->nodes->node->children->next));
 
     SIRIPARSER_NEXT_NODE
 }
@@ -2057,10 +2059,10 @@ static void exit_between_expr(uv_async_t * handle)
     query_select_t * q_select = query->data;
 
     q_select->start_ts = (uint64_t *) CLERI_NODE_DATA_ADDR(
-            query->nodes->node->children->next->node);
+            cleri_gn(query->nodes->node->children->next));
 
     q_select->end_ts = (uint64_t *) CLERI_NODE_DATA_ADDR(
-            query->nodes->node->children->next->next->next->node);
+            cleri_gn(query->nodes->node->children->next->next->next));
 
     if (*q_select->start_ts > *q_select->end_ts)
     {
@@ -2658,10 +2660,10 @@ static void exit_create_group(uv_async_t * handle)
     siridb_query_t * query = handle->data;
     siridb_t * siridb = query->client->siridb;
     cleri_node_t * name_nd =
-            query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
 
     cleri_node_t * for_nd =
-            query->nodes->node->children->next->next->next->node;
+            cleri_gn(query->nodes->node->children->next->next->next);
 
     MASTER_CHECK_ACCESSIBLE(siridb)
 
@@ -2721,7 +2723,7 @@ static void exit_create_user(uv_async_t * handle)
     siridb_t * siridb = query->client->siridb;
     siridb_user_t * user = ((query_alter_t *) query->data)->via.user;
     cleri_node_t * user_node =
-            query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
 
     /* both name and packer should be NULL at this point */
     assert(user->name == NULL);
@@ -2787,7 +2789,7 @@ static void exit_drop_group(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * group_node =
-            query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
 
     char name[group_node->len - 1];
 
@@ -2936,7 +2938,7 @@ static void exit_drop_server(uv_async_t * handle)
     siridb_t * siridb = query->client->siridb;
     siridb_server_t * server = siridb_server_from_node(
             siridb,
-            query->nodes->node->children->next->node->children->node,
+            cleri_gn(cleri_gn(query->nodes->node->children->next)->children),
             query->err_msg);
 
     MASTER_CHECK_REINDEXING(siridb)
@@ -3109,7 +3111,7 @@ static void exit_drop_tag(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * tag_node =
-            query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
 
     char name[tag_node->len - 1];
 
@@ -3148,7 +3150,7 @@ static void exit_drop_user(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
 
     cleri_node_t * user_node =
-            query->nodes->node->children->next->node;
+            cleri_gn(query->nodes->node->children->next);
     char username[user_node->len - 1];
 
     xstr_extract_string(username, user_node->str, user_node->len);
@@ -3973,7 +3975,7 @@ static void exit_select_aggregate(uv_async_t * handle)
             if (q_select->series_map->len)
             {
                 q_select->alist = siridb_aggregate_list(
-                        query->nodes->node->children->node->children,
+                        cleri_gn(query->nodes->node->children)->children,
                         query->err_msg);
                 if (q_select->alist == NULL)
                 {
@@ -4096,7 +4098,7 @@ static void exit_set_address(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
     siridb_server_t * server = ((query_alter_t *) query->data)->via.server;
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     siridb_t * siridb = query->client->siridb;
 
     if (siridb->server == server || server->client != NULL)
@@ -4146,8 +4148,9 @@ static void exit_set_backup_mode(uv_async_t * handle)
 
     siridb_server_t * server = ((query_alter_t *) query->data)->via.server;
 
-    int backup_mode = query->nodes->node->children->next->next->node->
-            children->node->cl_obj->gid == CLERI_GID_K_TRUE;
+    int backup_mode = cleri_gn(cleri_gn(
+            query->nodes->node->children->next->next)->
+            children)->cl_obj->gid == CLERI_GID_K_TRUE;
 
     if (backup_mode ^ ((server->flags & SERVER_FLAG_BACKUP_MODE) != 0))
     {
@@ -4242,7 +4245,7 @@ static void exit_set_drop_threshold(uv_async_t * handle)
 
     MASTER_CHECK_ACCESSIBLE(siridb)
 
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
 
     double drop_threshold = xstr_to_double(node->str);
 
@@ -4307,7 +4310,7 @@ static void exit_set_expiration_xxx(
     MASTER_CHECK_ACCESSIBLE(siridb)
     MASTER_CHECK_VERSION(siridb, "2.0.35")
 
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     uint64_t expiration = (uint64_t) CLERI_NODE_DATA(node);
 
     if (IS_MASTER && expiration)
@@ -4421,7 +4424,7 @@ static void exit_set_list_limit(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
     MASTER_CHECK_VERSION(siridb, "2.0.17")
 
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
 
     uint64_t limit = xstr_to_uint64(node->str, node->len);
 
@@ -4484,8 +4487,8 @@ static void exit_set_log_level(uv_async_t * handle)
 
     assert (query->data != NULL);
 
-    cleri_node_t * node =
-            query->nodes->node->children->next->next->node->children->node;
+    cleri_node_t * node = cleri_gn(cleri_gn(
+            query->nodes->node->children->next->next)->children);
 
     int log_level;
 
@@ -4622,7 +4625,7 @@ static void exit_set_port(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
     siridb_server_t * server = ((query_alter_t *) query->data)->via.server;
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     siridb_t * siridb = query->client->siridb;
 
     if (siridb->server == server || server->client != NULL)
@@ -4679,7 +4682,7 @@ static void exit_set_select_points_limit(uv_async_t * handle)
     MASTER_CHECK_ACCESSIBLE(siridb)
     MASTER_CHECK_VERSION(siridb, "2.0.17")
 
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
 
     uint64_t limit = xstr_to_uint64(node->str, node->len);
 
@@ -4742,8 +4745,8 @@ static void exit_set_tee_pipe_name(uv_async_t * handle)
 
     assert (query->data != NULL);
 
-    cleri_node_t * node =
-            query->nodes->node->children->next->next->node->children->node;
+    cleri_node_t * node = cleri_gn(cleri_gn(
+            query->nodes->node->children->next->next)->children);
 
     char pipe_name[node->len - 1];
     char * p_pipe_name = NULL;
@@ -4872,7 +4875,7 @@ static void exit_set_tee_pipe_name(uv_async_t * handle)
 static void exit_set_timezone(uv_async_t * handle)
 {
     siridb_query_t * query = handle->data;
-    cleri_node_t * node = query->nodes->node->children->next->next->node;
+    cleri_node_t * node = cleri_gn(query->nodes->node->children->next->next);
     siridb_t * siridb = query->client->siridb;
 
     MASTER_CHECK_ACCESSIBLE(siridb)
@@ -4941,8 +4944,8 @@ static void exit_show_stmt(uv_async_t * handle)
     siridb_user_t * db_user = query->client->origin;
     SIRIPARSER_MASTER_CHECK_ACCESS(db_user, SIRIDB_ACCESS_SHOW)
 
-    cleri_children_t * children =
-            query->nodes->node->children->next->node->children;
+    cleri_children_t * children = cleri_gn(
+            query->nodes->node->children->next)->children;
     siridb_props_cb prop_cb;
 
     assert (query->packer == NULL);
@@ -4961,7 +4964,7 @@ static void exit_show_stmt(uv_async_t * handle)
     /* set props.h (who_am_i) to current db_name */
     props_set_who_am_i(db_user->name);
 
-    if (children == NULL || children->node == NULL)
+    if (children == NULL || cleri_gn(children) == NULL)
     {
         /* show all properties */
         int i;
@@ -4981,7 +4984,7 @@ static void exit_show_stmt(uv_async_t * handle)
         while (1)
         {
             /* get the callback */
-            prop_cb = props_get_cb(children->node->children->node->
+            prop_cb = props_get_cb(cleri_gn(cleri_gn(children)->children)->
                                    cl_obj->gid - KW_OFFSET);
             assert (prop_cb != NULL);  /* all props are implemented */
             prop_cb(siridb, query->packer, 1);
index 4de324caaa9eeffb5a7d1e1311846d2af229d30e..2c8e139476ddb849c6c2fd07a0f97fd5d0df43d2 100644 (file)
@@ -6,6 +6,7 @@
 #include <siri/db/presuf.h>
 #include <siri/err.h>
 #include <siri/grammar/grammar.h>
+#include <siri/grammar/gramp.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <xstr/xstr.h>
@@ -63,29 +64,29 @@ siridb_presuf_t * siridb_presuf_add(
     {
         while (children != NULL)
         {
-            ps_children = children->node->children->node->children;
-            switch (ps_children->node->cl_obj->gid)
+            ps_children = cleri_gn(cleri_gn(children)->children)->children;
+            switch (cleri_gn(ps_children)->cl_obj->gid)
             {
             case CLERI_GID_K_PREFIX:
-                nps->prefix = malloc(ps_children->next->node->len + 1);
+                nps->prefix = malloc(cleri_gn(ps_children->next)->len + 1);
                 if (nps->prefix != NULL)
                 {
                     /* not critical if suffix is still NULL */
                     nps->len += xstr_extract_string(
                             nps->prefix,
-                            ps_children->next->node->str,
-                            ps_children->next->node->len);
+                            cleri_gn(ps_children->next)->str,
+                            cleri_gn(ps_children->next)->len);
                 }
                 break;
             case CLERI_GID_K_SUFFIX:
-                nps->suffix = malloc(ps_children->next->node->len + 1);
+                nps->suffix = malloc(cleri_gn(ps_children->next)->len + 1);
                 if (nps->suffix != NULL)
                 {
                     /* not critical if suffix is still NULL */
                     nps->len += xstr_extract_string(
                             nps->suffix,
-                            ps_children->next->node->str,
-                            ps_children->next->node->len);
+                            cleri_gn(ps_children->next)->str,
+                            cleri_gn(ps_children->next)->len);
                 }
                 break;
             default:
index 941614a748f2c215710410ff00a835c68bf352a7..3077c8fa939805a7587ac110a42887ce784203ae 100644 (file)
@@ -620,7 +620,7 @@ static void QUERY_parse(uv_async_t * handle)
 #if SIRIDB_EXPR_ALLOC
             query,
 #endif
-            query->pr->tree->children->node,
+            cleri_gn(query->pr->tree->children),
             walker)))
     {
         switch (rc)
@@ -682,7 +682,7 @@ static int QUERY_to_packer(qp_packer_t * packer, siridb_query_t * query)
 
         rc = QUERY_rebuild(
                 siridb,
-                query->pr->tree->children->node,
+                cleri_gn(query->pr->tree->children),
                 buffer,
                 &size,
                 packer->alloc_size);
@@ -748,7 +748,7 @@ static int QUERY_walk(
 
         /* we can have nested integer and time expressions */
         if ((rc = QUERY_time_expr(
-                node->children->node,
+                cleri_gn(node->children),
                 walker,
                 buffer,
                 &size)))
@@ -789,7 +789,7 @@ static int QUERY_walk(
         size_t size = EXPR_MAX_SIZE;
 
         if ((rc = QUERY_int_expr(
-                node->children->node,
+                cleri_gn(node->children),
                 buffer,
                 &size)))
         {
@@ -820,21 +820,21 @@ static int QUERY_walk(
     else
     {
         current = node->children;
-        while (current != NULL && current->node != NULL)
+        while (current != NULL && cleri_gn(current) != NULL)
         {
             /*
              * We should not simple walk because THIS has no
              * cl_obj->cl_obj and THIS is save to skip.
              */
-            while (current->node->cl_obj->tp == CLERI_TP_THIS)
+            while (cleri_gn(current)->cl_obj->tp == CLERI_TP_THIS)
             {
-                current = current->node->children;
+                current = cleri_gn(current)->children;
             }
             if ((rc = QUERY_walk(
 #if SIRIDB_EXPR_ALLOC
                     query,
 #endif
-                    current->node,
+                    cleri_gn(current),
                     walker)))
             {
                 return rc;
@@ -948,10 +948,10 @@ static int QUERY_time_expr(
             cleri_children_t * current;
 
             current = node->children;
-            while (current != NULL && current->node != NULL)
+            while (current != NULL && cleri_gn(current) != NULL)
             {
                 if ((rc = QUERY_time_expr(
-                        current->node,
+                        cleri_gn(current),
                         walker,
                         buf,
                         size)))
@@ -992,10 +992,10 @@ static int QUERY_int_expr(cleri_node_t * node, char * buf, size_t * size)
             cleri_children_t * current;
 
             current = node->children;
-            while (current != NULL && current->node != NULL)
+            while (current != NULL && cleri_gn(current) != NULL)
             {
                 if ((rc = QUERY_int_expr(
-                        current->node,
+                        cleri_gn(current),
                         buf,
                         size)))
                 {
@@ -1042,7 +1042,7 @@ static int QUERY_rebuild(
             {
                 siridb_server_t * server = siridb_server_from_node(
                         siridb,
-                        node->children->node,
+                        cleri_gn(node->children),
                         NULL);
                 if (server != NULL)
                 {
@@ -1088,11 +1088,11 @@ static int QUERY_rebuild(
             cleri_children_t * current;
 
             current = node->children;
-            while (current != NULL && current->node != NULL)
+            while (current != NULL && cleri_gn(current) != NULL)
             {
                 if ((rc = QUERY_rebuild(
                         siridb,
-                        current->node,
+                        cleri_gn(current),
                         buf,
                         size,
                         max_size)))
index 91a4bde5378b21d888dbde4c3e35265b687e6c86..b815d14e6598250214f6da35aeb8381c40bd5076 100644 (file)
@@ -15,7 +15,8 @@
 #include <siri/siri.h>
 #include <stddef.h>
 
-#define REPLICATE_SLEEP 10          /* 10 milliseconds * active tasks   */
+/* Changed in v2.0.45: from 10 -> 5 milliseconds to prioritize replication */
+#define REPLICATE_SLEEP 5           /* 5 milliseconds * active tasks    */
 #define REPLICATE_TIMEOUT 300000    /* 5 minutes                        */
 
 static void REPLICATE_work(uv_timer_t * handle);