Changeset: 50c69056b970 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/50c69056b970
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/21_dependency_views.sql
        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/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.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: Jul2021
Log Message:

Update sys.ids view to incorporate rows for merge table partitions.


diffs (truncated from 1359 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
@@ -3390,6 +3390,89 @@ bailout:
        return err;             /* usually MAL_SUCCEED */
 }
 
+/* upgrades after Jul2021_3 build */
+static str
+sql_update_jul2021_5(Client c, mvc *sql, const char *prev_schema, bool 
*systabfixed)
+{
+       size_t bufsize = 65536, pos = 0;
+       char *buf = NULL, *err = NULL;
+       res_table *output = NULL;
+       sql_schema *s = mvc_bind_schema(sql, "sys");
+       sql_table *t;
+
+       (void) systabfixed;
+
+       if ((buf = GDKmalloc(bufsize)) == NULL)
+               throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+       /* if the string 'partition of merge table' is not in the sys.ids
+        * query, upgrade */
+       pos += snprintf(buf + pos, bufsize - pos,
+                                       "select query from sys._tables where 
name = 'ids' and schema_id = 2000 and query like '%%partition of merge 
table%%';\n");
+       assert(pos < bufsize);
+       if ((err = SQLstatementIntern(c, buf, "update", true, false, &output)) 
== NULL) {
+               BAT *b;
+               if ((b = BATdescriptor(output->cols[0].b))) {
+                       if (BATcount(b) == 0) {
+                               pos = snprintf(buf, bufsize, "set schema 
\"sys\";\n");
+
+                               /* 21_dependency_views.sql */
+                               t = mvc_bind_table(sql, s, "ids");
+                               t->system = 0;  /* make it non-system else the 
drop view will fail */
+                               t = mvc_bind_table(sql, s, "dependencies_vw");
+                               t->system = 0;  /* make it non-system else the 
drop view will fail */
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                                               "drop view 
sys.dependencies_vw;\n"
+                                                               "drop view 
sys.ids;\n");
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                                               "CREATE VIEW 
sys.ids (id, name, schema_id, table_id, table_name, obj_type, sys_table) AS\n"
+                                                               "SELECT id, 
name, cast(null as int) as schema_id, cast(null as int) as table_id, cast(null 
as varchar(124)) as table_name, 'author' AS obj_type, 'sys.auths' AS sys_table 
FROM sys.auths UNION ALL\n"
+                                                               "SELECT id, 
name, cast(null as int) as schema_id, cast(null as int) as table_id, cast(null 
as varchar(124)) as table_name, 'schema', 'sys.schemas' FROM sys.schemas UNION 
ALL\n"
+                                                               "SELECT id, 
name, schema_id, id as table_id, name as table_name, case when type = 1 then 
'view' else 'table' end, 'sys._tables' FROM sys._tables UNION ALL\n"
+                                                               "SELECT id, 
name, schema_id, id as table_id, name as table_name, case when type = 1 then 
'view' else 'table' end, 'tmp._tables' FROM tmp._tables UNION ALL\n"
+                                                               "SELECT c.id, 
c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 'sys._columns' 
FROM sys._columns c JOIN sys._tables t ON c.table_id = t.id UNION ALL\n"
+                                                               "SELECT c.id, 
c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 'tmp._columns' 
FROM tmp._columns c JOIN tmp._tables t ON c.table_id = t.id UNION ALL\n"
+                                                               "SELECT k.id, 
k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 'sys.keys' FROM 
sys.keys k JOIN sys._tables t ON k.table_id = t.id UNION ALL\n"
+                                                               "SELECT k.id, 
k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 'tmp.keys' FROM 
tmp.keys k JOIN tmp._tables t ON k.table_id = t.id UNION ALL\n"
+                                                               "SELECT i.id, 
i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 'sys.idxs' FROM 
sys.idxs i JOIN sys._tables t ON i.table_id = t.id UNION ALL\n"
+                                                               "SELECT i.id, 
i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 'tmp.idxs' FROM 
tmp.idxs i JOIN tmp._tables t ON i.table_id = t.id UNION ALL\n"
+                                                               "SELECT g.id, 
g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'sys.triggers' FROM sys.triggers g JOIN sys._tables t ON g.table_id = t.id 
UNION ALL\n"
+                                                               "SELECT g.id, 
g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'tmp.triggers' FROM tmp.triggers g JOIN tmp._tables t ON g.table_id = t.id 
UNION ALL\n"
+                                                               "SELECT id, 
name, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as 
table_name, case when type = 2 then 'procedure' else 'function' end, 
'sys.functions' FROM sys.functions UNION ALL\n"
+                                                               "SELECT a.id, 
a.name, f.schema_id, cast(null as int) as table_id, cast(null as varchar(124)) 
as table_name, case when f.type = 2 then 'procedure arg' else 'function arg' 
end, 'sys.args' FROM sys.args a JOIN sys.functions f ON a.func_id = f.id UNION 
ALL\n"
+                                                               "SELECT id, 
name, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as 
table_name, 'sequence', 'sys.sequences' FROM sys.sequences UNION ALL\n"
+                                                               "SELECT o.id, 
o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 'sys.objects' 
FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN sys._tables mt ON 
o.nr = mt.id WHERE mt.type = 3 UNION ALL\n"
+                                                               "SELECT id, 
sqlname, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) 
as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 /* exclude 
system types to prevent duplicates with auths.id */\n"
+                                                               " ORDER BY 
id;\n"
+                                                               "GRANT SELECT 
ON sys.ids TO PUBLIC;\n");
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                                               "CREATE VIEW 
sys.dependencies_vw AS\n"
+                                                               "SELECT d.id, 
i1.obj_type, i1.name,\n"
+                                                               "       
d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name,\n"
+                                                               "       
d.depend_type, dt.dependency_type_name\n"
+                                                               "  FROM 
sys.dependencies d\n"
+                                                               "  JOIN sys.ids 
i1 ON d.id = i1.id\n"
+                                                               "  JOIN sys.ids 
i2 ON d.depend_id = i2.id\n"
+                                                               "  JOIN 
sys.dependency_types dt ON d.depend_type = dt.dependency_type_id\n"
+                                                               " ORDER BY id, 
depend_id;\n"
+                                                               "GRANT SELECT 
ON sys.dependencies_vw TO PUBLIC;\n");
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                                               "UPDATE 
sys._tables SET system = true WHERE name in ('ids', 'dependencies_vw') AND 
schema_id = 2000;\n");
+
+                               pos += snprintf(buf + pos, bufsize - pos, "set 
schema \"%s\";\n", prev_schema);
+                               assert(pos < bufsize);
+                               printf("Running database upgrade 
commands:\n%s\n", buf);
+                               err = SQLstatementIntern(c, buf, "update", 
true, false, NULL);
+                       }
+                       BBPunfix(b->batCacheid);
+               }
+               res_table_destroy(output);
+       }
+
+       GDKfree(buf);
+       return err;             /* usually MAL_SUCCEED */
+}
+
 int
 SQLupgrades(Client c, mvc *m)
 {
@@ -3634,6 +3717,13 @@ SQLupgrades(Client c, mvc *m)
                return -1;
        }
 
+       if ((err = sql_update_jul2021_5(c, m, prev_schema, &systabfixed)) != 
NULL) {
+               TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+               freeException(err);
+               GDKfree(prev_schema);
+               return -1;
+       }
+
        GDKfree(prev_schema);
        return 0;
 }
diff --git a/sql/scripts/21_dependency_views.sql 
b/sql/scripts/21_dependency_views.sql
--- a/sql/scripts/21_dependency_views.sql
+++ b/sql/scripts/21_dependency_views.sql
@@ -25,6 +25,7 @@ SELECT g.id, g.name, t.schema_id, g.tabl
 SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when type = 2 then 'procedure' else 
'function' end, 'sys.functions' FROM sys.functions UNION ALL
 SELECT a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 
'function arg' end, 'sys.args' FROM sys.args a JOIN sys.functions f ON 
a.func_id = f.id UNION ALL
 SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'sequence', 'sys.sequences' FROM sys.sequences 
UNION ALL
+SELECT o.id, o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 
'sys.objects' FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN 
sys._tables mt ON o.nr = mt.id WHERE mt.type = 3 UNION ALL
 SELECT id, sqlname, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 
/* exclude system types to prevent duplicates with auths.id */
  ORDER BY id;
 /* do not include: SELECT id, 'object', name FROM sys.objects; as it has 
duplicates with keys, columns, etc */
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -5077,3 +5077,40 @@ ALTER TABLE sys.table_types SET READ ONL
 ALTER TABLE sys.function_types SET READ ONLY;
 set schema "sys";
 
+Running database upgrade commands:
+set schema "sys";
+drop view sys.dependencies_vw;
+drop view sys.ids;
+CREATE VIEW sys.ids (id, name, schema_id, table_id, table_name, obj_type, 
sys_table) AS
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'author' AS obj_type, 
'sys.auths' AS sys_table FROM sys.auths UNION ALL
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'schema', 'sys.schemas' 
FROM sys.schemas UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'sys._tables' FROM sys._tables UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'tmp._tables' FROM tmp._tables UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'sys._columns' FROM sys._columns c JOIN sys._tables t ON c.table_id = t.id 
UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'tmp._columns' FROM tmp._columns c JOIN tmp._tables t ON c.table_id = t.id 
UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'sys.keys' FROM sys.keys k JOIN sys._tables t ON k.table_id = t.id UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'tmp.keys' FROM tmp.keys k JOIN tmp._tables t ON k.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'sys.idxs' FROM sys.idxs i JOIN sys._tables t ON i.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'tmp.idxs' FROM tmp.idxs i JOIN tmp._tables t ON i.table_id = t.id UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'sys.triggers' FROM sys.triggers g JOIN sys._tables t ON g.table_id = t.id 
UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'tmp.triggers' FROM tmp.triggers g JOIN tmp._tables t ON g.table_id = t.id 
UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when type = 2 then 'procedure' else 
'function' end, 'sys.functions' FROM sys.functions UNION ALL
+SELECT a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 
'function arg' end, 'sys.args' FROM sys.args a JOIN sys.functions f ON 
a.func_id = f.id UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'sequence', 'sys.sequences' FROM sys.sequences 
UNION ALL
+SELECT o.id, o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 
'sys.objects' FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN 
sys._tables mt ON o.nr = mt.id WHERE mt.type = 3 UNION ALL
+SELECT id, sqlname, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 
/* exclude system types to prevent duplicates with auths.id */
+ ORDER BY id;
+GRANT SELECT ON sys.ids TO PUBLIC;
+CREATE VIEW sys.dependencies_vw AS
+SELECT d.id, i1.obj_type, i1.name,
+       d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name,
+       d.depend_type, dt.dependency_type_name
+  FROM sys.dependencies d
+  JOIN sys.ids i1 ON d.id = i1.id
+  JOIN sys.ids i2 ON d.depend_id = i2.id
+  JOIN sys.dependency_types dt ON d.depend_type = dt.dependency_type_id
+ ORDER BY id, depend_id;
+GRANT SELECT ON sys.dependencies_vw TO PUBLIC;
+UPDATE sys._tables SET system = true WHERE name in ('ids', 'dependencies_vw') 
AND schema_id = 2000;
+set schema "sys";
+
diff --git 
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128 
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
@@ -5077,3 +5077,40 @@ ALTER TABLE sys.table_types SET READ ONL
 ALTER TABLE sys.function_types SET READ ONLY;
 set schema "sys";
 
+Running database upgrade commands:
+set schema "sys";
+drop view sys.dependencies_vw;
+drop view sys.ids;
+CREATE VIEW sys.ids (id, name, schema_id, table_id, table_name, obj_type, 
sys_table) AS
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'author' AS obj_type, 
'sys.auths' AS sys_table FROM sys.auths UNION ALL
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'schema', 'sys.schemas' 
FROM sys.schemas UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'sys._tables' FROM sys._tables UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'tmp._tables' FROM tmp._tables UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'sys._columns' FROM sys._columns c JOIN sys._tables t ON c.table_id = t.id 
UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'tmp._columns' FROM tmp._columns c JOIN tmp._tables t ON c.table_id = t.id 
UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'sys.keys' FROM sys.keys k JOIN sys._tables t ON k.table_id = t.id UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'tmp.keys' FROM tmp.keys k JOIN tmp._tables t ON k.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'sys.idxs' FROM sys.idxs i JOIN sys._tables t ON i.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'tmp.idxs' FROM tmp.idxs i JOIN tmp._tables t ON i.table_id = t.id UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'sys.triggers' FROM sys.triggers g JOIN sys._tables t ON g.table_id = t.id 
UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'tmp.triggers' FROM tmp.triggers g JOIN tmp._tables t ON g.table_id = t.id 
UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when type = 2 then 'procedure' else 
'function' end, 'sys.functions' FROM sys.functions UNION ALL
+SELECT a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 
'function arg' end, 'sys.args' FROM sys.args a JOIN sys.functions f ON 
a.func_id = f.id UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'sequence', 'sys.sequences' FROM sys.sequences 
UNION ALL
+SELECT o.id, o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 
'sys.objects' FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN 
sys._tables mt ON o.nr = mt.id WHERE mt.type = 3 UNION ALL
+SELECT id, sqlname, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 
/* exclude system types to prevent duplicates with auths.id */
+ ORDER BY id;
+GRANT SELECT ON sys.ids TO PUBLIC;
+CREATE VIEW sys.dependencies_vw AS
+SELECT d.id, i1.obj_type, i1.name,
+       d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name,
+       d.depend_type, dt.dependency_type_name
+  FROM sys.dependencies d
+  JOIN sys.ids i1 ON d.id = i1.id
+  JOIN sys.ids i2 ON d.depend_id = i2.id
+  JOIN sys.dependency_types dt ON d.depend_type = dt.dependency_type_id
+ ORDER BY id, depend_id;
+GRANT SELECT ON sys.dependencies_vw TO PUBLIC;
+UPDATE sys._tables SET system = true WHERE name in ('ids', 'dependencies_vw') 
AND schema_id = 2000;
+set schema "sys";
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
@@ -4482,3 +4482,40 @@ ALTER TABLE sys.table_types SET READ ONL
 ALTER TABLE sys.function_types SET READ ONLY;
 set schema "sys";
 
+Running database upgrade commands:
+set schema "sys";
+drop view sys.dependencies_vw;
+drop view sys.ids;
+CREATE VIEW sys.ids (id, name, schema_id, table_id, table_name, obj_type, 
sys_table) AS
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'author' AS obj_type, 
'sys.auths' AS sys_table FROM sys.auths UNION ALL
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'schema', 'sys.schemas' 
FROM sys.schemas UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'sys._tables' FROM sys._tables UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'tmp._tables' FROM tmp._tables UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'sys._columns' FROM sys._columns c JOIN sys._tables t ON c.table_id = t.id 
UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'tmp._columns' FROM tmp._columns c JOIN tmp._tables t ON c.table_id = t.id 
UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'sys.keys' FROM sys.keys k JOIN sys._tables t ON k.table_id = t.id UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'tmp.keys' FROM tmp.keys k JOIN tmp._tables t ON k.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'sys.idxs' FROM sys.idxs i JOIN sys._tables t ON i.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'tmp.idxs' FROM tmp.idxs i JOIN tmp._tables t ON i.table_id = t.id UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'sys.triggers' FROM sys.triggers g JOIN sys._tables t ON g.table_id = t.id 
UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'tmp.triggers' FROM tmp.triggers g JOIN tmp._tables t ON g.table_id = t.id 
UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when type = 2 then 'procedure' else 
'function' end, 'sys.functions' FROM sys.functions UNION ALL
+SELECT a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 
'function arg' end, 'sys.args' FROM sys.args a JOIN sys.functions f ON 
a.func_id = f.id UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'sequence', 'sys.sequences' FROM sys.sequences 
UNION ALL
+SELECT o.id, o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 
'sys.objects' FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN 
sys._tables mt ON o.nr = mt.id WHERE mt.type = 3 UNION ALL
+SELECT id, sqlname, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 
/* exclude system types to prevent duplicates with auths.id */
+ ORDER BY id;
+GRANT SELECT ON sys.ids TO PUBLIC;
+CREATE VIEW sys.dependencies_vw AS
+SELECT d.id, i1.obj_type, i1.name,
+       d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name,
+       d.depend_type, dt.dependency_type_name
+  FROM sys.dependencies d
+  JOIN sys.ids i1 ON d.id = i1.id
+  JOIN sys.ids i2 ON d.depend_id = i2.id
+  JOIN sys.dependency_types dt ON d.depend_type = dt.dependency_type_id
+ ORDER BY id, depend_id;
+GRANT SELECT ON sys.dependencies_vw TO PUBLIC;
+UPDATE sys._tables SET system = true WHERE name in ('ids', 'dependencies_vw') 
AND schema_id = 2000;
+set schema "sys";
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
@@ -4482,3 +4482,40 @@ ALTER TABLE sys.table_types SET READ ONL
 ALTER TABLE sys.function_types SET READ ONLY;
 set schema "sys";
 
+Running database upgrade commands:
+set schema "sys";
+drop view sys.dependencies_vw;
+drop view sys.ids;
+CREATE VIEW sys.ids (id, name, schema_id, table_id, table_name, obj_type, 
sys_table) AS
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'author' AS obj_type, 
'sys.auths' AS sys_table FROM sys.auths UNION ALL
+SELECT id, name, cast(null as int) as schema_id, cast(null as int) as 
table_id, cast(null as varchar(124)) as table_name, 'schema', 'sys.schemas' 
FROM sys.schemas UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'sys._tables' FROM sys._tables UNION ALL
+SELECT id, name, schema_id, id as table_id, name as table_name, case when type 
= 1 then 'view' else 'table' end, 'tmp._tables' FROM tmp._tables UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'sys._columns' FROM sys._columns c JOIN sys._tables t ON c.table_id = t.id 
UNION ALL
+SELECT c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 
'tmp._columns' FROM tmp._columns c JOIN tmp._tables t ON c.table_id = t.id 
UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'sys.keys' FROM sys.keys k JOIN sys._tables t ON k.table_id = t.id UNION ALL
+SELECT k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 
'tmp.keys' FROM tmp.keys k JOIN tmp._tables t ON k.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'sys.idxs' FROM sys.idxs i JOIN sys._tables t ON i.table_id = t.id UNION ALL
+SELECT i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 
'tmp.idxs' FROM tmp.idxs i JOIN tmp._tables t ON i.table_id = t.id UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'sys.triggers' FROM sys.triggers g JOIN sys._tables t ON g.table_id = t.id 
UNION ALL
+SELECT g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 
'tmp.triggers' FROM tmp.triggers g JOIN tmp._tables t ON g.table_id = t.id 
UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when type = 2 then 'procedure' else 
'function' end, 'sys.functions' FROM sys.functions UNION ALL
+SELECT a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 
'function arg' end, 'sys.args' FROM sys.args a JOIN sys.functions f ON 
a.func_id = f.id UNION ALL
+SELECT id, name, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'sequence', 'sys.sequences' FROM sys.sequences 
UNION ALL
+SELECT o.id, o.name, pt.schema_id, pt.id, pt.name, 'partition of merge table', 
'sys.objects' FROM sys.objects o JOIN sys._tables pt ON o.sub = pt.id JOIN 
sys._tables mt ON o.nr = mt.id WHERE mt.type = 3 UNION ALL
+SELECT id, sqlname, schema_id, cast(null as int) as table_id, cast(null as 
varchar(124)) as table_name, 'type', 'sys.types' FROM sys.types WHERE id > 2000 
/* exclude system types to prevent duplicates with auths.id */
+ ORDER BY id;
+GRANT SELECT ON sys.ids TO PUBLIC;
+CREATE VIEW sys.dependencies_vw AS
+SELECT d.id, i1.obj_type, i1.name,
+       d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name,
+       d.depend_type, dt.dependency_type_name
+  FROM sys.dependencies d
+  JOIN sys.ids i1 ON d.id = i1.id
+  JOIN sys.ids i2 ON d.depend_id = i2.id
+  JOIN sys.dependency_types dt ON d.depend_type = dt.dependency_type_id
+ ORDER BY id, depend_id;
+GRANT SELECT ON sys.dependencies_vw TO PUBLIC;
+UPDATE sys._tables SET system = true WHERE name in ('ids', 'dependencies_vw') 
AND schema_id = 2000;
+set schema "sys";
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -5151,3 +5151,40 @@ ALTER TABLE sys.table_types SET READ ONL
 ALTER TABLE sys.function_types SET READ ONLY;
 set schema "sys";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to