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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list