Changeset: 9eed40e78256 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9eed40e78256
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.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-chain/Tests/upgrade.stable.out.ppc64
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.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.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.out
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: default
Log Message:

Upgrade code.


diffs (truncated from 12184 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
@@ -3496,17 +3496,9 @@ sql_update_default(Client c, mvc *sql, c
 
        pos = snprintf(buf, bufsize, "set schema \"sys\";\n");
 
-       /* 17_temporal.sql */
-       pos += snprintf(buf + pos, bufsize - pos,
-                                       "drop function sys.epoch(bigint);\n");
+       /* sys.epoch_ms now returns a decimal(18,3) */
        pos += snprintf(buf + pos, bufsize - pos,
-                                       "create function sys.epoch(sec 
DECIMAL(18,3)) "
-                                       "returns TIMESTAMP WITH TIME ZONE\n"
-                                       "external name mtime.epoch;\n"
-                                       "grant execute on function sys.epoch 
(DECIMAL(18,3)) to public;\n"
-                                       "update sys.functions set system = true 
where system <> true and name in ('epoch') and schema_id = 2000 and type = 
%d;\n", F_FUNC);
-
-       pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", 
prev_schema);
+                                       "update sys.args set type = 'decimal', 
type_digits = 18, type_scale = 3 where func_id in (select id from sys.functions 
where name = 'epoch_ms' and schema_id = 2000) and number = 0 and type = 
'bigint';\n");
 
        /* 16_tracelog */
        t = mvc_bind_table(sql, s, "tracelog");
@@ -3527,6 +3519,660 @@ sql_update_default(Client c, mvc *sql, c
                        "update sys.functions set system = true where system <> 
true and schema_id = 2000"
                        " and name = 'tracelog' and type = %d;\n", (int) 
F_UNION);
 
+       /* 17_temporal.sql */
+       pos += snprintf(buf + pos, bufsize - pos,
+                                       "drop function sys.epoch(bigint);\n");
+       pos += snprintf(buf + pos, bufsize - pos,
+                                       "create function sys.epoch(sec 
DECIMAL(18,3)) "
+                                       "returns TIMESTAMP WITH TIME ZONE\n"
+                                       "external name mtime.epoch;\n"
+                                       "grant execute on function sys.epoch 
(DECIMAL(18,3)) to public;\n"
+                                       "update sys.functions set system = true 
where system <> true and name in ('epoch') and schema_id = 2000 and type = 
%d;\n", F_FUNC);
+
+       pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", 
prev_schema);
+
+       /* 52_describe.sql; but we need to drop most everything from
+        * 76_dump.sql first */
+       t = mvc_bind_table(sql, s, "dump_privileges");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_user_defined_types");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_comments");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_triggers");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_tables");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_functions");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_start_sequences");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_sequences");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_partition_tables");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_foreign_keys");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_column_defaults");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_indices");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_table_constraint_type");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_grant_user_privileges");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_add_schemas_to_users");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_create_schemas");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_create_users");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_create_roles");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_constraints");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_tables");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_comments");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_privileges");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_partition_tables");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_functions");
+       t->system = 0;
+       pos += snprintf(buf + pos, bufsize - pos,
+                                       /* drop dependant stuff from 
76_dump.sql */
+                                       "drop function 
sys.dump_database(boolean);\n"
+                                       "drop procedure 
sys.dump_table_data();\n"
+                                       "drop procedure 
sys._dump_table_data(string, string);\n"
+                                       "drop function sys.prepare_esc(string, 
string);\n"
+                                       "drop function sys.esc(string);\n"
+                                       "drop view sys.dump_privileges;\n"
+                                       "drop view 
sys.dump_user_defined_types;\n"
+                                       "drop view sys.dump_comments;\n"
+                                       "drop view sys.dump_triggers;\n"
+                                       "drop view sys.dump_tables;\n"
+                                       "drop view sys.dump_functions;\n"
+                                       "drop view sys.dump_start_sequences;\n"
+                                       "drop view sys.dump_sequences;\n"
+                                       "drop view sys.dump_partition_tables;\n"
+                                       "drop view sys.dump_foreign_keys;\n"
+                                       "drop view sys.dump_column_defaults;\n"
+                                       "drop view sys.dump_indices;\n"
+                                       "drop view 
sys.dump_table_constraint_type;\n"
+                                       "drop view 
sys.dump_grant_user_privileges;\n"
+                                       "drop view 
sys.dump_add_schemas_to_users;\n"
+                                       "drop view sys.dump_create_schemas;\n"
+                                       "drop view sys.dump_create_users;\n"
+                                       "drop view sys.dump_create_roles;\n"
+
+                                       "drop view sys.describe_functions;\n"
+                                       "drop view 
sys.describe_partition_tables;\n"
+                                       "drop view sys.describe_privileges;\n"
+                                       "drop view sys.describe_comments;\n"
+                                       "drop view sys.describe_tables;\n"
+                                       "drop function 
sys.get_remote_table_expressions(string, string);\n"
+                                       "drop function 
sys.get_merge_table_partition_expressions(int);\n"
+                                       "drop view sys.describe_constraints;\n"
+                                       "drop function sys.alter_table(string, 
string);\n"
+                                       "drop function sys.sq(string);\n");
+       pos += snprintf(buf + pos, bufsize - pos,
+                                       "CREATE FUNCTION sys.SQ (s STRING) 
RETURNS STRING BEGIN RETURN '''' || sys.replace(s,'''','''''') || ''''; END;\n"
+                                       "CREATE FUNCTION sys.ALTER_TABLE(s 
STRING, t STRING) RETURNS STRING BEGIN RETURN 'ALTER TABLE ' || sys.FQN(s, t); 
END;\n"
+                                       "CREATE VIEW sys.describe_constraints 
AS\n"
+                                       "       SELECT\n"
+                                       "               s.name sch,\n"
+                                       "               t.name tbl,\n"
+                                       "               kc.name col,\n"
+                                       "               k.name con,\n"
+                                       "               CASE k.type WHEN 0 THEN 
'PRIMARY KEY' WHEN 1 THEN 'UNIQUE' END tpe\n"
+                                       "       FROM sys.schemas s, sys._tables 
t, sys.objects kc, sys.keys k\n"
+                                       "       WHERE kc.id = k.id\n"
+                                       "               AND k.table_id = t.id\n"
+                                       "               AND s.id = 
t.schema_id\n"
+                                       "               AND t.system = FALSE\n"
+                                       "               AND k.type in (0, 1);\n"
+                                       "CREATE FUNCTION 
sys.get_merge_table_partition_expressions(tid INT) RETURNS STRING\n"
+                                       "BEGIN\n"
+                                       "       RETURN\n"
+                                       "               SELECT\n"
+                                       "                       CASE WHEN 
tp.table_id IS NOT NULL THEN\n"
+                                       "                               ' 
PARTITION BY ' ||\n"
+                                       "                               
ifthenelse(bit_and(tp.type, 2) = 2, 'VALUES ', 'RANGE ') ||\n"
+                                       "                               CASE\n"
+                                       "                                       
WHEN bit_and(tp.type, 4) = 4\n"
+                                       "                                       
THEN 'ON ' || '(' || (SELECT sys.DQ(c.name) || ')' FROM sys.columns c WHERE 
c.id = tp.column_id)\n"
+                                       "                                       
ELSE 'USING ' || '(' || tp.expression || ')'\n"
+                                       "                               END\n"
+                                       "                       ELSE\n"
+                                       "                               ''\n"
+                                       "                       END\n"
+                                       "               FROM (VALUES (tid)) 
t(id) LEFT JOIN sys.table_partitions tp ON t.id = tp.table_id;\n"
+                                       "END;\n"
+                                       "CREATE FUNCTION 
sys.get_remote_table_expressions(s STRING, t STRING) RETURNS STRING BEGIN\n"
+                                       "       RETURN SELECT ' ON ' || 
sys.SQ(uri) || ' WITH USER ' || sys.SQ(username) || ' ENCRYPTED PASSWORD ' || 
sys.SQ(\"hash\") FROM sys.remote_table_credentials(s ||'.' || t);\n"
+                                       "END;\n"
+                                       "CREATE VIEW sys.describe_tables AS\n"
+                                       "       SELECT\n"
+                                       "               t.id o,\n"
+                                       "               s.name sch,\n"
+                                       "               t.name tab,\n"
+                                       "               ts.table_type_name 
typ,\n"
+                                       "               (SELECT\n"
+                                       "                       ' (' ||\n"
+                                       "                       GROUP_CONCAT(\n"
+                                       "                               
sys.DQ(c.name) || ' ' ||\n"
+                                       "                               
sys.describe_type(c.type, c.type_digits, c.type_scale) ||\n"
+                                       "                               
ifthenelse(c.\"null\" = 'false', ' NOT NULL', '')\n"
+                                       "                       , ', ') || 
')'\n"
+                                       "               FROM sys._columns c\n"
+                                       "               WHERE c.table_id = 
t.id) col,\n"
+                                       "               CASE 
ts.table_type_name\n"
+                                       "                       WHEN 'REMOTE 
TABLE' THEN\n"
+                                       "                               
sys.get_remote_table_expressions(s.name, t.name)\n"
+                                       "                       WHEN 'MERGE 
TABLE' THEN\n"
+                                       "                               
sys.get_merge_table_partition_expressions(t.id)\n"
+                                       "                       WHEN 'VIEW' 
THEN\n"
+                                       "                               
sys.schema_guard(s.name, t.name, t.query)\n"
+                                       "                       ELSE\n"
+                                       "                               ''\n"
+                                       "               END opt\n"
+                                       "       FROM sys.schemas s, 
sys.table_types ts, sys.tables t\n"
+                                       "       WHERE ts.table_type_name IN 
('TABLE', 'VIEW', 'MERGE TABLE', 'REMOTE TABLE', 'REPLICA TABLE')\n"
+                                       "               AND t.system = FALSE\n"
+                                       "               AND s.id = 
t.schema_id\n"
+                                       "               AND ts.table_type_id = 
t.type\n"
+                                       "               AND s.name <> 'tmp';\n"
+                                       "CREATE VIEW sys.describe_comments AS\n"
+                                       "               SELECT\n"
+                                       "                       o.id id,\n"
+                                       "                       o.tpe tpe,\n"
+                                       "                       o.nme fqn,\n"
+                                       "                       c.remark rem\n"
+                                       "               FROM (\n"
+                                       "                       SELECT id, 
'SCHEMA', sys.DQ(name) FROM sys.schemas\n"
+                                       "                       UNION ALL\n"
+                                       "                       SELECT t.id, 
ifthenelse(ts.table_type_name = 'VIEW', 'VIEW', 'TABLE'), sys.FQN(s.name, 
t.name)\n"
+                                       "                       FROM 
sys.schemas s JOIN sys.tables t ON s.id = t.schema_id JOIN sys.table_types ts 
ON t.type = ts.table_type_id\n"
+                                       "                       WHERE s.name <> 
'tmp'\n"
+                                       "                       UNION ALL\n"
+                                       "                       SELECT c.id, 
'COLUMN', sys.FQN(s.name, t.name) || '.' || sys.DQ(c.name) FROM sys.columns c, 
sys.tables t, sys.schemas s WHERE c.table_id = t.id AND t.schema_id = s.id\n"
+                                       "                       UNION ALL\n"
+                                       "                       SELECT idx.id, 
'INDEX', sys.FQN(s.name, idx.name) FROM sys.idxs idx, sys._tables t, 
sys.schemas s WHERE idx.table_id = t.id AND t.schema_id = s.id\n"
+                                       "                       UNION ALL\n"
+                                       "                       SELECT seq.id, 
'SEQUENCE', sys.FQN(s.name, seq.name) FROM sys.sequences seq, sys.schemas s 
WHERE seq.schema_id = s.id\n"
+                                       "                       UNION ALL\n"
+                                       "                       SELECT f.id, 
ft.function_type_keyword, sys.FQN(s.name, f.name) FROM sys.functions f, 
sys.function_types ft, sys.schemas s WHERE f.type = ft.function_type_id AND 
f.schema_id = s.id\n"
+                                       "                       ) AS o(id, tpe, 
nme)\n"
+                                       "                       JOIN 
sys.comments c ON c.id = o.id;\n"
+                                       "CREATE VIEW sys.describe_privileges 
AS\n"
+                                       "       SELECT\n"
+                                       "               CASE\n"
+                                       "                       WHEN o.tpe IS 
NULL AND pc.privilege_code_name = 'SELECT' THEN --GLOBAL privileges: SELECT 
maps to COPY FROM\n"
+                                       "                               'COPY 
FROM'\n"
+                                       "                       WHEN o.tpe IS 
NULL AND pc.privilege_code_name = 'UPDATE' THEN --GLOBAL privileges: UPDATE 
maps to COPY INTO\n"
+                                       "                               'COPY 
INTO'\n"
+                                       "                       ELSE\n"
+                                       "                               o.nme\n"
+                                       "               END o_nme,\n"
+                                       "               coalesce(o.tpe, 
'GLOBAL') o_tpe,\n"
+                                       "               pc.privilege_code_name 
p_nme,\n"
+                                       "               a.name a_nme,\n"
+                                       "               g.name g_nme,\n"
+                                       "               p.grantable grantable\n"
+                                       "       FROM\n"
+                                       "               sys.privileges p LEFT 
JOIN\n"
+                                       "               (\n"
+                                       "               SELECT t.id, s.name || 
'.' || t.name , 'TABLE'\n"
+                                       "                       from 
sys.schemas s, sys.tables t where s.id = t.schema_id\n"
+                                       "               UNION ALL\n"
+                                       "                       SELECT c.id, 
s.name || '.' || t.name || '.' || c.name, 'COLUMN'\n"
+                                       "                       FROM 
sys.schemas s, sys.tables t, sys.columns c where s.id = t.schema_id AND t.id = 
c.table_id\n"
+                                       "               UNION ALL\n"
+                                       "                       SELECT f.id, 
f.nme, f.tpe\n"
+                                       "                       FROM 
sys.fully_qualified_functions f\n"
+                                       "               ) o(id, nme, tpe) ON 
o.id = p.obj_id,\n"
+                                       "               sys.privilege_codes 
pc,\n"
+                                       "               auths a, auths g\n"
+                                       "       WHERE\n"
+                                       "               p.privileges = 
pc.privilege_code_id AND\n"
+                                       "               p.auth_id = a.id AND\n"
+                                       "               p.grantor = g.id;\n"
+                                       "CREATE VIEW 
sys.describe_partition_tables AS\n"
+                                       "       SELECT \n"
+                                       "               m_sch,\n"
+                                       "               m_tbl,\n"
+                                       "               p_sch,\n"
+                                       "               p_tbl,\n"
+                                       "               CASE\n"
+                                       "                       WHEN p_raw_type 
IS NULL THEN 'READ ONLY'\n"
+                                       "                       WHEN 
(p_raw_type = 'VALUES' AND pvalues IS NULL) OR (p_raw_type = 'RANGE' AND 
minimum IS NULL AND maximum IS NULL AND with_nulls) THEN 'FOR NULLS'\n"
+                                       "                       ELSE 
p_raw_type\n"
+                                       "               END AS tpe,\n"
+                                       "               pvalues,\n"
+                                       "               minimum,\n"
+                                       "               maximum,\n"
+                                       "               with_nulls\n"
+                                       "       FROM \n"
+                                       "    (WITH\n"
+                                       "               tp(\"type\", table_id) 
AS\n"
+                                       "               (SELECT 
ifthenelse((table_partitions.\"type\" & 2) = 2, 'VALUES', 'RANGE'), 
table_partitions.table_id FROM sys.table_partitions),\n"
+                                       "               subq(m_tid, p_mid, 
\"type\", m_sch, m_tbl, p_sch, p_tbl) AS\n"
+                                       "               (SELECT m_t.id, p_m.id, 
m_t.\"type\", m_s.name, m_t.name, p_s.name, p_m.name\n"
+                                       "               FROM sys.schemas m_s, 
sys._tables m_t, sys.dependencies d, sys.schemas p_s, sys._tables p_m\n"
+                                       "               WHERE m_t.\"type\" IN 
(3, 6)\n"
+                                       "                       AND 
m_t.schema_id = m_s.id\n"
+                                       "                       AND m_s.name <> 
'tmp'\n"
+                                       "                       AND m_t.system 
= FALSE\n"
+                                       "                       AND m_t.id = 
d.depend_id\n"
+                                       "                       AND d.id = 
p_m.id\n"
+                                       "                       AND 
p_m.schema_id = p_s.id\n"
+                                       "               ORDER BY m_t.id, 
p_m.id)\n"
+                                       "       SELECT\n"
+                                       "               subq.m_sch,\n"
+                                       "               subq.m_tbl,\n"
+                                       "               subq.p_sch,\n"
+                                       "               subq.p_tbl,\n"
+                                       "               tp.\"type\" AS 
p_raw_type,\n"
+                                       "               CASE WHEN tp.\"type\" = 
'VALUES'\n"
+                                       "                       THEN (SELECT 
GROUP_CONCAT(vp.value, ',') FROM sys.value_partitions vp WHERE vp.table_id = 
subq.p_mid)\n"
+                                       "                       ELSE NULL\n"
+                                       "               END AS pvalues,\n"
+                                       "               CASE WHEN tp.\"type\" = 
'RANGE'\n"
+                                       "                       THEN (SELECT 
minimum FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+                                       "                       ELSE NULL\n"
+                                       "               END AS minimum,\n"
+                                       "               CASE WHEN tp.\"type\" = 
'RANGE'\n"
+                                       "                       THEN (SELECT 
maximum FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+                                       "                       ELSE NULL\n"
+                                       "               END AS maximum,\n"
+                                       "               CASE WHEN tp.\"type\" = 
'VALUES'\n"
+                                       "                       THEN 
EXISTS(SELECT vp.value FROM sys.value_partitions vp WHERE vp.table_id = 
subq.p_mid AND vp.value IS NULL)\n"
+                                       "                       ELSE (SELECT 
rp.with_nulls FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+                                       "               END AS with_nulls\n"
+                                       "       FROM \n"
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to