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