[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]