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

amashenkov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 8c537d12a4 IGNITE-19621 Sql. Shrink planner search space by removing 
pre known not applicable indexes (#2202)
8c537d12a4 is described below

commit 8c537d12a48e1dce16d04da745bf2e209c0d5096
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Fri Jun 23 17:23:23 2023 +0300

    IGNITE-19621 Sql. Shrink planner search space by removing pre known not 
applicable indexes (#2202)
---
 .../internal/sql/engine/rule/logical/ExposeIndexRule.java  | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
index 264eaaed5e..ffd52389dd 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
@@ -29,8 +29,11 @@ import org.apache.calcite.plan.RelRule;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalIndexScan;
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalTableScan;
+import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
+import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.immutables.value.Value;
 
@@ -42,7 +45,7 @@ import org.immutables.value.Value;
 public class ExposeIndexRule extends RelRule<ExposeIndexRule.Config> {
     public static final RelOptRule INSTANCE = 
Config.DEFAULT.withDescription("ExposeIndexRule").toRule();
 
-    public ExposeIndexRule(Config config) {
+    private ExposeIndexRule(Config config) {
         super(config);
     }
 
@@ -65,6 +68,7 @@ public class ExposeIndexRule extends 
RelRule<ExposeIndexRule.Config> {
 
         List<IgniteLogicalIndexScan> indexes = 
igniteTable.indexes().keySet().stream()
                 .map(idxName -> igniteTable.toRel(cluster, optTable, idxName, 
proj, condition, requiredCols))
+                .filter(idx -> filter(igniteTable, idx.indexName(), 
idx.searchBounds()))
                 .collect(Collectors.toList());
 
         if (indexes.isEmpty()) {
@@ -79,6 +83,14 @@ public class ExposeIndexRule extends 
RelRule<ExposeIndexRule.Config> {
         call.transformTo(indexes.get(0), equivMap);
     }
 
+    /** Filter pre known not applicable variants. Significant shrink search 
space in some cases. */
+    private static boolean filter(IgniteTable table, String idxName, 
List<SearchBounds> searchBounds) {
+        IgniteIndex index = table.getIndex(idxName);
+
+        return index.type() == Type.SORTED || (searchBounds != null
+                && searchBounds.stream().noneMatch(bound -> bound.type() == 
SearchBounds.Type.RANGE));
+    }
+
     /**
      * Rule's configuration.
      */

Reply via email to