Repository: incubator-drill Updated Branches: refs/heads/master ae2790ed8 -> 71f5ad447
DRILL-1567 - Pushdown fails with WHERE clause with more than one AND or OR operator of same type Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/67df8cfa Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/67df8cfa Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/67df8cfa Branch: refs/heads/master Commit: 67df8cfa27041c9696255ee96e2d066e034f6f58 Parents: 958de3d Author: Aditya Kishore <[email protected]> Authored: Tue Oct 21 20:53:39 2014 -0700 Committer: Aditya Kishore <[email protected]> Committed: Wed Oct 22 18:20:00 2014 -0700 ---------------------------------------------------------------------- .../exec/store/hbase/HBaseFilterBuilder.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/67df8cfa/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseFilterBuilder.java ---------------------------------------------------------------------- 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 ee011a5..9d74b69 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 @@ -100,15 +100,18 @@ public class HBaseFilterBuilder extends AbstractExprVisitor<HBaseScanSpec, Void, switch (functionName) { case "booleanAnd": case "booleanOr": - HBaseScanSpec leftScanSpec = args.get(0).accept(this, null); - HBaseScanSpec rightScanSpec = args.get(1).accept(this, null); - if (leftScanSpec != null && rightScanSpec != null) { - nodeScanSpec = mergeScanSpecs(functionName, leftScanSpec, rightScanSpec); - } else { - allExpressionsConverted = false; - if ("booleanAnd".equals(functionName)) { - nodeScanSpec = leftScanSpec == null ? rightScanSpec : leftScanSpec; + HBaseScanSpec firstScanSpec = args.get(0).accept(this, null); + for (int i = 1; i < args.size(); ++i) { + HBaseScanSpec nextScanSpec = args.get(i).accept(this, null); + if (firstScanSpec != null && nextScanSpec != null) { + nodeScanSpec = mergeScanSpecs(functionName, firstScanSpec, nextScanSpec); + } else { + allExpressionsConverted = false; + if ("booleanAnd".equals(functionName)) { + nodeScanSpec = firstScanSpec == null ? nextScanSpec : firstScanSpec; + } } + firstScanSpec = nodeScanSpec; } break; }
