Changeset: 02fa7ae3a58a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/02fa7ae3a58a
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/52_describe.sql
        sql/test/Dependencies/Tests/dependency_owner_schema_3.test
        sql/test/Tests/comment-dump.test
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
        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-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-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: Jan2022
Log Message:

Fix dumping of comments on functions: we need the argument types.


diffs (truncated from 1963 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
@@ -3480,6 +3480,8 @@ sql_update_jan2022(Client c, mvc *sql, c
        t->system = 0;
        t = mvc_bind_table(sql, s, "dump_user_defined_types");
        t->system = 0;
+       t = mvc_bind_table(sql, s, "fully_qualified_functions");
+       t->system = 0;
        pos += snprintf(buf + pos, bufsize - pos,
                                        /* drop dependant stuff from 
76_dump.sql */
                                        "drop function 
sys.dump_database(boolean);\n"
@@ -3509,6 +3511,7 @@ sql_update_jan2022(Client c, mvc *sql, c
                                        "drop view sys.describe_functions;\n"
                                        "drop view 
sys.describe_partition_tables;\n"
                                        "drop view sys.describe_privileges;\n"
+                                       "drop view 
sys.fully_qualified_functions;\n"
                                        "drop view sys.describe_comments;\n"
                                        "drop view sys.describe_tables;\n"
                                        "drop view sys.describe_sequences;\n"
@@ -3590,6 +3593,28 @@ sql_update_jan2022(Client c, mvc *sql, c
                                        "               AND s.id = 
t.schema_id\n"
                                        "               AND ts.table_type_id = 
t.type\n"
                                        "               AND s.name <> 'tmp';\n"
+                                       "CREATE VIEW 
sys.fully_qualified_functions AS\n"
+                                       "       WITH fqn(id, tpe, sig, num) 
AS\n"
+                                       "       (\n"
+                                       "               SELECT\n"
+                                       "                       f.id,\n"
+                                       "                       
ft.function_type_keyword,\n"
+                                       "                       CASE WHEN 
a.type IS NULL THEN\n"
+                                       "                               
sys.fqn(s.name, f.name) || '()'\n"
+                                       "                       ELSE\n"
+                                       "                               
sys.fqn(s.name, f.name) || '(' || group_concat(sys.describe_type(a.type, 
a.type_digits, a.type_scale), ',') OVER (PARTITION BY f.id ORDER BY a.number)  
|| ')'\n"
+                                       "                       END,\n"
+                                       "                       a.number\n"
+                                       "               FROM sys.schemas s, 
sys.function_types ft, sys.functions f LEFT JOIN sys.args a ON f.id = 
a.func_id\n"
+                                       "               WHERE s.id= f.schema_id 
AND f.type = ft.function_type_id\n"
+                                       "       )\n"
+                                       "       SELECT\n"
+                                       "               fqn1.id id,\n"
+                                       "               fqn1.tpe tpe,\n"
+                                       "               fqn1.sig nme\n"
+                                       "       FROM\n"
+                                       "               fqn fqn1 JOIN (SELECT 
id, max(num) FROM fqn GROUP BY id)  fqn2(id, num)\n"
+                                       "               ON fqn1.id = fqn2.id 
AND (fqn1.num = fqn2.num OR fqn1.num IS NULL AND fqn2.num is NULL);\n"
                                        "CREATE VIEW sys.describe_comments AS\n"
                                        "               SELECT\n"
                                        "                       o.id id,\n"
@@ -3609,7 +3634,7 @@ sql_update_jan2022(Client c, mvc *sql, c
                                        "                       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"
+                                       "                       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\n"
                                        "                       ) AS o(id, tpe, 
nme)\n"
                                        "                       JOIN 
sys.comments c ON c.id = o.id;\n"
                                        "CREATE VIEW sys.describe_privileges 
AS\n"
@@ -3800,7 +3825,7 @@ sql_update_jan2022(Client c, mvc *sql, c
        pos += snprintf(buf + pos, bufsize - pos,
                                        "update sys.functions set system = true 
where system <> true and name in ('sq', 'fqn', 
'get_merge_table_partition_expressions', 'get_remote_table_expressions', 
'schema_guard') and schema_id = 2000 and type = %d;\n", F_FUNC);
        pos += snprintf(buf + pos, bufsize - pos,
-                               "update sys._tables set system = true where 
name in ('describe_constraints', 'describe_tables', 'describe_comments', 
'describe_privileges', 'describe_partition_tables', 'describe_sequences', 
'describe_functions') AND schema_id = 2000;\n");
+                               "update sys._tables set system = true where 
name in ('describe_constraints', 'describe_tables', 
'fully_qualified_functions', 'describe_comments', 'describe_privileges', 
'describe_partition_tables', 'describe_sequences', 'describe_functions') AND 
schema_id = 2000;\n");
 
        /* 76_dump.sql (most everything already dropped) */
        pos += snprintf(buf + pos, bufsize - pos,
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
@@ -314,6 +314,29 @@ CREATE VIEW sys.describe_triggers AS
                FROM sys.schemas s, sys.tables t, sys.triggers tr
                WHERE s.id = t.schema_id AND t.id = tr.table_id AND NOT 
t.system;
 
+CREATE VIEW sys.fully_qualified_functions AS
+       WITH fqn(id, tpe, sig, num) AS
+       (
+               SELECT
+                       f.id,
+                       ft.function_type_keyword,
+                       CASE WHEN a.type IS NULL THEN
+                               sys.fqn(s.name, f.name) || '()'
+                       ELSE
+                               sys.fqn(s.name, f.name) || '(' || 
group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',') OVER 
(PARTITION BY f.id ORDER BY a.number)  || ')'
+                       END,
+                       a.number
+               FROM sys.schemas s, sys.function_types ft, sys.functions f LEFT 
JOIN sys.args a ON f.id = a.func_id
+               WHERE s.id= f.schema_id AND f.type = ft.function_type_id
+       )
+       SELECT
+               fqn1.id id,
+               fqn1.tpe tpe,
+               fqn1.sig nme
+       FROM
+               fqn fqn1 JOIN (SELECT id, max(num) FROM fqn GROUP BY id)  
fqn2(id, num)
+               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,
@@ -343,34 +366,11 @@ CREATE VIEW sys.describe_comments AS
 
                        UNION ALL
 
-                       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
+                       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;
 
-CREATE VIEW sys.fully_qualified_functions AS
-       WITH fqn(id, tpe, sig, num) AS
-       (
-               SELECT
-                       f.id,
-                       ft.function_type_keyword,
-                       CASE WHEN a.type IS NULL THEN
-                               s.name || '.' || f.name || '()'
-                       ELSE
-                               s.name || '.' || f.name || '(' || 
group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',') OVER 
(PARTITION BY f.id ORDER BY a.number)  || ')'
-                       END,
-                       a.number
-               FROM sys.schemas s, sys.function_types ft, sys.functions f LEFT 
JOIN sys.args a ON f.id = a.func_id
-               WHERE s.id= f.schema_id AND f.type = ft.function_type_id
-       )
-       SELECT
-               fqn1.id id,
-               fqn1.tpe tpe,
-               fqn1.sig nme
-       FROM
-               fqn fqn1 JOIN (SELECT id, max(num) FROM fqn GROUP BY id)  
fqn2(id, num)
-               ON fqn1.id = fqn2.id AND (fqn1.num = fqn2.num OR fqn1.num IS 
NULL AND fqn2.num is NULL);
-
 CREATE VIEW sys.describe_privileges AS
        SELECT
                CASE
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
@@ -48,7 +48,7 @@ DEP_SCHEMA
 query TTT rowsort
 SELECT t.name, v.name, 'DEP_VIEW' from sys.tables as t, sys.tables as v, 
sys.dependencies as dep where t.id = dep.id AND v.id = dep.depend_id AND 
dep.depend_type = 5 AND v.type in (1, 11, 21, 31) order by t.name, v.name
 ----
-648 values hashing to a0dd41998f637915834fcc0f7ec4984e
+651 values hashing to fcf545c1dde0da41e4ac6e7dd57e59fb
 
 query TTT rowsort
 SELECT t.name, i.name, 'DEP_INDEX' from sys.tables as t, sys.idxs as i where 
i.table_id = t.id and i.name not in (select name from sys.keys) and t.type in 
(0, 10, 20, 30) order by t.name, i.name
@@ -126,7 +126,7 @@ DEP_FUNC
 query TTT rowsort
 SELECT 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
 ----
-2274 values hashing to 4f9b4426928c74b12499a7975579a842
+2277 values hashing to be0394cfd4bbe2f3fb9af9fb43087e76
 
 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
@@ -68,7 +68,7 @@ statement ok
 COMMENT ON PROCEDURE g() IS 'proc'
 
 query T nosort
-select stmt from sys.dump_database(false) order by o
+select stmt from sys.dump_database(false) order by o, stmt
 ----
 START TRANSACTION;
 SET SCHEMA "sys";
@@ -84,16 +84,16 @@ create "foo"."f" unction "foo"."f" (i in
 create procedure "foo"."g" () be "foo"."g" in delete from tab where false; 
end@;
 UPDATE sys.sequences seq SET start = 1 WHERE name = 'counter' AND schema_id = 
(SELECT s.id FROM sys.schemas s WHERE s.name = 'foo');
 CREATE INDEX "idx" ON "foo"."tab"(j,i);
-COMMENT ON SCHEMA "foo" IS 'foo foo';
-COMMENT ON TABLE "foo"."tab" IS 'table';
-COMMENT ON VIEW "foo"."vivi" IS 'phew';
 COMMENT ON COLUMN "foo"."tab"."i" IS 'ii';
 COMMENT ON COLUMN "foo"."tab"."j" IS 'jj';
+COMMENT ON FUNCTION "foo"."f"(INTEGER) IS '0 parms';
+COMMENT ON FUNCTION "foo"."f"(INTEGER,INTEGER) IS '1 parm';
+COMMENT ON FUNCTION "foo"."f"(INTEGER,INTEGER,INTEGER) IS '2 parms';
 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 SEQUENCE "foo"."counter" IS 'counting';
-COMMENT ON FUNCTION "foo"."f" IS '2 parms';
-COMMENT ON FUNCTION "foo"."f" IS '1 parm';
-COMMENT ON FUNCTION "foo"."f" IS '0 parms';
-COMMENT ON PROCEDURE "foo"."g" IS 'proc';
+COMMENT ON TABLE "foo"."tab" IS 'table';
+COMMENT ON VIEW "foo"."vivi" IS 'phew';
 COMMIT;
 
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -5200,6 +5200,7 @@ drop view sys.dump_create_roles;
 drop view sys.describe_functions;
 drop view sys.describe_partition_tables;
 drop view sys.describe_privileges;
+drop view sys.fully_qualified_functions;
 drop view sys.describe_comments;
 drop view sys.describe_tables;
 drop view sys.describe_sequences;
@@ -5280,6 +5281,28 @@ CREATE VIEW sys.describe_tables AS
                AND s.id = t.schema_id
                AND ts.table_type_id = t.type
                AND s.name <> 'tmp';
+CREATE VIEW sys.fully_qualified_functions AS
+       WITH fqn(id, tpe, sig, num) AS
+       (
+               SELECT
+                       f.id,
+                       ft.function_type_keyword,
+                       CASE WHEN a.type IS NULL THEN
+                               sys.fqn(s.name, f.name) || '()'
+                       ELSE
+                               sys.fqn(s.name, f.name) || '(' || 
group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',') OVER 
(PARTITION BY f.id ORDER BY a.number)  || ')'
+                       END,
+                       a.number
+               FROM sys.schemas s, sys.function_types ft, sys.functions f LEFT 
JOIN sys.args a ON f.id = a.func_id
+               WHERE s.id= f.schema_id AND f.type = ft.function_type_id
+       )
+       SELECT
+               fqn1.id id,
+               fqn1.tpe tpe,
+               fqn1.sig nme
+       FROM
+               fqn fqn1 JOIN (SELECT id, max(num) FROM fqn GROUP BY id)  
fqn2(id, num)
+               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,
@@ -5299,7 +5322,7 @@ CREATE VIEW sys.describe_comments AS
                        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, 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
+                       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;
 CREATE VIEW sys.describe_privileges AS
@@ -5488,7 +5511,7 @@ GRANT SELECT ON sys.describe_partition_t
 GRANT SELECT ON sys.describe_sequences TO PUBLIC;
 GRANT SELECT ON sys.describe_functions TO PUBLIC;
 update sys.functions set system = true where system <> true and name in ('sq', 
'fqn', 'get_merge_table_partition_expressions', 'get_remote_table_expressions', 
'schema_guard') and schema_id = 2000 and type = 1;
-update sys._tables set system = true where name in ('describe_constraints', 
'describe_tables', 'describe_comments', 'describe_privileges', 
'describe_partition_tables', 'describe_sequences', 'describe_functions') AND 
schema_id = 2000;
+update sys._tables set system = true where name in ('describe_constraints', 
'describe_tables', 'fully_qualified_functions', 'describe_comments', 
'describe_privileges', 'describe_partition_tables', 'describe_sequences', 
'describe_functions') AND schema_id = 2000;
 CREATE VIEW sys.dump_create_roles AS
   SELECT
     'CREATE ROLE ' || sys.dq(name) || ';' stmt,
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -5271,6 +5271,7 @@ drop view sys.dump_create_roles;
 drop view sys.describe_functions;
 drop view sys.describe_partition_tables;
 drop view sys.describe_privileges;
+drop view sys.fully_qualified_functions;
 drop view sys.describe_comments;
 drop view sys.describe_tables;
 drop view sys.describe_sequences;
@@ -5351,6 +5352,28 @@ CREATE VIEW sys.describe_tables AS
                AND s.id = t.schema_id
                AND ts.table_type_id = t.type
                AND s.name <> 'tmp';
+CREATE VIEW sys.fully_qualified_functions AS
+       WITH fqn(id, tpe, sig, num) AS
+       (
+               SELECT
+                       f.id,
+                       ft.function_type_keyword,
+                       CASE WHEN a.type IS NULL THEN
+                               sys.fqn(s.name, f.name) || '()'
+                       ELSE
+                               sys.fqn(s.name, f.name) || '(' || 
group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',') OVER 
(PARTITION BY f.id ORDER BY a.number)  || ')'
+                       END,
+                       a.number
+               FROM sys.schemas s, sys.function_types ft, sys.functions f LEFT 
JOIN sys.args a ON f.id = a.func_id
+               WHERE s.id= f.schema_id AND f.type = ft.function_type_id
+       )
+       SELECT
+               fqn1.id id,
+               fqn1.tpe tpe,
+               fqn1.sig nme
+       FROM
+               fqn fqn1 JOIN (SELECT id, max(num) FROM fqn GROUP BY id)  
fqn2(id, num)
+               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,
@@ -5370,7 +5393,7 @@ CREATE VIEW sys.describe_comments AS
                        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, 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
+                       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;
 CREATE VIEW sys.describe_privileges AS
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to