Changeset: b69176fba0d0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b69176fba0d0
Added Files:
        sql/scripts/53_dump.sql
Modified Files:
        dump.sql
        dump_output.sql
        sql/backends/monet5/CMakeLists.txt
        sql/scripts/52_describe.sql
        sql/scripts/CMakeLists.txt
Branch: monetdbe-proxy
Log Message:

Migrate most of the describe and dump functions to sql/scripts.


diffs (truncated from 1419 to 300 lines):

diff --git a/dump.sql b/dump.sql
--- a/dump.sql
+++ b/dump.sql
@@ -1,556 +1,8 @@
 START TRANSACTION;
 
---We start with creating static versions of catalogue tables that are going to 
be affected by this dump script itself.
-CREATE TEMPORARY TABLE _user_sequences AS SELECT * FROM sys.sequences;
-CREATE TEMPORARY TABLE _user_functions AS SELECT * FROM sys.functions f WHERE 
NOT f.system;
-
-CREATE FUNCTION SQ (s STRING) RETURNS STRING BEGIN RETURN ' ''' || s || ''' '; 
END;
-CREATE FUNCTION DQ (s STRING) RETURNS STRING BEGIN RETURN '"' || s || '"'; 
END; --TODO: Figure out why this breaks with the space
-CREATE FUNCTION FQTN(s STRING, t STRING) RETURNS STRING BEGIN RETURN DQ(s) || 
'.' || DQ(t); END;
-CREATE FUNCTION ALTER_TABLE(s STRING, t STRING) RETURNS STRING BEGIN RETURN 
'ALTER TABLE ' || FQTN(s, t) || ' '; END;
-
---We need pcre to implement a header guard which means adding the schema of an 
object explicitely to its identifier.
-CREATE FUNCTION replace_first(ori STRING, pat STRING, rep STRING, flg STRING) 
RETURNS STRING EXTERNAL NAME "pcre"."replace_first";
-CREATE FUNCTION schema_guard(sch STRING, nme STRING, stmt STRING) RETURNS 
STRING BEGIN
-RETURN
-       SELECT replace_first(stmt, '(\\s*"?' || sch ||  '"?\\s*\\.|)\\s*"?' || 
nme || '"?\\s*', ' ' || FQTN(sch, nme) || ' ', 'imsx');
-END;
-
-CREATE FUNCTION dump_type(type STRING, digits INT, scale INT) RETURNS STRING 
BEGIN
-       RETURN
-               CASE
-               WHEN type = 'boolean' THEN  'BOOLEAN'
-               WHEN type = 'int' THEN  'INTEGER'
-               WHEN type = 'smallint' THEN  'SMALLINT'
-               WHEN type = 'tinyiny' THEN  'TINYINT'
-               WHEN type = 'bigint' THEN  'BIGINT'
-               WHEN type = 'hugeint' THEN  'HUGEINT'
-               WHEN type = 'date' THEN  'DATE'
-               WHEN type = 'month_interval' THEN  CASE
-                       WHEN digits = 1 THEN 'INTERVAL YEAR'
-                       WHEN digits = 2 THEN 'INTERVAL YEAR TO MONTH'
-                       ELSE  'INTERVAL MONTH' --ASSUMES digits = 3
-                       END
-               WHEN type LIKE '%_INTERVAL' THEN  CASE
-                       WHEN digits = 4  THEN 'INTERVAL DAY'
-                       WHEN digits = 5  THEN 'INTERVAL DAY TO HOUR'
-                       WHEN digits = 6  THEN 'INTERVAL DAY TO MINUTE'
-                       WHEN digits = 7  THEN 'INTERVAL DAY TO SECOND'
-                       WHEN digits = 8  THEN 'INTERVAL HOUR'
-                       WHEN digits = 9  THEN 'INTERVAL HOUR TO MINUTE'
-                       WHEN digits = 10 THEN 'INTERVAL HOUR TO SECOND'
-                       WHEN digits = 11 THEN 'INTERVAL MINUTE'
-                       WHEN digits = 12 THEN 'INTERVAL MINUTE TO SECOND'
-                       ELSE  'INTERVAL SECOND' --ASSUMES digits = 13
-                       END
-               WHEN type = 'varchar' OR type = 'clob' THEN  CASE
-                       WHEN digits = 0 THEN 'CHARACTER LARGE OBJECT'
-                       ELSE 'CHARACTER LARGE OBJECT(' || digits || ')' 
--ASSUMES digits IS NOT NULL
-                       END
-               WHEN type = 'blob' THEN  CASE
-                       WHEN digits = 0 THEN 'BINARY LARGE OBJECT'
-                       ELSE 'BINARY LARGE OBJECT(' || digits || ')' --ASSUMES 
digits IS NOT NULL
-                       END
-               WHEN type = 'timestamp'  THEN 'TIMESTAMP' || ifthenelse(digits 
<> 7, '(' || (digits -1) || ') ', ' ')
-               WHEN type = 'timestamptz' THEN 'TIMESTAMP' || ifthenelse(digits 
<> 7, '(' || (digits -1) || ') ', ' ') || 'WITH TIME ZONE'
-               WHEN type = 'time'  THEN 'TIME' || ifthenelse(digits <> 1, '(' 
|| (digits -1) || ') ', ' ')
-               WHEN type = 'timetz' THEN 'TIME' || ifthenelse(digits <> 1, '(' 
|| (digits -1) || ') ', ' ') || 'WITH TIME ZONE'
-               WHEN type = 'real' THEN CASE
-                       WHEN digits = 24 AND scale=0 THEN 'REAL'
-                       WHEN scale=0 THEN 'FLOAT(' || digits || ')'
-                       ELSE 'FLOAT(' || digits || ',' || scale || ')'
-                       END
-               WHEN type = 'double' THEN CASE
-                       WHEN digits = 53 AND scale=0 THEN 'DOUBLE'
-                       WHEN scale = 0 THEN 'FLOAT(' || digits || ')'
-                       ELSE 'FLOAT(' || digits || ',' || scale || ')'
-                       END
-               WHEN type = 'decimal' THEN CASE
-                       WHEN (digits = 1 AND scale = 0) OR digits = 0 THEN 
'DECIMAL'
-                       WHEN scale = 0 THEN 'DECIMAL(' || digits || ')'
-                       WHEN digits = 39 THEN 'DECIMAL(' || 38 || ',' || scale 
|| ')'
-                       WHEN digits = 19 AND (SELECT COUNT(*) = 0 FROM 
sys.types WHERE sqlname = 'hugeint' ) THEN 'DECIMAL(' || 18 || ',' || scale || 
')'
-                       ELSE 'DECIMAL(' || digits || ',' || scale || ')'
-                       END
-               ELSE upper(type) || '(' || digits || ',' || scale || ')' 
--TODO: might be a bit too simple
-               END;
-END;
-
-CREATE FUNCTION dump_CONSTRAINT_type_name(id INT) RETURNS STRING BEGIN
-       RETURN
-               CASE
-               WHEN id = 0 THEN 'PRIMARY KEY'
-               WHEN id = 1 THEN 'UNIQUE'
-               END;
-END;
-
-CREATE FUNCTION describe_constraints() RETURNS TABLE(s STRING, "table" STRING, 
nr INT, col STRING, con STRING, type STRING) BEGIN
-       RETURN
-               SELECT s.name, t.name, kc.nr, kc.name, k.name, 
dump_CONSTRAINT_type_name(k.type)
-               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)
-                       AND t.type IN (0, 6);
-END;
-
-CREATE FUNCTION dump_table_constraint_type() RETURNS TABLE(stm STRING) BEGIN
-       RETURN
-               SELECT
-                       'ALTER TABLE ' || DQ(s) || '.' || DQ("table") ||
-                       ' ADD CONSTRAINT ' || DQ(con) || ' '||
-                       type || ' (' || GROUP_CONCAT(DQ(col), ', ') || ');'
-               FROM describe_constraints() GROUP BY s, "table", con, type;
-END;
-
-CREATE FUNCTION describe_indices() RETURNS TABLE (i STRING, o INT, s STRING, t 
STRING, c STRING, it STRING) BEGIN
-RETURN
-       WITH it (id, idx) AS (VALUES (0, 'INDEX'), (4, 'IMPRINTS INDEX'), (5, 
'ORDERED INDEX')) --UNIQUE INDEX wraps to INDEX.
-       SELECT
-               i.name,
-               kc.nr, --TODO: Does this determine the concatenation order?
-               s.name,
-               t.name,
-               c.name,
-               it.idx
-       FROM
-               sys.idxs AS i LEFT JOIN sys.keys AS k ON i.name = k.name,
-               sys.objects AS kc,
-               sys._columns AS c,
-               sys.schemas s,
-               sys._tables AS t,
-               it
-       WHERE
-               i.table_id = t.id
-               AND i.id = kc.id
-               AND kc.name = c.name
-               AND t.id = c.table_id
-               AND t.schema_id = s.id
-               AND k.type IS NULL
-               AND i.type = it.id
-       ORDER BY i.name, kc.nr;
-END;
-
-CREATE FUNCTION dump_indices() RETURNS TABLE(stm STRING) BEGIN
-       RETURN
-               SELECT
-                       'CREATE ' || it || ' ' ||
-                       DQ(i) || ' ON ' || DQ(s) || '.' || DQ(t) ||
-                       '(' || GROUP_CONCAT(c) || ');'
-               FROM describe_indices() GROUP BY i, it, s, t;
-END;
-
-CREATE FUNCTION dump_column_definition(tid INT) RETURNS STRING BEGIN
-       RETURN
-               SELECT
-                       ' (' ||
-                       GROUP_CONCAT(
-                               DQ(c.name) || ' ' ||
-                               dump_type(c.type, c.type_digits, c.type_scale) 
||
-                               ifthenelse(c."null" = 'false', ' NOT NULL', '')
-                       , ', ') || ')'
-               FROM sys._columns c
-               WHERE c.table_id = tid;
-END;
-
-CREATE FUNCTION dump_remote_table_expressions(s STRING, t STRING) RETURNS 
STRING BEGIN
-       RETURN SELECT ' ON ' || SQ(uri) || ' WITH USER ' || SQ(username) || ' 
ENCRYPTED PASSWORD ' || SQ("hash") FROM sys.remote_table_credentials(s ||'.' || 
t);
-END;
-
-CREATE FUNCTION dump_merge_table_partition_expressions(tid INT) RETURNS STRING
-BEGIN
-       RETURN
-               SELECT
-                       CASE WHEN tp.table_id IS NOT NULL THEN  --updatable 
merge table
-                               ' PARTITION BY ' ||
-                               CASE
-                                       WHEN bit_and(tp.type, 2) = 2
-                                       THEN 'VALUES '
-                                       ELSE 'RANGE '
-                               END ||
-                               CASE
-                                       WHEN bit_and(tp.type, 4) = 4 --column 
expression
-                                       THEN 'ON ' || '(' || (SELECT DQ(c.name) 
|| ')' FROM sys.columns c WHERE c.id = tp.column_id)
-                                       ELSE 'USING ' || '(' || tp.expression 
|| ')' --generic expression
-                               END
-                       ELSE                                                    
                --read only partition merge table.
-                               ''
-                       END
-               FROM (VALUES (tid)) t(id) LEFT JOIN sys.table_partitions tp ON 
t.id = tp.table_id;
-END;
-
-CREATE FUNCTION describe_column_defaults() RETURNS TABLE(sch STRING, tbl 
STRING, col STRING, def STRING) BEGIN
-RETURN
-       SELECT
-               s.name,
-               t.name,
-               c.name,
-               c."default"
-       FROM schemas s, tables t, 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;
-END;
-
-CREATE FUNCTION dump_column_defaults() RETURNS TABLE(stmt STRING) BEGIN
-       RETURN
-               SELECT 'ALTER TABLE ' || FQTN(sch, tbl) || ' ALTER COLUMN ' || 
DQ(col) || ' SET DEFAULT ' || def || ';'
-               FROM describe_column_defaults();
-END;
-
---SELECT * FROM dump_foreign_keys();
-CREATE FUNCTION describe_foreign_keys() RETURNS TABLE(
-       fk_s STRING, fk_t STRING, fk_c STRING,
-       o INT, fk STRING,
-       pk_s STRING, pk_t STRING, pk_c STRING,
-       on_update STRING, on_delete STRING) BEGIN
-
-       RETURN
-               WITH action_type (id, act) AS (VALUES
-                       (0, 'NO ACTION'),
-                       (1, 'CASCADE'),
-                       (2, 'RESTRICT'),
-                       (3, 'SET NULL'),
-                       (4, 'SET DEFAULT'))
-               SELECT
-               fs.name AS fsname, fkt.name AS ktname, fkkc.name AS fcname,
-               fkkc.nr AS o, fkk.name AS fkname,
-               ps.name AS psname, pkt.name AS ptname, pkkc.name AS pcname,
-               ou.act as on_update, od.act as 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;
-END;
-
-CREATE FUNCTION dump_foreign_keys() RETURNS TABLE(stmt STRING) BEGIN
-RETURN
-       SELECT
-               'ALTER TABLE ' || DQ(fk_s) || '.'|| DQ(fk_t) || ' ADD 
CONSTRAINT ' || DQ(fk) || ' ' ||
-               'FOREIGN KEY(' || GROUP_CONCAT(DQ(fk_c), ',') ||') ' ||
-               'REFERENCES ' || DQ(pk_s) || '.' || DQ(pk_t) || '(' || 
GROUP_CONCAT(DQ(pk_c), ',') || ') ' ||
-               'ON DELETE ' || on_delete || ' ON UPDATE ' || on_update ||
-               ';'
-       FROM describe_foreign_keys() GROUP BY fk_s, fk_t, pk_s, pk_t, fk, 
on_delete, on_update;
-END;
-
-CREATE FUNCTION describe_partition_tables()
-RETURNS TABLE(
-       m_sname STRING,
-       m_tname STRING,
-       p_sname STRING,
-       p_tname STRING,
-       p_type  STRING,
-       pvalues STRING,
-       minimum STRING,
-       maximum STRING,
-       with_nulls BOOLEAN) BEGIN
-RETURN
-  SELECT 
-        m_sname,
-        m_tname,
-        p_sname,
-        p_tname,
-        CASE
-            WHEN p_raw_type IS NULL THEN 'READ ONLY'
-            WHEN (p_raw_type = 'VALUES' AND pvalues IS NULL) OR (p_raw_type = 
'RANGE' AND minimum IS NULL AND maximum IS NULL AND with_nulls) THEN 'FOR NULLS'
-            ELSE p_raw_type
-        END AS p_type,
-        pvalues,
-        minimum,
-        maximum,
-        with_nulls
-    FROM 
-    (WITH
-               tp("type", table_id) AS
-               (SELECT CASE WHEN (table_partitions."type" & 2) = 2 THEN 
'VALUES' ELSE 'RANGE' END, table_partitions.table_id FROM table_partitions),
-               subq(m_tid, p_mid, "type", m_sname, m_tname, p_sname, p_tname) 
AS
-               (SELECT m_t.id, p_m.id, m_t."type", m_s.name, m_t.name, 
p_s.name, p_m.name
-               FROM schemas m_s, sys._tables m_t, dependencies d, schemas p_s, 
sys._tables p_m
-               WHERE m_t."type" IN (3, 6)
-                       AND m_t.schema_id = m_s.id
-                       AND m_s.name <> 'tmp'
-                       AND m_t.system = FALSE
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to