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

Reply via email to