Changeset: a7b9801c95bd for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7b9801c95bd Modified Files: gdk/gdk_storage.c sql/backends/monet5/sql_upgrades.c sql/server/rel_optimizer.c sql/server/rel_select.c sql/server/rel_select.h sql/storage/store.c sql/test/BugTracker-2016/Tests/LEFT-JOIN_with_OR_conditions_triggers_assertion.Bug-3908.stable.out sql/test/BugTracker-2016/Tests/incorrect_column_name_in_OR_condition_of_LEFT-JOIN_crashes_mserver.Bug-3909.stable.err Branch: no-wrd Log Message:
Merge with default branch. diffs (truncated from 794 to 300 lines): diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c --- a/gdk/gdk_storage.c +++ b/gdk/gdk_storage.c @@ -711,7 +711,13 @@ BATsave(BAT *bd) BAT *b = bd; BATcheck(b, "BATsave", GDK_FAIL); - CHECKDEBUG BATassertProps(b); + /* there is a possibility that BATsave gets called with a + * pointer to a BAT that has *no* fixes (refs == 0), and so + * the heaps may not be in core, in which case BATmirror() + * would not find the mirror (this can happen when BATsave + * gets called during a (sub)commit after the BAT had been + * trimmed) */ + CHECKDEBUG if (BATmirror(b)) BATassertProps(b); /* views cannot be saved, but make an exception for * force-remapped views */ 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 @@ -18,505 +18,6 @@ #include <unistd.h> #include "sql_upgrades.h" -static str -sql_update_feb2013(Client c) -{ - char *buf = GDKmalloc(4096), *err = NULL; - size_t bufsize = 4096, pos = 0; - - /* sys.stddev_samp functions */ - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.stddev_samp(val TINYINT) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val SMALLINT) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val INTEGER) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val BIGINT) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val REAL) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val DOUBLE) returns DOUBLE external name \"aggr\".\"stdev\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.stddev_samp(val DATE) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val TIME) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_samp(val TIMESTAMP) returns DOUBLE external name \"aggr\".\"stdev\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.stddev_pop(val TINYINT) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val SMALLINT) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val INTEGER) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val BIGINT) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val REAL) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val DOUBLE) returns DOUBLE external name \"aggr\".\"stdevp\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.stddev_pop(val DATE) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val TIME) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.stddev_pop(val TIMESTAMP) returns DOUBLE external name \"aggr\".\"stdevp\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.var_samp(val TINYINT) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val SMALLINT) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val INTEGER) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val BIGINT) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val REAL) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val DOUBLE) returns DOUBLE external name \"aggr\".\"variance\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.var_samp(val DATE) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val TIME) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_samp(val TIMESTAMP) returns DOUBLE external name \"aggr\".\"variance\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.var_pop(val TINYINT) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val SMALLINT) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val INTEGER) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val BIGINT) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val REAL) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val DOUBLE) returns DOUBLE external name \"aggr\".\"variancep\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.var_pop(val DATE) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val TIME) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.var_pop(val TIMESTAMP) returns DOUBLE external name \"aggr\".\"variancep\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name in ('stddev_samp', 'stddev_pop', 'var_samp', 'var_pop') and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", F_AGGR); - - assert(pos < 4096); - - printf("Running database upgrade commands:\n%s\n", buf); - err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL); - GDKfree(buf); - return err; /* usually MAL_SUCCEED */ -} - - -static str -sql_update_feb2013_sp1(Client c) -{ - size_t bufsize = 10240, pos = 0; - char *buf = GDKmalloc(bufsize), *err = NULL; - - /* sys.stddev functions */ - pos += snprintf(buf + pos, bufsize - pos, - "drop filter function sys.\"like\"(string, string, string);\n" - "drop filter function sys.\"ilike\"(string, string, string);\n" - "create filter function sys.\"like\"(val string, pat string, esc string) external name algebra.likesubselect;\n" - "create filter function sys.\"ilike\"(val string, pat string, esc string) external name algebra.ilikesubselect;\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "drop function sys.storage;\n"); - - /* 75_storagemodel.sql */ - pos += snprintf(buf + pos, bufsize - pos, - "create function sys.storage()\n" - "returns table (\"schema\" string, \"table\" string, \"column\" string, \"type\" string, location string, \"count\" bigint, typewidth int, columnsize bigint, heapsize bigint, indices bigint, sorted boolean)\n" - "external name sql.storage;\n" - - "create table sys.storagemodelinput(\n" - " \"schema\" string,\n" - " \"table\" string,\n" - " \"column\" string,\n" - " \"type\" string,\n" - " \"typewidth\" int,\n" - " \"count\" bigint,\n" - " \"distinct\" bigint,\n" - " \"atomwidth\" int,\n" - " \"reference\" boolean,\n" - " \"sorted\" boolean\n" - ");\n" - "update sys._tables\n" - " set system = true\n" - " where name = 'storagemodelinput'\n" - " and schema_id = (select id from sys.schemas where name = 'sys');\n" - - "create procedure sys.storagemodelinit()\n" - "begin\n" - " delete from sys.storagemodelinput;\n" - " insert into sys.storagemodelinput\n" - " select X.\"schema\", X.\"table\", X.\"column\", X.\"type\", X.typewidth, X.count, 0, X.typewidth, false, X.sorted from sys.storage() X;\n" - " update sys.storagemodelinput\n" - " set reference = true\n" - " where concat(concat(\"schema\",\"table\"), \"column\") in (\n" - " SELECT concat( concat(\"fkschema\".\"name\", \"fktable\".\"name\"), \"fkkeycol\".\"name\" )\n" - " FROM \"sys\".\"keys\" AS \"fkkey\",\n" - " \"sys\".\"objects\" AS \"fkkeycol\",\n" - " \"sys\".\"tables\" AS \"fktable\",\n" - " \"sys\".\"schemas\" AS \"fkschema\"\n" - " WHERE \"fktable\".\"id\" = \"fkkey\".\"table_id\"\n" - " AND \"fkkey\".\"id\" = \"fkkeycol\".\"id\"\n" - " AND \"fkschema\".\"id\" = \"fktable\".\"schema_id\"\n" - " AND \"fkkey\".\"rkey\" > -1);\n" - " update sys.storagemodelinput\n" - " set \"distinct\" = \"count\"\n" - " where \"type\" = 'varchar' or \"type\"='clob';\n" - "end;\n" - - "create function sys.columnsize(nme string, i bigint, d bigint)\n" - "returns bigint\n" - "begin\n" - " case\n" - " when nme = 'boolean' then return i;\n" - " when nme = 'char' then return 2*i;\n" - " when nme = 'smallint' then return 2 * i;\n" - " when nme = 'int' then return 4 * i;\n" - " when nme = 'bigint' then return 8 * i;\n" - " when nme = 'timestamp' then return 8 * i;\n" - " when nme = 'varchar' then\n" - " case\n" - " when cast(d as bigint) << 8 then return i;\n" - " when cast(d as bigint) << 16 then return 2 * i;\n" - " when cast(d as bigint) << 32 then return 4 * i;\n" - " else return 8 * i;\n" - " end case;\n" - " else return 8 * i;\n" - " end case;\n" - "end;\n" - - "create function sys.heapsize(tpe string, i bigint, w int)\n" - "returns bigint\n" - "begin\n" - " if tpe <> 'varchar' and tpe <> 'clob'\n" - " then\n" - " return 0;\n" - " end if;\n" - " return 10240 + i * w;\n" - "end;\n" - - "create function sys.indexsize(b boolean, i bigint)\n" - "returns bigint\n" - "begin\n" - - " if b = true\n" - " then\n" - " return 8 * i;\n" - " end if;\n" - " return 0;\n" - "end;\n" - - "create function sys.storagemodel()\n" - "returns table (\n" - " \"schema\" string,\n" - " \"table\" string,\n" - " \"column\" string,\n" - " \"type\" string,\n" - " \"count\" bigint,\n" - " columnsize bigint,\n" - " heapsize bigint,\n" - " indices bigint,\n" - " sorted boolean)\n" - "begin\n" - " return select I.\"schema\", I.\"table\", I.\"column\", I.\"type\", I.\"count\",\n" - " columnsize(I.\"type\", I.count, I.\"distinct\"),\n" - " heapsize(I.\"type\", I.\"distinct\", I.\"atomwidth\"),\n" - " indexsize(I.\"reference\", I.\"count\"),\n" - " I.sorted\n" - " from sys.storagemodelinput I;\n" - "end;\n" - - "create view sys.tablestoragemodel\n" - "as select \"schema\",\"table\",max(count) as \"count\",\n" - " sum(columnsize) as columnsize,\n" - " sum(heapsize) as heapsize,\n" - " sum(indices) as indices,\n" - " sum(case when sorted = false then 8 * count else 0 end) as auxiliary\n" - "from sys.storagemodel() group by \"schema\",\"table\";\n" - "update sys._tables\n" - " set system = true\n" - " where name = 'tablestoragemodel'\n" - " and schema_id = (select id from sys.schemas where name = 'sys');\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name in ('like', 'ilike') and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", - F_FILT); - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name in ('storage', 'columnsize', 'heapsize', 'indexsize', 'storagemodel') and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", - F_FUNC); - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name = 'storagemodelinit' and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", - F_PROC); - - assert(pos < bufsize); - - printf("Running database upgrade commands:\n%s\n", buf); - err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL); - GDKfree(buf); - return err; /* usually MAL_SUCCEED */ -} - -static str -sql_update_feb2013_sp3(Client c) -{ - size_t bufsize = 4096, pos = 0; - char *buf = GDKmalloc(bufsize), *err = NULL; - - /* aggregates on type WRD */ - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate sys.stddev_samp(val WRD) returns DOUBLE external name \"aggr\".\"stdev\";\n" - "create aggregate sys.stddev_pop(val WRD) returns DOUBLE external name \"aggr\".\"stdevp\";\n" - "create aggregate sys.var_samp(val WRD) returns DOUBLE external name \"aggr\".\"variance\";\n" - "create aggregate sys.var_pop(val WRD) returns DOUBLE external name \"aggr\".\"variancep\";\n" - "create aggregate sys.median(val WRD) returns WRD external name \"aggr\".\"median\";\n" - "create aggregate sys.corr(e1 WRD, e2 WRD) returns WRD external name \"aggr\".\"corr\";\n"); - - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where f.name in ('stddev_samp', 'stddev_pop', 'var_samp', 'var_pop', 'median', 'corr') and f.type = %d and f.schema_id = s.id and s.name = 'sys');\n", - F_AGGR); - - assert(pos < 4096); - - printf("Running database upgrade commands:\n%s\n", buf); - err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL); - GDKfree(buf); - return err; /* usually MAL_SUCCEED */ -} - -static str -sql_update_jan2014(Client c) -{ - size_t bufsize = 25000, pos = 0; - char *buf = GDKmalloc(bufsize), *err = NULL; - ValRecord *schvar = stack_get_var(((backend *) c->sqlcontext)->mvc, "current_schema"); - char *schema = NULL; - - if (schvar) - schema = strdup(schvar->val.sval); - - pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); - - /* replaced 15_history.sql by 15_querylog.sql */ - pos += snprintf(buf + pos, bufsize - pos, - "drop procedure sys.resetHistory;\n" - "drop procedure sys.keepCall;\n" - "drop procedure sys.keepQuery;\n"); - { - char *msg; - mvc *sql = NULL; - - if ((msg = getSQLContext(c, c->curprg->def, &sql, NULL)) != MAL_SUCCEED) { - GDKfree(msg); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list