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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list