Changeset: 22ae75c7ff07 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/22ae75c7ff07 Modified Files: sql/backends/monet5/sql_upgrades.c sql/scripts/39_analytics_hge.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.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:
Implemented upgrade code, approved tests, fixed typo for decimal median/quantile. diffs (truncated from 2170 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 @@ -6625,6 +6625,78 @@ sql_update_default(Client c, mvc *sql, s "update sys.args set type_digits = 63 where type = 'bigint' and type_digits <> 63;\n" "update sys.args set type_digits = 127 where type = 'hugeint' and type_digits <> 127;\n" "update sys.args set type = 'varchar' where type in ('clob', 'char');\n" + "drop aggregate median(decimal);\n" + "drop aggregate median_avg(decimal);\n" + "drop aggregate quantile(decimal, double);\n" + "drop aggregate quantile_avg(decimal, double);\n" + "create aggregate median(val DECIMAL(2)) returns DECIMAL(2)\n" + " external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(DECIMAL(2)) TO PUBLIC;\n" + "create aggregate median(val DECIMAL(4)) returns DECIMAL(4)\n" + " external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(DECIMAL(4)) TO PUBLIC;\n" + "create aggregate median(val DECIMAL(9)) returns DECIMAL(9)\n" + " external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(DECIMAL(9)) TO PUBLIC;\n" + "create aggregate median(val DECIMAL(18)) returns DECIMAL(18)\n" + " external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(DECIMAL(18)) TO PUBLIC;\n" +#ifdef HAVE_HGE + "create aggregate median(val DECIMAL(38)) returns DECIMAL(38)\n" + " external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(DECIMAL(38)) TO PUBLIC;\n" +#endif + "create aggregate median_avg(val DECIMAL(2)) returns DOUBLE\n" + " external name \"aggr\".\"median_avg\";\n" + "GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(2)) TO PUBLIC;\n" + "create aggregate median_avg(val DECIMAL(4)) returns DOUBLE\n" + " external name \"aggr\".\"median_avg\";\n" + "GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(4)) TO PUBLIC;\n" + "create aggregate median_avg(val DECIMAL(9)) returns DOUBLE\n" + " external name \"aggr\".\"median_avg\";\n" + "GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(9)) TO PUBLIC;\n" + "create aggregate median_avg(val DECIMAL(18)) returns DOUBLE\n" + " external name \"aggr\".\"median_avg\";\n" + "GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(18)) TO PUBLIC;\n" +#ifdef HAVE_HGE + "create aggregate median_avg(val DECIMAL(38)) returns DOUBLE\n" + " external name \"aggr\".\"median_avg\";\n" + "GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(38)) TO PUBLIC;\n" +#endif + "create aggregate quantile(val DECIMAL(2), q DOUBLE) returns DECIMAL(2)\n" + " external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(2), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile(val DECIMAL(4), q DOUBLE) returns DECIMAL(4)\n" + " external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(4), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile(val DECIMAL(9), q DOUBLE) returns DECIMAL(9)\n" + " external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(9), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile(val DECIMAL(18), q DOUBLE) returns DECIMAL(18)\n" + " external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(18), DOUBLE) TO PUBLIC;\n" +#ifdef HAVE_HGE + "create aggregate quantile(val DECIMAL(38), q DOUBLE) returns DECIMAL(38)\n" + " external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(38), DOUBLE) TO PUBLIC;\n" +#endif + "create aggregate quantile_avg(val DECIMAL(2), q DOUBLE) returns DOUBLE\n" + " external name \"aggr\".\"quantile_avg\";\n" + "GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(2), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile_avg(val DECIMAL(4), q DOUBLE) returns DOUBLE\n" + " external name \"aggr\".\"quantile_avg\";\n" + "GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(4), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile_avg(val DECIMAL(9), q DOUBLE) returns DOUBLE\n" + " external name \"aggr\".\"quantile_avg\";\n" + "GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(9), DOUBLE) TO PUBLIC;\n" + "create aggregate quantile_avg(val DECIMAL(18), q DOUBLE) returns DOUBLE\n" + " external name \"aggr\".\"quantile_avg\";\n" + "GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(18), DOUBLE) TO PUBLIC;\n" +#ifdef HAVE_HGE + "create aggregate quantile_avg(val DECIMAL(38), q DOUBLE) returns DOUBLE\n" + " external name \"aggr\".\"quantile_avg\";\n" + "GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(38), DOUBLE) TO PUBLIC;\n" +#endif "drop function if exists sys.time_to_str(time with time zone, string) cascade;\n" "drop function if exists sys.timestamp_to_str(timestamp with time zone, string) cascade;\n" "create function time_to_str(d time, format string) returns string\n" @@ -6636,7 +6708,7 @@ sql_update_default(Client c, mvc *sql, s "grant execute on function time_to_str(time, string) to public;\n" "grant execute on function time_to_str(time with time zone, string) to public;\n" "grant execute on function timestamp_to_str(timestamp with time zone, string) to public;\n" - "update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str');\n" + "update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str', 'median', 'median_avg', 'quantile', 'quantile_avg');\n" "drop function if exists sys.dump_database(boolean) cascade;\n" "drop view sys.dump_comments;\n" "drop view sys.dump_tables;\n" diff --git a/sql/scripts/39_analytics_hge.sql b/sql/scripts/39_analytics_hge.sql --- a/sql/scripts/39_analytics_hge.sql +++ b/sql/scripts/39_analytics_hge.sql @@ -54,7 +54,7 @@ create aggregate median(val HUGEINT) ret external name "aggr"."median"; GRANT EXECUTE ON AGGREGATE median(HUGEINT) TO PUBLIC; -create aggregate median(val DECIMAL(38)) returns HUGEINT +create aggregate median(val DECIMAL(38)) returns DECIMAL(38) external name "aggr"."median"; GRANT EXECUTE ON AGGREGATE median(DECIMAL(38)) TO PUBLIC; @@ -62,7 +62,7 @@ create aggregate quantile(val HUGEINT, q external name "aggr"."quantile"; GRANT EXECUTE ON AGGREGATE quantile(HUGEINT, DOUBLE) TO PUBLIC; -create aggregate quantile(val DECIMAL(38), q DOUBLE) returns HUGEINT +create aggregate quantile(val DECIMAL(38), q DOUBLE) returns DECIMAL(38) external name "aggr"."quantile"; GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(38), DOUBLE) TO PUBLIC; 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 @@ -623,6 +623,70 @@ update sys.args set type_digits = 31 whe update sys.args set type_digits = 63 where type = 'bigint' and type_digits <> 63; update sys.args set type_digits = 127 where type = 'hugeint' and type_digits <> 127; update sys.args set type = 'varchar' where type in ('clob', 'char'); +drop aggregate median(decimal); +drop aggregate median_avg(decimal); +drop aggregate quantile(decimal, double); +drop aggregate quantile_avg(decimal, double); +create aggregate median(val DECIMAL(2)) returns DECIMAL(2) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(2)) TO PUBLIC; +create aggregate median(val DECIMAL(4)) returns DECIMAL(4) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(4)) TO PUBLIC; +create aggregate median(val DECIMAL(9)) returns DECIMAL(9) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(9)) TO PUBLIC; +create aggregate median(val DECIMAL(18)) returns DECIMAL(18) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(18)) TO PUBLIC; +create aggregate median(val DECIMAL(38)) returns DECIMAL(38) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(38)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(2)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(2)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(4)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(4)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(9)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(9)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(18)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(18)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(38)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(38)) TO PUBLIC; +create aggregate quantile(val DECIMAL(2), q DOUBLE) returns DECIMAL(2) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(2), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(4), q DOUBLE) returns DECIMAL(4) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(4), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(9), q DOUBLE) returns DECIMAL(9) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(9), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(18), q DOUBLE) returns DECIMAL(18) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(18), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(38), q DOUBLE) returns DECIMAL(38) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(38), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(2), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(2), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(4), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(4), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(9), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(9), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(18), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(18), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(38), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(38), DOUBLE) TO PUBLIC; drop function if exists sys.time_to_str(time with time zone, string) cascade; drop function if exists sys.timestamp_to_str(timestamp with time zone, string) cascade; create function time_to_str(d time, format string) returns string @@ -634,7 +698,7 @@ create function timestamp_to_str(d times grant execute on function time_to_str(time, string) to public; grant execute on function time_to_str(time with time zone, string) to public; grant execute on function timestamp_to_str(timestamp with time zone, string) to public; -update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str'); +update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str', 'median', 'median_avg', 'quantile', 'quantile_avg'); drop function if exists sys.dump_database(boolean) cascade; drop view sys.dump_comments; drop view sys.dump_tables; 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 @@ -623,6 +623,58 @@ update sys.args set type_digits = 31 whe update sys.args set type_digits = 63 where type = 'bigint' and type_digits <> 63; update sys.args set type_digits = 127 where type = 'hugeint' and type_digits <> 127; update sys.args set type = 'varchar' where type in ('clob', 'char'); +drop aggregate median(decimal); +drop aggregate median_avg(decimal); +drop aggregate quantile(decimal, double); +drop aggregate quantile_avg(decimal, double); +create aggregate median(val DECIMAL(2)) returns DECIMAL(2) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(2)) TO PUBLIC; +create aggregate median(val DECIMAL(4)) returns DECIMAL(4) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(4)) TO PUBLIC; +create aggregate median(val DECIMAL(9)) returns DECIMAL(9) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(9)) TO PUBLIC; +create aggregate median(val DECIMAL(18)) returns DECIMAL(18) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(18)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(2)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(2)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(4)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(4)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(9)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(9)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(18)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(18)) TO PUBLIC; +create aggregate quantile(val DECIMAL(2), q DOUBLE) returns DECIMAL(2) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(2), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(4), q DOUBLE) returns DECIMAL(4) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(4), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(9), q DOUBLE) returns DECIMAL(9) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(9), DOUBLE) TO PUBLIC; +create aggregate quantile(val DECIMAL(18), q DOUBLE) returns DECIMAL(18) + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(18), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(2), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(2), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(4), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(4), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(9), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(9), DOUBLE) TO PUBLIC; +create aggregate quantile_avg(val DECIMAL(18), q DOUBLE) returns DOUBLE + external name "aggr"."quantile_avg"; +GRANT EXECUTE ON AGGREGATE quantile_avg(DECIMAL(18), DOUBLE) TO PUBLIC; drop function if exists sys.time_to_str(time with time zone, string) cascade; drop function if exists sys.timestamp_to_str(timestamp with time zone, string) cascade; create function time_to_str(d time, format string) returns string @@ -634,7 +686,7 @@ create function timestamp_to_str(d times grant execute on function time_to_str(time, string) to public; grant execute on function time_to_str(time with time zone, string) to public; grant execute on function timestamp_to_str(timestamp with time zone, string) to public; -update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str'); +update sys.functions set system = true where not system and schema_id = 2000 and name in ('time_to_str', 'timestamp_to_str', 'median', 'median_avg', 'quantile', 'quantile_avg'); drop function if exists sys.dump_database(boolean) cascade; drop view sys.dump_comments; drop view sys.dump_tables; diff --git a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 --- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 +++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 @@ -692,6 +692,70 @@ update sys.args set type_digits = 31 whe update sys.args set type_digits = 63 where type = 'bigint' and type_digits <> 63; update sys.args set type_digits = 127 where type = 'hugeint' and type_digits <> 127; update sys.args set type = 'varchar' where type in ('clob', 'char'); +drop aggregate median(decimal); +drop aggregate median_avg(decimal); +drop aggregate quantile(decimal, double); +drop aggregate quantile_avg(decimal, double); +create aggregate median(val DECIMAL(2)) returns DECIMAL(2) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(2)) TO PUBLIC; +create aggregate median(val DECIMAL(4)) returns DECIMAL(4) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(4)) TO PUBLIC; +create aggregate median(val DECIMAL(9)) returns DECIMAL(9) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(9)) TO PUBLIC; +create aggregate median(val DECIMAL(18)) returns DECIMAL(18) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(18)) TO PUBLIC; +create aggregate median(val DECIMAL(38)) returns DECIMAL(38) + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(DECIMAL(38)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(2)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(2)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(4)) returns DOUBLE + external name "aggr"."median_avg"; +GRANT EXECUTE ON AGGREGATE median_avg(DECIMAL(4)) TO PUBLIC; +create aggregate median_avg(val DECIMAL(9)) returns DOUBLE + external name "aggr"."median_avg"; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org