Repository: asterixdb Updated Branches: refs/heads/master 9e8f3bfa3 -> 5bd23630c
[NO ISSUE][COMP][DOC] Distinct aggregates cleanup, documentation - user model changes: no - storage format changes: no - interface changes: no Details: - changed SqlppDistinctAggregationSugarVisitor superclass to AbstractSqlppSimpleExpressionVisitor - Added documentation for distinct aggregates Change-Id: I3f974a0c1adb7eca492a6011401cc54fea74cd8e Reviewed-on: https://asterix-gerrit.ics.uci.edu/2086 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Xikui Wang <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/5bd23630 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/5bd23630 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/5bd23630 Branch: refs/heads/master Commit: 5bd23630c4ccbd443fae5744e7826acee6bb199e Parents: 9e8f3bf Author: Dmitry Lychagin <[email protected]> Authored: Fri Oct 20 14:16:32 2017 -0700 Committer: Dmitry Lychagin <[email protected]> Committed: Mon Oct 30 12:27:17 2017 -0700 ---------------------------------------------------------------------- .../asterix-doc/src/main/markdown/sqlpp/3_query.md | 13 +++++++++++++ .../visitor/SqlppDistinctAggregationSugarVisitor.java | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5bd23630/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md index 5d94ea4..bcf3094 100644 --- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md +++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md @@ -1128,6 +1128,17 @@ Notice how the query forms groups where each group involves a message author and The query then uses the collection aggregate function ARRAY_COUNT to get the cardinality of each group of messages. +Each aggregation function in SQL++ supports DISTINCT modifier that removes duplicate values from +the input collection. + +##### Example + + ARRAY_SUM(DISTINCT [1, 1, 2, 2, 3]) + +This query returns: + + 6 + ### <a id="SQL-92_aggregation_functions">SQL-92 Aggregation Functions</a> For compatibility with the traditional SQL aggregation functions, SQL++ also offers SQL-92's aggregation function symbols (`COUNT`, `SUM`, `MAX`, `MIN`, and `AVG`) as supported syntactic sugar. @@ -1155,6 +1166,8 @@ The same sort of rewritings apply to the function symbols `SUM`, `MAX`, `MIN`, a In contrast to the SQL++ collection aggregate functions, these special SQL-92 function symbols can only be used in the same way they are in standard SQL (i.e., with the same restrictions). +DISTINCT modifier is also supported for these aggregate functions. + ### <a id="SQL-92_compliant_gby">SQL-92 Compliant GROUP BY Aggregations</a> SQL++ provides full support for SQL-92 `GROUP BY` aggregation queries. The following query is such an example: http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5bd23630/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java index e9b8334..c56bb9d 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java +++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java @@ -39,7 +39,7 @@ import org.apache.asterix.lang.sqlpp.clause.SelectElement; import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation; import org.apache.asterix.lang.sqlpp.expression.SelectExpression; import org.apache.asterix.lang.sqlpp.struct.SetOperationInput; -import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor; +import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo; @@ -49,9 +49,11 @@ import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo; * {@code agg-distinct(expr) -> agg((FROM expr AS i SELECT DISTINCT VALUE i))} <br/> * where {@code agg-distinct} is a distinct aggregate function, {@code agg} - a regular aggregate function */ -public class SqlppDistinctAggregationSugarVisitor extends AbstractSqlppExpressionScopingVisitor { +public class SqlppDistinctAggregationSugarVisitor extends AbstractSqlppSimpleExpressionVisitor { + protected final LangRewritingContext context; + public SqlppDistinctAggregationSugarVisitor(LangRewritingContext context) { - super(context); + this.context = context; } @Override
