You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by as...@apache.org on 2019/01/18 02:41:07 UTC

[incubator-druid] branch master updated: Fix fallback to cursor-based plan in UseIndexesStrategy (#6875)

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

asdf2014 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new cc06e7e  Fix fallback to cursor-based plan in UseIndexesStrategy (#6875)
cc06e7e is described below

commit cc06e7e2dff26689a1520fdcddd879ba8e8821ec
Author: Jihoon Son <ji...@apache.org>
AuthorDate: Thu Jan 17 18:41:01 2019 -0800

    Fix fallback to cursor-based plan in UseIndexesStrategy (#6875)
    
    * Fix fallback to cursor-based plan in UseIndexesStrategy
    
    * fix build
    
    * add a comment
---
 .../apache/druid/query/search/UseIndexesStrategy.java  | 14 +++++++-------
 .../query/search/SearchQueryRunnerWithCaseTest.java    | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java b/processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java
index 6bb7a09..8c559cd 100644
--- a/processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java
+++ b/processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java
@@ -72,8 +72,8 @@ public class UseIndexesStrategy extends SearchStrategy
     final List<DimensionSpec> searchDims = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions());
 
     if (index != null) {
-      final Pair<List<DimensionSpec>, List<DimensionSpec>> pair = // pair of bitmap dims and non-bitmap dims
-          partitionDimensionList(adapter, searchDims);
+      // pair of bitmap dims and non-bitmap dims
+      final Pair<List<DimensionSpec>, List<DimensionSpec>> pair = partitionDimensionList(adapter, searchDims);
       final List<DimensionSpec> bitmapSuppDims = pair.lhs;
       final List<DimensionSpec> nonBitmapSuppDims = pair.rhs;
 
@@ -108,7 +108,10 @@ public class UseIndexesStrategy extends SearchStrategy
     return builder.build();
   }
 
-  // Split dimension list into bitmap-supporting list and non-bitmap supporting list
+  /**
+   * Split the given dimensions list into bitmap-supporting dimensions and non-bitmap supporting ones.
+   * Note that the returned lists are free to modify.
+   */
   private static Pair<List<DimensionSpec>, List<DimensionSpec>> partitionDimensionList(
       StorageAdapter adapter,
       List<DimensionSpec> dimensions
@@ -134,10 +137,7 @@ public class UseIndexesStrategy extends SearchStrategy
       }
     }
 
-    return new Pair<List<DimensionSpec>, List<DimensionSpec>>(
-        ImmutableList.copyOf(bitmapDims),
-        ImmutableList.copyOf(nonBitmapDims)
-    );
+    return new Pair<>(bitmapDims, nonBitmapDims);
   }
 
   static ImmutableBitmap makeTimeFilteredBitmap(
diff --git a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerWithCaseTest.java b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerWithCaseTest.java
index cc3b13a..ef0ef61 100644
--- a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerWithCaseTest.java
+++ b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerWithCaseTest.java
@@ -25,6 +25,7 @@ import com.google.common.io.CharSource;
 import org.apache.druid.java.util.common.DateTimes;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.Druids;
+import org.apache.druid.query.Druids.SearchQueryBuilder;
 import org.apache.druid.query.QueryPlus;
 import org.apache.druid.query.QueryRunner;
 import org.apache.druid.query.Result;
@@ -234,6 +235,23 @@ public class SearchQueryRunnerWithCaseTest
     checkSearchQuery(searchQuery, expectedResults);
   }
 
+  @Test
+  public void testFallbackToCursorBasedPlan()
+  {
+    final SearchQueryBuilder builder = testBuilder();
+    final SearchQuery query = builder.filters("qualityLong", "1000").build();
+    final Map<String, Set<String>> expectedResults = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+    expectedResults.put("qualityLong", Sets.newHashSet("1000"));
+    expectedResults.put("qualityDouble", Sets.newHashSet("10000.0"));
+    expectedResults.put("qualityFloat", Sets.newHashSet("10000.0"));
+    expectedResults.put("qualityNumericString", Sets.newHashSet("100000"));
+    expectedResults.put("quality", Sets.newHashSet("AutoMotive", "automotive"));
+    expectedResults.put("placement", Sets.newHashSet("PREFERRED", "preferred"));
+    expectedResults.put("placementish", Sets.newHashSet("a", "preferred"));
+    expectedResults.put("market", Sets.newHashSet("spot"));
+    checkSearchQuery(query, expectedResults);
+  }
+
   private void checkSearchQuery(SearchQuery searchQuery, Map<String, Set<String>> expectedResults)
   {
     HashMap<String, List> context = new HashMap<>();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org