Changeset: 95b3c878ae50 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=95b3c878ae50 Modified Files: sql/backends/monet5/sql_upgrades.c 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.32bit 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.32bit sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.err sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit 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.err sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: default Log Message:
Fix upgrade. diffs (truncated from 61314 to 300 lines): 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 @@ -900,101 +900,6 @@ sql_update_jul2017_sp3(Client c, mvc *sq } static str -sql_update_default(Client c, mvc *sql) -{ - size_t bufsize = 10000, pos = 0; - char *buf = GDKmalloc(bufsize), *err = NULL; - char *schema = stack_get_string(sql, "current_schema"); - - if (buf== NULL) - throw(SQL, "sql_update_default", SQLSTATE(HY001) MAL_MALLOC_FAIL); - pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); - - /* 39_analytics.sql, 39_analytics_hge.sql */ - pos += snprintf(buf + pos, bufsize - pos, - "drop aggregate corr(tinyint, tinyint);\n" - "drop aggregate corr(smallint, smallint);\n" - "drop aggregate corr(integer, integer);\n" - "drop aggregate corr(bigint, bigint);\n" - "drop aggregate corr(real, real);\n"); -#ifdef HAVE_HGE - if (have_hge) - pos += snprintf(buf + pos, bufsize - pos, - "drop aggregate corr(hugeint, hugeint);\n"); -#endif - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate corr(e1 TINYINT, e2 TINYINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(tinyint, tinyint) to public;\n" - "create aggregate corr(e1 SMALLINT, e2 SMALLINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(smallint, smallint) to public;\n" - "create aggregate corr(e1 INTEGER, e2 INTEGER) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(integer, integer) to public;\n" - "create aggregate corr(e1 BIGINT, e2 BIGINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(bigint, bigint) to public;\n" - "create aggregate corr(e1 REAL, e2 REAL) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(real, real) to public;\n"); -#ifdef HAVE_HGE - if (have_hge) - pos += snprintf(buf + pos, bufsize - pos, - "create aggregate corr(e1 HUGEINT, e2 HUGEINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" - "grant execute on aggregate sys.corr(hugeint, hugeint) to public;\n"); -#endif - pos += snprintf(buf + pos, bufsize - pos, - "insert into sys.systemfunctions (select id from sys.functions where name = 'corr' and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n"); - - /* 60_wlcr.sql */ - pos += snprintf(buf + pos, bufsize - pos, - "create procedure master()\n" - "external name wlc.master;\n" - "create procedure master(path string)\n" - "external name wlc.master;\n" - "create procedure stopmaster()\n" - "external name wlc.stopmaster;\n" - "create procedure masterbeat( duration int)\n" - "external name wlc.\"setmasterbeat\";\n" - "create function masterClock() returns string\n" - "external name wlc.\"getmasterclock\";\n" - "create function masterTick() returns bigint\n" - "external name wlc.\"getmastertick\";\n" - "create procedure replicate()\n" - "external name wlr.replicate;\n" - "create procedure replicate(pointintime timestamp)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string, pointintime timestamp)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string, id tinyint)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string, id smallint)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string, id integer)\n" - "external name wlr.replicate;\n" - "create procedure replicate(dbname string, id bigint)\n" - "external name wlr.replicate;\n" - "create procedure replicabeat(duration integer)\n" - "external name wlr.\"setreplicabeat\";\n" - "create function replicaClock() returns string\n" - "external name wlr.\"getreplicaclock\";\n" - "create function replicaTick() returns bigint\n" - "external name wlr.\"getreplicatick\";\n" - "insert into sys.systemfunctions (select id from sys.functions where name in ('master', 'stopmaster', 'masterbeat', 'masterclock', 'mastertick', 'replicate', 'replicabeat', 'replicaclock', 'replicatick') and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n" - ); - - pos += snprintf(buf + pos, bufsize - pos, - "delete from sys.systemfunctions where function_id not in (select id from sys.functions);\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; /* usually MAL_SUCCEED */ -} - -static str sql_update_default_geom(Client c, mvc *sql, sql_table *t) { size_t bufsize = 10000, pos = 0; @@ -1036,184 +941,257 @@ sql_update_default_geom(Client c, mvc *s } static str -sql_remove_environment_func(Client c, mvc *sql) +sql_update_default(Client c, mvc *sql) { - sql_schema *s = NULL; - sql_table *t = NULL; - size_t bufsize = 1000, pos = 0; - char *buf = GDKmalloc(bufsize), *err = NULL; + size_t bufsize = 10000, pos = 0; + char *buf, *err; + char *schema; + sql_schema *s; + sql_table *t; + res_table *output; + BAT *b; + + buf = "select id from sys.functions where name = 'quarter' and schema_id = (select id from sys.schemas where name = 'sys');\n"; + err = SQLstatementIntern(c, &buf, "update", 1, 0, &output); + if (err) + return err; + b = BATdescriptor(output->cols[0].b); + if (b) { + if (BATcount(b) == 0) { + /* if there is no value "quarter" in + * sys.functions.name, we need to update the + * sys.functions table */ + err = sql_fix_system_tables(c, sql); + if (err != NULL) + return err; + } + BBPunfix(b->batCacheid); + } + res_tables_destroy(output); + + schema = stack_get_string(sql, "current_schema"); + buf = GDKmalloc(bufsize); if (buf== NULL) - throw(SQL, "sql_remove_environment_func", SQLSTATE(HY001) MAL_MALLOC_FAIL); + throw(SQL, "sql_update_default", SQLSTATE(HY001) MAL_MALLOC_FAIL); + pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); - /* because issueing sql: "drop view sys.environment cascade;" fails with with error: !SQLException:sql.drop_view:42000!DROP VIEW: cannot drop system view 'environment' - we need to drop the system view using internal function: mvc_drop_table() */ + /* 25_debug.sql */ s = mvc_bind_schema(sql, "sys"); t = mvc_bind_table(sql, s, "environment"); - mvc_drop_table(sql, s, t, 1); // drop the system view: sys.environment cascade - + t->system = 0; pos += snprintf(buf + pos, bufsize - pos, + "drop view sys.environment cascade;\n" "drop function sys.environment() cascade;\n" "create view sys.environment as select * from sys.env();\n" "GRANT SELECT ON sys.environment TO PUBLIC;\n" "update sys._tables set system = true where system = false and name = 'environment' and schema_id in (select id from sys.schemas where name = 'sys');\n"); + /* 39_analytics.sql, 39_analytics_hge.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "drop aggregate corr(tinyint, tinyint);\n" + "drop aggregate corr(smallint, smallint);\n" + "drop aggregate corr(integer, integer);\n" + "drop aggregate corr(bigint, bigint);\n" + "drop aggregate corr(real, real);\n"); +#ifdef HAVE_HGE + if (have_hge) + pos += snprintf(buf + pos, bufsize - pos, + "drop aggregate corr(hugeint, hugeint);\n"); +#endif + pos += snprintf(buf + pos, bufsize - pos, + "create aggregate corr(e1 TINYINT, e2 TINYINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(tinyint, tinyint) to public;\n" + "create aggregate corr(e1 SMALLINT, e2 SMALLINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(smallint, smallint) to public;\n" + "create aggregate corr(e1 INTEGER, e2 INTEGER) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(integer, integer) to public;\n" + "create aggregate corr(e1 BIGINT, e2 BIGINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(bigint, bigint) to public;\n" + "create aggregate corr(e1 REAL, e2 REAL) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(real, real) to public;\n"); +#ifdef HAVE_HGE + if (have_hge) + pos += snprintf(buf + pos, bufsize - pos, + "create aggregate corr(e1 HUGEINT, e2 HUGEINT) returns DOUBLE\n\texternal name \"aggr\".\"corr\";\n" + "grant execute on aggregate sys.corr(hugeint, hugeint) to public;\n"); +#endif + pos += snprintf(buf + pos, bufsize - pos, + "insert into sys.systemfunctions (select id from sys.functions where name = 'corr' and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n"); + + /* 46_profiler.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "create procedure profiler.sync() external name profiler.sync;\n" + "insert into sys.systemfunctions (select id from sys.functions where name = 'sync' and schema_id = (select id from sys.schemas where name = 'profiler') and id not in (select function_id from sys.systemfunctions));\n"); + + /* 60_wlcr.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "create procedure master()\n" + "external name wlc.master;\n" + "create procedure master(path string)\n" + "external name wlc.master;\n" + "create procedure stopmaster()\n" + "external name wlc.stopmaster;\n" + "create procedure masterbeat( duration int)\n" + "external name wlc.\"setmasterbeat\";\n" + "create function masterClock() returns string\n" + "external name wlc.\"getmasterclock\";\n" + "create function masterTick() returns bigint\n" + "external name wlc.\"getmastertick\";\n" + "create procedure replicate()\n" + "external name wlr.replicate;\n" + "create procedure replicate(pointintime timestamp)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string, pointintime timestamp)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string, id tinyint)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string, id smallint)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string, id integer)\n" + "external name wlr.replicate;\n" + "create procedure replicate(dbname string, id bigint)\n" + "external name wlr.replicate;\n" + "create procedure replicabeat(duration integer)\n" + "external name wlr.\"setreplicabeat\";\n" + "create function replicaClock() returns string\n" + "external name wlr.\"getreplicaclock\";\n" + "create function replicaTick() returns bigint\n" + "external name wlr.\"getreplicatick\";\n" + "insert into sys.systemfunctions (select id from sys.functions where name in ('master', 'stopmaster', 'masterbeat', 'masterclock', 'mastertick', 'replicate', 'replicabeat', 'replicaclock', 'replicatick') and schema_id = (select id from sys.schemas where name = 'sys') and id not in (select function_id from sys.systemfunctions));\n" + ); + + /* 97_comments */ + pos += snprintf(buf + pos, bufsize - pos, + "CREATE TABLE sys.comments (\n" + " id INTEGER NOT NULL PRIMARY KEY,\n" + " remark VARCHAR(65000) NOT NULL\n" + ");\n" + "GRANT SELECT ON sys.comments TO PUBLIC;\n" + "CREATE PROCEDURE sys.comment_on(obj_id INTEGER, obj_remark VARCHAR(65000))\n" + "BEGIN\n" + " IF obj_id IS NOT NULL AND obj_id > 0 THEN\n" + " IF obj_remark IS NULL OR obj_remark = '' THEN\n" + " DELETE FROM sys.comments WHERE id = obj_id;\n" + " ELSEIF EXISTS (SELECT id FROM sys.comments WHERE id = obj_id) THEN\n" + " UPDATE sys.comments SET remark = obj_remark WHERE id = obj_id;\n" + " ELSE\n" + " INSERT INTO sys.comments VALUES (obj_id, obj_remark);\n" + " END IF;\n" + " END IF;\n" + "END;\n" + "CREATE FUNCTION sys.function_type_keyword(ftype INT)\n" + "RETURNS VARCHAR(20)\n" + "BEGIN\n" + " RETURN CASE ftype\n" + " WHEN 1 THEN 'FUNCTION'\n" + " WHEN 2 THEN 'PROCEDURE'\n" + " WHEN 3 THEN 'AGGREGATE'\n" + " WHEN 4 THEN 'FILTER FUNCTION'\n" + " WHEN 5 THEN 'FUNCTION' -- table returning function\n" + " WHEN 6 THEN 'FUNCTION' -- analytic function\n" + " WHEN 7 THEN 'LOADER'\n" + " ELSE 'ROUTINE'\n" + " END;\n" + "END;\n" + "GRANT EXECUTE ON FUNCTION sys.function_type_keyword(INT) TO PUBLIC;\n" + "CREATE VIEW sys.describe_all_objects AS\n" + "SELECT s.name AS sname,\n" + " t.name,\n" + " s.name || '.' || t.name AS fullname,\n" + " CAST(CASE t.type\n" + " WHEN 1 THEN 2 -- ntype for views\n" + " ELSE 1 -- ntype for tables\n" + " END AS SMALLINT) AS ntype,\n" + " (CASE WHEN t.system THEN 'SYSTEM ' ELSE '' END) || tt.table_type_name AS type,\n" + " t.system,\n" + " c.remark AS remark\n" + " FROM sys._tables t\n" + " LEFT OUTER JOIN sys.comments c ON t.id = c.id\n" + " LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.id\n" + " LEFT OUTER JOIN sys.table_types tt ON t.type = tt.table_type_id\n" + "UNION ALL\n" + "SELECT s.name AS sname,\n" + " sq.name,\n" + " s.name || '.' || sq.name AS fullname,\n" + " CAST(4 AS SMALLINT) AS ntype,\n" + " 'SEQUENCE' AS type,\n" + " false AS system,\n" + " c.remark AS remark\n" + " FROM sys.sequences sq\n" + " LEFT OUTER JOIN sys.comments c ON sq.id = c.id\n" + " LEFT OUTER JOIN sys.schemas s ON sq.schema_id = s.id\n" _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list