[email protected] has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/3218
Change subject: [No Issue] [COMP] Hooks to disable constant folding;
recordType forwarding from scalars to evaluators
......................................................................
[No Issue] [COMP] Hooks to disable constant folding; recordType forwarding
from scalars to evaluators
- user model changes: no
- storage format changes: no
- interface changes: no
Details: Changes to forward recordType from scalar descriptor to
evaluator descriptor. Provided hooks to disable constant folding
rules on aggregate functions.
Change-Id: Ic3c19e316e1ebdbab8a38048c1b64b087d95e146
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
M
asterixdb/asterix-om/src/main/java/org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
M
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
3 files changed, 24 insertions(+), 9 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/18/3218/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
index f10ae1a..ed70aa2 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -21,8 +21,10 @@
import java.io.DataInputStream;
import java.nio.ByteBuffer;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.asterix.common.config.GlobalConfig;
import org.apache.asterix.common.dataflow.ICcApplicationContext;
@@ -94,14 +96,19 @@
// Function Identifier sets that the ConstantFolding rule should skip to
apply.
// Most of them are record-related functions.
- private static final ImmutableSet<FunctionIdentifier>
FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED = ImmutableSet.of(
- BuiltinFunctions.RECORD_MERGE, BuiltinFunctions.ADD_FIELDS,
BuiltinFunctions.REMOVE_FIELDS,
- BuiltinFunctions.GET_RECORD_FIELDS,
BuiltinFunctions.GET_RECORD_FIELD_VALUE,
- BuiltinFunctions.FIELD_ACCESS_NESTED, BuiltinFunctions.GET_ITEM,
BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR,
- BuiltinFunctions.FIELD_ACCESS_BY_INDEX,
BuiltinFunctions.CAST_TYPE, BuiltinFunctions.META,
- BuiltinFunctions.META_KEY, BuiltinFunctions.RECORD_CONCAT,
BuiltinFunctions.RECORD_CONCAT_STRICT,
- BuiltinFunctions.RECORD_PAIRS, BuiltinFunctions.PAIRS,
BuiltinFunctions.TO_ATOMIC,
- BuiltinFunctions.TO_ARRAY);
+
+ private static final ImmutableSet<FunctionIdentifier>
BUILTIN_FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED =
+ ImmutableSet.of(BuiltinFunctions.RECORD_MERGE,
BuiltinFunctions.ADD_FIELDS, BuiltinFunctions.REMOVE_FIELDS,
+ BuiltinFunctions.GET_RECORD_FIELDS,
BuiltinFunctions.GET_RECORD_FIELD_VALUE,
+ BuiltinFunctions.FIELD_ACCESS_NESTED,
BuiltinFunctions.GET_ITEM,
+ BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR,
BuiltinFunctions.FIELD_ACCESS_BY_INDEX,
+ BuiltinFunctions.CAST_TYPE, BuiltinFunctions.META,
BuiltinFunctions.META_KEY,
+ BuiltinFunctions.RECORD_CONCAT,
BuiltinFunctions.RECORD_CONCAT_STRICT,
+ BuiltinFunctions.RECORD_PAIRS, BuiltinFunctions.PAIRS,
BuiltinFunctions.TO_ATOMIC,
+ BuiltinFunctions.TO_ARRAY);
+
+ private static final Set<FunctionIdentifier>
FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED =
+ new HashSet<>(BUILTIN_FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED);
private static final Map<FunctionIdentifier, IAObject> FUNC_ID_TO_CONSTANT
= ImmutableMap
.of(BuiltinFunctions.NUMERIC_E, new ADouble(Math.E),
BuiltinFunctions.NUMERIC_PI, new ADouble(Math.PI));
@@ -150,6 +157,10 @@
ExpressionTypeComputer.INSTANCE, null, null, null, null,
GlobalConfig.DEFAULT_FRAME_SIZE, null);
}
+ public static void addNonFoldableFunction(FunctionIdentifier fid) {
+ FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED.add(fid);
+ }
+
@Override
public boolean rewritePre(Mutable<ILogicalOperator> opRef,
IOptimizationContext context)
throws AlgebricksException {
diff --git
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
index c48fff1..f577e1d 100644
---
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
+++
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
@@ -30,4 +30,8 @@
return FunctionDescriptorTag.SCALAR;
}
+ @Override
+ public void setImmutableStates(Object... states) {
+ }
+
}
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 c8ebff6..7538e43 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
@@ -33,7 +33,7 @@
public abstract class AbstractScalarAggregateDescriptor extends
AbstractScalarFunctionDynamicDescriptor {
private static final long serialVersionUID = 1L;
- private final AbstractAggregateFunctionDynamicDescriptor aggFuncDesc;
+ protected final AbstractAggregateFunctionDynamicDescriptor aggFuncDesc;
protected AbstractScalarAggregateDescriptor(IFunctionDescriptor
aggFuncDesc) {
this.aggFuncDesc = (AbstractAggregateFunctionDynamicDescriptor)
aggFuncDesc;
--
To view, visit https://asterix-gerrit.ics.uci.edu/3218
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic3c19e316e1ebdbab8a38048c1b64b087d95e146
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: [email protected]