You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by am...@apache.org on 2016/07/14 23:35:57 UTC

drill git commit: DRILL-4665: Fix partition pruning for filters containing LIKE (or other similar) predicate on non-partition column.

Repository: drill
Updated Branches:
  refs/heads/master c040185dd -> 9878170d0


DRILL-4665: Fix partition pruning for filters containing LIKE (or other similar) predicate on non-partition column.

close apache/drill#526


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/9878170d
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/9878170d
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/9878170d

Branch: refs/heads/master
Commit: 9878170d082a58af08b0b7b75494a76546d73580
Parents: c040185
Author: Gautam Parai <gp...@maprtech.com>
Authored: Thu Jun 16 19:36:07 2016 -0700
Committer: Aman Sinha <as...@maprtech.com>
Committed: Thu Jul 14 16:28:51 2016 -0700

----------------------------------------------------------------------
 .../logical/partition/FindPartitionConditions.java  |  4 ++--
 .../java/org/apache/drill/TestPartitionFilter.java  | 16 +++++++++++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/9878170d/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/FindPartitionConditions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/FindPartitionConditions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/FindPartitionConditions.java
index 382d686..d1446b6 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/FindPartitionConditions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/FindPartitionConditions.java
@@ -299,11 +299,11 @@ public class FindPartitionConditions extends RexVisitorImpl<Void> {
 
 
     if (callPushDirFilter == PushDirFilter.NO_PUSH) {
-      if (call.getKind() != SqlKind.AND) {
+      OpState currentOp = opStack.peek();
+      if (currentOp.sqlOperator.getKind() != SqlKind.AND) {
         clearChildren();
       } else {
         // AND op, check if we pushed some children
-        OpState currentOp = opStack.peek();
         if (currentOp.children.size() > 0) {
           callPushDirFilter = PushDirFilter.PARTIAL_PUSH;
         }

http://git-wip-us.apache.org/repos/asf/drill/blob/9878170d/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java b/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
index a2d101e..be2bfaf 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
@@ -362,4 +362,18 @@ public class TestPartitionFilter extends PlanTestBase {
     testIncludeFilter(query, 1, "Filter", 10);
   }
 
-}
\ No newline at end of file
+  @Test  //DRILL-4665: Partition pruning should occur when LIKE predicate on non-partitioning column
+  public void testPartitionFilterWithLike() throws Exception {
+    // Also should be insensitive to the order of the predicates
+    String query1 = "select yr, qrtr from dfs_test.tmp.parquet where yr=1994 and o_custkey LIKE '%5%'";
+    String query2 = "select yr, qrtr from dfs_test.tmp.parquet where o_custkey LIKE '%5%' and yr=1994";
+    testIncludeFilter(query1, 4, "Filter", 9);
+    testIncludeFilter(query2, 4, "Filter", 9);
+    // Test when LIKE predicate on partitioning column
+    String query3 = "select yr, qrtr from dfs_test.tmp.parquet where yr LIKE '%1995%' and o_custkey LIKE '%3%'";
+    String query4 = "select yr, qrtr from dfs_test.tmp.parquet where o_custkey LIKE '%3%' and yr LIKE '%1995%'";
+    testIncludeFilter(query3, 4, "Filter", 16);
+    testIncludeFilter(query4, 4, "Filter", 16);
+  }
+
+}