>From Preetham Poluparthi <[email protected]>:

Preetham Poluparthi has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20589?usp=email )


Change subject: [ASTERIXDB-3632]: Fix self-join query parsing in index advisor
......................................................................

[ASTERIXDB-3632]: Fix self-join query parsing in index advisor

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

Ext-ref: MB-69430

Details:
Earlier, queries containing self joins were not processed properly by the 
advisor. This update adds proper parsing and handling for self-join queries so 
index recommendations are generated accurately.

Change-Id: Idf20b4c16d729c225798398e5985fc88f07e6bd0
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
1 file changed, 11 insertions(+), 8 deletions(-)



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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
index cda2c02..35a8358 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
@@ -40,7 +40,6 @@
 import org.apache.asterix.om.constants.AsterixConstantValue;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue;
@@ -119,7 +118,7 @@
     }

     private void addSingleDataSourceIndexes(List<AdvisorScanPlanNode> 
scanPlanNodes) {
-        Map<DatasetFullyQualifiedName, Pair<DataSourceScanOperator, 
Set<List<String>>>> singleDataSourceFieldNamesMap =
+        Map< DataSourceScanOperator, Set<List<String>>> 
singleDataSourceFieldNamesMap =
                 new HashMap<>();
         for (AdvisorScanPlanNode scanPlanNode : scanPlanNodes) {
             DataSourceScanOperator scanOperator = 
scanPlanNode.getScanOperator();
@@ -138,20 +137,24 @@
                 }

             }
-            singleDataSourceFieldNamesMap.put(fullyQualifiedName, new 
Pair<>(scanOperator, datasetFieldNames));
+            singleDataSourceFieldNamesMap.put(scanOperator, datasetFieldNames);

         }
-        for (Map.Entry<DatasetFullyQualifiedName, Pair<DataSourceScanOperator, 
Set<List<String>>>> entry : singleDataSourceFieldNamesMap
+        for (Map.Entry<DataSourceScanOperator, Set<List<String>>> entry : 
singleDataSourceFieldNamesMap
                 .entrySet()) {
-            DatasetFullyQualifiedName qualifiedName = entry.getKey();
-            Set<List<String>> fieldNames = entry.getValue().getSecond();
-            DataSourceScanOperator scanOperator = entry.getValue().getFirst();
+            DataSourceScanOperator scanOperator = entry.getKey();
+            Set<List<String>> fieldNames = entry.getValue();
+            if (!(scanOperator.getDataSource() instanceof DatasetDataSource 
dataSource)) {
+                continue;
+            }

-            if (((DatasetDataSource) 
scanOperator.getDataSource()).getDataset().getDatasetDetails()
+            if (dataSource.getDataset().getDatasetDetails()
                     .getDatasetType() != DatasetConfig.DatasetType.INTERNAL) {
                 continue;
             }

+            DatasetFullyQualifiedName qualifiedName = 
dataSource.getDataset().getDatasetFullyQualifiedName();
+
             List<List<String>> primaryKeys =
                     ((InternalDatasetDetails) ((DatasetDataSource) 
scanOperator.getDataSource()).getDataset()
                             .getDatasetDetails()).getPrimaryKey();

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20589?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Idf20b4c16d729c225798398e5985fc88f07e6bd0
Gerrit-Change-Number: 20589
Gerrit-PatchSet: 1
Gerrit-Owner: Preetham Poluparthi <[email protected]>

Reply via email to