Xikui Wang has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2874

Change subject: [ASTERIX-2430][COMP] Avoid inlining function calls in WITH in 
AST rewritting
......................................................................

[ASTERIX-2430][COMP] Avoid inlining function calls in WITH in AST rewritting

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
The inlineWithExperssion() call in QueryRewritter inlines with/let
experssion blindly. This can cause problem when the function call is on
the DoNotInlineFuncs list. We can safely skip the inlining of function
calls in the AST rewritting part as the calls that are not on the
DoNotInlineFuncs list will be inlined by InlineVariablesRule later.

Change-Id: I18afbe4165ca84c790d7693a7a7bd5f6fd53187a
---
M asterixdb/asterix-app/src/test/resources/log4j2-asterixdb-test.xml
A 
asterixdb/asterix-app/src/test/resources/optimizerts/queries/ASTERIXDB-2430.sqlpp
A 
asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2430.plan
M 
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
4 files changed, 261 insertions(+), 0 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/74/2874/1

diff --git a/asterixdb/asterix-app/src/test/resources/log4j2-asterixdb-test.xml 
b/asterixdb/asterix-app/src/test/resources/log4j2-asterixdb-test.xml
index c6ecd7d..7416e05 100644
--- a/asterixdb/asterix-app/src/test/resources/log4j2-asterixdb-test.xml
+++ b/asterixdb/asterix-app/src/test/resources/log4j2-asterixdb-test.xml
@@ -38,6 +38,9 @@
     <Logger name="org.apache.hyracks.test" level="INFO">
       <AppenderRef ref="ConsoleTest"/>
     </Logger>
+    <Logger name="org.apache.hyracks.algebricks" level="DEBUG">
+      <AppenderRef ref="Console"/>
+    </Logger>
     <Logger name="org.apache.asterix.test" level="INFO">
       <AppenderRef ref="ConsoleTest"/>
     </Logger>
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ASTERIXDB-2430.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ASTERIXDB-2430.sqlpp
new file mode 100644
index 0000000..45889a2
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ASTERIXDB-2430.sqlpp
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+drop  dataverse test if exists;
+create  dataverse test;
+use test;
+
+create type TweetType as open {
+  id : int64,
+  created_at : datetime
+};
+
+create type StoredTweetType as open {
+  tid : uuid
+};
+
+drop dataset monumentList if exists;
+drop type monumentType if exists;
+create type monumentType as open {
+  mid: string,
+  mloc: point,
+  midx: int32
+};
+create dataset monumentList(monumentType) primary key mid;
+create index mlocidx on monumentList(mloc) type rtree;
+create index midxidx on monumentList(midx);
+
+create dataset Tweets1(StoredTweetType) primary key tid autogenerated;
+create dataset Tweets2(StoredTweetType) primary key tid autogenerated;
+
+insert into Tweets2
+(From Tweets1 x
+select x, (
+let temp = abs(x.id)
+select value ml.mid from monumentList ml
+  where temp /*+ indexnl */ = ml.midx));
+
+//insert into Tweets2
+//(From Tweets1 x
+//select x, (
+//let temp = create_circle(create_point(x.latitude, x.longitude), 3.0)
+//select value ml.mid from monumentList ml
+//  where /*+ indexnl */ spatial_intersect(temp, ml.mloc)));
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2430.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2430.plan
new file mode 100644
index 0000000..fced7a9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2430.plan
@@ -0,0 +1,197 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- SUBPLAN  |PARTITIONED|
+              {
+                -- AGGREGATE  |LOCAL|
+                  -- ASSIGN  |LOCAL|
+                    -- MICRO_PRE_CLUSTERED_GROUP_BY[$$183]  |LOCAL|
+                            {
+                              -- AGGREGATE  |LOCAL|
+                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                            }
+                      -- IN_MEMORY_STABLE_SORT [$$183(ASC)]  |LOCAL|
+                        -- ASSIGN  |LOCAL|
+                          -- UNNEST  |LOCAL|
+                            -- SUBPLAN  |LOCAL|
+                                    {
+                                      -- AGGREGATE  |LOCAL|
+                                        -- ASSIGN  |LOCAL|
+                                          -- UNNEST  |LOCAL|
+                                            -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                    }
+                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+              }
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- COMMIT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- INSERT_DELETE  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$167]  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- PRE_CLUSTERED_GROUP_BY[$$221]  
|PARTITIONED|
+                                              {
+                                                -- AGGREGATE  |LOCAL|
+                                                  -- STREAM_SELECT  |LOCAL|
+                                                    -- NESTED_TUPLE_SOURCE  
|LOCAL|
+                                              }
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- STABLE_SORT [$$221(ASC)]  
|PARTITIONED|
+                                            -- HASH_PARTITION_EXCHANGE [$$221] 
 |PARTITIONED|
+                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                  -- HYBRID_HASH_JOIN 
[$$267][$$190]  |PARTITIONED|
+                                                    -- HASH_PARTITION_EXCHANGE 
[$$267]  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- STREAM_PROJECT  
|PARTITIONED|
+                                                          -- UNNEST  
|PARTITIONED|
+                                                            -- STREAM_PROJECT  
|PARTITIONED|
+                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- 
PRE_CLUSTERED_GROUP_BY[$$275]  |PARTITIONED|
+                                                                        {
+                                                                          -- 
AGGREGATE  |LOCAL|
+                                                                            -- 
MICRO_PRE_CLUSTERED_GROUP_BY[$$277, $$279]  |LOCAL|
+                                                                               
     {
+                                                                               
       -- AGGREGATE  |LOCAL|
+                                                                               
         -- STREAM_SELECT  |LOCAL|
+                                                                               
           -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                               
     }
+                                                                              
-- STREAM_SELECT  |LOCAL|
+                                                                               
 -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                        }
+                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- 
STABLE_SORT [$$275(ASC), $$277(ASC), $$279(ASC)]  |PARTITIONED|
+                                                                      -- 
HASH_PARTITION_EXCHANGE [$$275]  |PARTITIONED|
+                                                                        -- 
UNION_ALL  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                              
-- STREAM_SELECT  |PARTITIONED|
+                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
   -- ASSIGN  |PARTITIONED|
+                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
       -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
           -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
               -- SPLIT  |PARTITIONED|
+                                                                               
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                   -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                       -- RTREE_SEARCH  |PARTITIONED|
+                                                                               
                         -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
                           -- ASSIGN  |PARTITIONED|
+                                                                               
                             -- STREAM_SELECT  |PARTITIONED|
+                                                                               
                               -- ASSIGN  |PARTITIONED|
+                                                                               
                                 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                     -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                         -- STABLE_SORT [$$289(ASC)]  
|PARTITIONED|
+                                                                               
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                             -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                                               -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                 -- RTREE_SEARCH  |PARTITIONED|
+                                                                               
                                                   -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                     -- ASSIGN  |PARTITIONED|
+                                                                               
                                                       -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                         -- NESTED_LOOP  
|PARTITIONED|
+                                                                               
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                             -- ASSIGN  
|PARTITIONED|
+                                                                               
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                 -- 
DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                                                                   -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                     -- ASSIGN  
|UNPARTITIONED|
+                                                                               
                                                                       -- 
EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                                               
                                                           -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
                                                             -- ASSIGN  
|PARTITIONED|
+                                                                               
                                                               -- STREAM_SELECT 
 |PARTITIONED|
+                                                                               
                                                                 -- ASSIGN  
|PARTITIONED|
+                                                                               
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                     -- 
BTREE_SEARCH  |PARTITIONED|
+                                                                               
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                         -- 
STABLE_SORT [$$228(ASC)]  |PARTITIONED|
+                                                                               
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                             -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                               
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                                
 -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                                
     -- ASSIGN  |PARTITIONED|
+                                                                               
                                                                                
       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                              
-- STREAM_SELECT  |PARTITIONED|
+                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
   -- ASSIGN  |PARTITIONED|
+                                                                               
     -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
         -- SPLIT  |PARTITIONED|
+                                                                               
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
             -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                 -- RTREE_SEARCH  |PARTITIONED|
+                                                                               
                   -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
                     -- ASSIGN  |PARTITIONED|
+                                                                               
                       -- STREAM_SELECT  |PARTITIONED|
+                                                                               
                         -- ASSIGN  |PARTITIONED|
+                                                                               
                           -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                               -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                   -- STABLE_SORT [$$289(ASC)]  |PARTITIONED|
+                                                                               
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                       -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                           -- RTREE_SEARCH  |PARTITIONED|
+                                                                               
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                               -- ASSIGN  |PARTITIONED|
+                                                                               
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                   -- NESTED_LOOP  |PARTITIONED|
+                                                                               
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                       -- ASSIGN  |PARTITIONED|
+                                                                               
                                                         -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
+                                                                               
                                                           -- DATASOURCE_SCAN  
|PARTITIONED|
+                                                                               
                                                             -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
                                                               -- ASSIGN  
|UNPARTITIONED|
+                                                                               
                                                                 -- 
EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                                               
                                                     -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                                                               
                                                       -- ASSIGN  |PARTITIONED|
+                                                                               
                                                         -- STREAM_SELECT  
|PARTITIONED|
+                                                                               
                                                           -- ASSIGN  
|PARTITIONED|
+                                                                               
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                               -- BTREE_SEARCH  
|PARTITIONED|
+                                                                               
                                                                 -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                   -- 
STABLE_SORT [$$228(ASC)]  |PARTITIONED|
+                                                                               
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                       -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                               
                                                                         -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                           -- 
BTREE_SEARCH  |PARTITIONED|
+                                                                               
                                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                                                               
-- ASSIGN  |PARTITIONED|
+                                                                               
                                                                                
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                    -- HASH_PARTITION_EXCHANGE 
[$$190]  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- STREAM_PROJECT  
|PARTITIONED|
+                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                            -- 
HYBRID_HASH_JOIN [$$198, $$200][$$192, $$193]  |PARTITIONED|
+                                                              -- 
HASH_PARTITION_EXCHANGE [$$198, $$200]  |PARTITIONED|
+                                                                -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ASSIGN  
|PARTITIONED|
+                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- 
DATASOURCE_SCAN  |PARTITIONED|
+                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ASSIGN  
|PARTITIONED|
+                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- 
DATASOURCE_SCAN  |PARTITIONED|
+                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
index ebb7b10..40ca35a 100644
--- 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
+++ 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
@@ -51,6 +51,9 @@
                 LetClause letClause = with.next();
                 // Replaces the let binding Expr.
                 Expression expr = letClause.getBindingExpr();
+                if (expr.getKind() == Expression.Kind.CALL_EXPRESSION) {
+                    continue;
+                }
                 Expression newBindingExpr = 
SqlppRewriteUtil.substituteExpression(expr, varExprMap, context);
                 letClause.setBindingExpr(newBindingExpr);
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2874
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I18afbe4165ca84c790d7693a7a7bd5f6fd53187a
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Xikui Wang <[email protected]>

Reply via email to