Changeset: a61b9de0a676 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a61b9de0a676 Modified Files: dump.sql Branch: monetdbe-proxy Log Message:
Properly format SQL type in table element. diffs (90 lines): diff --git a/dump.sql b/dump.sql --- a/dump.sql +++ b/dump.sql @@ -7,15 +7,76 @@ CREATE FUNCTION ENI (s STRING) RETURNS S CREATE FUNCTION comment_on(ob STRING, id STRING, r STRING) RETURNS STRING BEGIN RETURN ifthenelse(r IS NOT NULL, '\nCOMMENT ON ' || ob || ' ' || id || ' IS ' || SQ(r) || ';', ''); 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 = 'timestampz' THEN 'TIMESTAMP' || ifthenelse(digits <> 7, '(' || (digits -1) || ') ', ' ') || 'WITH TIME ZONE' + WHEN type = 'time' THEN 'TIME' || ifthenelse(digits <> 1, '(' || (digits -1) || ') ', ' ') + WHEN type = 'timez' 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; + --TODO expand dump_column_definition functionality CREATE FUNCTION dump_column_definition(tid INT) RETURNS STRING BEGIN RETURN SELECT - GROUP_CONCAT(DQ(c.name) || ' ' || c.type || ifthenelse(c."null" = 'false', ' NOT NULL ', ''), ', ') - --c.type_digits, - --c.type_scale, - --c.null, - --c.default, + GROUP_CONCAT( + DQ(c.name) || ' ' || + dump_type(c.type, c.type_digits, c.type_scale) || + ifthenelse(c."null" = 'false', ' NOT NULL ', '') || + ifthenelse(c."default" IS NOT NULL, ' DEFAULT ' || c."default", '') + , '') --c.number FROM sys._columns c WHERE c.table_id = tid; @@ -142,3 +203,4 @@ END; SELECT dump_database(TRUE); ROLLBACK; + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list