sandeep.gu...@couchbase.com 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: sandeep.gu...@couchbase.com