diff options
author | Akihiko Kusanagi <nagi@nagi-p.com> | 2018-06-05 23:12:13 +0900 |
---|---|---|
committer | Volodymyr Vysotskyi <vvovyk@gmail.com> | 2018-07-01 18:10:37 +0300 |
commit | e6a0cdd193ed1724d7cd1faedb5257c787f468b0 (patch) | |
tree | 2cf292e3e656dfa50cb7c8482e0c955003f7a630 /contrib/storage-hbase/src | |
parent | f481a7c2833b8c7ebabe02a37590cdd3e559ca5e (diff) |
DRILL-4020: The not-equal operator returns incorrect results when used on the HBase row key
- Added a condition that checks if the filter to the scan specification doesn't have NOT_EQUAL operator
- Added testFilterPushDownRowKeyNotEqual() to TestHBaseFilterPushDown
closes #309
Diffstat (limited to 'contrib/storage-hbase/src')
2 files changed, 19 insertions, 0 deletions
diff --git a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseFilterBuilder.java b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseFilterBuilder.java index 8d2e8ffd7..6e1efe512 100644 --- a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseFilterBuilder.java +++ b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseFilterBuilder.java @@ -61,6 +61,7 @@ public class HBaseFilterBuilder extends AbstractExprVisitor<HBaseScanSpec, Void, * remove it since its effect is also achieved through startRow and stopRow. */ if (parsedSpec.filter instanceof RowFilter && + ((RowFilter)parsedSpec.filter).getOperator() != CompareOp.NOT_EQUAL && ((RowFilter)parsedSpec.filter).getComparator() instanceof BinaryComparator) { parsedSpec.filter = null; } diff --git a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseFilterPushDown.java b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseFilterPushDown.java index e6eff116f..aee18eb70 100644 --- a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseFilterPushDown.java +++ b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseFilterPushDown.java @@ -45,6 +45,24 @@ public class TestHBaseFilterPushDown extends BaseHBaseTest { } @Test + public void testFilterPushDownRowKeyNotEqual() throws Exception { + setColumnWidths(new int[] {8, 38, 38}); + final String sql = "SELECT\n" + + " *\n" + + "FROM\n" + + " hbase.`[TABLE_NAME]` tableName\n" + + "WHERE\n" + + " row_key <> 'b4'"; + + runHBaseSQLVerifyCount(sql, 7); + + final String[] expectedPlan = {".*startRow=, stopRow=, filter=RowFilter \\(NOT_EQUAL, b4\\).*"}; + final String[] excludedPlan ={}; + final String sqlHBase = canonizeHBaseSQL(sql); + PlanTestBase.testPlanMatchingPatterns(sqlHBase, expectedPlan, excludedPlan); + } + + @Test public void testFilterPushDownRowKeyEqualWithItem() throws Exception { setColumnWidths(new int[] {20, 30}); final String sql = "SELECT\n" |