Changeset: 48093d2eea7e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/48093d2eea7e
Modified Files:
        monetdb5/modules/atoms/str.c
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/39_analytics.sql
        sql/scripts/39_analytics_hge.sql
        sql/scripts/91_information_schema.sql
        
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-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/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.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: ordered-set-aggregates
Log Message:

Fix and approve upgrade code.


diffs (truncated from 6450 to 300 lines):

diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -1944,7 +1944,7 @@ STRselect(MalStkPtr stk, InstrPtr pci,
                        bn->tnonil = true;
                        bn->tseqbase = rcnt == 0 ?
                                0 : rcnt == 1 ?
-                               *(const oid *) Tloc(bn, 0) : rcnt == ci.ncand 
&& ci.tpe == cand_dense ? ci.hseq : oid_nil;
+                               *(const oid *) Tloc(bn, 0) : rcnt == ci.ncand 
&& ci.tpe == cand_dense ? ci.seq : oid_nil;
 
                        if (with_strimps_anti) {
                                BAT *rev;
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
@@ -4411,6 +4411,7 @@ sql_update_default(Client c, mvc *sql, s
 {
        char *err = MAL_SUCCEED;
        sql_subtype tp;
+       res_table *output = NULL;
 
        sql_find_subtype(&tp, "varchar", 0, 0);
        if (!sql_bind_func(sql, s->base.name, "vacuum", &tp, &tp, F_PROC, true, 
true)) {
@@ -4473,6 +4474,246 @@ sql_update_default(Client c, mvc *sql, s
                err = SQLstatementIntern(c, query, "update", true, false, NULL);
        }
 
+       if ((err = SQLstatementIntern(c, "select id from sys.functions where 
name = 'quantile' and schema_id = 2000 and contains(func, 'ordered');\n", 
"update", true, false, &output)) == MAL_SUCCEED) {
+               BAT *b;
+               if ((b = BBPquickdesc(output->cols[0].b)) && BATcount(b) == 0) {
+                       sql_table *t;
+                       t = mvc_bind_table(sql, s, "describe_comments");
+                       t->system = 0;
+                       t = mvc_bind_table(sql, s, "describe_functions");
+                       t->system = 0;
+                       t = mvc_bind_table(sql, s, "describe_privileges");
+                       t->system = 0;
+                       t = mvc_bind_table(sql, s, "dump_comments");
+                       t->system = 0;
+                       t = mvc_bind_table(sql, s, "dump_functions");
+                       t->system = 0;
+                       t = mvc_bind_table(sql, s, "fully_qualified_functions");
+                       t->system = 0;
+                       sql_schema *is = mvc_bind_schema(sql, 
"information_schema");
+                       t = mvc_bind_table(sql, is, "parameters");
+                       t->system = 0;
+                       char query[] = "update sys.functions set func = 
replace(func, E'\\n external', E' ordered\\n external') where name in 
('quantile','quantile_avg','median','median_avg') and schema_id = 2000 and 
language = (select language_id from sys.function_languages where language_name 
= 'MAL') and type = (select function_type_id from sys.function_types where 
function_type_keyword = 'AGGREGATE');\n"
+                               "update sys.functions set func = replace(func, 
E'\\n\\texternal', E' ordered\\n external') where name in 
('quantile','quantile_avg','median','median_avg') and schema_id = 2000 and 
language = (select language_id from sys.function_languages where language_name 
= 'MAL') and type = (select function_type_id from sys.function_types where 
function_type_keyword = 'AGGREGATE');\n"
+                               "update sys.functions set func = replace(func, 
E'\\nexternal', E' ordered\\n external') where name in 
('quantile','quantile_avg','median','median_avg') and schema_id = 2000 and 
language = (select language_id from sys.function_languages where language_name 
= 'MAL') and type = (select function_type_id from sys.function_types where 
function_type_keyword = 'AGGREGATE');\n"
+                               "update sys.functions set func = replace(func, 
E' external', E' with order\\n external') where name = 'group_concat' and 
schema_id = 2000 and language = (select language_id from sys.function_languages 
where language_name = 'MAL') and type = (select function_type_id from 
sys.function_types where function_type_keyword = 'AGGREGATE');\n"
+                               "drop function sys.dump_database(boolean) 
cascade;\n"
+                               "drop view sys.dump_functions cascade;\n"
+                               "drop view sys.dump_comments cascade;\n"
+                               "drop view sys.describe_comments cascade;\n"
+                               "drop view sys.describe_privileges cascade;\n"
+                               "drop view sys.fully_qualified_functions 
cascade;\n"
+                               "drop view sys.describe_functions cascade;\n"
+                               "CREATE VIEW sys.fully_qualified_functions AS\n"
+                               " SELECT\n"
+                               "  f.id id,\n"
+                               "  ft.function_type_keyword tpe,\n"
+                               "  sys.fqn(s.name, f.name) || '(' || 
group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',' order 
by a.number)  || ')' nme\n"
+                               " FROM sys.schemas s, sys.function_types ft, 
sys.functions f JOIN sys.args a ON f.id = a.func_id\n"
+                               " WHERE s.id= f.schema_id AND f.type = 
ft.function_type_id\n"
+                               " group by f.id, ft.function_type_keyword, 
f.name, s.name\n"
+                               " UNION\n"
+                               " SELECT f.id id,\n"
+                               "  ft.function_type_keyword tpe,\n"
+                               "  sys.fqn(s.name, f.name) || '()' nme\n"
+                               " FROM sys.schemas s, sys.function_types ft, 
sys.functions f\n"
+                               " WHERE s.id= f.schema_id AND f.type = 
ft.function_type_id and f.id not in ( select func_id from sys.args )\n"
+                               " group by f.id, ft.function_type_keyword, 
f.name, s.name;\n"
+                               "CREATE VIEW sys.describe_comments AS\n"
+                               " SELECT o.id AS id, o.tpe AS tpe, o.nme AS 
fqn, cm.remark AS rem\n"
+                               " FROM (\n"
+                               "  SELECT id, 'SCHEMA', sys.DQ(name) FROM 
sys.schemas WHERE NOT system\n"
+                               "  UNION ALL\n"
+                               "  SELECT t.id, ifthenelse(ts.table_type_name = 
'VIEW', 'VIEW', 'TABLE'), sys.FQN(s.name, t.name)\n"
+                               "    FROM sys.schemas s JOIN sys._tables t ON 
s.id = t.schema_id JOIN sys.table_types ts ON t.type = ts.table_type_id\n"
+                               "   WHERE NOT t.system\n"
+                               "  UNION ALL\n"
+                               "  SELECT c.id, 'COLUMN', sys.FQN(s.name, 
t.name) || '.' || sys.DQ(c.name) FROM sys.columns c, sys._tables t, sys.schemas 
s WHERE NOT t.system AND c.table_id = t.id AND t.schema_id = s.id\n"
+                               "  UNION ALL\n"
+                               "  SELECT idx.id, 'INDEX', sys.FQN(s.name, 
idx.name) FROM sys.idxs idx, sys._tables t, sys.schemas s WHERE NOT t.system 
AND idx.table_id = t.id AND t.schema_id = s.id\n"
+                               "  UNION ALL\n"
+                               "  SELECT seq.id, 'SEQUENCE', sys.FQN(s.name, 
seq.name) FROM sys.sequences seq, sys.schemas s WHERE seq.schema_id = s.id\n"
+                               "  UNION ALL\n"
+                               "  SELECT f.id, ft.function_type_keyword, 
qf.nme FROM sys.functions f, sys.function_types ft, sys.schemas s, 
sys.fully_qualified_functions qf\n"
+                               "   WHERE NOT f.system AND f.type = 
ft.function_type_id AND f.schema_id = s.id AND qf.id = f.id\n"
+                               "  ) AS o(id, tpe, nme)\n"
+                               " JOIN sys.comments cm ON cm.id = o.id;\n"
+                               "CREATE VIEW sys.describe_privileges AS\n"
+                               " SELECT\n"
+                               "  CASE\n"
+                               "   WHEN o.tpe IS NULL AND 
pc.privilege_code_name = 'SELECT' THEN\n"
+                               "    'COPY FROM'\n"
+                               "   WHEN o.tpe IS NULL AND 
pc.privilege_code_name = 'UPDATE' THEN\n"
+                               "    'COPY INTO'\n"
+                               "   ELSE\n"
+                               "    o.nme\n"
+                               "  END o_nme,\n"
+                               "  coalesce(o.tpe, 'GLOBAL') o_tpe,\n"
+                               "  pc.privilege_code_name p_nme,\n"
+                               "  a.name a_nme,\n"
+                               "  g.name g_nme,\n"
+                               "  p.grantable grantable\n"
+                               " FROM\n"
+                               "  sys.privileges p LEFT JOIN\n"
+                               "  (\n"
+                               "  SELECT t.id, s.name || '.' || t.name , 
'TABLE'\n"
+                               "   from sys.schemas s, sys.tables t where s.id 
= t.schema_id\n"
+                               "  UNION ALL\n"
+                               "   SELECT c.id, s.name || '.' || t.name || '.' 
|| c.name, 'COLUMN'\n"
+                               "   FROM sys.schemas s, sys.tables t, 
sys.columns c where s.id = t.schema_id AND t.id = c.table_id\n"
+                               "  UNION ALL\n"
+                               "   SELECT f.id, f.nme, f.tpe\n"
+                               "   FROM sys.fully_qualified_functions f\n"
+                               "  ) o(id, nme, tpe) ON o.id = p.obj_id,\n"
+                               "  sys.privilege_codes pc,\n"
+                               "  auths a, auths g\n"
+                               " WHERE\n"
+                               "  p.privileges = pc.privilege_code_id AND\n"
+                               "  p.auth_id = a.id AND\n"
+                               "  p.grantor = g.id;\n"
+                               "CREATE VIEW sys.describe_functions AS\n"
+                               " WITH func_args(func_id, func_arg) AS\n"
+                               " (\n"
+                               "  SELECT\n"
+                               "   func_id,\n"
+                               "   group_concat(sys.dq(name) || ' ' || 
sys.describe_type(type, type_digits, type_scale),', ' order by number)\n"
+                               "  FROM sys.args\n"
+                               "  WHERE inout = 1\n"
+                               "  group by func_id\n"
+                               " ),\n"
+                               " func_rets(func_id, func_ret, func_ret_type) 
AS\n"
+                               " (\n"
+                               "  SELECT\n"
+                               "   func_id,\n"
+                               "   group_concat(sys.dq(name) || ' ' || 
sys.describe_type(type, type_digits, type_scale),', ' order by number),\n"
+                               "   group_concat(sys.describe_type(type, 
type_digits, type_scale),', ' order by number)\n"
+                               "  FROM sys.args\n"
+                               "  WHERE inout = 0\n"
+                               "  group by func_id\n"
+                               " )\n"
+                               " SELECT\n"
+                               "  f.id o,\n"
+                               "  s.name sch,\n"
+                               "  f.name fun,\n"
+                               "  CASE WHEN f.language IN (1, 2) THEN f.func 
ELSE 'CREATE ' || ft.function_type_keyword || ' ' || sys.FQN(s.name, f.name) || 
'(' || coalesce(fa.func_arg, '') || ')' || CASE WHEN f.type = 5 THEN ' RETURNS 
TABLE (' || coalesce(fr.func_ret, '') || ')' WHEN f.type IN (1,3) THEN ' 
RETURNS ' || fr.func_ret_type ELSE '' END || CASE WHEN fl.language_keyword IS 
NULL THEN '' ELSE ' LANGUAGE ' || fl.language_keyword END || ' ' || f.func END 
def\n"
+                               " FROM sys.functions f\n"
+                               "  LEFT OUTER JOIN func_args fa ON fa.func_id = 
f.id\n"
+                               "  LEFT OUTER JOIN func_rets fr ON fr.func_id = 
f.id\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"
+                               " WHERE s.name <> 'tmp' AND NOT f.system;\n"
+                               "GRANT SELECT ON sys.describe_comments TO 
PUBLIC;\n"
+                               "GRANT SELECT ON sys.fully_qualified_functions 
TO PUBLIC;\n"
+                               "GRANT SELECT ON sys.describe_privileges TO 
PUBLIC;\n"
+                               "GRANT SELECT ON sys.describe_functions TO 
PUBLIC;\n"
+                               "CREATE VIEW sys.dump_functions AS\n"
+                               "  SELECT f.o o, sys.schema_guard(f.sch, f.fun, 
f.def) stmt,\n"
+                               "  f.sch schema_name,\n"
+                               "  f.fun function_name\n"
+                               "    FROM sys.describe_functions f;\n"
+                               "CREATE VIEW sys.dump_comments AS\n"
+                               "  SELECT 'COMMENT ON ' || c.tpe || ' ' || 
c.fqn || ' IS ' || sys.SQ(c.rem) || ';' stmt FROM sys.describe_comments c;\n"
+                               "CREATE FUNCTION sys.dump_database(describe 
BOOLEAN) RETURNS TABLE(o int, stmt STRING)\n"
+                               "BEGIN\n"
+                               "  SET SCHEMA sys;\n"
+                               "  TRUNCATE sys.dump_statements;\n"
+                               "  INSERT INTO sys.dump_statements VALUES (1, 
'START TRANSACTION;');\n"
+                               "  INSERT INTO sys.dump_statements VALUES (2, 
'SET SCHEMA \"sys\";');\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_create_roles;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_create_users;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_create_schemas;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_user_defined_types;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_add_schemas_to_users;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_grant_user_privileges;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_sequences;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(ORDER BY stmts.o), 
stmts.s\n"
+                               "        FROM (\n"
+                               "          SELECT f.o, f.stmt FROM 
sys.dump_functions f\n"
+                               "           UNION ALL\n"
+                               "          SELECT t.o, t.stmt FROM 
sys.dump_tables t\n"
+                               "        ) AS stmts(o, s);\n"
+                               "  IF NOT DESCRIBE THEN\n"
+                               "    CALL sys.dump_table_data();\n"
+                               "  END IF;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_start_sequences;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_column_defaults;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_table_constraint_type;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_indices;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_foreign_keys;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_partition_tables;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_triggers;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_comments;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_table_grants;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_column_grants;\n"
+                               "  INSERT INTO sys.dump_statements SELECT 
(SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), stmt FROM 
sys.dump_function_grants;\n"
+                               "  INSERT INTO sys.dump_statements VALUES 
((SELECT COUNT(*) FROM sys.dump_statements) + 1, 'COMMIT;');\n"
+                               "  RETURN sys.dump_statements;\n"
+                               "END;\n"
+                               "update sys.functions set system = true where 
not system and schema_id = 2000 and name = 'dump_database';\n"
+                               "update sys._tables set system = true where not 
system and schema_id = 2000 and name in ('dump_comments', 'dump_functions', 
'describe_functions', 'describe_privileges', 'describe_comments', 
'fully_qualified_functions');\n"
+                               "drop view information_schema.parameters 
cascade;\n"
+                               "CREATE VIEW INFORMATION_SCHEMA.PARAMETERS AS 
SELECT\n"
+                               " cast(NULL AS varchar(1)) AS 
SPECIFIC_CATALOG,\n"
+                               " s.\"name\" AS SPECIFIC_SCHEMA,\n"
+                               " cast(f.\"name\"||'('||f.\"id\"||')' AS 
varchar(270)) AS SPECIFIC_NAME, -- TODO: replace with full routine signature 
string. Note sys.fully_qualified_functions.nme does not produce the correct 
signature.\n"
+                               " cast(sys.ifthenelse((a.\"inout\" = 0 OR 
f.\"type\" = 2), 1 + a.\"number\", sys.ifthenelse(f.\"type\" = 1, a.\"number\", 
(1 + a.\"number\" - f.count_out_cols))) AS int) AS ORDINAL_POSITION,\n"
+                               " cast(sys.ifthenelse(a.\"inout\" = 0, 'OUT', 
sys.ifthenelse(a.\"inout\" = 1, 'IN', 'INOUT')) as varchar(5)) AS 
PARAMETER_MODE,  -- we do not yet support INOUT\n"
+                               " cast(sys.ifthenelse(a.\"inout\" = 0, 'YES', 
'NO') as varchar(3)) AS IS_RESULT,\n"
+                               " cast(NULL AS varchar(1)) AS AS_LOCATOR,\n"
+                               " a.\"name\" AS PARAMETER_NAME,\n"
+                               " cast(NULL AS varchar(1)) AS 
FROM_SQL_SPECIFIC_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS 
FROM_SQL_SPECIFIC_SCHEMA,\n"
+                               " cast(NULL AS varchar(1)) AS 
FROM_SQL_SPECIFIC_NAME,\n"
+                               " cast(NULL AS varchar(1)) AS 
TO_SQL_SPECIFIC_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS 
TO_SQL_SPECIFIC_SCHEMA,\n"
+                               " cast(NULL AS varchar(1)) AS 
TO_SQL_SPECIFIC_NAME,\n"
+                               " cast(sys.\"sql_datatype\"(a.\"type\", 
a.\"type_digits\", a.\"type_scale\", true, true) AS varchar(1024)) AS 
DATA_TYPE,\n"
+                               " 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,\n"
+                               " cast(sys.ifthenelse(a.\"type\" IN 
('varchar','clob','char','json','url','xml') AND a.\"type_digits\" > 0, 4 * 
cast(a.\"type_digits\" as bigint), NULL) AS bigint) AS 
CHARACTER_OCTET_LENGTH,\n"
+                               " cast(NULL AS varchar(1)) AS 
CHARACTER_SET_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS 
CHARACTER_SET_SCHEMA,\n"
+                               " cast(sys.ifthenelse(a.\"type\" IN 
('varchar','clob','char','json','url','xml'), 'UTF-8', NULL) AS varchar(16)) AS 
CHARACTER_SET_NAME,\n"
+                               " cast(NULL AS varchar(1)) AS 
COLLATION_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS 
COLLATION_SCHEMA,\n"
+                               " cast(NULL AS varchar(1)) AS COLLATION_NAME,\n"
+                               " 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,\n"
+                               " 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,\n"
+                               " 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,\n"
+                               " cast(sys.ifthenelse(a.\"type\" IN 
('date','timestamp','timestamptz','time','timetz'), 
sys.ifthenelse(a.\"type_scale\" > 0, a.\"type_scale\" -1, 0), NULL) AS int) AS 
DATETIME_PRECISION,\n"
+                               " cast(sys.ifthenelse(a.\"type\" IN 
('day_interval','month_interval','sec_interval'), 
sys.\"sql_datatype\"(a.\"type\", a.\"type_digits\", a.\"type_scale\", true, 
true), NULL) AS varchar(40)) AS INTERVAL_TYPE,\n"
+                               " 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,\n"
+                               " cast(NULL AS varchar(1)) AS UDT_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS UDT_SCHEMA,\n"
+                               " cast(NULL AS varchar(1)) AS UDT_NAME,\n"
+                               " cast(NULL AS varchar(1)) AS SCOPE_CATALOG,\n"
+                               " cast(NULL AS varchar(1)) AS SCOPE_SCHEMA,\n"
+                               " cast(NULL AS varchar(1)) AS SCOPE_NAME,\n"
+                               " cast(NULL AS int) AS MAXIMUM_CARDINALITY,\n"
+                               " cast(NULL AS varchar(1)) AS DTD_IDENTIFIER,\n"
+                               " cast(NULL AS varchar(1)) AS 
DECLARED_DATA_TYPE,\n"
+                               " cast(NULL AS int) AS 
DECLARED_NUMERIC_PRECISION,\n"
+                               " cast(NULL AS int) AS 
DECLARED_NUMERIC_SCALE,\n"
+                               " cast(NULL AS varchar(1)) AS 
PARAMETER_DEFAULT,\n"
+                               " -- MonetDB column extensions\n"
+                               " f.\"schema_id\" AS schema_id,\n"
+                               " f.\"id\" AS function_id,\n"
+                               " a.\"id\" AS arg_id,\n"
+                               " f.\"name\" AS function_name,\n"
+                               " f.\"type\" AS function_type,\n"
+                               " f.\"system\" AS is_system\n"
+                               " FROM sys.\"args\" a\n"
+                               " INNER JOIN (SELECT fun.id, fun.schema_id, 
fun.name, fun.type, fun.system, (select count(*) from sys.args a0 where 
a0.inout = 0 and a0.func_id = fun.id) as count_out_cols FROM sys.\"functions\" 
fun WHERE fun.\"type\" in (1, 2, 5, 7)) f ON f.\"id\" = a.\"func_id\"\n"
+                               " INNER JOIN sys.\"schemas\" s ON s.\"id\" = 
f.\"schema_id\"\n"
+                               " ORDER BY s.\"name\", f.\"name\", f.\"id\", 
a.\"inout\" DESC, a.\"number\";\n"
+                               "GRANT SELECT ON TABLE 
INFORMATION_SCHEMA.PARAMETERS TO PUBLIC WITH GRANT OPTION;\n"
+                               "update sys._tables set system = true where not 
system and schema_id = (select id from sys.schemas where name = 
'information_schema') and name = 'parameters';\n";
+                       printf("Running database upgrade commands:\n%s\n", 
query);
+                       fflush(stdout);
+                       err = SQLstatementIntern(c, query, "update", true, 
false, NULL);
+               }
+               res_table_destroy(output);
+       }
        return err;
 }
 
diff --git a/sql/scripts/39_analytics.sql b/sql/scripts/39_analytics.sql
--- a/sql/scripts/39_analytics.sql
+++ b/sql/scripts/39_analytics.sql
@@ -242,53 +242,53 @@ create window covar_pop(e1 DOUBLE, e2 DO
 GRANT EXECUTE ON WINDOW covar_pop(DOUBLE, DOUBLE) TO PUBLIC;
 
 
-create aggregate median(val TINYINT) returns TINYINT
+create aggregate median(val TINYINT) returns TINYINT ORDERED
        external name "aggr"."median";
 GRANT EXECUTE ON AGGREGATE median(TINYINT) TO PUBLIC;
-create aggregate median(val SMALLINT) returns SMALLINT
+create aggregate median(val SMALLINT) returns SMALLINT ORDERED
        external name "aggr"."median";
 GRANT EXECUTE ON AGGREGATE median(SMALLINT) TO PUBLIC;
-create aggregate median(val INTEGER) returns INTEGER
+create aggregate median(val INTEGER) returns INTEGER ORDERED
        external name "aggr"."median";
 GRANT EXECUTE ON AGGREGATE median(INTEGER) TO PUBLIC;
-create aggregate median(val BIGINT) returns BIGINT
+create aggregate median(val BIGINT) returns BIGINT ORDERED
        external name "aggr"."median";
 GRANT EXECUTE ON AGGREGATE median(BIGINT) TO PUBLIC;
-create aggregate median(val DECIMAL(2)) returns DECIMAL(2)
+create aggregate median(val DECIMAL(2)) returns DECIMAL(2) ORDERED
        external name "aggr"."median";
 GRANT EXECUTE ON AGGREGATE median(DECIMAL(2)) TO PUBLIC;
-create aggregate median(val DECIMAL(4)) returns DECIMAL(4)
+create aggregate median(val DECIMAL(4)) returns DECIMAL(4) ORDERED
        external name "aggr"."median";
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to