Changeset: bf49a29af207 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf49a29af207
Removed Files:
        sql/test/SQLancer/Tests/sqlancer11.sql
Modified Files:
        gdk/gdk_utils.c
        sql/backends/monet5/rel_bin.c
        sql/server/rel_dump.c
        sql/server/rel_unnest.c
        sql/test/SQLancer/Tests/sqlancer04.test
        sql/test/SQLancer/Tests/sqlancer11.test
Branch: default
Log Message:

Merged with Oct2020


diffs (truncated from 432 to 300 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -851,13 +851,19 @@ gdk_return
 GDKinit(opt *set, int setlen, bool embedded)
 {
        static bool first = true;
-       const char *dbpath = mo_find_option(set, setlen, "gdk_dbpath");
-       const char *dbtrace = mo_find_option(set, setlen, "gdk_dbtrace");
+       const char *dbpath;
+       const char *dbtrace;
        const char *p;
        opt *n;
        int i, nlen = 0;
        char buf[16];
 
+       if (GDKinmemory(0)) {
+               dbpath = dbtrace = NULL;
+       } else {
+               dbpath = mo_find_option(set, setlen, "gdk_dbpath");
+               dbtrace = mo_find_option(set, setlen, "gdk_dbtrace");
+       }
        Mbedded = embedded;
        /* some sanity checks (should also find if symbols are not defined) */
        static_assert(sizeof(int) == sizeof(int32_t),
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4060,7 +4060,7 @@ first_updated_col(stmt **updates, int cn
 }
 
 static stmt *
-update_check_ukey(backend *be, stmt **updates, sql_key *k, stmt *tids, stmt 
*idx_updates, int updcol)
+update_check_ukey(backend *be, stmt **updates, sql_key *k, stmt *u_tids, stmt 
*idx_updates, int updcol)
 {
        mvc *sql = be->mvc;
        char *msg = NULL;
@@ -4071,7 +4071,6 @@ update_check_ukey(backend *be, stmt **up
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_subfunc *ne;
 
-       (void)tids;
        ne = sql_bind_func_result(sql, "sys", "<>", F_FUNC, bt, 2, lng, lng);
        if (list_length(k->columns) > 1) {
                stmt *dels = stmt_tid(be, k->t, 0);
@@ -4084,7 +4083,7 @@ update_check_ukey(backend *be, stmt **up
                        should be zero)
                */
                if (!isNew(k)) {
-                       stmt *nu_tids = stmt_tdiff(be, dels, tids, NULL); /* 
not updated ids */
+                       stmt *nu_tids = stmt_tdiff(be, dels, u_tids, NULL); /* 
not updated ids */
                        list *lje = sa_list(sql->sa);
                        list *rje = sa_list(sql->sa);
 
@@ -4100,7 +4099,7 @@ update_check_ukey(backend *be, stmt **up
                                if (updates[c->c->colnr]) {
                                        upd = updates[c->c->colnr];
                                } else {
-                                       upd = stmt_project(be, tids, 
stmt_col(be, c->c, dels, dels->partition));
+                                       upd = stmt_col(be, c->c, u_tids, 
u_tids->partition);
                                }
                                list_append(lje, stmt_col(be, c->c, nu_tids, 
nu_tids->partition));
                                list_append(rje, upd);
@@ -4197,7 +4196,7 @@ update_check_ukey(backend *be, stmt **up
 
                /* s should be empty */
                if (!isNew(k)) {
-                       stmt *nu_tids = stmt_tdiff(be, dels, tids, NULL); /* 
not updated ids */
+                       stmt *nu_tids = stmt_tdiff(be, dels, u_tids, NULL); /* 
not updated ids */
                        assert (updates);
 
                        h = updates[c->c->colnr];
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -731,7 +731,7 @@ convertIdent(char *r)
                        r[j++] = r[i++];
                }
        }
-       r[i] = '\0';
+       r[j] = '\0';
 }
 
 static void
@@ -786,8 +786,8 @@ readString( char *r, int *pos)
 
 static sql_exp* exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list 
*top_exps, char *r, int *pos, int grp) ;
 
-static void *
-read_prop( mvc *sql, sql_exp *exp, char *r, int *pos)
+static sql_exp*
+read_prop(mvc *sql, sql_exp *exp, char *r, int *pos, bool *found)
 {
        /* PROPs */
        if (strncmp(r+*pos, "JOINIDX",  strlen("JOINIDX")) == 0) {
@@ -825,6 +825,8 @@ read_prop( mvc *sql, sql_exp *exp, char 
                                return sql_error(sql, -1, SQLSTATE(42000) 
"Index %s missing\n", iname);
                }
                skipWS(r,pos);
+               if (found)
+                       *found = true;
        }
        return exp;
 }
@@ -851,7 +853,7 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
                }
                append(exps, e);
                skipWS( r, pos);
-               if (!read_prop(sql, e, r, pos))
+               if (!read_prop(sql, e, r, pos, NULL))
                        return NULL;
                while (r[*pos] == ',') {
 
@@ -862,7 +864,7 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
                                return NULL;
                        append(exps, e);
                        skipWS( r, pos);
-                       if (!read_prop(sql, e, r, pos))
+                       if (!read_prop(sql, e, r, pos, NULL))
                                return NULL;
                }
                if (r[*pos] != ebracket)
@@ -874,6 +876,48 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
 }
 
 static sql_exp*
+read_exp_properties(mvc *sql, sql_exp *exp, char *r, int *pos)
+{
+       bool found = true;
+       while (found) {
+               found = false;
+
+               if (strncmp(r+*pos, "COUNT",  strlen("COUNT")) == 0) {
+                       (*pos)+= (int) strlen("COUNT");
+                       skipWS(r,pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "HASHIDX",  strlen("HASHIDX")) == 0) 
{
+                       (*pos)+= (int) strlen("HASHIDX");
+                       if (!find_prop(exp->p, PROP_HASHIDX))
+                               exp->p = prop_create(sql->sa, PROP_HASHIDX, 
exp->p);
+                       skipWS(r,pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "SORTIDX",  strlen("SORTIDX")) == 0) 
{
+                       (*pos)+= (int) strlen("SORTIDX");
+                       if (!find_prop(exp->p, PROP_SORTIDX))
+                               exp->p = prop_create(sql->sa, PROP_SORTIDX, 
exp->p);
+                       skipWS(r,pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "HASHCOL",  strlen("HASHCOL")) == 0) 
{
+                       (*pos)+= (int) strlen("HASHCOL");
+                       if (!find_prop(exp->p, PROP_HASHCOL))
+                               exp->p = prop_create(sql->sa, PROP_HASHCOL, 
exp->p);
+                       skipWS(r,pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "FETCH",  strlen("FETCH")) == 0) {
+                       (*pos)+= (int) strlen("FETCH");
+                       if (!find_prop(exp->p, PROP_FETCH))
+                               exp->p = prop_create(sql->sa, PROP_FETCH, 
exp->p);
+                       skipWS(r,pos);
+                       found = true;
+               }
+               if (!read_prop(sql, exp, r, pos, &found))
+                       return NULL;
+       }
+       return exp;
+}
+
+static sql_exp*
 exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list *top_exps, char *r, int 
*pos, int grp)
 {
        int f = -1, not = 1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0, 
zero_if_empty = 0;
@@ -1213,10 +1257,17 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                skipWS(r, pos);
                set_semantics(exp);
        }
-       /* [ COUNT ] */
-       if (strncmp(r+*pos, "COUNT",  strlen("COUNT")) == 0) {
-               (*pos)+= (int) strlen("COUNT");
-               skipWS( r, pos);
+
+       /* [ ANY|ALL ] */
+       if (strncmp(r+*pos, "ANY",  strlen("ANY")) == 0) {
+               (*pos)+= (int) strlen("ANY");
+               skipWS(r, pos);
+               exp->flag = 1;
+       }
+       if (strncmp(r+*pos, "ALL",  strlen("ALL")) == 0) {
+               (*pos)+= (int) strlen("ALL");
+               skipWS(r, pos);
+               exp->flag = 2;
        }
        /* [ ASC ] */
        if (strncmp(r+*pos, "ASC",  strlen("ASC")) == 0) {
@@ -1230,17 +1281,6 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                skipWS(r, pos);
                set_nulls_last(exp);
        }
-       /* [ ANY|ALL ] */
-       if (strncmp(r+*pos, "ANY",  strlen("ANY")) == 0) {
-               (*pos)+= (int) strlen("ANY");
-               skipWS(r, pos);
-               exp->flag = 1;
-       }
-       if (strncmp(r+*pos, "ALL",  strlen("ALL")) == 0) {
-               (*pos)+= (int) strlen("ALL");
-               skipWS(r, pos);
-               exp->flag = 2;
-       }
        /* [ NOT ] NULL */
        if (strncmp(r+*pos, "NOT",  strlen("NOT")) == 0) {
                (*pos)+= (int) strlen("NOT");
@@ -1253,25 +1293,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                if (not)
                        set_has_no_nil(exp);
        }
-       if (strncmp(r+*pos, "HASHIDX",  strlen("HASHIDX")) == 0) {
-               (*pos)+= (int) strlen("HASHIDX");
-               if (!find_prop(exp->p, PROP_HASHIDX))
-                       exp->p = prop_create(sql->sa, PROP_HASHIDX, exp->p);
-               skipWS(r,pos);
-       }
-       if (strncmp(r+*pos, "HASHCOL",  strlen("HASHCOL")) == 0) {
-               (*pos)+= (int) strlen("HASHCOL");
-               if (!find_prop(exp->p, PROP_HASHCOL))
-                       exp->p = prop_create(sql->sa, PROP_HASHCOL, exp->p);
-               skipWS(r,pos);
-       }
-       if (strncmp(r+*pos, "FETCH",  strlen("FETCH")) == 0) {
-               (*pos)+= (int) strlen("FETCH");
-               if (!find_prop(exp->p, PROP_FETCH))
-                       exp->p = prop_create(sql->sa, PROP_FETCH, exp->p);
-               skipWS(r,pos);
-       }
-       if (!read_prop(sql, exp, r, pos))
+
+       if (!(exp = read_exp_properties(sql, exp, r, pos)))
                return NULL;
        skipWS(r,pos);
 
@@ -1433,6 +1456,46 @@ rel_set_types(mvc *sql, sql_rel *rel)
        return 0;
 }
 
+static sql_rel*
+read_rel_properties(mvc *sql, sql_rel *rel, char *r, int *pos)
+{
+       bool found = true;
+       while (found) {
+               found = false;
+
+               if (strncmp(r+*pos, "COUNT",  strlen("COUNT")) == 0) {
+                       (*pos)+= (int) strlen("COUNT");
+                       skipWS(r,pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "REMOTE", strlen("REMOTE")) == 0) { 
/* Remote tables under remote tables not supported, so remove REMOTE property */
+                       (*pos)+= (int) strlen("REMOTE");
+                       skipWS(r, pos);
+                       skipUntilWS(r, pos);
+                       skipWS(r, pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "USED", strlen("USED")) == 0) {
+                       (*pos)+= (int) strlen("USED");
+                       if (!find_prop(rel->p, PROP_USED))
+                               rel->p = prop_create(sql->sa, PROP_USED, 
rel->p);
+                       skipWS(r, pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "DISTRIBUTE", strlen("DISTRIBUTE")) 
== 0) {
+                       (*pos)+= (int) strlen("DISTRIBUTE");
+                       if (!find_prop(rel->p, PROP_DISTRIBUTE))
+                               rel->p = prop_create(sql->sa, PROP_DISTRIBUTE, 
rel->p);
+                       skipWS(r, pos);
+                       found = true;
+               } else if (strncmp(r+*pos, "GROUPINGS", strlen("GROUPINGS")) == 
0) {
+                       (*pos)+= (int) strlen("GROUPINGS");
+                       if (!find_prop(rel->p, PROP_GROUPINGS))
+                               rel->p = prop_create(sql->sa, PROP_GROUPINGS, 
rel->p);
+                       skipWS(r, pos);
+                       found = true;
+               }
+       }
+       return rel;
+}
+
 sql_rel*
 rel_read(mvc *sql, char *r, int *pos, list *refs)
 {
@@ -1483,7 +1546,9 @@ rel_read(mvc *sql, char *r, int *pos, li
                t = get_table(lrel);
                if (!insert_allowed(sql, t, t->base.name, "INSERT", "insert"))
                        return NULL;
-               return rel_insert(sql, lrel, rrel);
+
+               if (!(rel = rel_insert(sql, lrel, rrel)) || !(rel = 
read_rel_properties(sql, rel, r, pos)))
+                       return NULL;
        }
 
        if (r[*pos] == 'd' && r[*pos+1] == 'e' && r[*pos+2] == 'l') {
@@ -1504,7 +1569,8 @@ rel_read(mvc *sql, char *r, int *pos, li
                if (!update_allowed(sql, t, t->base.name, "DELETE", "delete", 
1))
                        return NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to