Changeset: 37a86770f306 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=37a86770f306
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/rel_bin.h
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/backends/monet5/sql_user.c
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_partition.c
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out.int128
sql/test/Dependencies/Tests/dependency_loop.stable.out
sql/test/Dependencies/Tests/dependency_loop.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
Branch: default
Log Message:
Merge with Nov2019
diffs (truncated from 2514 to 300 lines):
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
@@ -5720,236 +5720,3 @@ output_rel_bin(backend *be, sql_rel *rel
}
return s;
}
-
-static int exp_deps(mvc *sql, sql_exp *e, list *refs, list *l);
-
-static int
-exps_deps(mvc *sql, list *exps, list *refs, list *l)
-{
- node *n;
-
- for(n = exps->h; n; n = n->next) {
- if (exp_deps(sql, n->data, refs, l) != 0)
- return -1;
- }
- return 0;
-}
-
-static int
-id_cmp(int *id1, int *id2)
-{
- if (*id1 == *id2)
- return 0;
- return -1;
-}
-
-static list *
-cond_append(list *l, int *id)
-{
- if (*id >= FUNC_OIDS && !list_find(l, id, (fcmp) &id_cmp))
- list_append(l, id);
- return l;
-}
-
-static int rel_deps(mvc *sql, sql_rel *r, list *refs, list *l);
-
-static int
-exp_deps(mvc *sql, sql_exp *e, list *refs, list *l)
-{
- if (THRhighwater()) {
- (void) sql_error(sql, 10, SQLSTATE(42000) "query too complex:
running out of stack space");
- return -1;
- }
-
- switch(e->type) {
- case e_psm:
- if (e->flag & PSM_SET || e->flag & PSM_RETURN) {
- return exp_deps(sql, e->l, refs, l);
- } else if (e->flag & PSM_VAR) {
- return 0;
- } else if (e->flag & PSM_WHILE || e->flag & PSM_IF) {
- if (exp_deps(sql, e->l, refs, l) != 0 ||
- exps_deps(sql, e->r, refs, l) != 0)
- return -1;
- if (e->flag == PSM_IF && e->f)
- return exps_deps(sql, e->r, refs, l);
- } else if (e->flag & PSM_REL) {
- sql_rel *rel = e->l;
- return rel_deps(sql, rel, refs, l);
- } else if (e->flag & PSM_EXCEPTION) {
- return exps_deps(sql, e->l, refs, l);
- }
- case e_atom:
- case e_column:
- break;
- case e_convert:
- return exp_deps(sql, e->l, refs, l);
- case e_func: {
- sql_subfunc *f = e->f;
-
- if (e->l && exps_deps(sql, e->l, refs, l) != 0)
- return -1;
- cond_append(l, &f->func->base.id);
- if (e->l && list_length(e->l) == 2 &&
strcmp(f->func->base.name, "next_value_for") == 0) {
- /* add dependency on seq nr */
- list *nl = e->l;
- sql_exp *schname = nl->h->data;
- sql_exp *seqname = nl->t->data;
-
- char *sch_name =
((atom*)schname->l)->data.val.sval;
- char *seq_name =
((atom*)seqname->l)->data.val.sval;
- sql_schema *sche = mvc_bind_schema(sql,
sch_name);
- sql_sequence *seq = find_sql_sequence(sche,
seq_name);
-
- cond_append(l, &seq->base.id);
- }
- } break;
- case e_aggr: {
- sql_subaggr *a = e->f;
-
- if (e->l &&exps_deps(sql, e->l, refs, l) != 0)
- return -1;
- cond_append(l, &a->aggr->base.id);
- } break;
- case e_cmp: {
- if (get_cmp(e) == cmp_or || get_cmp(e) == cmp_filter) {
- if (get_cmp(e) == cmp_filter) {
- sql_subfunc *f = e->f;
- cond_append(l, &f->func->base.id);
- }
- if (exps_deps(sql, e->l, refs, l) != 0 ||
- exps_deps(sql, e->r, refs, l) != 0)
- return -1;
- } else if (e->flag == cmp_in || e->flag == cmp_notin) {
- if (exp_deps(sql, e->l, refs, l) != 0 ||
- exps_deps(sql, e->r, refs, l) != 0)
- return -1;
- } else {
- if (exp_deps(sql, e->l, refs, l) != 0 ||
- exp_deps(sql, e->r, refs, l) != 0)
- return -1;
- if (e->f)
- return exp_deps(sql, e->f, refs, l);
- }
- } break;
- }
- return 0;
-}
-
-static int
-rel_deps(mvc *sql, sql_rel *r, list *refs, list *l)
-{
- if (THRhighwater()) {
- (void) sql_error(sql, 10, SQLSTATE(42000) "query too complex:
running out of stack space");
- return -1;
- }
-
- if (!r)
- return 0;
-
- if (rel_is_ref(r) && refs_find_rel(refs, r)) /* allready handled */
- return 0;
- switch (r->op) {
- case op_basetable: {
- sql_table *t = r->l;
- sql_column *c = r->r;
-
- if (!t && c)
- t = c->t;
-
- cond_append(l, &t->base.id);
- /* find all used columns */
- for (node *en = r->exps->h; en; en = en->next) {
- sql_exp *exp = en->data;
- const char *oname = exp->r;
-
- assert(!is_func(exp->type));
- if (oname[0] == '%' && strcmp(oname, TID) == 0) {
- continue;
- } else if (oname[0] == '%') {
- sql_idx *i = find_sql_idx(t, oname+1);
- cond_append(l, &i->base.id);
- } else {
- sql_column *c = find_sql_column(t, oname);
- cond_append(l, &c->base.id);
- }
- }
- } break;
- case op_table: {
- if ((r->flag == 0 || r->flag == 1) && r->r) { /* table
producing function, excluding rel_relational_func cases */
- sql_exp *op = r->r;
- sql_subfunc *f = op->f;
- cond_append(l, &f->func->base.id);
- }
- } break;
- case op_join:
- case op_left:
- case op_right:
- case op_full:
- case op_semi:
- case op_anti:
- case op_union:
- case op_except:
- case op_inter:
- if (rel_deps(sql, r->l, refs, l) != 0 ||
- rel_deps(sql, r->r, refs, l) != 0)
- return -1;
- break;
- case op_project:
- case op_select:
- case op_groupby:
- case op_topn:
- case op_sample:
- if (rel_deps(sql, r->l, refs, l) != 0)
- return -1;
- break;
- case op_insert:
- case op_update:
- case op_delete:
- case op_truncate:
- if (rel_deps(sql, r->l, refs, l) != 0 ||
- rel_deps(sql, r->r, refs, l) != 0)
- return -1;
- break;
- case op_ddl:
- if (r->flag == ddl_output) {
- if (r->l)
- return rel_deps(sql, r->l, refs, l);
- } else if (r->flag == ddl_list || r->flag == ddl_exception) {
- if (r->l)
- return rel_deps(sql, r->l, refs, l);
- if (r->r)
- return rel_deps(sql, r->r, refs, l);
- } else if (r->flag == ddl_psm) {
- break;
- } else if (r->flag == ddl_create_seq || r->flag ==
ddl_alter_seq) {
- if (r->l)
- return rel_deps(sql, r->l, refs, l);
- }
- break;
- }
- if (!is_base(r->op) && r->exps) {
- if (exps_deps(sql, r->exps, refs, l) != 0)
- return -1;
- }
- if (is_groupby(r->op) && r->r) {
- if (exps_deps(sql, r->r, refs, l) != 0)
- return -1;
- }
- if (rel_is_ref(r)) {
- list_append(refs, r);
- list_append(refs, l);
- }
- return 0;
-}
-
-list *
-rel_dependencies(mvc *sql, sql_rel *r)
-{
- list *refs = sa_list(sql->sa);
- list *l = sa_list(sql->sa);
-
- if (rel_deps(sql, r, refs, l) != 0)
- return NULL;
- return l;
-}
diff --git a/sql/backends/monet5/rel_bin.h b/sql/backends/monet5/rel_bin.h
--- a/sql/backends/monet5/rel_bin.h
+++ b/sql/backends/monet5/rel_bin.h
@@ -17,6 +17,4 @@ extern stmt *output_rel_bin(backend *be,
extern stmt *sql_parse(backend *be, sql_allocator *sa, const char *query, char
mode);
-extern list *rel_dependencies(mvc *sql, sql_rel *r);
-
#endif /*_REL_BIN_H_*/
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -223,7 +223,6 @@ SQLmvc(Client cntxt, MalBlkPtr mb, MalSt
return MAL_SUCCEED;
}
-
str
SQLcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
@@ -621,7 +620,6 @@ setVariable(Client cntxt, MalBlkPtr mb,
const char *varname = *getArgReference_str(stk, pci, 2);
int mtype = getArgType(mb, pci, 3);
ValRecord *src;
- char buf[BUFSIZ];
if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
return msg;
@@ -634,6 +632,7 @@ setVariable(Client cntxt, MalBlkPtr mb,
if (strcmp("optimizer", varname) == 0) {
const char *newopt = *getArgReference_str(stk, pci, 3);
if (newopt) {
+ char buf[BUFSIZ];
if (!isOptimizerPipe(newopt) && strchr(newopt, (int)
';') == 0) {
throw(SQL, "sql.setVariable", SQLSTATE(42100)
"optimizer '%s' unknown", newopt);
}
@@ -665,8 +664,7 @@ setVariable(Client cntxt, MalBlkPtr mb,
if(!stack_set_var(m, varname, src))
throw(SQL, "sql.setVariable", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
} else {
- snprintf(buf, BUFSIZ, "variable '%s' unknown", varname);
- throw(SQL, "sql.setVariable", SQLSTATE(42100) "%s", buf);
+ throw(SQL, "sql.setVariable", SQLSTATE(42100) "variable '%s'
unknown", varname);
}
return MAL_SUCCEED;
}
@@ -688,12 +686,8 @@ getVariable(Client cntxt, MalBlkPtr mb,
return msg;
if (mtype < 0 || mtype >= 255)
throw(SQL, "sql.getVariable", SQLSTATE(42100) "Variable type
error");
- a = stack_get_var(m, varname);
- if (!a) {
- char buf[BUFSIZ];
- snprintf(buf, BUFSIZ, "variable '%s' unknown", varname);
- throw(SQL, "sql.getVariable", SQLSTATE(42100) "%s", buf);
- }
+ if (!(a = stack_get_var(m, varname)))
+ throw(SQL, "sql.getVariable", SQLSTATE(42100) "variable '%s'
unknown", varname);
src = &a->data;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list