Changeset: 7432d4b9ec97 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7432d4b9ec97
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        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
        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/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        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.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        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
        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.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.int128
Branch: default
Log Message:

Fix and approve information_schema upgrade code.


diffs (truncated from 3699 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
@@ -6301,9 +6301,9 @@ sql_update_default(Client c, mvc *sql, s
                "  cast(NULL AS varchar(1)) AS SCOPE_NAME,\n"
                "  cast(NULL AS int) AS MAXIMUM_CARDINALITY,\n"
                "  cast(NULL AS int) AS DTD_IDENTIFIER,\n"
-               "  cast(sys.\"ifthenelse\"(sys.\"locate\"('begin',f.\"func\") > 
0, sys.\"ifthenelse\"(sys.\"endswith\"(f.\"func\",';'), 
sys.\"substring\"(f.\"func\", sys.\"locate\"('begin',f.\"func\"), 
sys.\"length\"(sys.\"substring\"(f.\"func\", 
sys.\"locate\"('begin',f.\"func\")))-1), sys.\"substring\"(f.\"func\", 
sys.\"locate\"('begin',f.\"func\"))), NULL) AS varchar(8196) AS ROUTINE_BODY,\n"
+               "  cast(sys.\"ifthenelse\"(sys.\"locate\"('begin',f.\"func\") > 
0, sys.\"ifthenelse\"(sys.\"endswith\"(f.\"func\",';'), 
sys.\"substring\"(f.\"func\", sys.\"locate\"('begin',f.\"func\"), 
sys.\"length\"(sys.\"substring\"(f.\"func\", 
sys.\"locate\"('begin',f.\"func\")))-1), sys.\"substring\"(f.\"func\", 
sys.\"locate\"('begin',f.\"func\"))), NULL) AS varchar(8196)) AS 
ROUTINE_BODY,\n"
                "  f.\"func\" AS ROUTINE_DEFINITION,\n"
-               "  cast(sys.\"ifthenelse\"(sys.\"locate\"('external 
name',f.\"func\") > 0, sys.\"ifthenelse\"(sys.\"endswith\"(f.\"func\",';'), 
sys.\"substring\"(f.\"func\", 14 + sys.\"locate\"('external name',f.\"func\"), 
sys.\"length\"(sys.\"substring\"(f.\"func\", 14 + sys.\"locate\"('external 
name',f.\"func\")))-1), sys.\"substring\"(f.\"func\", 14 + 
sys.\"locate\"('external name',f.\"func\"))), NULL) AS varchar(1024) AS 
EXTERNAL_NAME,\n"
+               "  cast(sys.\"ifthenelse\"(sys.\"locate\"('external 
name',f.\"func\") > 0, sys.\"ifthenelse\"(sys.\"endswith\"(f.\"func\",';'), 
sys.\"substring\"(f.\"func\", 14 + sys.\"locate\"('external name',f.\"func\"), 
sys.\"length\"(sys.\"substring\"(f.\"func\", 14 + sys.\"locate\"('external 
name',f.\"func\")))-1), sys.\"substring\"(f.\"func\", 14 + 
sys.\"locate\"('external name',f.\"func\"))), NULL) AS varchar(1024)) AS 
EXTERNAL_NAME,\n"
                "  fl.\"language_keyword\" AS EXTERNAL_LANGUAGE,\n"
                "  'GENERAL' AS PARAMETER_STYLE,\n"
                "  'YES' AS IS_DETERMINISTIC,\n"
@@ -6374,7 +6374,7 @@ sql_update_default(Client c, mvc *sql, s
                "  cast(NULL AS varchar(1)) AS SEQUENCE_CATALOG,\n"
                "  s.\"name\" AS SEQUENCE_SCHEMA,\n"
                "  sq.\"name\" AS SEQUENCE_NAME,\n"
-               "  cast('bigint' AS varchar(16)) AS DATA_TYPE,\n"
+               "  cast('BIGINT' AS varchar(16)) AS DATA_TYPE,\n"
                "  cast(64 AS SMALLINT) AS NUMERIC_PRECISION,\n"
                "  cast(2 AS SMALLINT) AS NUMERIC_PRECISION_RADIX,\n"
                "  cast(0 AS SMALLINT) AS NUMERIC_SCALE,\n"
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
@@ -596,12 +596,12 @@ CREATE VIEW INFORMATION_SCHEMA.COLUMNS A
   s."name" AS TABLE_SCHEMA,
   t."name" AS TABLE_NAME,
   c."name" AS COLUMN_NAME,
-  cast(c."number" +1 AS int) AS ORDINAL_POSITION,
+  cast(1 + c."number" AS int) AS ORDINAL_POSITION,
   c."default" AS COLUMN_DEFAULT,
   cast(sys.ifthenelse(c."null", 'YES', 'NO') AS varchar(3)) AS IS_NULLABLE,
-  CASE c."type" WHEN 'day_interval' THEN 'interval day' WHEN 'month_interval' 
THEN 'interval month' WHEN 'sec_interval' THEN 'interval second' ELSE c."type" 
END AS DATA_TYPE,
-  cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
-  cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits" * 3, NULL) AS 
int) AS CHARACTER_OCTET_LENGTH,
+  cast(sys."describe_type"(c."type", c."type_digits", c."type_scale") AS 
varchar(1024)) AS DATA_TYPE,
+  cast(sys.ifthenelse(c."type" IN ('varchar','clob','char','json','url','xml') 
AND c."type_digits" > 0, c."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
+  cast(sys.ifthenelse(c."type" IN ('varchar','clob','char','json','url','xml') 
AND c."type_digits" > 0, c."type_digits" * 4, NULL) AS int) AS 
CHARACTER_OCTET_LENGTH,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_digits", NULL) AS int) AS NUMERIC_PRECISION,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','oid'), 
2, sys.ifthenelse(c."type" IN ('decimal','numeric'), 10, NULL)) AS int) AS 
NUMERIC_PRECISION_RADIX,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_scale", NULL) AS int) AS NUMERIC_SCALE,
@@ -710,11 +710,116 @@ CREATE VIEW INFORMATION_SCHEMA.REFERENTI
  LEFT OUTER JOIN sys."schemas" uks ON uks."id" = ukt."schema_id"
  ORDER BY s."name", t."name", fk."name";
 GRANT SELECT ON TABLE INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS TO PUBLIC 
WITH GRANT OPTION;
+CREATE VIEW INFORMATION_SCHEMA.ROUTINES AS SELECT
+  cast(NULL AS varchar(1)) AS SPECIFIC_CATALOG,
+  s."name" AS SPECIFIC_SCHEMA,
+  cast(f."id" as varchar(10)) AS SPECIFIC_NAME,
+  cast(NULL AS varchar(1)) AS ROUTINE_CATALOG,
+  s."name" AS ROUTINE_SCHEMA,
+  f."name" AS ROUTINE_NAME,
+  ft."function_type_keyword" AS ROUTINE_TYPE,
+  cast(NULL AS varchar(1)) AS MODULE_CATALOG,
+  cast(NULL AS varchar(1)) AS MODULE_SCHEMA,
+  cast(f."mod" AS varchar(128)) AS MODULE_NAME,
+  cast(NULL AS varchar(1)) AS UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS UDT_NAME,
+  cast(CASE f."type" WHEN 1 THEN sys."describe_type"(a."type", 
a."type_digits", a."type_scale") WHEN 2 THEN NULL WHEN 5 THEN 'TABLE' WHEN 7 
THEN 'TABLE' ELSE NULL END AS varchar(1024)) AS DATA_TYPE,
+  cast(sys.ifthenelse(a."type" IN ('varchar','clob','char','json','url','xml') 
AND a."type_digits" > 0, a."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
+  cast(sys.ifthenelse(a."type" IN ('varchar','clob','char','json','url','xml') 
AND a."type_digits" > 0, a."type_digits" * 4, NULL) AS int) AS 
CHARACTER_OCTET_LENGTH,
+  cast(NULL AS varchar(1)) AS CHARACTER_SET_CATALOG,
+  cast(NULL AS varchar(1)) AS CHARACTER_SET_SCHEMA,
+  'UTF-8' AS CHARACTER_SET_NAME,
+  cast(NULL AS varchar(1)) AS COLLATION_CATALOG,
+  cast(NULL AS varchar(1)) AS COLLATION_SCHEMA,
+  cast(NULL AS varchar(1)) AS COLLATION_NAME,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 a."type_digits", NULL) AS int) AS NUMERIC_PRECISION,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','oid'), 
2, sys.ifthenelse(a."type" IN ('decimal','numeric'), 10, NULL)) AS int) AS 
NUMERIC_PRECISION_RADIX,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 a."type_scale", NULL) AS int) AS NUMERIC_SCALE,
+  cast(sys.ifthenelse(a."type" IN 
('date','timestamp','timestamptz','time','timetz'), a."type_scale" -1, NULL) AS 
int) AS DATETIME_PRECISION,
+  cast(sys.ifthenelse(a."type" IN 
('day_interval','month_interval','sec_interval'), sys."describe_type"(a."type", 
a."type_digits", a."type_scale"), NULL) AS varchar(40)) AS INTERVAL_TYPE,
+  cast(CASE a."type" WHEN 'day_interval' THEN 0 WHEN 'month_interval' THEN 0 
WHEN 'sec_interval' THEN (sys.ifthenelse(a."type_digits" IN (7, 10, 12, 13), 
sys.ifthenelse(a."type_scale" > 0, a."type_scale", 3), 0)) ELSE NULL END AS 
int) AS INTERVAL_PRECISION,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_NAME,
+  cast(NULL AS varchar(1)) AS SCOPE_CATALOG,
+  cast(NULL AS varchar(1)) AS SCOPE_SCHEMA,
+  cast(NULL AS varchar(1)) AS SCOPE_NAME,
+  cast(NULL AS int) AS MAXIMUM_CARDINALITY,
+  cast(NULL AS int) AS DTD_IDENTIFIER,
+  cast(sys."ifthenelse"(sys."locate"('begin',f."func") > 0, 
sys."ifthenelse"(sys."endswith"(f."func",';'), sys."substring"(f."func", 
sys."locate"('begin',f."func"), sys."length"(sys."substring"(f."func", 
sys."locate"('begin',f."func")))-1), sys."substring"(f."func", 
sys."locate"('begin',f."func"))), NULL) AS varchar(8196)) AS ROUTINE_BODY,
+  f."func" AS ROUTINE_DEFINITION,
+  cast(sys."ifthenelse"(sys."locate"('external name',f."func") > 0, 
sys."ifthenelse"(sys."endswith"(f."func",';'), sys."substring"(f."func", 14 + 
sys."locate"('external name',f."func"), sys."length"(sys."substring"(f."func", 
14 + sys."locate"('external name',f."func")))-1), sys."substring"(f."func", 14 
+ sys."locate"('external name',f."func"))), NULL) AS varchar(1024)) AS 
EXTERNAL_NAME,
+  fl."language_keyword" AS EXTERNAL_LANGUAGE,
+  'GENERAL' AS PARAMETER_STYLE,
+  'YES' AS IS_DETERMINISTIC,
+  cast(sys.ifthenelse(f."side_effect", 'MODIFIES', 'READ') AS varchar(10)) AS 
SQL_DATA_ACCESS,
+  cast(CASE f."type" WHEN 2 THEN NULL ELSE 'NO' END AS varchar(3)) AS 
IS_NULL_CALL,
+  cast(NULL AS varchar(1)) AS SQL_PATH,
+  cast(NULL AS varchar(1)) AS SCHEMA_LEVEL_ROUTINE,
+  cast(NULL AS int) AS MAX_DYNAMIC_RESULT_SETS,
+  cast(NULL AS varchar(1)) AS IS_USER_DEFINED_CAST,
+  cast(NULL AS varchar(1)) AS IS_IMPLICITLY_INVOCABLE,
+  cast(NULL AS varchar(1)) AS SECURITY_TYPE,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_CATALOG,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_SCHEMA,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_NAME,
+  cast(NULL AS varchar(1)) AS AS_LOCATOR,
+  cast(NULL AS timestamp) AS CREATED,
+  cast(NULL AS timestamp) AS LAST_ALTERED,
+  cast(NULL AS varchar(1)) AS NEW_SAVEPOINT_LEVEL,
+  cast(NULL AS varchar(1)) AS IS_UDT_DEPENDENT,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_FROM_DATA_TYPE,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_AS_LOCATOR,
+  cast(NULL AS int) AS RESULT_CAST_CHAR_MAX_LENGTH,
+  cast(NULL AS int) AS RESULT_CAST_CHAR_OCTET_LENGTH,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHAR_SET_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHAR_SET_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHARACTER_SET_NAME,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_NAME,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_PRECISION,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_RADIX,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_SCALE,
+  cast(NULL AS int) AS RESULT_CAST_DATETIME_PRECISION,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_INTERVAL_TYPE,
+  cast(NULL AS int) AS RESULT_CAST_INTERVAL_PRECISION,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_NAME,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_NAME,
+  cast(NULL AS int) AS RESULT_CAST_MAX_CARDINALITY,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_DTD_IDENTIFIER,
+  cast(NULL AS varchar(1)) AS DECLARED_DATA_TYPE,
+  cast(NULL AS int) AS DECLARED_NUMERIC_PRECISION,
+  cast(NULL AS int) AS DECLARED_NUMERIC_SCALE,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_FROM_DECLARED_DATA_TYPE,
+  cast(NULL AS int) AS RESULT_CAST_DECLARED_NUMERIC_PRECISION,
+  cast(NULL AS int) AS RESULT_CAST_DECLARED_NUMERIC_SCALE,
+  -- MonetDB column extensions
+  f."schema_id" AS schema_id,
+  f."id" AS function_id,
+  f."type" AS function_type,
+  f."language" AS function_language,
+  f."system" AS is_system,
+  cm."remark" AS comments
+ FROM sys."functions" f
+ INNER JOIN sys."schemas" s ON s."id" = f."schema_id"
+ INNER JOIN sys."function_types" ft ON ft."function_type_id" = f."type"
+ INNER JOIN sys."function_languages" fl ON fl."language_id" = f."language"
+ LEFT OUTER JOIN sys."args" a ON a."func_id" = f."id" and a."inout" = 0 and 
a."number" = 0
+ LEFT OUTER JOIN sys."comments" cm ON cm."id" = f."id"
+ WHERE f."type" in (1, 2, 5, 7)
+ ORDER BY s."name", f."name";
+GRANT SELECT ON TABLE INFORMATION_SCHEMA.ROUTINES TO PUBLIC WITH GRANT OPTION;
 CREATE VIEW INFORMATION_SCHEMA.SEQUENCES AS SELECT
   cast(NULL AS varchar(1)) AS SEQUENCE_CATALOG,
   s."name" AS SEQUENCE_SCHEMA,
   sq."name" AS SEQUENCE_NAME,
-  cast('bigint' AS varchar(16)) AS DATA_TYPE,
+  cast('BIGINT' AS varchar(16)) AS DATA_TYPE,
   cast(64 AS SMALLINT) AS NUMERIC_PRECISION,
   cast(2 AS SMALLINT) AS NUMERIC_PRECISION_RADIX,
   cast(0 AS SMALLINT) AS NUMERIC_SCALE,
@@ -740,7 +845,7 @@ GRANT SELECT ON TABLE INFORMATION_SCHEMA
 
 update sys._tables set system = true where system <> true
  and schema_id = (select s.id from sys.schemas s where s.name = 
'information_schema')
- and name in 
('character_sets','check_constraints','columns','schemata','sequences','referential_constraints','table_constraints','tables','views');
+ and name in 
('character_sets','check_constraints','columns','routines','schemata','sequences','referential_constraints','table_constraints','tables','views');
 
 Running database upgrade commands:
 CREATE FUNCTION sys.persist_unlogged()
diff --git a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
@@ -596,12 +596,12 @@ CREATE VIEW INFORMATION_SCHEMA.COLUMNS A
   s."name" AS TABLE_SCHEMA,
   t."name" AS TABLE_NAME,
   c."name" AS COLUMN_NAME,
-  cast(c."number" +1 AS int) AS ORDINAL_POSITION,
+  cast(1 + c."number" AS int) AS ORDINAL_POSITION,
   c."default" AS COLUMN_DEFAULT,
   cast(sys.ifthenelse(c."null", 'YES', 'NO') AS varchar(3)) AS IS_NULLABLE,
-  CASE c."type" WHEN 'day_interval' THEN 'interval day' WHEN 'month_interval' 
THEN 'interval month' WHEN 'sec_interval' THEN 'interval second' ELSE c."type" 
END AS DATA_TYPE,
-  cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
-  cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits" * 3, NULL) AS 
int) AS CHARACTER_OCTET_LENGTH,
+  cast(sys."describe_type"(c."type", c."type_digits", c."type_scale") AS 
varchar(1024)) AS DATA_TYPE,
+  cast(sys.ifthenelse(c."type" IN ('varchar','clob','char','json','url','xml') 
AND c."type_digits" > 0, c."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
+  cast(sys.ifthenelse(c."type" IN ('varchar','clob','char','json','url','xml') 
AND c."type_digits" > 0, c."type_digits" * 4, NULL) AS int) AS 
CHARACTER_OCTET_LENGTH,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_digits", NULL) AS int) AS NUMERIC_PRECISION,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','oid'), 
2, sys.ifthenelse(c."type" IN ('decimal','numeric'), 10, NULL)) AS int) AS 
NUMERIC_PRECISION_RADIX,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_scale", NULL) AS int) AS NUMERIC_SCALE,
@@ -710,11 +710,116 @@ CREATE VIEW INFORMATION_SCHEMA.REFERENTI
  LEFT OUTER JOIN sys."schemas" uks ON uks."id" = ukt."schema_id"
  ORDER BY s."name", t."name", fk."name";
 GRANT SELECT ON TABLE INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS TO PUBLIC 
WITH GRANT OPTION;
+CREATE VIEW INFORMATION_SCHEMA.ROUTINES AS SELECT
+  cast(NULL AS varchar(1)) AS SPECIFIC_CATALOG,
+  s."name" AS SPECIFIC_SCHEMA,
+  cast(f."id" as varchar(10)) AS SPECIFIC_NAME,
+  cast(NULL AS varchar(1)) AS ROUTINE_CATALOG,
+  s."name" AS ROUTINE_SCHEMA,
+  f."name" AS ROUTINE_NAME,
+  ft."function_type_keyword" AS ROUTINE_TYPE,
+  cast(NULL AS varchar(1)) AS MODULE_CATALOG,
+  cast(NULL AS varchar(1)) AS MODULE_SCHEMA,
+  cast(f."mod" AS varchar(128)) AS MODULE_NAME,
+  cast(NULL AS varchar(1)) AS UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS UDT_NAME,
+  cast(CASE f."type" WHEN 1 THEN sys."describe_type"(a."type", 
a."type_digits", a."type_scale") WHEN 2 THEN NULL WHEN 5 THEN 'TABLE' WHEN 7 
THEN 'TABLE' ELSE NULL END AS varchar(1024)) AS DATA_TYPE,
+  cast(sys.ifthenelse(a."type" IN ('varchar','clob','char','json','url','xml') 
AND a."type_digits" > 0, a."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
+  cast(sys.ifthenelse(a."type" IN ('varchar','clob','char','json','url','xml') 
AND a."type_digits" > 0, a."type_digits" * 4, NULL) AS int) AS 
CHARACTER_OCTET_LENGTH,
+  cast(NULL AS varchar(1)) AS CHARACTER_SET_CATALOG,
+  cast(NULL AS varchar(1)) AS CHARACTER_SET_SCHEMA,
+  'UTF-8' AS CHARACTER_SET_NAME,
+  cast(NULL AS varchar(1)) AS COLLATION_CATALOG,
+  cast(NULL AS varchar(1)) AS COLLATION_SCHEMA,
+  cast(NULL AS varchar(1)) AS COLLATION_NAME,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 a."type_digits", NULL) AS int) AS NUMERIC_PRECISION,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','oid'), 
2, sys.ifthenelse(a."type" IN ('decimal','numeric'), 10, NULL)) AS int) AS 
NUMERIC_PRECISION_RADIX,
+  cast(sys.ifthenelse(a."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 a."type_scale", NULL) AS int) AS NUMERIC_SCALE,
+  cast(sys.ifthenelse(a."type" IN 
('date','timestamp','timestamptz','time','timetz'), a."type_scale" -1, NULL) AS 
int) AS DATETIME_PRECISION,
+  cast(sys.ifthenelse(a."type" IN 
('day_interval','month_interval','sec_interval'), sys."describe_type"(a."type", 
a."type_digits", a."type_scale"), NULL) AS varchar(40)) AS INTERVAL_TYPE,
+  cast(CASE a."type" WHEN 'day_interval' THEN 0 WHEN 'month_interval' THEN 0 
WHEN 'sec_interval' THEN (sys.ifthenelse(a."type_digits" IN (7, 10, 12, 13), 
sys.ifthenelse(a."type_scale" > 0, a."type_scale", 3), 0)) ELSE NULL END AS 
int) AS INTERVAL_PRECISION,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS TYPE_UDT_NAME,
+  cast(NULL AS varchar(1)) AS SCOPE_CATALOG,
+  cast(NULL AS varchar(1)) AS SCOPE_SCHEMA,
+  cast(NULL AS varchar(1)) AS SCOPE_NAME,
+  cast(NULL AS int) AS MAXIMUM_CARDINALITY,
+  cast(NULL AS int) AS DTD_IDENTIFIER,
+  cast(sys."ifthenelse"(sys."locate"('begin',f."func") > 0, 
sys."ifthenelse"(sys."endswith"(f."func",';'), sys."substring"(f."func", 
sys."locate"('begin',f."func"), sys."length"(sys."substring"(f."func", 
sys."locate"('begin',f."func")))-1), sys."substring"(f."func", 
sys."locate"('begin',f."func"))), NULL) AS varchar(8196)) AS ROUTINE_BODY,
+  f."func" AS ROUTINE_DEFINITION,
+  cast(sys."ifthenelse"(sys."locate"('external name',f."func") > 0, 
sys."ifthenelse"(sys."endswith"(f."func",';'), sys."substring"(f."func", 14 + 
sys."locate"('external name',f."func"), sys."length"(sys."substring"(f."func", 
14 + sys."locate"('external name',f."func")))-1), sys."substring"(f."func", 14 
+ sys."locate"('external name',f."func"))), NULL) AS varchar(1024)) AS 
EXTERNAL_NAME,
+  fl."language_keyword" AS EXTERNAL_LANGUAGE,
+  'GENERAL' AS PARAMETER_STYLE,
+  'YES' AS IS_DETERMINISTIC,
+  cast(sys.ifthenelse(f."side_effect", 'MODIFIES', 'READ') AS varchar(10)) AS 
SQL_DATA_ACCESS,
+  cast(CASE f."type" WHEN 2 THEN NULL ELSE 'NO' END AS varchar(3)) AS 
IS_NULL_CALL,
+  cast(NULL AS varchar(1)) AS SQL_PATH,
+  cast(NULL AS varchar(1)) AS SCHEMA_LEVEL_ROUTINE,
+  cast(NULL AS int) AS MAX_DYNAMIC_RESULT_SETS,
+  cast(NULL AS varchar(1)) AS IS_USER_DEFINED_CAST,
+  cast(NULL AS varchar(1)) AS IS_IMPLICITLY_INVOCABLE,
+  cast(NULL AS varchar(1)) AS SECURITY_TYPE,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_CATALOG,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_SCHEMA,
+  cast(NULL AS varchar(1)) AS TO_SQL_SPECIFIC_NAME,
+  cast(NULL AS varchar(1)) AS AS_LOCATOR,
+  cast(NULL AS timestamp) AS CREATED,
+  cast(NULL AS timestamp) AS LAST_ALTERED,
+  cast(NULL AS varchar(1)) AS NEW_SAVEPOINT_LEVEL,
+  cast(NULL AS varchar(1)) AS IS_UDT_DEPENDENT,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_FROM_DATA_TYPE,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_AS_LOCATOR,
+  cast(NULL AS int) AS RESULT_CAST_CHAR_MAX_LENGTH,
+  cast(NULL AS int) AS RESULT_CAST_CHAR_OCTET_LENGTH,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHAR_SET_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHAR_SET_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_CHARACTER_SET_NAME,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_COLLATION_NAME,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_PRECISION,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_RADIX,
+  cast(NULL AS int) AS RESULT_CAST_NUMERIC_SCALE,
+  cast(NULL AS int) AS RESULT_CAST_DATETIME_PRECISION,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_INTERVAL_TYPE,
+  cast(NULL AS int) AS RESULT_CAST_INTERVAL_PRECISION,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_TYPE_UDT_NAME,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_CATALOG,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_SCHEMA,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_SCOPE_NAME,
+  cast(NULL AS int) AS RESULT_CAST_MAX_CARDINALITY,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_DTD_IDENTIFIER,
+  cast(NULL AS varchar(1)) AS DECLARED_DATA_TYPE,
+  cast(NULL AS int) AS DECLARED_NUMERIC_PRECISION,
+  cast(NULL AS int) AS DECLARED_NUMERIC_SCALE,
+  cast(NULL AS varchar(1)) AS RESULT_CAST_FROM_DECLARED_DATA_TYPE,
+  cast(NULL AS int) AS RESULT_CAST_DECLARED_NUMERIC_PRECISION,
+  cast(NULL AS int) AS RESULT_CAST_DECLARED_NUMERIC_SCALE,
+  -- MonetDB column extensions
+  f."schema_id" AS schema_id,
+  f."id" AS function_id,
+  f."type" AS function_type,
+  f."language" AS function_language,
+  f."system" AS is_system,
+  cm."remark" AS comments
+ FROM sys."functions" f
+ INNER JOIN sys."schemas" s ON s."id" = f."schema_id"
+ INNER JOIN sys."function_types" ft ON ft."function_type_id" = f."type"
+ INNER JOIN sys."function_languages" fl ON fl."language_id" = f."language"
+ LEFT OUTER JOIN sys."args" a ON a."func_id" = f."id" and a."inout" = 0 and 
a."number" = 0
+ LEFT OUTER JOIN sys."comments" cm ON cm."id" = f."id"
+ WHERE f."type" in (1, 2, 5, 7)
+ ORDER BY s."name", f."name";
+GRANT SELECT ON TABLE INFORMATION_SCHEMA.ROUTINES TO PUBLIC WITH GRANT OPTION;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to