Yingyi Bu has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/790

Change subject: ASTERIXDB-1382: add examples for SQL++ group-by visitors.
......................................................................

ASTERIXDB-1382: add examples for SQL++ group-by visitors.

Change-Id: I4c125e286bd53126685a0d91a1f4526ebccf9335
---
M 
asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.3.query.sqlpp
M 
asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
M 
asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
3 files changed, 63 insertions(+), 3 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/90/790/1

diff --git 
a/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.3.query.sqlpp
 
b/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.3.query.sqlpp
index e9c3326..e315533 100644
--- 
a/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.3.query.sqlpp
+++ 
b/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.3.query.sqlpp
@@ -23,5 +23,5 @@
     JOIN Incentive i ON e.job_category = i.job_category
     JOIN SuperStars s ON e.id = s.id
 GROUP BY e.department_id AS deptId
-SELECT deptId as deptId, coll_sum(e.salary + i.bonus) AS star_cost;
+SELECT deptId as deptId, SUM(e.salary + i.bonus) AS star_cost;
 
diff --git 
a/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
 
b/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
index ae47264..a2e8a18 100644
--- 
a/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
+++ 
b/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
@@ -50,8 +50,35 @@
 import 
org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 
 /**
- * An AST pre-processor to rewrite group-by sugar queries.
+ * An AST pre-processor to rewrite group-by sugar queries, which does the 
following transformations:
+ * 1. Rewrite the argument expression of an aggregation function into a 
subquery if the argument
+ * expression is not a subquery;
+ * 2. Turn a SQL-92 aggregate function into a SQL++ core aggregate function 
when performing 2.
  */
+
+// For example, this visitor turns the following query
+//
+// FROM Employee e
+// JOIN Incentive i ON e.job_category = i.job_category
+// JOIN SuperStars s ON e.id = s.id
+// GROUP BY e.department_id AS deptId
+// GROUP AS eis(e AS e, i AS i, s AS s)
+// SELECT deptId as deptId, SUM(e.salary + i.bonus) AS star_cost;
+//
+// into the following core-version query:
+//
+// FROM Employee e
+// JOIN Incentive i ON e.job_category = i.job_category
+// JOIN SuperStars s ON e.id = s.id
+// GROUP BY e.department_id AS deptId
+// GROUP AS eis(e AS e, i AS i, s AS s)
+// SELECT ELEMENT {
+//          'deptId': deptId,
+//          'star_cost': coll_sum( (FROM eis AS p SELECT ELEMENT p.e.salary + 
p.i.bonus) )
+// };
+//
+// where SUM(e.salary + i.bonus) is turned into coll_sum( (FROM eis AS p 
SELECT ELEMENT p.e.salary + p.i.bonus) ).
+
 public class SqlppGroupBySugarVisitor extends 
AbstractSqlppExpressionScopingVisitor {
 
     private final Expression groupVar;
@@ -77,7 +104,8 @@
             newExprList.add(newExpr.accept(this, arg));
         }
         if (rewritten) {
-            // Rewrites the SQL-92 function name to core functions.
+            // Rewrites the SQL-92 function name to core functions,
+            // e.g., SUM --> coll_sum
             
callExpr.setFunctionSignature(FunctionMapUtil.sql92ToCoreAggregateFunction(signature));
         }
         callExpr.setExprList(newExprList);
diff --git 
a/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
 
b/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
index c9e7a6e..16e967c 100644
--- 
a/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
+++ 
b/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
@@ -45,6 +45,38 @@
  * A pre-processor that adds the group variable as well as its group field
  * list into the AST. It will also invoke SQL group-by aggregation sugar 
rewritings.
  */
+// This visitor rewrites non-core SQL++ group-by queries into their SQL++ core 
version
+// queries. For example, for the non-core query in
+// 
asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp,
+//
+// FROM Employee e
+// JOIN Incentive i ON e.job_category = i.job_category
+// JOIN SuperStars s ON e.id = s.id
+// GROUP BY e.department_id AS deptId
+// SELECT deptId as deptId, SUM(e.salary + i.bonus) AS star_cost;
+//
+// this visitor transforms it into the core version in
+// 
asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp,
+//
+// FROM Employee e
+// JOIN Incentive i ON e.job_category = i.job_category
+// JOIN SuperStars s ON e.id = s.id
+// GROUP BY e.department_id AS deptId
+// GROUP AS eis(e AS e, i AS i, s AS s)
+// SELECT ELEMENT {
+//  'deptId': deptId,
+//  'star_cost': coll_sum( (FROM eis AS p SELECT ELEMENT p.e.salary + 
p.i.bonus) )
+// };
+/**
+ * The transformation include three things:
+ * 1. Add a group variable as well as its definition, e.g., GROUP AS eis(e AS 
e, i AS i, s AS s);
+ * 2. Rewrite the argument expression of an aggregation function into a 
subquery if the argument
+ * expression is not a subquery;
+ * 3. Turn a SQL-92 aggregate function into a SQL++ core aggregate function 
when performing 2, e.g.,
+ * SUM(e.salary + i.bonus) becomes
+ * coll_sum( (FROM eis AS p SELECT ELEMENT p.e.salary + p.i.bonus) ).
+ */
+
 public class SqlppGroupByVisitor extends AbstractSqlppExpressionScopingVisitor 
{
 
     public SqlppGroupByVisitor(LangRewritingContext context) {

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/790
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4c125e286bd53126685a0d91a1f4526ebccf9335
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Yingyi Bu <[email protected]>

Reply via email to