Changeset: ac36df565369 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ac36df565369 Modified Files: sql/backends/monet5/sql_upgrades.c sql/scripts/52_describe.sql 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.SQL.py sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.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: default Log Message:
Fix and approve upgrade. diffs (truncated from 5889 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 @@ -2586,165 +2586,138 @@ sql_update_default(Client c, mvc *sql, c " CASE ctype\n" " WHEN 'bigint' THEN 'BIGINT'\n" " WHEN 'blob' THEN\n" - " CASE digits\n" - " WHEN 0 THEN 'BINARY LARGE OBJECT'\n" - " ELSE 'BINARY LARGE OBJECT(' || CAST(digits AS string) || ')'\n" - " END\n" + " CASE digits\n" + " WHEN 0 THEN 'BINARY LARGE OBJECT'\n" + " ELSE 'BINARY LARGE OBJECT(' || digits || ')'\n" + " END\n" " WHEN 'boolean' THEN 'BOOLEAN'\n" " WHEN 'char' THEN\n" " CASE digits\n" " WHEN 1 THEN 'CHARACTER'\n" - " ELSE 'CHARACTER(' || CAST(digits AS string) || ')'\n" + " ELSE 'CHARACTER(' || digits || ')'\n" " END\n" " WHEN 'clob' THEN\n" - " CASE digits\n" - " WHEN 0 THEN 'CHARACTER LARGE OBJECT'\n" - " ELSE 'CHARACTER LARGE OBJECT(' || CAST(digits AS string) || ')'\n" - " END\n" + " CASE digits\n" + " WHEN 0 THEN 'CHARACTER LARGE OBJECT'\n" + " ELSE 'CHARACTER LARGE OBJECT(' || digits || ')'\n" + " END\n" " WHEN 'date' THEN 'DATE'\n" " WHEN 'day_interval' THEN 'INTERVAL DAY'\n" - " WHEN 'decimal' THEN 'DECIMAL(' || CAST(digits AS string) || ',' || CAST(tscale AS string) || ')'\n" + " WHEN ctype = 'decimal' THEN\n" + " CASE\n" + " WHEN (digits = 1 AND tscale = 0) OR digits = 0 THEN 'DECIMAL'\n" + " WHEN tscale = 0 THEN 'DECIMAL(' || digits || ')'\n" + " WHEN digits = 39 THEN 'DECIMAL(' || 38 || ',' || tscale || ')'\n" + " WHEN digits = 19 AND (SELECT COUNT(*) = 0 FROM sys.types WHERE sqlname = 'hugeint' ) THEN 'DECIMAL(' || 18 || ',' || tscale || ')'\n" + " ELSE 'DECIMAL(' || digits || ',' || tscale || ')'\n" + " END\n" " WHEN 'double' THEN\n" - " CASE\n" - " WHEN digits = 53 and tscale = 0 THEN 'DOUBLE'\n" - " WHEN tscale = 0 THEN 'FLOAT(' || CAST(digits AS string) || ')'\n" - " ELSE 'FLOAT(' || CAST(digits AS string) || ',' || CAST(tscale AS string) || ')'\n" - " END\n" + " CASE\n" + " WHEN digits = 53 and tscale = 0 THEN 'DOUBLE'\n" + " WHEN tscale = 0 THEN 'FLOAT(' || digits || ')'\n" + " ELSE 'FLOAT(' || digits || ',' || tscale || ')'\n" + " END\n" " WHEN 'geometry' THEN\n" - " CASE digits\n" - " WHEN 4 THEN 'GEOMETRY(POINT' ||\n" - " CASE tscale\n" - " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" - " END || ')'\n" - " WHEN 8 THEN 'GEOMETRY(LINESTRING' ||\n" + " CASE digits\n" + " WHEN 4 THEN 'GEOMETRY(POINT' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " WHEN 16 THEN 'GEOMETRY(POLYGON' ||\n" + " WHEN 8 THEN 'GEOMETRY(LINESTRING' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " WHEN 20 THEN 'GEOMETRY(MULTIPOINT' ||\n" + " WHEN 16 THEN 'GEOMETRY(POLYGON' ||\n" + " CASE tscale\n" + " WHEN 0 THEN ''\n" + " ELSE ',' || tscale\n" + " END || ')'\n" + " WHEN 20 THEN 'GEOMETRY(MULTIPOINT' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " WHEN 24 THEN 'GEOMETRY(MULTILINESTRING' ||\n" + " WHEN 24 THEN 'GEOMETRY(MULTILINESTRING' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " WHEN 28 THEN 'GEOMETRY(MULTIPOLYGON' ||\n" + " WHEN 28 THEN 'GEOMETRY(MULTIPOLYGON' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " WHEN 32 THEN 'GEOMETRY(GEOMETRYCOLLECTION' ||\n" + " WHEN 32 THEN 'GEOMETRY(GEOMETRYCOLLECTION' ||\n" " CASE tscale\n" " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " ELSE 'GEOMETRY'\n" + " ELSE 'GEOMETRY'\n" " END\n" " WHEN 'hugeint' THEN 'HUGEINT'\n" " WHEN 'int' THEN 'INTEGER'\n" " WHEN 'month_interval' THEN\n" - " CASE digits\n" - " WHEN 1 THEN 'INTERVAL YEAR'\n" - " WHEN 2 THEN 'INTERVAL YEAR TO MONTH'\n" - " WHEN 3 THEN 'INTERVAL MONTH'\n" - " END\n" + " CASE digits\n" + " WHEN 1 THEN 'INTERVAL YEAR'\n" + " WHEN 2 THEN 'INTERVAL YEAR TO MONTH'\n" + " WHEN 3 THEN 'INTERVAL MONTH'\n" + " END\n" " WHEN 'real' THEN\n" - " CASE\n" - " WHEN digits = 24 and tscale = 0 THEN 'REAL'\n" - " WHEN tscale = 0 THEN 'FLOAT(' || CAST(digits AS string) || ')'\n" - " ELSE 'FLOAT(' || CAST(digits AS string) || ',' || CAST(tscale AS string) || ')'\n" - " END\n" + " CASE\n" + " WHEN digits = 24 and tscale = 0 THEN 'REAL'\n" + " WHEN tscale = 0 THEN 'FLOAT(' || digits || ')'\n" + " ELSE 'FLOAT(' || digits || ',' || tscale || ')'\n" + " END\n" " WHEN 'sec_interval' THEN\n" - " CASE digits\n" - " WHEN 4 THEN 'INTERVAL DAY'\n" - " WHEN 5 THEN 'INTERVAL DAY TO HOUR'\n" - " WHEN 6 THEN 'INTERVAL DAY TO MINUTE'\n" - " WHEN 7 THEN 'INTERVAL DAY TO SECOND'\n" - " WHEN 8 THEN 'INTERVAL HOUR'\n" - " WHEN 9 THEN 'INTERVAL HOUR TO MINUTE'\n" - " WHEN 10 THEN 'INTERVAL HOUR TO SECOND'\n" - " WHEN 11 THEN 'INTERVAL MINUTE'\n" - " WHEN 12 THEN 'INTERVAL MINUTE TO SECOND'\n" - " WHEN 13 THEN 'INTERVAL SECOND'\n" - " END\n" + " CASE digits\n" + " WHEN 4 THEN 'INTERVAL DAY'\n" + " WHEN 5 THEN 'INTERVAL DAY TO HOUR'\n" + " WHEN 6 THEN 'INTERVAL DAY TO MINUTE'\n" + " WHEN 7 THEN 'INTERVAL DAY TO SECOND'\n" + " WHEN 8 THEN 'INTERVAL HOUR'\n" + " WHEN 9 THEN 'INTERVAL HOUR TO MINUTE'\n" + " WHEN 10 THEN 'INTERVAL HOUR TO SECOND'\n" + " WHEN 11 THEN 'INTERVAL MINUTE'\n" + " WHEN 12 THEN 'INTERVAL MINUTE TO SECOND'\n" + " WHEN 13 THEN 'INTERVAL SECOND'\n" + " END\n" " WHEN 'smallint' THEN 'SMALLINT'\n" " WHEN 'time' THEN\n" - " CASE digits\n" - " WHEN 1 THEN 'TIME'\n" - " ELSE 'TIME(' || CAST(digits - 1 AS string) || ')'\n" - " END\n" + " CASE digits\n" + " WHEN 1 THEN 'TIME'\n" + " ELSE 'TIME(' || (digits - 1) || ')'\n" + " END\n" " WHEN 'timestamp' THEN\n" - " CASE digits\n" - " WHEN 7 THEN 'TIMESTAMP'\n" - " ELSE 'TIMESTAMP(' || CAST(digits - 1 AS string) || ')'\n" - " END\n" + " CASE digits\n" + " WHEN 7 THEN 'TIMESTAMP'\n" + " ELSE 'TIMESTAMP(' || (digits - 1) || ')'\n" + " END\n" " WHEN 'timestamptz' THEN\n" - " CASE digits\n" - " WHEN 7 THEN 'TIMESTAMP'\n" - " ELSE 'TIMESTAMP(' || CAST(digits - 1 AS string) || ')'\n" - " END || ' WITH TIME ZONE'\n" + " CASE digits\n" + " WHEN 7 THEN 'TIMESTAMP'\n" + " ELSE 'TIMESTAMP(' || (digits - 1) || ')'\n" + " END || ' WITH TIME ZONE'\n" " WHEN 'timetz' THEN\n" - " CASE digits\n" - " WHEN 1 THEN 'TIME'\n" - " ELSE 'TIME(' || CAST(digits - 1 AS string) || ')'\n" - " END || ' WITH TIME ZONE'\n" + " CASE digits\n" + " WHEN 1 THEN 'TIME'\n" + " ELSE 'TIME(' || (digits - 1) || ')'\n" + " END || ' WITH TIME ZONE'\n" " WHEN 'tinyint' THEN 'TINYINT'\n" - " WHEN 'varchar' THEN 'CHARACTER VARYING(' || CAST(digits AS string) || ')'\n" + " WHEN 'varchar' THEN 'CHARACTER VARYING(' || digits || ')'\n" " ELSE\n" " CASE\n" " WHEN lower(ctype) = ctype THEN upper(ctype)\n" " ELSE '\"' || ctype || '\"'\n" " END || CASE digits\n" - " WHEN 0 THEN ''\n" - " ELSE '(' || CAST(digits AS string) || CASE tscale\n" - " WHEN 0 THEN ''\n" - " ELSE ',' || CAST(tscale AS string)\n" + " WHEN 0 THEN ''\n" + " ELSE '(' || digits || CASE tscale\n" + " WHEN 0 THEN ''\n" + " ELSE ',' || tscale\n" " END || ')'\n" - " END\n" + " END\n" " END;\n" - "END;\n" - "CREATE FUNCTION sys.describe_table(schemaName string, tableName string)\n" - " RETURNS TABLE(name string, query string, type string, id integer, remark string)\n" - "BEGIN\n" - " RETURN SELECT t.name, t.query, tt.table_type_name, t.id, c.remark\n" - " FROM sys.schemas s, sys.table_types tt, sys._tables t\n" - " LEFT OUTER JOIN sys.comments c ON t.id = c.id\n" - " WHERE s.name = schemaName\n" - " AND t.schema_id = s.id\n" - " AND t.name = tableName\n" - " AND t.type = tt.table_type_id;\n" - "END;\n" - "CREATE FUNCTION sys.describe_columns(schemaName string, tableName string)\n" - " RETURNS TABLE(name string, type string, digits integer, scale integer, Nulls boolean, cDefault string, number integer, sqltype string, remark string)\n" - "BEGIN\n" - " RETURN SELECT c.name, c.\"type\", c.type_digits, c.type_scale, c.\"null\", c.\"default\", c.number, describe_type(c.\"type\", c.type_digits, c.type_scale), com.remark\n" - " FROM sys._tables t, sys.schemas s, sys._columns c\n" - " LEFT OUTER JOIN sys.comments com ON c.id = com.id\n" - " WHERE c.table_id = t.id\n" - " AND t.name = tableName\n" - " AND t.schema_id = s.id\n" - " AND s.name = schemaName\n" - " ORDER BY c.number;\n" - "END;\n" - "CREATE FUNCTION sys.describe_function(schemaName string, functionName string)\n" - " RETURNS TABLE(id integer, name string, type string, language string, remark string)\n" - "BEGIN\n" - " RETURN SELECT f.id, f.name, ft.function_type_keyword, fl.language_keyword, c.remark\n" - " FROM sys.functions f\n" - " JOIN sys.schemas s ON f.schema_id = s.id\n" - " JOIN sys.function_types ft ON f.type = ft.function_type_id\n" - " LEFT OUTER JOIN sys.function_languages fl ON f.language = fl.language_id\n" - " LEFT OUTER JOIN sys.comments c ON f.id = c.id\n" - " WHERE f.name=functionName AND s.name = schemaName;\n" "END;\n"); 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 @@ -29,13 +29,13 @@ BEGIN WHEN 'date' THEN 'DATE' WHEN 'day_interval' THEN 'INTERVAL DAY' WHEN ctype = 'decimal' THEN - CASE - WHEN (digits = 1 AND tscale = 0) OR digits = 0 THEN 'DECIMAL' - WHEN tscale = 0 THEN 'DECIMAL(' || digits || ')' - WHEN digits = 39 THEN 'DECIMAL(' || 38 || ',' || tscale || ')' - WHEN digits = 19 AND (SELECT COUNT(*) = 0 FROM sys.types WHERE sqlname = 'hugeint' ) THEN 'DECIMAL(' || 18 || ',' || tscale || ')' - ELSE 'DECIMAL(' || digits || ',' || tscale || ')' - END + CASE + WHEN (digits = 1 AND tscale = 0) OR digits = 0 THEN 'DECIMAL' + WHEN tscale = 0 THEN 'DECIMAL(' || digits || ')' + WHEN digits = 39 THEN 'DECIMAL(' || 38 || ',' || tscale || ')' + WHEN digits = 19 AND (SELECT COUNT(*) = 0 FROM sys.types WHERE sqlname = 'hugeint' ) THEN 'DECIMAL(' || 18 || ',' || tscale || ')' + ELSE 'DECIMAL(' || digits || ',' || tscale || ')' + END WHEN 'double' THEN CASE WHEN digits = 53 and tscale = 0 THEN 'DOUBLE' diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 --- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 +++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 @@ -4217,166 +4217,139 @@ BEGIN CASE ctype WHEN 'bigint' THEN 'BIGINT' WHEN 'blob' THEN - CASE digits - WHEN 0 THEN 'BINARY LARGE OBJECT' - ELSE 'BINARY LARGE OBJECT(' || CAST(digits AS string) || ')' - END + CASE digits + WHEN 0 THEN 'BINARY LARGE OBJECT' + ELSE 'BINARY LARGE OBJECT(' || digits || ')' + END WHEN 'boolean' THEN 'BOOLEAN' WHEN 'char' THEN CASE digits WHEN 1 THEN 'CHARACTER' - ELSE 'CHARACTER(' || CAST(digits AS string) || ')' + ELSE 'CHARACTER(' || digits || ')' END _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list