[email protected] has uploaded a new change for review.

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

Change subject: [No Issue] [COMP] Multiple parameters for aggregation function 
- user model changes: no - storage format changes: no - interface changes: yes
......................................................................

[No Issue] [COMP] Multiple parameters for aggregation function
- user model changes: no
- storage format changes: no
- interface changes: yes

Details: Hooks to enable aggregate functions have
multiple arguments.

Change-Id: Ibaef2c0b2cf858d1aa7dd0f645f773fd04a865b3
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
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-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
M 
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
8 files changed, 24 insertions(+), 2 deletions(-)


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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
index d865ba9..588f961 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
@@ -42,6 +42,7 @@
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
+import 
org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 
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..0a48e4b 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);
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..cf5449c 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,7 @@
                     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-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
index 3aea6dc..77db77a 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
@@ -48,6 +48,11 @@
     }
 
     @Override
+    public int getNumArguments() {
+        throw new NotImplementedException("Not Implemented: " + 
getIdentifier());
+    }
+
+    @Override
     public IRunningAggregateEvaluatorFactory 
createRunningAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args)
             throws AlgebricksException {
         throw new NotImplementedException("Not Implemented: " + 
getIdentifier());
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
index 1701115..dc801c3 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
@@ -40,6 +40,8 @@
 
     FunctionDescriptorTag getFunctionDescriptorTag();
 
+    int getNumArguments() throws AlgebricksException;
+
     IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] 
args) throws AlgebricksException;
 
     IRunningAggregateEvaluatorFactory 
createRunningAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args)
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 7538e43..3c93cc5 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
@@ -44,8 +44,15 @@
             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];
+
+        int numArgs = aggFuncDesc.getNumArguments();
+        IScalarEvaluatorFactory[] aggFuncArgs = new 
IScalarEvaluatorFactory[numArgs]; //array size  should depend of TypeInferer; 
how to get to TypeInferener
+
         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-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
index 571a30a..1c060ae 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
@@ -168,6 +168,7 @@
             if (physicalOperator == null) {
                 throw AlgebricksException.create(PHYS_OPERATOR_NOT_SET, 
getSourceLocation(), this.getOperatorTag());
             }
+
             physicalOperator.contributeRuntimeOperator(builder, context, this, 
propagatedSchema, inputSchemas,
                     outerPlanSchema);
         }
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..3ce0c7a 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()));
             }
         }
     }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibaef2c0b2cf858d1aa7dd0f645f773fd04a865b3
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: [email protected]

Reply via email to