Till Westmann has submitted this change and it was merged.

Change subject: [NO ISSUE][COMP] Multiple parameters for two-step aggregation 
functions
......................................................................


[NO ISSUE][COMP] Multiple parameters for two-step aggregation functions

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
Hooks to enable aggregate functions have multiple arguments.

Change-Id: Ibaef2c0b2cf858d1aa7dd0f645f773fd04a865b3
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3298
Reviewed-by: Till Westmann <ti...@apache.org>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Till Westmann <ti...@apache.org>
Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
M 
asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
M 
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
4 files changed, 23 insertions(+), 9 deletions(-)

Approvals:
  Anon. E. Moose #1000171: 
  Till Westmann: Looks good to me, approved; Verified
  Jenkins: ; Verified

Objections:
  Jenkins: Violations found



diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
index c0dc8be..4ae25e8 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
@@ -218,8 +218,11 @@
 
             List<Mutable<ILogicalExpression>> aggArgs = new 
ArrayList<Mutable<ILogicalExpression>>();
             aggArgs.add(aggOpExpr.getArguments().get(0));
+            int sz = assignFuncExpr.getArguments().size();
+            aggArgs.addAll(assignFuncExpr.getArguments().subList(1, sz));
             AggregateFunctionCallExpression aggFuncExpr =
                     
BuiltinFunctions.makeAggregateFunctionExpression(aggFuncIdent, aggArgs);
+
             aggFuncExpr.setSourceLocation(assignFuncExpr.getSourceLocation());
             LogicalVariable newVar = context.newVar();
             aggOp.getVariables().add(newVar);
@@ -241,10 +244,9 @@
         for (Mutable<ILogicalExpression> exprRef : exprRefs) {
             ILogicalExpression expr = exprRef.getValue();
 
-            if (expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
-                if (((VariableReferenceExpression) 
expr).getVariableReference().equals(aggVar)) {
-                    return false;
-                }
+            if ((expr.getExpressionTag() == LogicalExpressionTag.VARIABLE)
+                    && ((VariableReferenceExpression) 
expr).getVariableReference().equals(aggVar)) {
+                return false;
             }
 
             if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) 
{
diff --git 
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
 
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index d2bbc04..217b065 100644
--- 
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++ 
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -252,7 +252,8 @@
                     throw new NullPointerException("Error parsing expected or 
actual result file for " + scriptFile);
                 }
                 if (!TestHelper.equalJson(expectedJson, actualJson)) {
-                    throw new ComparisonException("Result for " + scriptFile + 
" didn't match the expected JSON");
+                    throw new ComparisonException(
+                            "Result for " + scriptFile + " didn't match the 
expected JSON" + "\n" + actualJson);
                 }
                 return;
             }
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
index de376c6..2a311fb 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
@@ -43,10 +43,18 @@
     @Override
     public IScalarEvaluatorFactory createEvaluatorFactory(final 
IScalarEvaluatorFactory[] args)
             throws AlgebricksException {
-        // The aggregate function will get a SingleFieldFrameTupleReference 
that points to the result of the ScanCollection.
-        // The list-item will always reside in the first field (column) of the 
SingleFieldFrameTupleReference.
-        IScalarEvaluatorFactory[] aggFuncArgs = new IScalarEvaluatorFactory[1];
+
+        // The aggregate function will get a SingleFieldFrameTupleReference 
that points to the result of the
+        // ScanCollection. The list-item will always reside in the first field 
(column) of the
+        // SingleFieldFrameTupleReference.
+        int numArgs = args.length;
+        IScalarEvaluatorFactory[] aggFuncArgs = new 
IScalarEvaluatorFactory[numArgs];
+
         aggFuncArgs[0] = new ColumnAccessEvalFactory(0);
+
+        for (int i = 1; i < numArgs; ++i) {
+            aggFuncArgs[i] = args[i];
+        }
         // Create aggregate function from this scalar version.
         final IAggregateEvaluatorFactory aggFuncFactory = 
aggFuncDesc.createAggregateEvaluatorFactory(aggFuncArgs);
 
diff --git 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
index de96cad..1c8adfb 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
@@ -59,8 +59,11 @@
             for (AggregateExprInfo aei : sai.simAggs) {
                 AbstractFunctionCallExpression afce = 
(AbstractFunctionCallExpression) aei.aggExprRef.getValue();
                 afce.setFunctionInfo(aei.newFunInfo);
+                List<Mutable<ILogicalExpression>> args = new 
ArrayList<Mutable<ILogicalExpression>>();
+                args.addAll(afce.getArguments());
                 afce.getArguments().clear();
                 afce.getArguments().add(new 
MutableObject<>(sai.stepOneResult));
+                afce.getArguments().addAll(args.subList(1, args.size()));
             }
         }
     }
@@ -126,7 +129,7 @@
                     return new Pair<>(false, null);
                 }
                 Mutable<ILogicalOperator> bottomRef = inputRef;
-                while (bottomRef.getValue().getInputs().size() > 0) {
+                while (!bottomRef.getValue().getInputs().isEmpty()) {
                     bottomRef = bottomRef.getValue().getInputs().get(0);
                     if (!isPushableInput(bottomRef.getValue())) {
                         return new Pair<>(false, null);

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibaef2c0b2cf858d1aa7dd0f645f773fd04a865b3
Gerrit-PatchSet: 7
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: sandeep.gu...@couchbase.com
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Reply via email to