Repository: phoenix Updated Branches: refs/heads/calcite 17c206434 -> b7e5ae4b1
Fix compilation error; Fix a regression due to Calcite materialization changes Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b7e5ae4b Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b7e5ae4b Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b7e5ae4b Branch: refs/heads/calcite Commit: b7e5ae4b17d99e13e6ff90242b8e39312d54edf5 Parents: 17c2064 Author: maryannxue <maryann....@gmail.com> Authored: Wed Aug 2 16:13:01 2017 -0700 Committer: maryannxue <maryann....@gmail.com> Committed: Wed Aug 2 16:13:01 2017 -0700 ---------------------------------------------------------------------- .../apache/phoenix/calcite/PhoenixPrograms.java | 12 +----------- .../phoenix/calcite/PhoenixSqlConformance.java | 5 +++++ .../apache/phoenix/compile/QueryOptimizerTest.java | 17 ++++++++--------- 3 files changed, 14 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7e5ae4b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrograms.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrograms.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrograms.java index 4c7454a..9e0412e 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrograms.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrograms.java @@ -2,7 +2,6 @@ package org.apache.phoenix.calcite; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -144,24 +143,15 @@ public class PhoenixPrograms { List<RelOptMaterialization> materializations, List<RelOptLattice> lattices) { final List<Pair<RelNode, List<RelOptMaterialization>>> materializationUses; - final Set<RelOptMaterialization> applicableMaterializations; + final Set<RelOptMaterialization> applicableMaterializations = Collections.emptySet(); final CalciteConnectionConfig config = planner.getContext().unwrap(CalciteConnectionConfig.class); if (config != null && config.materializationsEnabled()) { // Transform rels using materialized views. materializationUses = RelOptMaterializations.useMaterializedViews(rel, materializations); - - // Add not used but potentially useful materialized views to the planner. - applicableMaterializations = new HashSet<>( - RelOptMaterializations.getApplicableMaterializations( - rel, materializations)); - for (Pair<RelNode, List<RelOptMaterialization>> use : materializationUses) { - applicableMaterializations.removeAll(use.right); - } } else { materializationUses = Collections.emptyList(); - applicableMaterializations = Collections.emptySet(); } final List<RelOptRule> rules = planner.getRules(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7e5ae4b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSqlConformance.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSqlConformance.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSqlConformance.java index 77bd75e..9e45198 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSqlConformance.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSqlConformance.java @@ -90,4 +90,9 @@ public class PhoenixSqlConformance implements SqlConformance { public boolean allowExtend() { return true; } + + @Override + public boolean isLimitStartCountAllowed() { + return false; + } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7e5ae4b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryOptimizerTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryOptimizerTest.java b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryOptimizerTest.java index 9a624be..7aff096 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryOptimizerTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryOptimizerTest.java @@ -463,7 +463,7 @@ public class QueryOptimizerTest extends BaseConnectionlessQueryTest { strArray[1] = "CD"; Array array = conn.createArrayOf("VARCHAR", strArray); stmt.setArray(counter++, array); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, false, 0); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, false, 0); counter = 1; // Filter on row key columns of data table. Order by row key columns. Limit specified. @@ -475,7 +475,7 @@ public class QueryOptimizerTest extends BaseConnectionlessQueryTest { stmt.setDouble(counter++, 1.23); array = conn.createArrayOf("VARCHAR", strArray); stmt.setArray(counter++, array); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, false, 100); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, false, 100); counter = 1; // Filter on row key columns of data table. Order by non-row key columns. Limit specified. @@ -487,7 +487,7 @@ public class QueryOptimizerTest extends BaseConnectionlessQueryTest { stmt.setDouble(counter++, 1.23); array = conn.createArrayOf("VARCHAR", strArray); stmt.setArray(counter++, array); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, true, 100); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, true, 100); if (useIndex) { @@ -498,20 +498,20 @@ public class QueryOptimizerTest extends BaseConnectionlessQueryTest { sql = "SELECT a_date FROM " + tableName + " where CF.a_integer = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, 1000); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, false, 0); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, false, 0); // Filter on columns that the secondary index is on. Order by on the indexed column. Limit specified. sql = "SELECT a_date FROM " + tableName + " where CF.a_integer = ? ORDER BY CF.a_integer LIMIT 100"; stmt = conn.prepareStatement(sql); stmt.setInt(1, 1000); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, false, 100); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, false, 100); // Filter on columns that the secondary index is on. Order by on the non-indexed column. Limit specified. sql = "SELECT a_integer FROM " + tableName + " where CF.a_integer = ? and a_date = ? ORDER BY a_date LIMIT 100"; stmt = conn.prepareStatement(sql); stmt.setInt(1, 1000); stmt.setDate(2, new Date(909000)); - assertPlanDetails(stmt, expectedColNames, expectedColumnNameDataTypes, true, 100); + assertPlanDetails(conn, sql, expectedColNames, expectedColumnNameDataTypes, true, 100); } } finally { conn.close(); @@ -669,9 +669,8 @@ public class QueryOptimizerTest extends BaseConnectionlessQueryTest { assertEquals(2 + offset, plan.getContext().getScanRanges().getBoundPkColumnCount()); } - private void assertPlanDetails(PreparedStatement stmt, String expectedPkCols, String expectedPkColsDataTypes, boolean expectedHasOrderBy, int expectedLimit) throws SQLException { - Connection conn = stmt.getConnection(); - QueryPlan plan = PhoenixRuntime.getOptimizedQueryPlan(stmt); + private void assertPlanDetails(Connection conn, String sql, String expectedPkCols, String expectedPkColsDataTypes, boolean expectedHasOrderBy, int expectedLimit) throws SQLException { + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, sql); List<Pair<String, String>> columns = PhoenixRuntime.getPkColsForSql(conn, plan); assertEquals(expectedPkCols, Joiner.on(",").join(getColumnNames(columns)));