Repository: phoenix Updated Branches: refs/heads/4.x-cdh5.12 2fdbfc1b1 -> 031ca5a1f (forced update)
PHOENIX-4616 Move join query optimization out from QueryCompiler into QueryOptimizer (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/376b67f9 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/376b67f9 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/376b67f9 Branch: refs/heads/4.x-cdh5.12 Commit: 376b67f918a66caa6964ec6ec41b78c67e0adcae Parents: 98a8bbd Author: maryannxue <maryann....@gmail.com> Authored: Fri Apr 6 18:05:52 2018 +0100 Committer: Pedro Boado <pbo...@apache.org> Committed: Fri Apr 6 22:15:07 2018 +0100 ---------------------------------------------------------------------- .../org/apache/phoenix/optimize/QueryOptimizer.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/376b67f9/phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java index 31f5c34..6d668cc 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java @@ -38,7 +38,6 @@ import org.apache.phoenix.compile.SequenceManager; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.compile.StatementNormalizer; import org.apache.phoenix.compile.SubqueryRewriter; -import org.apache.phoenix.execute.BaseQueryPlan; import org.apache.phoenix.iterate.ParallelIteratorFactory; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixStatement; @@ -126,11 +125,14 @@ public class QueryOptimizer { return Collections.singletonList(dataPlan); } - if (dataPlan instanceof BaseQueryPlan) { - return getApplicablePlans((BaseQueryPlan) dataPlan, statement, targetColumns, parallelIteratorFactory, stopAtBestPlan); + SelectStatement select = (SelectStatement) dataPlan.getStatement(); + if (!select.isUnion() + && !select.isJoin() + && select.getInnerSelectStatement() == null + && (select.getWhere() == null || !select.getWhere().hasSubquery())) { + return getApplicablePlansForSingleFlatQuery(dataPlan, statement, targetColumns, parallelIteratorFactory, stopAtBestPlan); } - SelectStatement select = (SelectStatement) dataPlan.getStatement(); ColumnResolver resolver = FromCompiler.getResolverForQuery(select, statement.getConnection()); Map<TableRef, QueryPlan> dataPlans = null; @@ -187,7 +189,7 @@ public class QueryOptimizer { return Collections.singletonList(compiler.compile()); } - private List<QueryPlan> getApplicablePlans(BaseQueryPlan dataPlan, PhoenixStatement statement, List<? extends PDatum> targetColumns, ParallelIteratorFactory parallelIteratorFactory, boolean stopAtBestPlan) throws SQLException { + private List<QueryPlan> getApplicablePlansForSingleFlatQuery(QueryPlan dataPlan, PhoenixStatement statement, List<? extends PDatum> targetColumns, ParallelIteratorFactory parallelIteratorFactory, boolean stopAtBestPlan) throws SQLException { SelectStatement select = (SelectStatement)dataPlan.getStatement(); // Exit early if we have a point lookup as we can't get better than that if (dataPlan.getContext().getScanRanges().isPointLookup() && stopAtBestPlan) {