Changeset: 7eeb12bb2628 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7eeb12bb2628
Modified Files:
sql/backends/monet5/sql_upgrades.c
sql/scripts/52_describe.sql
sql/scripts/76_dump.sql
sql/test/Dependencies/Tests/dependency_owner_schema_3.test
sql/test/Tests/comment-dump.test
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/sql_dump/Tests/dump.test
Branch: default
Log Message:
Fix problem with view sys.describe_comments. It used to describe all comments,
even when the comment was defined on a system object.
This made it impossible to add comments for system objects in system scripts,
as done for new schema information_schema, see 91_information_schema.sql.
As msqldump program also never dumps comments of system objects, I changed view
sys.describe_comments to exclude comments from system objects.
diffs (truncated from 456 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
@@ -5861,8 +5861,9 @@ static str
sql_update_default(Client c, mvc *sql, sql_schema *s)
{
sql_subtype tp;
+ sql_schema *info;
char *err = NULL;
- sql_schema *info;
+ res_table *output = NULL;
sql_find_subtype(&tp, "varchar", 0, 0);
if (sql_bind_func(sql, s->base.name, "similarity", &tp, &tp, F_FUNC,
true)) {
@@ -5883,20 +5884,15 @@ sql_update_default(Client c, mvc *sql, s
" select\n"
" schemas.name as schema,\n"
" tables.name as table,\n"
- " table_types.table_type_name as table_type,\n"
- " privilege_codes.privilege_code_name as privs,\n"
- " privileges.privileges as privs_code\n"
- " from privileges\n"
- " join sys.roles\n"
- " on privileges.auth_id = roles.id\n"
- " join sys.tables\n"
- " on privileges.obj_id = tables.id\n"
- " join sys.table_types\n"
- " on tables.type = table_types.table_type_id\n"
- " join sys.schemas\n"
- " on tables.schema_id = schemas.id\n"
- " join sys.privilege_codes\n"
- " on privileges.privileges =
privilege_codes.privilege_code_id\n"
+ " tt.table_type_name as table_type,\n"
+ " pc.privilege_code_name as privs,\n"
+ " p.privileges as privs_code\n"
+ " from privileges p\n"
+ " join sys.roles on p.auth_id = roles.id\n"
+ " join sys.tables on p.obj_id = tables.id\n"
+ " join sys.table_types tt on tables.type = tt.table_type_id\n"
+ " join sys.schemas on tables.schema_id = schemas.id\n"
+ " join sys.privilege_codes on p.privileges =
pc.privilege_code_id\n"
" where roles.name = current_role;\n"
"GRANT SELECT ON sys.describe_accessible_tables TO PUBLIC;\n"
"update sys._tables set system = true where system <> true and
schema_id = 2000 and name = 'describe_accessible_tables';\n"
@@ -5919,6 +5915,91 @@ sql_update_default(Client c, mvc *sql, s
}
}
+ /* 52_describe.sql changes to update sys.describe_comments view */
+ if ((err = SQLstatementIntern(c, "select id from sys.tables where name
= 'describe_comments' and schema_id = 2000 and query like '% not t.system%';",
"update", true, false, &output)) == NULL) {
+ BAT *b;
+ if ((b = BBPquickdesc(output->cols[0].b)) && BATcount(b) == 0) {
+ sql_table *t;
+ /* set views internally to non-system to allow drop
commands to succeed without error */
+ if ((t = mvc_bind_table(sql, s, "describe_comments"))
!= NULL)
+ t->system = 0;
+ if ((t = mvc_bind_table(sql, s, "dump_comments")) !=
NULL)
+ t->system = 0;
+
+ const char *cmds =
+ "DROP FUNCTION IF EXISTS sys.dump_database(BOOLEAN)
CASCADE;\n"
+ "DROP VIEW IF EXISTS sys.dump_comments CASCADE;\n"
+ "DROP VIEW IF EXISTS sys.describe_comments CASCADE;\n"
+ "CREATE VIEW sys.describe_comments AS\n"
+ " SELECT o.id AS id, o.tpe AS tpe, o.nme AS fqn,
cm.remark AS rem\n"
+ " FROM (\n"
+ " SELECT id, 'SCHEMA', sys.DQ(name) FROM
sys.schemas WHERE NOT system\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 NOT t.system\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 NOT t.system AND 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 NOT t.system
AND 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,
qf.nme FROM sys.functions f, sys.function_types ft, sys.schemas s,
sys.fully_qualified_functions qf\n"
+ " WHERE NOT f.system AND f.type =
ft.function_type_id AND f.schema_id = s.id AND qf.id = f.id\n"
+ " ) AS o(id, tpe, nme)\n"
+ " JOIN sys.comments cm ON cm.id = o.id;\n"
+ "GRANT SELECT ON sys.describe_comments TO PUBLIC;\n"
+ "CREATE VIEW sys.dump_comments AS\n"
+ " SELECT 'COMMENT ON ' || c.tpe || ' ' || c.fqn || '
IS ' || sys.SQ(c.rem) || ';' stmt FROM sys.describe_comments c;\n"
+ "CREATE FUNCTION sys.dump_database(describe BOOLEAN)
RETURNS TABLE(o int, stmt STRING)\n"
+ "BEGIN\n"
+ " SET SCHEMA sys;\n"
+ " TRUNCATE sys.dump_statements;\n"
+ " INSERT INTO sys.dump_statements VALUES (1, 'START
TRANSACTION;');\n"
+ " INSERT INTO sys.dump_statements VALUES (2, 'SET
SCHEMA \"sys\";');\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_create_roles;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_create_users;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_create_schemas;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_user_defined_types;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_add_schemas_to_users;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_grant_user_privileges;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_sequences;\n"
+ " --functions and table-likes can be interdependent.
They should be inserted in the order of their catalogue id.\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(ORDER BY stmts.o), stmts.s\n"
+ " FROM (\n"
+ " SELECT f.o,
f.stmt FROM sys.dump_functions f\n"
+ " UNION ALL\n"
+ " SELECT t.o,
t.stmt FROM sys.dump_tables t\n"
+ " ) AS stmts(o, s);\n"
+ " IF NOT DESCRIBE THEN\n"
+ " CALL sys.dump_table_data();\n"
+ " END IF;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_start_sequences;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_column_defaults;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_table_constraint_type;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_indices;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_foreign_keys;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_partition_tables;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_triggers;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_comments;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_table_grants;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_column_grants;\n"
+ " INSERT INTO sys.dump_statements SELECT (SELECT
COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM
sys.dump_function_grants;\n"
+ " INSERT INTO sys.dump_statements VALUES ((SELECT
COUNT(*) FROM sys.dump_statements) + 1, 'COMMIT;');\n"
+ " RETURN sys.dump_statements;\n"
+ "END;\n"
+ "update sys._tables set system = true where schema_id =
2000 and name in ('describe_comments','dump_comments');\n"
+ "update sys.functions set system = true where system <>
true and schema_id = 2000 and name = 'dump_database' and type = 5;\n";
+
+ printf("Running database upgrade commands:\n%s\n",
cmds);
+ fflush(stdout);
+ err = SQLstatementIntern(c, cmds, "update", true,
false, NULL);
+ }
+ res_table_destroy(output);
+ output = NULL;
+ }
+
/* 91_information_schema.sql */
info = mvc_bind_schema(sql, "information_schema");
if (info == NULL) {
diff --git a/sql/scripts/52_describe.sql b/sql/scripts/52_describe.sql
--- a/sql/scripts/52_describe.sql
+++ b/sql/scripts/52_describe.sql
@@ -340,38 +340,24 @@ CREATE VIEW sys.fully_qualified_function
ON fqn1.id = fqn2.id AND (fqn1.num = fqn2.num OR fqn1.num IS
NULL AND fqn2.num is NULL);
CREATE VIEW sys.describe_comments AS
- SELECT
- o.id id,
- o.tpe tpe,
- o.nme fqn,
- c.remark rem
- FROM (
- SELECT id, 'SCHEMA', sys.DQ(name) FROM sys.schemas
-
- UNION ALL
-
- SELECT t.id, ifthenelse(ts.table_type_name = 'VIEW',
'VIEW', 'TABLE'), sys.FQN(s.name, t.name)
- 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
- WHERE s.name <> 'tmp'
-
- UNION ALL
-
- 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
-
- UNION ALL
-
- 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
-
- UNION ALL
-
- SELECT seq.id, 'SEQUENCE', sys.FQN(s.name, seq.name)
FROM sys.sequences seq, sys.schemas s WHERE seq.schema_id = s.id
-
- UNION ALL
-
- SELECT f.id, ft.function_type_keyword, qf.nme FROM
sys.functions f, sys.function_types ft, sys.schemas s,
sys.fully_qualified_functions qf WHERE f.type = ft.function_type_id AND
f.schema_id = s.id AND qf.id = f.id
-
- ) AS o(id, tpe, nme)
- JOIN sys.comments c ON c.id = o.id;
+ SELECT o.id AS id, o.tpe AS tpe, o.nme AS fqn, cm.remark AS rem
+ FROM (
+ SELECT id, 'SCHEMA', sys.DQ(name) FROM sys.schemas WHERE NOT
system
+ UNION ALL
+ SELECT t.id, ifthenelse(ts.table_type_name = 'VIEW', 'VIEW',
'TABLE'), sys.FQN(s.name, t.name)
+ 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
+ WHERE NOT t.system
+ UNION ALL
+ 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 NOT
t.system AND c.table_id = t.id AND t.schema_id = s.id
+ UNION ALL
+ SELECT idx.id, 'INDEX', sys.FQN(s.name, idx.name) FROM sys.idxs
idx, sys._tables t, sys.schemas s WHERE NOT t.system AND idx.table_id = t.id
AND t.schema_id = s.id
+ UNION ALL
+ SELECT seq.id, 'SEQUENCE', sys.FQN(s.name, seq.name) FROM
sys.sequences seq, sys.schemas s WHERE seq.schema_id = s.id
+ UNION ALL
+ SELECT f.id, ft.function_type_keyword, qf.nme FROM
sys.functions f, sys.function_types ft, sys.schemas s,
sys.fully_qualified_functions qf
+ WHERE NOT f.system AND f.type = ft.function_type_id AND
f.schema_id = s.id AND qf.id = f.id
+ ) AS o(id, tpe, nme)
+ JOIN sys.comments cm ON cm.id = o.id;
CREATE VIEW sys.describe_privileges AS
SELECT
@@ -605,20 +591,15 @@ CREATE VIEW sys.describe_accessible_tabl
SELECT
schemas.name AS schema,
tables.name AS table,
- table_types.table_type_name AS table_type,
- privilege_codes.privilege_code_name AS privs,
- privileges.privileges AS privs_code
- FROM privileges
- JOIN sys.roles
- ON privileges.auth_id = roles.id
- JOIN sys.tables
- ON privileges.obj_id = tables.id
- JOIN sys.table_types
- ON tables.type = table_types.table_type_id
- JOIN sys.schemas
- ON tables.schema_id = schemas.id
- JOIN sys.privilege_codes
- ON privileges.privileges = privilege_codes.privilege_code_id
+ tt.table_type_name AS table_type,
+ pc.privilege_code_name AS privs,
+ p.privileges AS privs_code
+ FROM privileges p
+ JOIN sys.roles ON p.auth_id = roles.id
+ JOIN sys.tables ON p.obj_id = tables.id
+ JOIN sys.table_types tt ON tables.type = tt.table_type_id
+ JOIN sys.schemas ON tables.schema_id = schemas.id
+ JOIN sys.privilege_codes pc ON p.privileges = pc.privilege_code_id
WHERE roles.name = current_role;
GRANT SELECT ON sys.describe_constraints TO PUBLIC;
diff --git a/sql/scripts/76_dump.sql b/sql/scripts/76_dump.sql
--- a/sql/scripts/76_dump.sql
+++ b/sql/scripts/76_dump.sql
@@ -352,7 +352,7 @@ BEGIN
INSERT INTO sys.dump_statements SELECT (SELECT COUNT(*) FROM
sys.dump_statements) + RANK() OVER(), stmt FROM sys.dump_function_grants;
--TODO Improve performance of dump_table_data.
- --TODO loaders ,procedures, window and filter sys.functions.
+ --TODO loaders, procedures, window and filter sys.functions.
--TODO look into order dependent group_concat
INSERT INTO sys.dump_statements VALUES ((SELECT COUNT(*) FROM
sys.dump_statements) + 1, 'COMMIT;');
diff --git a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
--- a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
+++ b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
@@ -666,9 +666,6 @@ tables
describe_column_defaults
DEP_VIEW
tables
-describe_comments
-DEP_VIEW
-tables
describe_privileges
DEP_VIEW
tables
@@ -823,7 +820,7 @@ DEP_FUNC
query TTT rowsort
SELECT distinct c.name, v.name, 'DEP_VIEW' from sys.columns as c, sys.tables
as v, sys.dependencies as dep where c.id = dep.id AND v.id = dep.depend_id AND
dep.depend_type = 5 AND v.type in (1, 11, 21, 31) order by c.name, v.name
----
-1620 values hashing to 29d0134221c10cbcbdf5930e29ab53d1
+1623 values hashing to 6b21bdd80c4e73ef598244a23a31446a
query TTT rowsort
SELECT c.name, k.name, 'DEP_KEY' from sys.columns as c, sys.objects as kc,
sys.keys as k where kc."name" = c.name AND kc.id = k.id AND k.table_id =
c.table_id AND k.rkey = -1 order by c.name, k.name
diff --git a/sql/test/Tests/comment-dump.test b/sql/test/Tests/comment-dump.test
--- a/sql/test/Tests/comment-dump.test
+++ b/sql/test/Tests/comment-dump.test
@@ -96,7 +96,6 @@ COMMENT ON FUNCTION "foo"."f"(INTEGER,IN
COMMENT ON INDEX "foo"."idx" IS 'index on j';
COMMENT ON PROCEDURE "foo"."g"() IS 'proc';
COMMENT ON SCHEMA "foo" IS 'foo foo';
-COMMENT ON SCHEMA "information_schema" IS 'ISO/IEC 9075-11 SQL/Schemata';
COMMENT ON SEQUENCE "foo"."counter" IS 'counting';
COMMENT ON TABLE "foo"."tab" IS 'table';
COMMENT ON VIEW "foo"."sel" IS 'phew';
diff --git a/sql/test/emptydb/Tests/check.stable.out
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -486,9 +486,9 @@ select 'null in fkeys.delete_action', de
[ "sys._tables", "sys", "dependency_views_on_functions", "create
view sys.dependency_views_on_functions as select v.schema_id as view_schema_id,
v.id as view_id, v.name as view_name, f.id as function_id, f.name as
function_name, f.type as function_type, dep.depend_type as depend_type from
sys.functions as f, sys.tables as v, sys.dependencies as dep where v.id =
dep.id and f.id = dep.depend_id and dep.depend_type = 7 and f.type <> 2 and
v.type in (1, 11) order by v.name, v.schema_id, f.name, f.id;", "VIEW", true,
"COMMIT", "WRITABLE", NULL ]
[ "sys._tables", "sys", "dependency_views_on_procedures", "create
view sys.dependency_views_on_procedures as select v.schema_id as
view_schema_id, v.id as view_id, v.name as view_name, p.id as procedure_id,
p.name as procedure_name, p.type as procedure_type, dep.depend_type as
depend_type from sys.functions as p, sys.tables as v, sys.dependencies as dep
where v.id = dep.id and p.id = dep.depend_id and dep.depend_type = 13 and
p.type = 2 and v.type in (1, 11) order by v.name, v.schema_id, p.name, p.id;",
"VIEW", true, "COMMIT", "WRITABLE", NULL ]
[ "sys._tables", "sys", "dependency_views_on_views", "create view
sys.dependency_views_on_views as select v1.schema_id as view1_schema_id, v1.id
as view1_id, v1.name as view1_name, v2.schema_id as view2_schema_id, v2.id as
view2_id, v2.name as view2_name, dep.depend_type as depend_type from sys.tables
as v1, sys.tables as v2, sys.dependencies as dep where v1.id = dep.id and v2.id
= dep.depend_id and dep.depend_type = 5 and v1.type in (1, 11) and v2.type in
(1, 11) order by v1.schema_id, v1.name, v2.schema_id, v2.name;", "VIEW",
true, "COMMIT", "WRITABLE", NULL ]
-[ "sys._tables", "sys", "describe_accessible_tables", "create view
sys.describe_accessible_tables as select schemas.name as schema, tables.name as
table, table_types.table_type_name as table_type,
privilege_codes.privilege_code_name as privs, privileges.privileges as
privs_code from privileges join sys.roles on privileges.auth_id = roles.id join
sys.tables on privileges.obj_id = tables.id join sys.table_types on tables.type
= table_types.table_type_id join sys.schemas on tables.schema_id = schemas.id
join sys.privilege_codes on privileges.privileges =
privilege_codes.privilege_code_id where roles.name = current_role;", "VIEW",
true, "COMMIT", "WRITABLE", NULL ]
+[ "sys._tables", "sys", "describe_accessible_tables", "create view
sys.describe_accessible_tables as select schemas.name as schema, tables.name as
table, tt.table_type_name as table_type, pc.privilege_code_name as privs,
p.privileges as privs_code from privileges p join sys.roles on p.auth_id =
roles.id join sys.tables on p.obj_id = tables.id join sys.table_types tt on
tables.type = tt.table_type_id join sys.schemas on tables.schema_id =
schemas.id join sys.privilege_codes pc on p.privileges = pc.privilege_code_id
where roles.name = current_role;", "VIEW", true, "COMMIT",
"WRITABLE", NULL ]
[ "sys._tables", "sys", "describe_column_defaults", "create view
sys.describe_column_defaults as select s.name sch, t.name tbl, c.name col,
c.\"default\" def from sys.schemas s, sys.tables t, sys.columns c where s.id =
t.schema_id and t.id = c.table_id and s.name <> 'tmp' and not t.system and
c.\"default\" is not null;", "VIEW", true, "COMMIT", "WRITABLE",
NULL ]
-[ "sys._tables", "sys", "describe_comments", "create view
sys.describe_comments as select o.id id, o.tpe tpe, o.nme fqn, c.remark rem
from (select id, 'SCHEMA', sys.dq(name) from sys.schemas union all select t.id,
ifthenelse(ts.table_type_name = 'VIEW', 'VIEW', 'TABLE'), sys.fqn(s.name,
t.name) 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 where s.name <> 'tmp' union all
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 union all 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 union all select seq.id, 'SEQUENCE', sys.fqn(s.name,
seq.name) from sys.sequences seq, sys.schemas s where seq.schema_id = s.id
union all select f.id, ft.function_type_keyword, qf.nme from sys.functions f,
sys.function_types ft, sys.
schemas s, sys.fully_qualified_functions qf where f.type = ft.function_type_id
and f.schema_id = s.id and qf.id = f.id) as o(id, tpe, nme) join sys.comments c
on c.id = o.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL
]
+[ "sys._tables", "sys", "describe_comments", "create view
sys.describe_comments as select o.id as id, o.tpe as tpe, o.nme as fqn,
cm.remark as rem from (select id, 'SCHEMA', sys.dq(name) from sys.schemas where
not system union all select t.id, ifthenelse(ts.table_type_name = 'VIEW',
'VIEW', 'TABLE'), sys.fqn(s.name, t.name) 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
where not t.system union all 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
not t.system and c.table_id = t.id and t.schema_id = s.id union all select
idx.id, 'INDEX', sys.fqn(s.name, idx.name) from sys.idxs idx, sys._tables t,
sys.schemas s where not t.system and idx.table_id = t.id and t.schema_id = s.id
union all select seq.id, 'SEQUENCE', sys.fqn(s.name, seq.name) from
sys.sequences seq, sys.schemas s where seq.schema_id = s.id union all select
f.id, ft.function_type_ke
yword, qf.nme from sys.functions f, sys.function_types ft, sys.schemas s,
sys.fully_qualified_functions qf where not f.system and f.type =
ft.function_type_id and f.schema_id = s.id and qf.id = f.id) as o(id, tpe, nme)
join sys.comments cm on cm.id = o.id;", "VIEW", true, "COMMIT",
"WRITABLE", NULL ]
[ "sys._tables", "sys", "describe_constraints", "create view
sys.describe_constraints as select s.name sch, t.name tbl, kc.name col, k.name
con, case k.type when 0 then 'PRIMARY KEY' when 1 then 'UNIQUE' end tpe from
sys.schemas s, sys._tables t, sys.objects kc, sys.keys k where kc.id = k.id and
k.table_id = t.id and s.id = t.schema_id and t.system = false and k.type in (0,
1);", "VIEW", true, "COMMIT", "WRITABLE", NULL ]
[ "sys._tables", "sys", "describe_foreign_keys", "create view
sys.describe_foreign_keys as with action_type (id, act) as (values (0, 'NO
ACTION'), (1, 'CASCADE'), (2, 'RESTRICT'), (3, 'SET NULL'), (4, 'SET DEFAULT'))
select fs.name fk_s, fkt.name fk_t, fkkc.name fk_c, fkkc.nr o, fkk.name fk,
ps.name pk_s, pkt.name pk_t, pkkc.name pk_c, ou.act on_update, od.act on_delete
from sys._tables fkt, sys.objects fkkc, sys.keys fkk, sys._tables pkt,
sys.objects pkkc, sys.keys pkk, sys.schemas ps, sys.schemas fs, action_type ou,
action_type od where fkt.id = fkk.table_id and pkt.id = pkk.table_id and fkk.id
= fkkc.id and pkk.id = pkkc.id and fkk.rkey = pkk.id and fkkc.nr = pkkc.nr and
pkt.schema_id = ps.id and fkt.schema_id = fs.id and (fkk.\"action\" & 255) =
od.id and ((fkk.\"action\" >> 8) & 255) = ou.id order by fkk.name, fkkc.nr;",
"VIEW", true, "COMMIT", "WRITABLE", NULL ]
[ "sys._tables", "sys", "describe_functions", "create view
sys.describe_functions as with func_args_all(func_id, number, max_number,
func_arg) as (select func_id, number, max(number) over (partition by func_id
order by number desc), group_concat(sys.dq(name) || ' ' ||
sys.describe_type(type, type_digits, type_scale),', ') over (partition by
func_id order by number) from sys.args where inout = 1), func_args(func_id,
func_arg) as (select func_id, func_arg from func_args_all where number =
max_number), func_rets_all(func_id, number, max_number, func_ret,
func_ret_type) as (select func_id, number, max(number) over (partition by
func_id order by number desc), group_concat(sys.dq(name) || ' ' ||
sys.describe_type(type, type_digits, type_scale),', ') over (partition by
func_id order by number), group_concat(sys.describe_type(type, type_digits,
type_scale),', ') over (partition by func_id order by number) from sys.args
where inout = 0), func_rets(func_id, func_ret, func_ret_type) as (select
func_id, func_ret, func_ret_type from func_rets_all where number =
max_number) select f.id o, s.name sch, f.name fun, case when f.language in (1,
2) then f.func else 'CREATE ' || ft.function_type_keyword || ' ' ||
sys.fqn(s.name, f.name) || '(' || coalesce(fa.func_arg, '') || ')' || case when
f.type = 5 then ' RETURNS TABLE (' || coalesce(fr.func_ret, '') || ')' when
f.type in (1,3) then ' RETURNS ' || fr.func_ret_type else '' end || case when
fl.language_keyword is null then '' else ' LANGUAGE ' || fl.language_keyword
end || ' ' || f.func end def from sys.functions f left outer join func_args fa
on fa.func_id = f.id left outer join func_rets fr on fr.func_id = f.id join
sys.schemas s on f.schema_id = s.id join sys.function_types ft on f.type =
ft.function_type_id left outer join sys.function_languages fl on f.language =
fl.language_id where s.name <> 'tmp' and not f.system;", "VIEW", true,
"COMMIT", "WRITABLE", NULL ]
@@ -3169,7 +3169,6 @@ select 'null in fkeys.delete_action', de
[ "table used by view", "sys", "schemas", "sys",
"describe_comments", "VIEW" ]
[ "table used by view", "sys", "sequences", "sys",
"describe_comments", "VIEW" ]
[ "table used by view", "sys", "table_types", "sys",
"describe_comments", "VIEW" ]
-[ "table used by view", "sys", "tables", "sys",
"describe_comments", "VIEW" ]
[ "table used by view", "sys", "_tables", "sys",
"describe_constraints", "VIEW" ]
[ "table used by view", "sys", "keys", "sys", "describe_constraints",
"VIEW" ]
[ "table used by view", "sys", "objects", "sys",
"describe_constraints", "VIEW" ]
@@ -3629,7 +3628,10 @@ select 'null in fkeys.delete_action', de
[ "column used by view", "sys", "tables", "schema_id", "sys",
"describe_column_defaults", "VIEW" ]
[ "column used by view", "sys", "tables", "system", "sys",
"describe_column_defaults", "VIEW" ]
[ "column used by view", "sys", "_tables", "id", "sys",
"describe_comments", "VIEW" ]
+[ "column used by view", "sys", "_tables", "name", "sys",
"describe_comments", "VIEW" ]
[ "column used by view", "sys", "_tables", "schema_id", "sys",
"describe_comments", "VIEW" ]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]