Changeset: 7c050cb2f20e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c050cb2f20e Removed Files: sql/benchmarks/tpch/fileleak/Tests/All sql/benchmarks/tpch/fileleak/Tests/check0.reqtests sql/benchmarks/tpch/fileleak/Tests/check0.sql sql/benchmarks/tpch/fileleak/Tests/check0.stable.err sql/benchmarks/tpch/fileleak/Tests/check0.stable.out sql/benchmarks/tpch/fileleak/Tests/check1.reqtests sql/benchmarks/tpch/fileleak/Tests/check1.sql sql/benchmarks/tpch/fileleak/Tests/check1.stable.err sql/benchmarks/tpch/fileleak/Tests/check1.stable.out sql/benchmarks/tpch/fileleak/Tests/create.sql.src sql/benchmarks/tpch/fileleak/Tests/create.stable.err sql/benchmarks/tpch/fileleak/Tests/create.stable.out sql/benchmarks/tpch/fileleak/Tests/delete_all.SQL.py sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.err sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out sql/benchmarks/tpch/fileleak/Tests/leaks.SQL.py sql/benchmarks/tpch/fileleak/Tests/leaks.stable.err sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows sql/benchmarks/tpch/fileleak/Tests/load.SQL.py sql/benchmarks/tpch/fileleak/Tests/load.reqtests sql/benchmarks/tpch/fileleak/Tests/load.stable.err sql/benchmarks/tpch/fileleak/Tests/load.stable.out sql/benchmarks/tpch/fileleak/Tests/test.py sql/benchmarks/tpch/fileleak/Tests/test.sql Modified Files: clients/mapiclient/dump.c monetdb5/optimizer/opt_candidates.c sql/backends/monet5/sql_upgrades.c sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.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 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: default Log Message:
Merge with Jul2017 branch. diffs (truncated from 41068 to 300 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -1214,26 +1214,27 @@ dump_table(Mapi mid, const char *schema, } static int -dump_function(Mapi mid, stream *toConsole, const char *sname, const char *fname, int hashge) +dump_function(Mapi mid, stream *toConsole, const char *fid, int hashge) { MapiHdl hdl; - size_t qlen = 200 + strlen(sname) + strlen(fname); + size_t qlen = 200 + strlen(fid); char *query = malloc(qlen); const char *sep; - char *fid, *ffunc; + char *ffunc, *sname, *fname; int flang, ftype; - snprintf(query, qlen, "select f.id, f.func, f.language, f.type from sys.functions f, sys.schemas s where f.schema_id = s.id and s.name = '%s' and f.name = '%s'", sname, fname); + snprintf(query, qlen, "SELECT f.id, f.func, f.language, f.type, s.name, f.name FROM sys.functions f, sys.schemas s WHERE f.schema_id = s.id AND f.id = %s", fid); hdl = mapi_query(mid, query); if (mapi_fetch_row(hdl) == 0) { free(query); mapi_close_handle(hdl); return 0; /* no such function, apparently */ } - fid = mapi_fetch_field(hdl, 0); ffunc = mapi_fetch_field(hdl, 1); flang = atoi(mapi_fetch_field(hdl, 2)); ftype = atoi(mapi_fetch_field(hdl, 3)); + sname = mapi_fetch_field(hdl, 4); + fname = mapi_fetch_field(hdl, 5); if (flang == 1 || flang == 2) { /* all information is stored in the func column */ mnstr_printf(toConsole, "%s\n", ffunc); @@ -1357,22 +1358,14 @@ dump_function(Mapi mid, stream *toConsol int dump_functions(Mapi mid, stream *toConsole, const char *sname, const char *fname) { - const char functions[] = - "SELECT s.name, f.name " - "FROM sys.schemas s, " - "sys.functions f " - "WHERE s.id = f.schema_id AND " - "f.id NOT IN (SELECT function_id FROM sys.systemfunctions) " - "%s%s%s" - "ORDER BY f.func"; MapiHdl hdl; char *q; size_t l; int hashge = has_hugeint(mid); + const char *fid; if (fname != NULL) { /* dump a single function */ - int rc; char *schema = NULL; if (sname == NULL) { @@ -1389,27 +1382,42 @@ dump_functions(Mapi mid, stream *toConso } sname = schema; } - rc = dump_function(mid, toConsole, sname, fname, hashge); + l = 200 + strlen(sname) + strlen(fname); + q = malloc(l); + snprintf(q, l, + "SELECT f.id " + "FROM sys.schemas s, sys.functions f " + "WHERE s.id = f.schema_id AND " + "s.name = '%s' AND " + "f.name = '%s' AND " + "f.language > 0 " + "ORDER BY f.func, f.id", + sname, fname); if (schema) free(schema); - return rc; + } else { + l = 200 + (sname ? strlen(sname) : 0) + 100; + q = malloc(l); + snprintf(q, l, + "SELECT f.id " + "FROM sys.schemas s, " + "sys.functions f " + "WHERE s.id = f.schema_id AND " + "f.id NOT IN (SELECT function_id FROM sys.systemfunctions) AND " + "f.language > 0 " + "%s%s%s" + "ORDER BY f.func, f.id", + sname ? "AND s.name = '" : "", + sname ? sname : "", + sname ? "' " : ""); } - - l = sizeof(functions) + (sname ? strlen(sname) : 0) + 100; - q = malloc(l); - snprintf(q, l, functions, - sname ? "AND s.name = '" : "", - sname ? sname : "", - sname ? "' " : ""); hdl = mapi_query(mid, q); free(q); if (hdl == NULL || mapi_error(mid)) goto bailout; while (!mnstr_errnr(toConsole) && mapi_fetch_row(hdl) != 0) { - sname = mapi_fetch_field(hdl, 0); - fname = mapi_fetch_field(hdl, 1); - - dump_function(mid, toConsole, sname, fname, hashge); + fid = mapi_fetch_field(hdl, 0); + dump_function(mid, toConsole, fid, hashge); } if (mapi_error(mid)) goto bailout; @@ -1621,7 +1629,6 @@ dump_database(Mapi mid, stream *toConsol MapiHdl hdl; int create_hash_func = 0; int rc = 0; - int hashge; /* start a transaction for the dump */ if (!describe) @@ -1857,8 +1864,6 @@ dump_database(Mapi mid, stream *toConsol mapi_close_handle(hdl); hdl = NULL; - hashge = has_hugeint(mid); - /* dump views, functions, and triggers */ if ((hdl = mapi_query(mid, views_functions_triggers)) == NULL || mapi_error(mid)) @@ -1888,7 +1893,7 @@ dump_database(Mapi mid, stream *toConsol curschema); } if (type[0] == 'f') - dump_function(mid, toConsole, schema, name, hashge); + dump_functions(mid, toConsole, schema, name); else mnstr_printf(toConsole, "%s\n", func); } diff --git a/monetdb5/optimizer/opt_candidates.c b/monetdb5/optimizer/opt_candidates.c --- a/monetdb5/optimizer/opt_candidates.c +++ b/monetdb5/optimizer/opt_candidates.c @@ -58,6 +58,8 @@ OPTcandidatesImplementation(Client cntxt setVarCList(mb,getArg(p,0)); else if(getFunctionId(p) == intersectcandRef ) setVarCList(mb,getArg(p,0)); + else if(getFunctionId(p) == subsliceRef ) + setVarCList(mb,getArg(p,0)); } else if( getModuleId(p) == generatorRef){ if(getFunctionId(p) == selectRef || getFunctionId(p) == thetaselectRef) 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 @@ -25,7 +25,6 @@ /* this function can be used to recreate the system tables (types, * functions, args) when internal types and/or functions have changed * (i.e. the ones in sql_types.c) */ -#ifdef HAVE_HGE /* currently only used in sql_update_hugeint */ static str sql_fix_system_tables(Client c, mvc *sql) { @@ -183,7 +182,6 @@ sql_fix_system_tables(Client c, mvc *sql GDKfree(buf); return err; /* usually MAL_SUCCEED */ } -#endif #ifdef HAVE_HGE static str @@ -854,6 +852,54 @@ sql_update_jul2017_sp2(Client c) } static str +sql_update_jul2017_sp3(Client c, mvc *sql) +{ + char *err = NULL; + sql_schema *sys; + sql_table *tab; + sql_column *col; + oid rid; + + /* if there is no value "sys_update_schemas" in + * sys.functions.name, we need to update the sys.functions + * table */ + sys = find_sql_schema(sql->session->tr, "sys"); + tab = find_sql_table(sys, "functions"); + col = find_sql_column(tab, "name"); + rid = table_funcs.column_find_row(sql->session->tr, col, "sys_update_schemas", NULL); + if (rid == oid_nil) { + err = sql_fix_system_tables(c, sql); + if (err != NULL) + return err; + } + /* if there is no value "system_update_schemas" in + * sys.triggers.name, we need to add the triggers */ + tab = find_sql_table(sys, "triggers"); + col = find_sql_column(tab, "name"); + rid = table_funcs.column_find_row(sql->session->tr, col, "system_update_schemas", NULL); + if (rid == oid_nil) { + char *schema = stack_get_string(sql, "current_schema"); + size_t bufsize = 1024, pos = 0; + char *buf = GDKmalloc(bufsize); + if (buf == NULL) + throw(SQL, "sql_update_jul2017_sp3", MAL_MALLOC_FAIL); + pos += snprintf( + buf + pos, + bufsize - pos, + "set schema \"sys\";\n" + "create trigger system_update_schemas after update on sys.schemas for each statement call sys_update_schemas();\n" + "create trigger system_update_tables after update on sys._tables for each statement call sys_update_tables();\n"); + if (schema) + pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", schema); + assert(pos < bufsize); + printf("Running database upgrade commands:\n%s\n", buf); + err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL); + GDKfree(buf); + } + return err; +} + +static str sql_update_default(Client c, mvc *sql) { size_t bufsize = 10000, pos = 0; @@ -1059,6 +1105,11 @@ SQLupgrades(Client c, mvc *m) freeException(err); } + if ((err = sql_update_jul2017_sp3(c, m)) != NULL) { + fprintf(stderr, "!%s\n", err); + freeException(err); + } + if (!sql_bind_func(m->sa, s, "master", NULL, NULL, F_PROC)) { if ((err = sql_update_default(c, m)) != NULL) { fprintf(stderr, "!%s\n", err); diff --git a/sql/benchmarks/tpch/fileleak/Tests/All b/sql/benchmarks/tpch/fileleak/Tests/All deleted file mode 100644 --- a/sql/benchmarks/tpch/fileleak/Tests/All +++ /dev/null @@ -1,6 +0,0 @@ -create -check0 -load -check1 -HAVE_PYMONETDB?delete_all -HAVE_PYMONETDB?leaks diff --git a/sql/benchmarks/tpch/fileleak/Tests/check0.reqtests b/sql/benchmarks/tpch/fileleak/Tests/check0.reqtests deleted file mode 100644 --- a/sql/benchmarks/tpch/fileleak/Tests/check0.reqtests +++ /dev/null @@ -1,1 +0,0 @@ -create diff --git a/sql/benchmarks/tpch/fileleak/Tests/check0.sql b/sql/benchmarks/tpch/fileleak/Tests/check0.sql deleted file mode 100644 --- a/sql/benchmarks/tpch/fileleak/Tests/check0.sql +++ /dev/null @@ -1,8 +0,0 @@ -select * from customer; -select * from nation; -select * from orders; -select * from partsupp; -select * from part; -select * from region; -select * from supplier; -select * from lineitem; diff --git a/sql/benchmarks/tpch/fileleak/Tests/check0.stable.err b/sql/benchmarks/tpch/fileleak/Tests/check0.stable.err deleted file mode 100644 --- a/sql/benchmarks/tpch/fileleak/Tests/check0.stable.err +++ /dev/null @@ -1,17 +0,0 @@ -stderr of test 'check0` in directory 'sql/benchmarks/tpch/fileleak` itself: - - -# 19:09:06 > -# 19:09:06 > Mtimeout -timeout 180 Mserver "--config=/var/tmp/_PREFIX_MONET_GNU_32_d__/etc/monet.conf" --debug=10 --set "monet_mod_path=/var/tmp/_PREFIX_MONET_GNU_32_d__/lib/MonetDB:/var/tmp/_PREFIX_SQL_GNU_32_d__/lib/MonetDB" --set "gdk_dbfarm=/var/tmp/_PREFIX_MONET_GNU_32_d__/var/MonetDB/dbfarm" --set "sql_logdir=/var/tmp/_PREFIX_MONET_GNU_32_d__/var/MonetDB/log" --set mapi_port=56086 --set sql_port=51688 --set monet_prompt= --trace "--dbname=mTests_src_benchmarks_tpch" "/var/tmp/_PREFIX_SQL_GNU_32_d__/lib/MonetDB/sqlserver.mil" ; echo ; echo Over.. -# 19:09:06 > - - -# 19:09:06 > -# 19:09:06 > Mtimeout -timeout 60 Msql -u monetdb -P monetdb --host=draco --port=51688 --trace < check0.sql -# 19:09:06 > - - -# 19:09:06 > -# 19:09:06 > Done. -# 19:09:06 > - diff --git a/sql/benchmarks/tpch/fileleak/Tests/check0.stable.out b/sql/benchmarks/tpch/fileleak/Tests/check0.stable.out deleted file mode 100644 --- a/sql/benchmarks/tpch/fileleak/Tests/check0.stable.out +++ /dev/null @@ -1,63 +0,0 @@ -stdout of test 'check0` in directory 'sql/benchmarks/tpch/fileleak` itself: - - _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list