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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to