You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by ti...@apache.org on 2019/02/28 18:27:04 UTC

[asterixdb] branch master updated: [No Issue] [COMP] Hooks to disable constant folding

This is an automated email from the ASF dual-hosted git repository.

tillw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 3a39f08  [No Issue] [COMP] Hooks to disable constant folding
3a39f08 is described below

commit 3a39f08b905a901307638b22fd3cd2283fd61ffd
Author: sandeepgupta <sa...@couchbase.com>
AuthorDate: Thu Feb 28 15:25:31 2019 +0530

    [No Issue] [COMP] Hooks to disable constant folding
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details: Changes to forward recordType from scalar descriptor to
    evaluator descriptor for aggregate functions.
    Provided hooks to disable constant folding rules on aggregate functions.
    
    Change-Id: Ic3c19e316e1ebdbab8a38048c1b64b087d95e146
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3218
    Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Till Westmann <ti...@apache.org>
---
 .../optimizer/rules/ConstantFoldingRule.java       | 24 ++++++++++++++--------
 .../scalar/AbstractScalarAggregateDescriptor.java  |  2 +-
 2 files changed, 17 insertions(+), 9 deletions(-)

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..3ec5c97 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 @@ package org.apache.asterix.optimizer.rules;
 
 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,16 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule {
 
     // 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 Set<FunctionIdentifier> FUNC_ID_SET_THAT_SHOULD_NOT_BE_APPLIED =
+            new HashSet<>(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)); //Initialize with 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 +154,10 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule {
                 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-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 @@ import org.apache.hyracks.api.exceptions.HyracksDataException;
 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;