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

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

commit ba9d1d03bdda0071d753d0d650d6e21e63360050
Author: Dmitry Lychagin <[email protected]>
AuthorDate: Mon Dec 7 17:52:06 2020 -0800

    [NO ISSUE][COMP] Fix error in RemoveUnusedOneToOneEquiJoinRule
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Fix internal error in RemoveUnusedOneToOneEquiJoinRule
      when function datasource is joined with a dataset
    
    Change-Id: Iad4d17a0a3bb4cea23625fbbce0c623c597c4991
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9226
    Reviewed-by: Dmitry Lychagin <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
---
 .../rules/RemoveUnusedOneToOneEquiJoinRule.java    | 16 +++++----
 .../optimizerts/queries/joins/fnds_join_ds.sqlpp   | 40 ++++++++++++++++++++++
 .../optimizerts/results/joins/fnds_join_ds.plan    | 24 +++++++++++++
 3 files changed, 74 insertions(+), 6 deletions(-)

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
index 6a70786..61361f6 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
@@ -24,7 +24,9 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.asterix.metadata.declared.DataSource;
 import org.apache.asterix.metadata.declared.DatasetDataSource;
+import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.InternalDatasetDetails;
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -227,12 +229,14 @@ public class RemoveUnusedOneToOneEquiJoinRule implements 
IAlgebraicRewriteRule {
 
     private void fillPKVars(DataSourceScanOperator dataScan, 
List<LogicalVariable> pkVars) {
         pkVars.clear();
-        DatasetDataSource datasetDataSource = (DatasetDataSource) 
dataScan.getDataSource();
-        pkVars.clear();
-        if (datasetDataSource.getDataset().getDatasetDetails() instanceof 
InternalDatasetDetails) {
-            int numPKs = 
datasetDataSource.getDataset().getPrimaryKeys().size();
-            for (int i = 0; i < numPKs; i++) {
-                pkVars.add(dataScan.getVariables().get(i));
+        DataSource dataSource = (DataSource) dataScan.getDataSource();
+        if (dataSource.getDatasourceType() == 
DataSource.Type.INTERNAL_DATASET) {
+            Dataset dataset = ((DatasetDataSource) dataSource).getDataset();
+            if (dataset.getDatasetDetails() instanceof InternalDatasetDetails) 
{
+                int numPKs = dataset.getPrimaryKeys().size();
+                for (int i = 0; i < numPKs; i++) {
+                    pkVars.add(dataScan.getVariables().get(i));
+                }
             }
         }
     }
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/fnds_join_ds.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/fnds_join_ds.sqlpp
new file mode 100644
index 0000000..5ae9ad6
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/fnds_join_ds.sqlpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+/*
+ * Description: Functional datasource join with dataset
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+create type test.TestType as
+{
+  id : integer
+};
+
+create  dataset t1(TestType) primary key id;
+
+set `import-private-functions` `true`;
+
+select count(*)
+from tpcds_datagen("customer_address", 1.0) tpcds, t1
+where tpcds.ca_address_id = t1.aid;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/fnds_join_ds.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/fnds_join_ds.plan
new file mode 100644
index 0000000..a561ca4
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/fnds_join_ds.plan
@@ -0,0 +1,24 @@
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      -- ASSIGN  |UNPARTITIONED|
+        -- AGGREGATE  |UNPARTITIONED|
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            -- AGGREGATE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- HYBRID_HASH_JOIN [$$48][$$49]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$48]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN 
(asterix.tpcds-datagen.customer_address.1.0)  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$49]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- DATASOURCE_SCAN (test.t1)  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file

Reply via email to