Changeset: e615032ad1cc for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e615032ad1cc Modified Files: sql/backends/monet5/sql.c sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_upgrades.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_planner.c sql/server/rel_schema.c sql/server/sql_atom.c sql/server/sql_atom.h sql/server/sql_mvc.c sql/server/sql_mvc.h sql/test/mergetables/Tests/part-elim.sql Branch: default Log Message:
store values of parameters also using atom's. Use these within the optimizer to lookup values. diffs (truncated from 643 to 300 lines): 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 @@ -1570,6 +1570,7 @@ getVariable(Client cntxt, MalBlkPtr mb, mvc *m = NULL; str msg; str varname = *getArgReference_str(stk, pci, 2); + atom *a; ValRecord *dst, *src; if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) @@ -1578,12 +1579,13 @@ getVariable(Client cntxt, MalBlkPtr mb, return msg; if (mtype < 0 || mtype >= 255) throw(SQL, "sql.getVariable", "failed"); - src = stack_get_var(m, varname); - if (!src) { + a = stack_get_var(m, varname); + if (!a) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "variable '%s' unknown", varname); throw(SQL, "sql.getVariable", "%s", buf); } + src = &a->data; dst = &stk->stk[getArg(pci, 0)]; VALcopy(dst, src); return MAL_SUCCEED; diff --git a/sql/backends/monet5/sql_optimizer.c b/sql/backends/monet5/sql_optimizer.c --- a/sql/backends/monet5/sql_optimizer.c +++ b/sql/backends/monet5/sql_optimizer.c @@ -83,11 +83,11 @@ SQLgetSpace(mvc *m, MalBlkPtr mb) str getSQLoptimizer(mvc *m) { - ValRecord *val = stack_get_var(m, "optimizer"); + char *opt = stack_get_string(m, "optimizer"); char *pipe = "default_pipe"; - if (val && val->val.sval) - pipe = val->val.sval; + if (opt) + pipe = opt; return pipe; } diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -219,14 +219,10 @@ sql_update_oct2014(Client c, mvc *sql) { size_t bufsize = 8192*2, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(sql, "current_schema"); sql_table *t; sql_schema *s; - if (schvar) - schema = strdup(schvar->val.sval); - pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); /* cleanup columns of dropped views */ @@ -488,10 +484,8 @@ sql_update_oct2014(Client c, mvc *sql) "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name in ('bbp', 'db_users', 'env', 'generate_series', 'storage', 'storagemodel', 'var') and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", F_UNION); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); @@ -508,11 +502,7 @@ sql_update_oct2014_sp1(Client c, mvc *sq { size_t bufsize = 8192*2, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; - - if (schvar) - schema = strdup(schvar->val.sval); + char *schema = stack_get_string(sql, "current_schema"); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n" @@ -539,10 +529,8 @@ sql_update_oct2014_sp1(Client c, mvc *sq "drop table upgradeOct2014_changes;\n" "drop table upgradeOct2014;\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -556,11 +544,7 @@ sql_update_oct2014_sp2(Client c, mvc *sq { size_t bufsize = 8192, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; - - if (schvar) - schema = strdup(schvar->val.sval); + char *schema = stack_get_string(sql, "current_schema"); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n" @@ -575,10 +559,8 @@ sql_update_oct2014_sp2(Client c, mvc *sq "from sys.storagemodel() group by \"schema\",\"table\";\n" "update _tables set system = true where name = 'tablestoragemodel' and schema_id = (select id from schemas where name = 'sys');\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); { @@ -603,11 +585,7 @@ sql_update_oct2014_sp3(Client c, mvc *sq { size_t bufsize = 8192, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; - - if (schvar) - schema = strdup(schvar->val.sval); + char *schema = stack_get_string(sql, "current_schema"); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n" @@ -617,10 +595,8 @@ sql_update_oct2014_sp3(Client c, mvc *sq "CREATE FUNCTION \"right_shift_assign\"(i1 inet, i2 inet) RETURNS boolean EXTERNAL NAME inet.\">>=\";\n" "insert into sys.systemfunctions (select id from sys.functions where name in ('left_shift', 'right_shift', 'left_shift_assign', 'right_shift_assign') and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -635,11 +611,7 @@ sql_update_hugeint(Client c, mvc *sql) { size_t bufsize = 8192, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; - - if (schvar) - schema = strdup(schvar->val.sval); + char *schema = stack_get_string(sql, "current_schema"); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); @@ -720,10 +692,8 @@ sql_update_hugeint(Client c, mvc *sql) } } - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -738,11 +708,8 @@ sql_update_jul2015(Client c, mvc *sql) { size_t bufsize = 15360, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(sql, "current_schema"); - if (schvar) - schema = strdup(schvar->val.sval); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); /* change to 09_like */ @@ -1143,10 +1110,8 @@ sql_update_jul2015(Client c, mvc *sql) "drop procedure sys.cluster1;\n" "drop procedure sys.cluster2;\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -1160,14 +1125,11 @@ sql_update_epoch(Client c, mvc *m) { size_t bufsize = 1000, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(m, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(m, "current_schema"); sql_subtype tp; int n = 0; sql_schema *s = mvc_bind_schema(m, "sys"); - if (schvar) - schema = strdup(schvar->val.sval); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); sql_find_subtype(&tp, "bigint", 0, 0); @@ -1197,10 +1159,8 @@ create function sys.\"epoch\"(ts TIMESTA pos += snprintf(buf + pos, bufsize - pos, "insert into sys.systemfunctions (select id from sys.functions where name = 'epoch' and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); if (n) { @@ -1216,14 +1176,11 @@ sql_update_jun2016(Client c, mvc *sql) { size_t bufsize = 1000000, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(sql, "current_schema"); node *n; sql_schema *s; s = mvc_bind_schema(sql, "sys"); - if (schvar) - schema = strdup(schvar->val.sval); pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); pos += snprintf(buf + pos, bufsize - pos, "delete from sys.dependencies where id < 2000;\n"); @@ -1473,10 +1430,8 @@ sql_update_jun2016(Client c, mvc *sql) pos += snprintf(buf + pos, bufsize - pos, "delete from sys.systemfunctions where function_id not in (select id from sys.functions);\n"); - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -1491,8 +1446,7 @@ sql_update_geom(Client c, mvc *sql, int size_t bufsize, pos = 0; char *buf, *err = NULL; char *geomupgrade; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(sql, "current_schema"); geomsqlfix_fptr fixfunc; node *n; sql_schema *s = mvc_bind_schema(sql, "sys"); @@ -1500,9 +1454,6 @@ sql_update_geom(Client c, mvc *sql, int if ((fixfunc = geomsqlfix_get()) == NULL) return NULL; - if (schvar) - schema = strdup(schvar->val.sval); - geomupgrade = (*fixfunc)(olddb); bufsize = strlen(geomupgrade) + 512; buf = GDKmalloc(bufsize); @@ -1521,10 +1472,8 @@ sql_update_geom(Client c, mvc *sql, int pos += snprintf(buf + pos, bufsize - pos, "insert into sys.types values (%d, '%s', '%s', %u, %u, %d, %d, %d);\n", t->base.id, t->base.name, t->sqlname, t->digits, t->scale, t->radix, t->eclass, t->s ? t->s->base.id : s->base.id); } - if (schema) { + if (schema) pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); - free(schema); - } assert(pos < bufsize); printf("Running database upgrade commands:\n%s\n", buf); @@ -1538,13 +1487,10 @@ sql_update_default(Client c, mvc *sql) { size_t bufsize = 10240, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(sql, "current_schema"); - char *schema = NULL; + char *schema = stack_get_string(sql, "current_schema"); sql_schema *s; s = mvc_bind_schema(sql, "sys"); - if (schvar) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list