Changeset: abb620c2ba47 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/abb620c2ba47
Modified Files:
sql/scripts/39_analytics.sql
sql/scripts/39_analytics_hge.sql
sql/server/sql_semantic.c
Branch: default
Log Message:
add aggregates for all decimal types, this should make sure the smallest type
versions could be used.
diffs (137 lines):
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
@@ -254,9 +254,18 @@ GRANT EXECUTE ON AGGREGATE median(INTEGE
create aggregate median(val BIGINT) returns BIGINT
external name "aggr"."median";
GRANT EXECUTE ON AGGREGATE median(BIGINT) TO PUBLIC;
-create aggregate median(val DECIMAL) returns DECIMAL
+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) TO PUBLIC;
+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 REAL) returns REAL
external name "aggr"."median";
GRANT EXECUTE ON AGGREGATE median(REAL) TO PUBLIC;
@@ -296,9 +305,18 @@ GRANT EXECUTE ON AGGREGATE quantile(INTE
create aggregate quantile(val BIGINT, q DOUBLE) returns BIGINT
external name "aggr"."quantile";
GRANT EXECUTE ON AGGREGATE quantile(BIGINT, DOUBLE) TO PUBLIC;
-create aggregate quantile(val DECIMAL, q DOUBLE) returns DECIMAL
+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, DOUBLE) TO PUBLIC;
+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 REAL, q DOUBLE) returns REAL
external name "aggr"."quantile";
GRANT EXECUTE ON AGGREGATE quantile(REAL, DOUBLE) TO PUBLIC;
@@ -338,9 +356,18 @@ GRANT EXECUTE ON AGGREGATE median_avg(IN
create aggregate median_avg(val BIGINT) returns DOUBLE
external name "aggr"."median_avg";
GRANT EXECUTE ON AGGREGATE median_avg(BIGINT) TO PUBLIC;
-create aggregate median_avg(val DECIMAL) returns DOUBLE
+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) TO PUBLIC;
+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 REAL) returns DOUBLE
external name "aggr"."median_avg";
GRANT EXECUTE ON AGGREGATE median_avg(REAL) TO PUBLIC;
@@ -361,9 +388,18 @@ GRANT EXECUTE ON AGGREGATE quantile_avg(
create aggregate quantile_avg(val BIGINT, q DOUBLE) returns DOUBLE
external name "aggr"."quantile_avg";
GRANT EXECUTE ON AGGREGATE quantile_avg(BIGINT, DOUBLE) TO PUBLIC;
-create aggregate quantile_avg(val DECIMAL, q DOUBLE) returns DOUBLE
+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, DOUBLE) TO PUBLIC;
+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 REAL, q DOUBLE) returns DOUBLE
external name "aggr"."quantile_avg";
GRANT EXECUTE ON AGGREGATE quantile_avg(REAL, DOUBLE) TO PUBLIC;
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,18 +54,34 @@ 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
+ external name "aggr"."median";
+GRANT EXECUTE ON AGGREGATE median(DECIMAL(38)) TO PUBLIC;
+
create aggregate quantile(val HUGEINT, q DOUBLE) returns HUGEINT
external name "aggr"."quantile";
GRANT EXECUTE ON AGGREGATE quantile(HUGEINT, DOUBLE) TO PUBLIC;
+create aggregate quantile(val DECIMAL(38), q DOUBLE) returns HUGEINT
+ external name "aggr"."quantile";
+GRANT EXECUTE ON AGGREGATE quantile(DECIMAL(38), DOUBLE) TO PUBLIC;
+
create aggregate median_avg(val HUGEINT) returns DOUBLE
external name "aggr"."median_avg";
GRANT EXECUTE ON AGGREGATE median_avg(HUGEINT) 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_avg(val HUGEINT, q DOUBLE) returns DOUBLE
external name "aggr"."quantile_avg";
GRANT EXECUTE ON AGGREGATE quantile_avg(HUGEINT, 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;
+
create aggregate corr(e1 HUGEINT, e2 HUGEINT) returns DOUBLE
external name "aggr"."corr";
GRANT EXECUTE ON AGGREGATE corr(HUGEINT, HUGEINT) TO PUBLIC;
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -279,7 +279,7 @@ static sql_subfunc *
sql_arg *rarg = tn->data;
sql_subtype *res, *r = &rarg->type;
- if (a->fix_scale == SCALE_EQ) {
+ if (a->fix_scale == SCALE_EQ && !IS_AGGR(a)) {
res = r;
} else {
digits = r->digits;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]