Changeset: 5ef0326d8cdf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ef0326d8cdf
Modified Files:
        dump_output.sql
        sql/scripts/76_dump.sql
Branch: monetdbe-proxy
Log Message:

Use views instead functions where possible.


diffs (267 lines):

diff --git a/dump_output.sql b/dump_output.sql
--- a/dump_output.sql
+++ b/dump_output.sql
@@ -86,12 +86,12 @@ COMMENT ON INDEX "sys"."ind3" IS  'This 
 COMMENT ON SEQUENCE "sys"."seq1" IS  'This is a comment on a sequence.' ;
 COMMENT ON WINDOW "sys"."stddev" IS  'This is a comment on a window function.' 
;
 TRUNCATE sys.privileges;
-INSERT INTO sys.privileges VALUES ((SELECT t.id FROM sys.schemas s, tables t 
WHERE s.id = t.schema_id AND s.name || '.' || t.name = 'sys.foo' ),(SELECT id 
FROM auths a WHERE a.name =  'voc' ),(SELECT pc.privilege_code_id FROM 
privilege_codes pc WHERE pc.privilege_code_name =  'SELECT' ),(SELECT id FROM 
auths g WHERE g.name =  'monetdb' ),false);
-INSERT INTO sys.privileges VALUES ((SELECT c.id FROM sys.schemas s, tables t, 
columns c WHERE s.id = t.schema_id AND t.id = c.table_id AND s.name || '.' || 
t.name || '.' || c.name = 'sys.foo.i' ),(SELECT id FROM auths a WHERE a.name =  
'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE 
pc.privilege_code_name =  'UPDATE' ),(SELECT id FROM auths g WHERE g.name =  
'monetdb' ),false);
-INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1(INTEGER)'  AND fqn.tpe = 
 'FUNCTION' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),false);
-INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1(INTEGER)'  AND fqn.tpe = 
 'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),false);
-INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1()'  AND fqn.tpe =  
'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),true);
-INSERT INTO sys.privileges VALUES (0,(SELECT id FROM auths a WHERE a.name =  
'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE 
pc.privilege_code_name =  'UPDATE' ),(SELECT id FROM auths g WHERE g.name =  
'monetdb' ),false);
+INSERT INTO sys.privileges VALUES ((SELECT t.id FROM sys.schemas s, tables t 
WHERE s.id = t.schema_id AND s.name || '.' || t.name = 'sys.foo' ),(SELECT id 
FROM auths a WHERE a.name =  'voc' ),(SELECT pc.privilege_code_id FROM 
privilege_codes pc WHERE pc.privilege_code_name =  'SELECT' ),(SELECT id FROM 
auths g WHERE g.name =  'monetdb' ),0);
+INSERT INTO sys.privileges VALUES ((SELECT c.id FROM sys.schemas s, tables t, 
columns c WHERE s.id = t.schema_id AND t.id = c.table_id AND s.name || '.' || 
t.name || '.' || c.name = 'sys.foo.i' ),(SELECT id FROM auths a WHERE a.name =  
'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE 
pc.privilege_code_name =  'UPDATE' ),(SELECT id FROM auths g WHERE g.name =  
'monetdb' ),0);
+INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1(INTEGER)'  AND fqn.tpe = 
 'FUNCTION' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),0);
+INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1(INTEGER)'  AND fqn.tpe = 
 'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),0);
+INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM 
fully_qualified_functions fqn WHERE fqn.nme =  'sys.f1()'  AND fqn.tpe =  
'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name =  'voc' ),(SELECT 
pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name =  
'EXECUTE' ),(SELECT id FROM auths g WHERE g.name =  'monetdb' ),1);
+INSERT INTO sys.privileges VALUES (0,(SELECT id FROM auths a WHERE a.name =  
'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE 
pc.privilege_code_name =  'UPDATE' ),(SELECT id FROM auths g WHERE g.name =  
'monetdb' ),0);
 COPY 3 RECORDS INTO "sys"."tbl_with_data"("c1", "c2", "c3", "c4", "c5", "c6", 
"c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c18", "c19", "c20", 
"c21", "c22", "c23", "c24", "c25", "c26", "c27", "c28", "c29", "c30", "c31", 
"c32", "c33") FROM STDIN USING DELIMITERS '|','\n','"';
 1234|5678|90|true|"Hello\n \\|\" 
World"|2020-12-20|10.000|1023.345|12345|123.45|1123.455|1122133.5|121233.45|"POINT
 (5.1 
34.5)"|2000|4000|8000|65333.414|8000.000|4000.000|2000.000|1000.000|14:18:18|2015-05-22
 14:18:17.780331|2015-05-22 00:00:00.00|2015-05-22 
13:18:17.780331+01:00|"{\"price\":9}"|10.1.0.0/16|"https://m...@www.monetdb.org:458/Doc/Abc.html?lang=nl&sort=asc#example";|65950c76-a2f6-4543-660a-b849cf5f2453
 
null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null|null
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
@@ -1,3 +1,40 @@
+CREATE VIEW dump_create_roles AS
+       SELECT
+               'CREATE ROLE ' || sys.dq(name) || ';' stmt FROM sys.auths
+       WHERE name NOT IN (SELECT name FROM sys.db_user_info)
+       AND grantor <> 0;
+
+CREATE VIEW dump_create_users AS
+       SELECT
+               'CREATE USER ' ||  sys.dq(ui.name) ||  ' WITH ENCRYPTED 
PASSWORD ' ||
+               sys.sq(sys.password_hash(ui.name)) ||
+       ' NAME ' || sys.sq(ui.fullname) ||  ' SCHEMA sys;' stmt
+       FROM sys.db_user_info ui, sys.schemas s
+       WHERE ui.default_schema = s.id
+               AND ui.name <> 'monetdb'
+               AND ui.name <> '.snapshot';
+
+CREATE VIEW dump_create_schemas AS
+       SELECT
+               'CREATE SCHEMA ' ||  sys.dq(s.name) || ifthenelse(a.name <> 
'sysadmin', ' AUTHORIZATION ' || a.name, ' ') || ';' stmt
+       FROM sys.schemas s, sys.auths a
+       WHERE s.authorization = a.id AND s.system = FALSE;
+
+CREATE VIEW dump_add_schemas_to_users AS
+       SELECT
+               'ALTER USER ' || sys.dq(ui.name) || ' SET SCHEMA ' || 
sys.dq(s.name) || ';' stmt
+       FROM sys.db_user_info ui, sys.schemas s
+       WHERE ui.default_schema = s.id
+               AND ui.name <> 'monetdb'
+               AND ui.name <> '.snapshot'
+               AND s.name <> 'sys';
+
+CREATE VIEW dump_grant_user_priviledges AS
+       SELECT
+               'GRANT ' || sys.dq(a2.name) || ' ' || ifthenelse(a1.name = 
'public', 'PUBLIC', sys.dq(a1.name)) || ';' stmt
+       FROM sys.auths a1, sys.auths a2, sys.user_role ur
+       WHERE a1.id = ur.login_id AND a2.id = ur.role_id;
+
 CREATE VIEW dump_table_constraint_type AS
        SELECT
                'ALTER TABLE ' || DQ(s) || '.' || DQ("table") ||
@@ -16,7 +53,7 @@ CREATE VIEW dump_column_defaults AS
        SELECT 'ALTER TABLE ' || FQN(sch, tbl) || ' ALTER COLUMN ' || DQ(col) 
|| ' SET DEFAULT ' || def || ';' stmt
        FROM describe_column_defaults;
 
-CREATE FUNCTION dump_foreign_keys AS
+CREATE VIEW dump_foreign_keys AS
        SELECT
                'ALTER TABLE ' || DQ(fk_s) || '.'|| DQ(fk_t) || ' ADD 
CONSTRAINT ' || DQ(fk) || ' ' ||
                'FOREIGN KEY(' || GROUP_CONCAT(DQ(fk_c), ',') ||') ' ||
@@ -25,7 +62,7 @@ CREATE FUNCTION dump_foreign_keys AS
                ';' stmt
        FROM describe_foreign_keys GROUP BY fk_s, fk_t, pk_s, pk_t, fk, 
on_delete, on_update;
 
-CREATE FUNCTION dump_partition_tables AS
+CREATE VIEW dump_partition_tables AS
        SELECT
                ALTER_TABLE(m_sname, m_tname) || ' ADD TABLE ' || FQN(p_sname, 
p_tname) ||
                CASE 
@@ -38,8 +75,7 @@ CREATE FUNCTION dump_partition_tables AS
                ';' stmt
        FROM describe_partition_tables;
 
-CREATE FUNCTION dump_sequences() RETURNS TABLE(stmt STRING) BEGIN
-RETURN
+CREATE VIEW dump_sequences AS
        SELECT
                'CREATE SEQUENCE ' || FQN(sch, seq) || ' AS BIGINT ' ||
                CASE WHEN "s" <> 0 THEN 'START WITH ' || "rs" ELSE '' END ||
@@ -47,54 +83,40 @@ RETURN
                CASE WHEN "mi" <> 0 THEN ' MINVALUE ' || "mi" ELSE '' END ||
                CASE WHEN "ma" <> 0 THEN ' MAXVALUE ' || "ma" ELSE '' END ||
                CASE WHEN "cache" <> 1 THEN ' CACHE ' || "cache" ELSE '' END ||
-               CASE WHEN "cycle" THEN ' CYCLE' ELSE '' END || ';'
+               CASE WHEN "cycle" THEN ' CYCLE' ELSE '' END || ';' stmt
        FROM describe_sequences;
-END;
 
-CREATE FUNCTION dump_start_sequences() RETURNS TABLE(stmt STRING) BEGIN
-RETURN
+CREATE VIEW dump_start_sequences AS
        SELECT
                'UPDATE sys.sequences seq SET start = ' || s  ||
                ' WHERE name = ' || SQ(seq) ||
-               ' AND schema_id = (SELECT s.id FROM sys.schemas s WHERE s.name 
= ' || SQ(sch) || ');'
+               ' AND schema_id = (SELECT s.id FROM sys.schemas s WHERE s.name 
= ' || SQ(sch) || ');' stmt
        FROM describe_sequences;
-END;
 
-CREATE FUNCTION dump_functions() RETURNS TABLE (o INT, stmt STRING) BEGIN
-       RETURN SELECT f.o, schema_guard(f.sch, f.fun, f.def)  FROM 
describe_functions f;
-END;
+CREATE VIEW dump_functions AS
+       SELECT f.o o, schema_guard(f.sch, f.fun, f.def) stmt FROM 
describe_functions f;
 
-CREATE FUNCTION dump_tables() RETURNS TABLE (o INT, stmt STRING) BEGIN
-RETURN
+CREATE VIEW dump_tables AS
        SELECT
-               t.o,
+               t.o o,
                CASE
                        WHEN t.typ <> 'VIEW' THEN
                                'CREATE ' || t.typ || ' ' || FQN(t.sch, t.tab) 
|| t.col || t.opt || ';'
                        ELSE
                                t.opt
-               END
+               END stmt
        FROM describe_tables t;
-END;
 
-CREATE FUNCTION dump_triggers() RETURNS TABLE (stmt STRING) BEGIN
-       RETURN
-               SELECT schema_guard(sch, tab, def) FROM describe_triggers;
-END;
+CREATE VIEW dump_triggers AS
+       SELECT schema_guard(sch, tab, def) stmt FROM describe_triggers;
 
-CREATE FUNCTION dump_comments() RETURNS TABLE(stmt STRING) BEGIN
-RETURN
-       SELECT 'COMMENT ON ' || c.tpe || ' ' || c.fqn || ' IS ' || SQ(c.rem) || 
';' FROM describe_comments c;
-END;
+CREATE VIEW dump_comments AS
+       SELECT 'COMMENT ON ' || c.tpe || ' ' || c.fqn || ' IS ' || SQ(c.rem) || 
';' stmt FROM describe_comments c;
 
---CREATE FUNCTION sys.describe_user_defined_types RETURNS TABLE(sch STRING, 
sql_tpe STRING, ext_tpe STRING)  BEGIN
-CREATE FUNCTION sys.dump_user_defined_types() RETURNS TABLE(stmt STRING)  BEGIN
-       RETURN
-               SELECT 'CREATE TYPE ' || FQN(sch, sql_tpe) || ' EXTERNAL NAME ' 
|| DQ(ext_tpe) || ';' FROM sys.describe_user_defined_types;
-END;
+CREATE VIEW sys.dump_user_defined_types AS
+               SELECT 'CREATE TYPE ' || FQN(sch, sql_tpe) || ' EXTERNAL NAME ' 
|| DQ(ext_tpe) || ';' stmt FROM sys.describe_user_defined_types;
 
-CREATE FUNCTION dump_privileges() RETURNS TABLE (stmt STRING) BEGIN
-RETURN
+CREATE VIEW dump_privileges AS
        SELECT
                'INSERT INTO sys.privileges VALUES (' ||
                        CASE
@@ -114,9 +136,8 @@ RETURN
                        '(SELECT pc.privilege_code_id FROM privilege_codes pc 
WHERE pc.privilege_code_name = ' || SQ(p_nme) || '),'
                        '(SELECT id FROM auths g WHERE g.name = ' || 
SQ(dp.g_nme) || '),' ||
                        dp.grantable ||
-               ');'
+               ');' stmt
        FROM describe_privileges dp;
-END;
 
 CREATE PROCEDURE EVAL(stmt STRING) EXTERNAL NAME sql.eval;
 
@@ -217,54 +238,21 @@ BEGIN
 
        INSERT INTO dump_statements VALUES (1, 'START TRANSACTION;');
        INSERT INTO dump_statements VALUES (current_size_dump_statements() + 1, 
'SET SCHEMA "sys";');
-
-       INSERT INTO dump_statements --dump_create_roles
-               SELECT current_size_dump_statements() + RANK() OVER(), 'CREATE 
ROLE ' || sys.dq(name) || ';' FROM sys.auths
-        WHERE name NOT IN (SELECT name FROM sys.db_user_info)
-        AND grantor <> 0;
-
-       INSERT INTO dump_statements --dump_create_users
-               SELECT current_size_dump_statements() + RANK() OVER(),
-        'CREATE USER ' ||  sys.dq(ui.name) ||  ' WITH ENCRYPTED PASSWORD ' ||
-            sys.sq(sys.password_hash(ui.name)) ||
-        ' NAME ' || sys.sq(ui.fullname) ||  ' SCHEMA sys;'
-        FROM sys.db_user_info ui, sys.schemas s
-        WHERE ui.default_schema = s.id
-            AND ui.name <> 'monetdb'
-            AND ui.name <> '.snapshot';
-
-       INSERT INTO dump_statements --dump_create_schemas
-        SELECT current_size_dump_statements() + RANK() OVER(),
-            'CREATE SCHEMA ' ||  sys.dq(s.name) || ifthenelse(a.name <> 
'sysadmin', ' AUTHORIZATION ' || a.name, ' ') || ';'
-        FROM sys.schemas s, sys.auths a
-        WHERE s.authorization = a.id AND s.system = FALSE;
-
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_user_defined_types();
-
-    INSERT INTO dump_statements --dump_add_schemas_to_users
-           SELECT current_size_dump_statements() + RANK() OVER(),
-            'ALTER USER ' || sys.dq(ui.name) || ' SET SCHEMA ' || 
sys.dq(s.name) || ';'
-        FROM sys.db_user_info ui, sys.schemas s
-        WHERE ui.default_schema = s.id
-            AND ui.name <> 'monetdb'
-            AND ui.name <> '.snapshot'
-            AND s.name <> 'sys';
-
-    INSERT INTO dump_statements --dump_grant_user_priviledges
-        SELECT current_size_dump_statements() + RANK() OVER(),
-            'GRANT ' || sys.dq(a2.name) || ' ' || ifthenelse(a1.name = 
'public', 'PUBLIC', sys.dq(a1.name)) || ';'
-               FROM sys.auths a1, sys.auths a2, sys.user_role ur
-               WHERE a1.id = ur.login_id AND a2.id = ur.role_id;
-
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_sequences();
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_start_sequences();
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_create_roles;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_create_users;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_create_schemas;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_user_defined_types;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_add_schemas_to_users;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_grant_user_priviledges;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_sequences;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_start_sequences;
 
        --functions and table-likes can be interdependent. They should be 
inserted in the order of their catalogue id.
        INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(ORDER BY stmts.o), stmts.s
        FROM (
-                       SELECT * FROM sys.dump_functions() f
+                       SELECT * FROM sys.dump_functions f
                        UNION
-                       SELECT * FROM sys.dump_tables() t
+                       SELECT * FROM sys.dump_tables t
                ) AS stmts(o, s);
 
        INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_column_defaults;
@@ -272,20 +260,21 @@ BEGIN
        INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_indices;
        INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_foreign_keys;
        INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_partition_tables;
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_triggers();
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_comments();
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_triggers;
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_comments;
 
        --We are dumping ALL privileges so we need to erase existing privileges 
on the receiving side;
        INSERT INTO dump_statements VALUES (current_size_dump_statements() + 1, 
'TRUNCATE sys.privileges;');
-       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_privileges();
+       INSERT INTO dump_statements SELECT current_size_dump_statements() + 
RANK() OVER(), stmt FROM sys.dump_privileges;
 
        IF NOT DESCRIBE THEN
                CALL dump_table_data();
        END IF;
-       --TODO clean up code: factor in more dump functions
+       --TODO Improve performance of dump_table_data.
        --TODO loaders ,procedures, window and filter sys.functions.
        --TODO look into order dependent group_concat
-       --TODO ADD upgrade code
+       --TODO add upgrade code
+       --TODO add COMMIT statement once everything is fine.
 
        RETURN dump_statements;
 END;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to