Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 d6230307a -> 858734ff7
PHOENIX-3279 QueryPlan.iterator(ParallelScanGrouper scanGrouper) should pass null ('unknown') as scan parameter when calling this.iterator(ParallelScanGrouper scanGrouper, Scan scan) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/858734ff Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/858734ff Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/858734ff Branch: refs/heads/4.x-HBase-0.98 Commit: 858734ff7ffdfe5d050c62212c6d9f6543c8f27a Parents: d623030 Author: maryannxue <maryann....@gmail.com> Authored: Tue Sep 20 09:24:09 2016 -0700 Committer: maryannxue <maryann....@gmail.com> Committed: Tue Sep 20 09:24:09 2016 -0700 ---------------------------------------------------------------------- .../apache/phoenix/end2end/DerivedTableIT.java | 11 ++++++++++ .../apache/phoenix/execute/BaseQueryPlan.java | 16 +++++++++------ .../phoenix/execute/ClientAggregatePlan.java | 7 +------ .../phoenix/execute/ClientProcessingPlan.java | 9 --------- .../apache/phoenix/execute/ClientScanPlan.java | 4 ---- .../apache/phoenix/execute/CorrelatePlan.java | 15 ++------------ .../phoenix/execute/DelegateQueryPlan.java | 13 ++++++++++++ .../apache/phoenix/execute/HashJoinPlan.java | 15 ++++---------- .../phoenix/execute/TupleProjectionPlan.java | 11 ---------- .../org/apache/phoenix/execute/UnionPlan.java | 21 ++++++++------------ .../apache/phoenix/execute/UnnestArrayPlan.java | 11 ---------- .../phoenix/iterate/UnionResultIterators.java | 4 +--- 12 files changed, 50 insertions(+), 87 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java index 1d6dd24..be6b48e 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java @@ -224,6 +224,17 @@ public class DerivedTableIT extends BaseClientManagedTimeIT { assertEquals(ROW2,rs.getString(1)); assertFalse(rs.next()); + + // ((where limit) where limit) limit + query = "SELECT u.eid FROM (SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM aTable WHERE a_string = '" + B_VALUE + "' LIMIT 5) AS t WHERE t.b = '" + C_VALUE + "' LIMIT 4) AS u WHERE u.eid >= '" + ROW1 + "' LIMIT 3"; + statement = conn.prepareStatement(query); + rs = statement.executeQuery(); + assertTrue (rs.next()); + assertEquals(ROW5,rs.getString(1)); + assertTrue (rs.next()); + assertEquals(ROW8,rs.getString(1)); + + assertFalse(rs.next()); // (count) where query = "SELECT t.c FROM (SELECT count(*) c FROM aTable) AS t WHERE t.c > 0"; http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java index 74ac269..352b533 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java @@ -200,10 +200,15 @@ public abstract class BaseQueryPlan implements QueryPlan { // byte[] producer = Bytes.toBytes(UUID.randomUUID().toString()); // scan.setAttribute(HBaseServer.CALL_QUEUE_PRODUCER_ATTRIB_NAME, producer); // } + + @Override + public final ResultIterator iterator() throws SQLException { + return iterator(Collections.<SQLCloseable>emptyList(), DefaultParallelScanGrouper.getInstance(), null); + } @Override public final ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(Collections.<SQLCloseable>emptyList(), scanGrouper, this.context.getScan()); + return iterator(Collections.<SQLCloseable>emptyList(), scanGrouper, null); } @Override @@ -211,12 +216,11 @@ public abstract class BaseQueryPlan implements QueryPlan { return iterator(Collections.<SQLCloseable>emptyList(), scanGrouper, scan); } - @Override - public final ResultIterator iterator() throws SQLException { - return iterator(Collections.<SQLCloseable>emptyList(), DefaultParallelScanGrouper.getInstance(), this.context.getScan()); - } - public final ResultIterator iterator(final List<? extends SQLCloseable> dependencies, ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { + if (scan == null) { + scan = context.getScan(); + } + /* * For aggregate queries, we still need to let the AggregationPlan to * proceed so that we can give proper aggregates even if there are no http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java index eb048f4..9251724 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java @@ -83,13 +83,8 @@ public class ClientAggregatePlan extends ClientProcessingPlan { } @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(scanGrouper, null); - } - - @Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { - ResultIterator iterator = delegate.iterator(scanGrouper); + ResultIterator iterator = delegate.iterator(scanGrouper, scan); if (where != null) { iterator = new FilterResultIterator(iterator, where); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientProcessingPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientProcessingPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientProcessingPlan.java index 2cd5237..ac43919 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientProcessingPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientProcessingPlan.java @@ -17,15 +17,11 @@ */ package org.apache.phoenix.execute; -import java.sql.SQLException; - import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.compile.RowProjector; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.compile.OrderByCompiler.OrderBy; import org.apache.phoenix.expression.Expression; -import org.apache.phoenix.iterate.DefaultParallelScanGrouper; -import org.apache.phoenix.iterate.ResultIterator; import org.apache.phoenix.parse.FilterableStatement; import org.apache.phoenix.schema.TableRef; @@ -89,9 +85,4 @@ public abstract class ClientProcessingPlan extends DelegateQueryPlan { public FilterableStatement getStatement() { return statement; } - - @Override - public ResultIterator iterator() throws SQLException { - return iterator(DefaultParallelScanGrouper.getInstance()); - } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientScanPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientScanPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientScanPlan.java index 4e43225..6bbc545 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientScanPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientScanPlan.java @@ -50,10 +50,6 @@ public class ClientScanPlan extends ClientProcessingPlan { } @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(scanGrouper, delegate.getContext().getScan()); - } - @Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { ResultIterator iterator = delegate.iterator(scanGrouper, scan); if (where != null) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/CorrelatePlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/CorrelatePlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/CorrelatePlan.java index fc5a04d..b1d00ab 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/CorrelatePlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/CorrelatePlan.java @@ -28,7 +28,6 @@ import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.exception.SQLExceptionInfo; import org.apache.phoenix.execute.TupleProjector.ProjectedValueTuple; -import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.ParallelScanGrouper; import org.apache.phoenix.iterate.ResultIterator; import org.apache.phoenix.parse.JoinTableNode.JoinType; @@ -99,17 +98,7 @@ public class CorrelatePlan extends DelegateQueryPlan { } @Override - public ResultIterator iterator() throws SQLException { - return iterator(DefaultParallelScanGrouper.getInstance()); - } - - @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) - throws SQLException { - return iterator(scanGrouper, null); - } - @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) + public ResultIterator iterator(final ParallelScanGrouper scanGrouper, final Scan scan) throws SQLException { return new ResultIterator() { private final ValueBitSet destBitSet = ValueBitSet.newInstance(joinedSchema); @@ -118,7 +107,7 @@ public class CorrelatePlan extends DelegateQueryPlan { (joinType == JoinType.Semi || joinType == JoinType.Anti) ? ValueBitSet.EMPTY_VALUE_BITSET : ValueBitSet.newInstance(rhsSchema); - private final ResultIterator iter = delegate.iterator(); + private final ResultIterator iter = delegate.iterator(scanGrouper, scan); private ResultIterator rhsIter = null; private Tuple current = null; private boolean closed = false; http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/DelegateQueryPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/DelegateQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/DelegateQueryPlan.java index 8f0d224..46eec91 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/DelegateQueryPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/DelegateQueryPlan.java @@ -25,6 +25,9 @@ import java.util.Set; import org.apache.hadoop.hbase.client.Scan; import org.apache.phoenix.compile.GroupByCompiler.GroupBy; import org.apache.phoenix.compile.OrderByCompiler.OrderBy; +import org.apache.phoenix.iterate.DefaultParallelScanGrouper; +import org.apache.phoenix.iterate.ParallelScanGrouper; +import org.apache.phoenix.iterate.ResultIterator; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.compile.RowProjector; import org.apache.phoenix.compile.StatementContext; @@ -124,4 +127,14 @@ public abstract class DelegateQueryPlan implements QueryPlan { public Integer getOffset() { return delegate.getOffset(); } + + @Override + public ResultIterator iterator() throws SQLException { + return iterator(DefaultParallelScanGrouper.getInstance()); + } + + @Override + public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { + return iterator(scanGrouper, null); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java index d332f68..dce797d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java @@ -50,7 +50,6 @@ import org.apache.phoenix.expression.Expression; import org.apache.phoenix.expression.InListExpression; import org.apache.phoenix.expression.LiteralExpression; import org.apache.phoenix.expression.RowValueConstructorExpression; -import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.FilterResultIterator; import org.apache.phoenix.iterate.ParallelScanGrouper; import org.apache.phoenix.iterate.ResultIterator; @@ -132,19 +131,13 @@ public class HashJoinPlan extends DelegateQueryPlan { public Set<TableRef> getSourceRefs() { return tableRefs; } - - @Override - public ResultIterator iterator() throws SQLException { - return iterator(DefaultParallelScanGrouper.getInstance()); - } - - @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(scanGrouper, this.delegate.getContext().getScan()); - } @Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { + if (scan == null) { + scan = delegate.getContext().getScan(); + } + int count = subPlans.length; PhoenixConnection connection = getContext().getConnection(); ConnectionQueryServices services = connection.getQueryServices(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjectionPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjectionPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjectionPlan.java index 0ba0cc1..f42af56 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjectionPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjectionPlan.java @@ -24,7 +24,6 @@ import org.apache.hadoop.hbase.client.Scan; import org.apache.phoenix.compile.ExplainPlan; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.expression.Expression; -import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.DelegateResultIterator; import org.apache.phoenix.iterate.FilterResultIterator; import org.apache.phoenix.iterate.ParallelScanGrouper; @@ -53,16 +52,6 @@ public class TupleProjectionPlan extends DelegateQueryPlan { return new ExplainPlan(planSteps); } - - @Override - public ResultIterator iterator() throws SQLException { - return iterator(DefaultParallelScanGrouper.getInstance()); - } - - @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(scanGrouper, delegate.getContext().getScan()); - } @Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/UnionPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/UnionPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/UnionPlan.java index cf95b5b..e2c18b1 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/UnionPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/UnionPlan.java @@ -20,7 +20,6 @@ package org.apache.phoenix.execute; import java.sql.ParameterMetaData; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -33,6 +32,7 @@ import org.apache.phoenix.compile.RowProjector; import org.apache.phoenix.compile.ScanRanges; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.iterate.ConcatResultIterator; +import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.LimitingResultIterator; import org.apache.phoenix.iterate.MergeSortTopNResultIterator; import org.apache.phoenix.iterate.OffsetResultIterator; @@ -43,8 +43,6 @@ import org.apache.phoenix.jdbc.PhoenixStatement.Operation; import org.apache.phoenix.parse.FilterableStatement; import org.apache.phoenix.query.KeyRange; import org.apache.phoenix.schema.TableRef; -import org.apache.phoenix.util.SQLCloseable; - import com.google.common.collect.Sets; @@ -134,22 +132,19 @@ public class UnionPlan implements QueryPlan { public RowProjector getProjector() { return projector; } - + @Override - public final ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return iterator(Collections.<SQLCloseable>emptyList()); + public ResultIterator iterator() throws SQLException { + return iterator(DefaultParallelScanGrouper.getInstance()); } @Override - public final ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { - return iterator(Collections.<SQLCloseable>emptyList()); - } - @Override - public final ResultIterator iterator() throws SQLException { - return iterator(Collections.<SQLCloseable>emptyList()); + public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { + return iterator(scanGrouper, null); } - public final ResultIterator iterator(final List<? extends SQLCloseable> dependencies) throws SQLException { + @Override + public final ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { this.iterators = new UnionResultIterators(plans, parentContext); ResultIterator scanner; boolean isOrdered = !orderBy.getOrderByExpressions().isEmpty(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/execute/UnnestArrayPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/UnnestArrayPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/UnnestArrayPlan.java index 94c59df..bda1b96 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/UnnestArrayPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/UnnestArrayPlan.java @@ -28,7 +28,6 @@ import org.apache.phoenix.expression.BaseSingleExpression; import org.apache.phoenix.expression.BaseTerminalExpression; import org.apache.phoenix.expression.Expression; import org.apache.phoenix.expression.visitor.ExpressionVisitor; -import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.DelegateResultIterator; import org.apache.phoenix.iterate.ParallelScanGrouper; import org.apache.phoenix.iterate.ResultIterator; @@ -48,16 +47,6 @@ public class UnnestArrayPlan extends DelegateQueryPlan { } @Override - public ResultIterator iterator() throws SQLException { - return iterator(DefaultParallelScanGrouper.getInstance()); - } - - @Override - public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { - return new UnnestArrayResultIterator(delegate.iterator(scanGrouper, delegate.getContext().getScan())); - } - - @Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { return new UnnestArrayResultIterator(delegate.iterator(scanGrouper, scan)); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/858734ff/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java index 5018dad..910a514 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java @@ -42,21 +42,19 @@ public class UnionResultIterators implements ResultIterators { private final List<KeyRange> splits; private final List<List<Scan>> scans; private final List<PeekingResultIterator> iterators; - private final List<QueryPlan> plans; private final List<ReadMetricQueue> readMetricsList; private final List<OverAllQueryMetrics> overAllQueryMetricsList; private boolean closed; private final StatementContext parentStmtCtx; public UnionResultIterators(List<QueryPlan> plans, StatementContext parentStmtCtx) throws SQLException { this.parentStmtCtx = parentStmtCtx; - this.plans = plans; int nPlans = plans.size(); iterators = Lists.newArrayListWithExpectedSize(nPlans); splits = Lists.newArrayListWithExpectedSize(nPlans * 30); scans = Lists.newArrayListWithExpectedSize(nPlans * 10); readMetricsList = Lists.newArrayListWithCapacity(nPlans); overAllQueryMetricsList = Lists.newArrayListWithCapacity(nPlans); - for (QueryPlan plan : this.plans) { + for (QueryPlan plan : plans) { readMetricsList.add(plan.getContext().getReadMetricsQueue()); overAllQueryMetricsList.add(plan.getContext().getOverallQueryMetrics()); iterators.add(LookAheadResultIterator.wrap(plan.iterator()));