PHOENIX-3785 Replace unwrap(PhoenixStatement.class) with new Calcite-Phoenix statement classes
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d9caed0a Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d9caed0a Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d9caed0a Branch: refs/heads/calcite Commit: d9caed0a8cb10b6aae3e3c22b73e9dd5b8a2a05a Parents: a78e008 Author: maryannxue <maryann....@gmail.com> Authored: Wed Apr 12 22:10:21 2017 -0700 Committer: maryannxue <maryann....@gmail.com> Committed: Wed Apr 12 22:10:21 2017 -0700 ---------------------------------------------------------------------- .../AlterMultiTenantTableWithViewsIT.java | 9 +- .../org/apache/phoenix/end2end/BaseViewIT.java | 10 +- .../apache/phoenix/end2end/CreateTableIT.java | 13 +- .../apache/phoenix/end2end/GroupByCaseIT.java | 7 +- .../phoenix/end2end/ParallelIteratorsIT.java | 7 +- .../apache/phoenix/end2end/QueryTimeoutIT.java | 7 +- .../org/apache/phoenix/end2end/SequenceIT.java | 7 +- .../phoenix/end2end/SerialIteratorsIT.java | 5 +- .../apache/phoenix/end2end/UpsertSelectIT.java | 6 +- .../apache/phoenix/end2end/UpsertValuesIT.java | 8 +- .../apache/phoenix/end2end/index/IndexIT.java | 9 +- .../phoenix/end2end/index/LocalIndexIT.java | 8 +- .../phoenix/end2end/index/ViewIndexIT.java | 16 +- .../phoenix/iterate/PhoenixQueryTimeoutIT.java | 6 +- .../iterate/RoundRobinResultIteratorIT.java | 21 +-- .../RoundRobinResultIteratorWithStatsIT.java | 12 +- .../calcite/jdbc/PhoenixCalciteFactory.java | 31 +++- .../rel/PhoenixToEnumerableConverter.java | 13 +- .../apache/phoenix/execute/RuntimeContext.java | 10 +- .../phoenix/compile/QueryCompilerTest.java | 28 ++-- .../phoenix/compile/QueryOptimizerTest.java | 166 ++++++++----------- .../phoenix/filter/SkipScanBigFilterTest.java | 4 +- .../apache/phoenix/util/PhoenixRuntimeTest.java | 5 +- .../java/org/apache/phoenix/util/TestUtil.java | 11 ++ 24 files changed, 211 insertions(+), 208 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterMultiTenantTableWithViewsIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterMultiTenantTableWithViewsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterMultiTenantTableWithViewsIT.java index 7b4ff68..89df159 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterMultiTenantTableWithViewsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterMultiTenantTableWithViewsIT.java @@ -31,7 +31,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; -import java.sql.Statement; import java.util.List; import java.util.Properties; @@ -41,7 +40,6 @@ import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.schema.ColumnNotFoundException; import org.apache.phoenix.schema.PColumn; import org.apache.phoenix.schema.PTable; @@ -50,6 +48,7 @@ import org.apache.phoenix.schema.PTableType; import org.apache.phoenix.util.IndexUtil; import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.SchemaUtil; +import org.apache.phoenix.util.TestUtil; import org.junit.Test; import com.google.common.base.Objects; @@ -397,9 +396,8 @@ public class AlterMultiTenantTableWithViewsIT extends ParallelStatsDisabledIT { String upsert = "UPSERT INTO " + view2 + " (K1, K2, K3, V1, V2, V3) VALUES ('key1', 'key2', 'key3', 'value1', 'value2', 'value3')"; viewConn.createStatement().executeUpdate(upsert); viewConn.commit(); - Statement stmt = viewConn.createStatement(); String sql = "SELECT V2 FROM " + view2 + " WHERE V1 = 'value1' AND K3 = 'key3'"; - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).optimizeQuery(sql); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(viewConn, sql); assertTrue(plan.getTableRef().getTable().getName().getString().equals(SchemaUtil.normalizeIdentifier(view2Index))); ResultSet rs = viewConn.createStatement().executeQuery(sql); verifyNewColumns(rs, "value2"); @@ -463,9 +461,8 @@ public class AlterMultiTenantTableWithViewsIT extends ParallelStatsDisabledIT { try (Connection viewConn = getTenantConnection("tenant2")) { viewConn.createStatement().executeUpdate(upsert); viewConn.commit(); - Statement stmt = viewConn.createStatement(); String sql = "SELECT V3 FROM " + divergedView + " WHERE V1 = 'V1' AND PK2 = 'PK2'"; - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).optimizeQuery(sql); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(viewConn, sql); assertTrue(plan.getTableRef().getTable().getName().getString().equals(SchemaUtil.normalizeIdentifier(divergedViewIndex))); ResultSet rs = viewConn.createStatement().executeQuery(sql); verifyNewColumns(rs, "V3"); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java index 478b234..9b4cfd6 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java @@ -26,12 +26,13 @@ import static org.junit.Assert.assertTrue; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.Statement; import java.util.Arrays; import java.util.Collection; import java.util.List; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; @@ -40,7 +41,6 @@ import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.KeyRange; import org.apache.phoenix.util.MetaDataUtil; import org.apache.phoenix.util.QueryUtil; @@ -220,9 +220,9 @@ public abstract class BaseViewIT extends ParallelStatsEnabledIT { query = "SELECT k1, k2, s FROM " + viewName + " WHERE s = 'foo'"; - Statement statement = conn.createStatement(); - rs = statement.executeQuery(query); - Scan scan = statement.unwrap(PhoenixStatement.class).getQueryPlan().getContext().getScan(); + PreparedStatement statement = conn.prepareStatement(query); + rs = statement.executeQuery(); + Scan scan = statement.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan().getContext().getScan(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertEquals(120, rs.getInt(2)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/CreateTableIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/CreateTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/CreateTableIT.java index 96ba71d..a9d5197 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/CreateTableIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/CreateTableIT.java @@ -27,18 +27,19 @@ import static org.junit.Assert.fail; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; import java.util.List; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.KeyRange; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.NewerTableAlreadyExistsException; @@ -69,10 +70,10 @@ public class CreateTableIT extends BaseClientManagedTimeIT { String query = "select count(*) from start_stop_test where pk >= 'EA' and pk < 'EZ'"; props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); conn = DriverManager.getConnection(getUrl(), props); - Statement statement = conn.createStatement(); - statement.execute(query); - PhoenixStatement pstatement = statement.unwrap(PhoenixStatement.class); - List<KeyRange>splits = pstatement.getQueryPlan().getSplits(); + PreparedStatement statement = conn.prepareStatement(query); + statement.execute(); + PhoenixCalcitePreparedStatement pstatement = statement.unwrap(PhoenixCalcitePreparedStatement.class); + List<KeyRange>splits = ((QueryPlan) pstatement.getQueryPlan()).getSplits(); assertTrue(splits.size() > 0); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/GroupByCaseIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/GroupByCaseIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/GroupByCaseIT.java index e201c07..642f0c0 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/GroupByCaseIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/GroupByCaseIT.java @@ -33,6 +33,7 @@ import java.sql.Statement; import java.util.List; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.jdbc.PhoenixStatement; @@ -639,9 +640,9 @@ public class GroupByCaseIT extends ParallelStatsDisabledIT { " AND container_id IN ( 'container1','container2','container3' )\n" + " ORDER BY score DESC\n" + " LIMIT 2"; - Statement stmt = conn.createStatement(); - ResultSet rs = stmt.executeQuery(query); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + PreparedStatement stmt = conn.prepareStatement(query); + ResultSet rs = stmt.executeQuery(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertEquals(indexName, plan.getContext().getCurrentTable().getTable().getName().getString()); assertFalse(plan.getOrderBy().getOrderByExpressions().isEmpty()); assertTrue(rs.next()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java index 717e7ac..05ee3c9 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java @@ -34,6 +34,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; @@ -129,10 +130,10 @@ public class ParallelIteratorsIT extends ParallelStatsEnabledIT { byte[][] splits = new byte[][] { K3, K9, KR }; createTable(conn, splits); - PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); - ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName + " LIMIT 1"); + PreparedStatement stmt = conn.prepareStatement("SELECT * FROM " + tableName + " LIMIT 1"); + ResultSet rs = stmt.executeQuery(); rs.next(); - QueryPlan plan = stmt.getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); List<List<Scan>> nestedScans = plan.getScans(); assertNotNull(nestedScans); for (List<Scan> scans : nestedScans) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryTimeoutIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryTimeoutIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryTimeoutIT.java index 03af042..3244307 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryTimeoutIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryTimeoutIT.java @@ -32,9 +32,10 @@ import java.sql.SQLTimeoutException; import java.util.Map; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalciteStatement; +import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.ConnectionQueryServices; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.query.QueryServicesOptions; @@ -123,13 +124,13 @@ public class QueryTimeoutIT extends BaseUniqueNamesOwnClusterIT { conn.commit(); conn.createStatement().execute("UPDATE STATISTICS " + tableName); - PhoenixStatement pstmt = conn.createStatement().unwrap(PhoenixStatement.class); + PhoenixCalciteStatement pstmt = conn.createStatement().unwrap(PhoenixCalciteStatement.class); pstmt.setQueryTimeout(1); long startTime = System.currentTimeMillis(); try { ResultSet rs = pstmt.executeQuery("SELECT count(*) FROM " + tableName); // Force lots of chunks so query is cancelled - assertTrue(pstmt.getQueryPlan().getSplits().size() > 1000); + assertTrue(((QueryPlan) pstmt.getQueryPlan()).getSplits().size() > 1000); rs.next(); fail("Total time of query was " + (System.currentTimeMillis() - startTime) + " ms, but expected to be greater than 1000"); } catch (SQLTimeoutException e) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SequenceIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SequenceIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SequenceIT.java index 46d91da..36592c5 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SequenceIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SequenceIT.java @@ -34,8 +34,8 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalciteStatement; import org.apache.phoenix.exception.SQLExceptionCode; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.SchemaNotFoundException; import org.apache.phoenix.schema.SequenceAlreadyExistsException; @@ -407,8 +407,9 @@ public class SequenceIT extends BaseClientManagedTimeIT { nextConnection(); conn.createStatement().execute("CREATE INDEX idx ON t(v1) INCLUDE (v2)"); nextConnection(); - PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); - stmt.optimizeQuery("SELECT k, NEXT VALUE FOR seq.perf FROM t WHERE v1 = 'bar'"); + PhoenixCalciteStatement stmt = conn.createStatement().unwrap(PhoenixCalciteStatement.class); + stmt.executeQuery("SELECT k, NEXT VALUE FOR seq.perf FROM t WHERE v1 = 'bar'"); + stmt.getQueryPlan(); } @Test http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SerialIteratorsIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SerialIteratorsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SerialIteratorsIT.java index 1360a08..d3d85e1 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SerialIteratorsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SerialIteratorsIT.java @@ -25,6 +25,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.util.Properties; import org.apache.phoenix.jdbc.PhoenixStatement; @@ -54,7 +55,7 @@ public class SerialIteratorsIT extends ParallelStatsDisabledIT { createTestTable(getUrl(), ddl); initTableValues(conn); String query = "SELECT t_id from " + tableName + " order by t_id desc limit " + 10; - PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); + Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); int i = 25; while (i >= 16) { @@ -62,7 +63,7 @@ public class SerialIteratorsIT extends ParallelStatsDisabledIT { assertEquals(strings[i--], rs.getString(1)); } query = "SELECT t_id from " + tableName + " order by t_id limit " + 10; - stmt = conn.createStatement().unwrap(PhoenixStatement.class); + stmt = conn.createStatement(); rs = stmt.executeQuery(query); i = 0; while (i < 10) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertSelectIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertSelectIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertSelectIT.java index 0a20d47..745af34 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertSelectIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertSelectIT.java @@ -47,9 +47,9 @@ import java.sql.SQLException; import java.util.Map; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.types.PInteger; @@ -1161,7 +1161,7 @@ public class UpsertSelectIT extends BaseClientManagedTimeIT { stmt.setDate(1, new Date(upsertedTs)); stmt.setString(2, "KV3"); rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(baseTableIdx)); assertTrue(rs.next()); assertEquals("KV1", rs.getString("KV1")); @@ -1250,7 +1250,7 @@ public class UpsertSelectIT extends BaseClientManagedTimeIT { stmt.setDate(3, new Date(upsertedTs)); stmt.setString(4, "KV34"); rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(baseTableIdx)); assertTrue(rs.next()); assertEquals("KV13", rs.getString("KV1")); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertValuesIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertValuesIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertValuesIT.java index 11df167..a055482 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertValuesIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertValuesIT.java @@ -39,6 +39,7 @@ import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; @@ -48,7 +49,6 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.BaseTest; import org.apache.phoenix.schema.types.PInteger; import org.apache.phoenix.util.DateUtil; @@ -746,7 +746,7 @@ public class UpsertValuesIT extends BaseClientManagedTimeIT { stmt.setDate(1, rowTimestampDate); stmt.setString(2, "KV1"); rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(indexName)); assertTrue(rs.next()); assertEquals("KV2", rs.getString("KV2")); @@ -804,7 +804,7 @@ public class UpsertValuesIT extends BaseClientManagedTimeIT { stmt.setDate(1, upsertedDate); stmt.setString(2, "KV1"); rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(indexName)); assertTrue(rs.next()); assertEquals("KV2", rs.getString(1)); @@ -863,7 +863,7 @@ public class UpsertValuesIT extends BaseClientManagedTimeIT { stmt.setDate(1, upsertedDate); stmt.setString(2, "KV1"); rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(indexName)); assertTrue(rs.next()); assertEquals("KV2", rs.getString(1)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java index 12add12..b1d4bd5 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java @@ -40,6 +40,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.HConstants; @@ -53,11 +54,11 @@ import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory; import org.apache.phoenix.compile.ColumnResolver; import org.apache.phoenix.compile.FromCompiler; +import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.parse.NamedTableNode; import org.apache.phoenix.parse.TableName; import org.apache.phoenix.query.BaseTest; @@ -323,11 +324,11 @@ public class IndexIT extends ParallelStatsDisabledIT { */ conn2.commit(); - stmt1 = conn1.createStatement(); - rs = stmt1.executeQuery("SELECT COUNT(*) FROM " + fullTableName); + PreparedStatement pStmt = conn1.prepareStatement("SELECT COUNT(*) FROM " + fullTableName); + rs = pStmt.executeQuery(); assertTrue(rs.next()); assertEquals(4,rs.getInt(1)); - assertEquals(fullIndexName, stmt1.unwrap(PhoenixStatement.class).getQueryPlan().getTableRef().getTable().getName().getString()); + assertEquals(fullIndexName, ((QueryPlan) pStmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan()).getTableRef().getTable().getName().getString()); String query = "SELECT /*+ NO_INDEX */ long_pk FROM " + fullTableName; rs = conn1.createStatement().executeQuery(query); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java index a7d0028..03962bb 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java @@ -29,6 +29,7 @@ import static org.junit.Assert.fail; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @@ -36,6 +37,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; @@ -363,9 +365,9 @@ public class LocalIndexIT extends BaseLocalIndexIT { + " SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"V1\"]\nCLIENT MERGE SORT", QueryUtil.getExplainPlan(rs)); - PhoenixStatement stmt = conn1.createStatement().unwrap(PhoenixStatement.class); - rs = stmt.executeQuery(query); - QueryPlan plan = stmt.getQueryPlan(); + PreparedStatement stmt = conn1.prepareStatement(query); + rs = stmt.executeQuery(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertEquals(indexTableName, plan.getContext().getCurrentTable().getTable().getName().getString()); assertEquals(BaseScannerRegionObserver.KEY_ORDERED_GROUP_BY_EXPRESSIONS, plan.getGroupBy().getScanAttribName()); assertTrue(rs.next()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java index 25cb632..13a10fa 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java @@ -31,16 +31,17 @@ import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.hadoop.hbase.util.Bytes; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.KeyRange; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.PNameFactory; @@ -210,7 +211,7 @@ public class ViewIndexIT extends ParallelStatsDisabledIT { sql = "SELECT * FROM " + viewName + " WHERE v2 >= 100"; stmt = conn1.prepareStatement(sql); stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertEquals(4, plan.getSplits().size()); } @@ -262,7 +263,7 @@ public class ViewIndexIT extends ParallelStatsDisabledIT { stmt.setInt(1, 1); stmt.setString(2, "KV3"); ResultSet rs = stmt.executeQuery(); - QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + QueryPlan plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(globalViewIdx)); assertTrue(rs.next()); assertEquals("KV1", rs.getString(1)); @@ -285,14 +286,14 @@ public class ViewIndexIT extends ParallelStatsDisabledIT { stmt.setInt(1, 1); stmt.setString(2, "KV3"); rs = stmt.executeQuery(); - plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + plan = (QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan(); assertTrue(plan.getTableRef().getTable().getName().getString().equals(globalViewIdx)); assertEquals(6, plan.getSplits().size()); } } private void assertRowCount(Connection conn, String fullTableName, String fullBaseName, int expectedCount) throws SQLException { - PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); + Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM " + fullTableName); assertTrue(rs.next()); assertEquals(expectedCount, rs.getInt(1)); @@ -304,7 +305,8 @@ public class ViewIndexIT extends ParallelStatsDisabledIT { } // Force it not to use index and still finds correct number of rows - rs = stmt.executeQuery("SELECT /*+ NO_INDEX */ * FROM " + fullTableName); + PreparedStatement pStmt = conn.prepareStatement("SELECT /*+ NO_INDEX */ * FROM " + fullTableName); + rs = pStmt.executeQuery(); int count = 0; while (rs.next()) { count++; @@ -312,7 +314,7 @@ public class ViewIndexIT extends ParallelStatsDisabledIT { assertEquals(expectedCount, count); // Ensure that the table, not index is being used - assertEquals(fullTableName, stmt.getQueryPlan().getContext().getCurrentTable().getTable().getName().getString()); + assertEquals(fullTableName, pStmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan().getContext().getCurrentTable().getTable().getName().getString()); } @Test http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java b/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java index 956deba..916aad5 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java @@ -27,8 +27,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryServices; import org.junit.Before; import org.junit.Test; @@ -110,8 +110,8 @@ public class PhoenixQueryTimeoutIT extends ParallelStatsDisabledIT { props.setProperty(QueryServices.THREAD_TIMEOUT_MS_ATTRIB, String.valueOf(timeoutMs)); Connection conn = DriverManager.getConnection(getUrl(), props); PreparedStatement ps = conn.prepareStatement("SELECT * FROM " + tableName); - PhoenixStatement phoenixStmt = ps.unwrap(PhoenixStatement.class); - assertEquals(timeoutMs, phoenixStmt.getQueryTimeoutInMillis()); + PhoenixCalcitePreparedStatement phoenixStmt = ps.unwrap(PhoenixCalcitePreparedStatement.class); + //assertEquals(timeoutMs, phoenixStmt.getQueryTimeoutInMillis()); assertEquals(timeoutSecs, phoenixStmt.getQueryTimeout()); return ps; } http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorIT.java b/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorIT.java index c1f7c88..6599983 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorIT.java @@ -37,14 +37,15 @@ import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalcitePreparedStatement; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalciteStatement; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixResultSet; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.ConnectionQueryServices; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.PTable; @@ -384,12 +385,12 @@ public class RoundRobinResultIteratorIT extends ParallelStatsDisabledIT { } - private static ResultIterator getResultIterator(ResultSet rs) throws SQLException { - return rs.unwrap(PhoenixResultSet.class).getUnderlyingIterator(); + private static ResultIterator getResultIterator(PreparedStatement stmt) throws SQLException { + return ((QueryPlan) stmt.unwrap(PhoenixCalcitePreparedStatement.class).getQueryPlan()).iterator(); } - private static void assertRoundRobinBehavior(ResultSet rs, Statement stmt, int numFetches) throws SQLException { - ResultIterator itr = getResultIterator(rs); + private static void assertRoundRobinBehavior(ResultSet rs, PreparedStatement stmt, int numFetches) throws SQLException { + ResultIterator itr = getResultIterator(stmt); if (stmt.getFetchSize() > 1) { assertTrue(itr instanceof RoundRobinResultIterator); RoundRobinResultIterator roundRobinItr = (RoundRobinResultIterator)itr; @@ -407,11 +408,11 @@ public class RoundRobinResultIteratorIT extends ParallelStatsDisabledIT { MockParallelIteratorFactory parallelIteratorFactory = new MockParallelIteratorFactory(); phxConn.setIteratorFactory(parallelIteratorFactory); ResultSet rs = stmt.executeQuery("SELECT * FROM " + testTable); - StatementContext ctx = rs.unwrap(PhoenixResultSet.class).getContext(); - PTable table = ctx.getResolver().getTables().get(0).getTable(); + StatementContext ctx = ((QueryPlan) stmt.unwrap(PhoenixCalciteStatement.class).getQueryPlan()).getContext(); + PTable table = ctx.getCurrentTable().getTable(); parallelIteratorFactory.setTable(table); - PhoenixStatement pstmt = stmt.unwrap(PhoenixStatement.class); - int numIterators = pstmt.getQueryPlan().getSplits().size(); + PhoenixCalciteStatement pstmt = stmt.unwrap(PhoenixCalciteStatement.class); + int numIterators = ((QueryPlan) pstmt.getQueryPlan()).getSplits().size(); assertEquals(8, numIterators); int numFetches = 2 * numIterators; List<String> iteratorOrder = new ArrayList<>(numFetches); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorWithStatsIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorWithStatsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorWithStatsIT.java index 928e161..26f1c08 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorWithStatsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/iterate/RoundRobinResultIteratorWithStatsIT.java @@ -28,11 +28,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.calcite.jdbc.PhoenixCalciteFactory.PhoenixCalciteStatement; +import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.end2end.BaseUniqueNamesOwnClusterIT; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixResultSet; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.PTable; import org.apache.phoenix.util.ReadOnlyProps; @@ -85,11 +85,11 @@ public class RoundRobinResultIteratorWithStatsIT extends BaseUniqueNamesOwnClust MockParallelIteratorFactory parallelIteratorFactory = new MockParallelIteratorFactory(); phxConn.setIteratorFactory(parallelIteratorFactory); ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName); - StatementContext ctx = rs.unwrap(PhoenixResultSet.class).getContext(); - PTable table = ctx.getResolver().getTables().get(0).getTable(); + StatementContext ctx = ((QueryPlan) stmt.unwrap(PhoenixCalciteStatement.class).getQueryPlan()).getContext(); + PTable table = ctx.getCurrentTable().getTable(); parallelIteratorFactory.setTable(table); - PhoenixStatement pstmt = stmt.unwrap(PhoenixStatement.class); - int numIterators = pstmt.getQueryPlan().getSplits().size(); + PhoenixCalciteStatement pstmt = stmt.unwrap(PhoenixCalciteStatement.class); + int numIterators = ((QueryPlan) pstmt.getQueryPlan()).getSplits().size(); assertTrue(numIterators > 1); int numFetches = 2 * numIterators; List<String> iteratorOrder = new ArrayList<>(numFetches); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java index d087d62..7fc949c 100644 --- a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java +++ b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java @@ -12,8 +12,6 @@ import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.SQLXML; import java.sql.Savepoint; -import java.sql.Time; -import java.sql.Timestamp; import java.sql.ResultSet; import java.util.Calendar; import java.util.List; @@ -54,6 +52,8 @@ import org.apache.calcite.sql.validate.SqlConformance; import org.apache.phoenix.calcite.CalciteUtils; import org.apache.phoenix.calcite.PhoenixSchema; import org.apache.phoenix.calcite.PhoenixSqlConformance; +import org.apache.phoenix.calcite.rel.PhoenixToEnumerableConverter; +import org.apache.phoenix.compile.StatementPlan; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.exception.SQLExceptionInfo; import org.apache.phoenix.execute.RuntimeContext; @@ -176,7 +176,7 @@ public class PhoenixCalciteFactory extends CalciteFactory { } ImmutableList<RuntimeContext> ctxList = runtimeContextMap.get(handle); if (ctxList == null) { - List<RuntimeContext> activeCtx = RuntimeContext.THREAD_LOCAL.get(); + List<RuntimeContext> activeCtx = PhoenixToEnumerableConverter.RUNTIME_CONTEXT_LIST.get(); ctxList = ImmutableList.copyOf(activeCtx); runtimeContextMap.put(handle, ctxList); activeCtx.clear(); @@ -354,7 +354,9 @@ public class PhoenixCalciteFactory extends CalciteFactory { } } - private static class PhoenixCalciteStatement extends CalciteStatement { + public static class PhoenixCalciteStatement extends CalciteStatement { + private StatementPlan queryPlan; + public PhoenixCalciteStatement(PhoenixCalciteConnection connection, Meta.StatementHandle h, int resultSetType, int resultSetConcurrency, int resultSetHoldability) { @@ -362,10 +364,16 @@ public class PhoenixCalciteFactory extends CalciteFactory { resultSetHoldability); } + public StatementPlan getQueryPlan() { + return this.queryPlan; + } + @Override public boolean execute(String sql) throws SQLException { try { - return super.execute(sql); + boolean b = super.execute(sql); + this.queryPlan = PhoenixToEnumerableConverter.QUERY_PLAN.get(); + return b; } catch (SQLException e) { throw CalciteUtils.unwrapSqlException(e); } @@ -374,14 +382,18 @@ public class PhoenixCalciteFactory extends CalciteFactory { @Override public ResultSet executeQuery(String sql) throws SQLException{ try { - return super.executeQuery(sql); + ResultSet rs = super.executeQuery(sql); + this.queryPlan = PhoenixToEnumerableConverter.QUERY_PLAN.get(); + return rs; } catch (SQLException e) { throw CalciteUtils.unwrapSqlException(e); } } } - private static class PhoenixCalcitePreparedStatement extends CalcitePreparedStatement { + public static class PhoenixCalcitePreparedStatement extends CalcitePreparedStatement { + private final StatementPlan queryPlan; + @SuppressWarnings("rawtypes") PhoenixCalcitePreparedStatement(PhoenixCalciteConnection connection, Meta.StatementHandle h, CalcitePrepare.CalciteSignature signature, @@ -389,6 +401,11 @@ public class PhoenixCalciteFactory extends CalciteFactory { throws SQLException { super(connection, h, signature, resultSetType, resultSetConcurrency, resultSetHoldability); + this.queryPlan = PhoenixToEnumerableConverter.QUERY_PLAN.get(); + } + + public StatementPlan getQueryPlan() { + return this.queryPlan; } @Override http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java index de82139..cc3cf40 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java @@ -1,6 +1,7 @@ package org.apache.phoenix.calcite.rel; import java.sql.SQLException; +import java.util.LinkedList; import java.util.List; import org.apache.calcite.adapter.enumerable.EnumerableConvention; @@ -43,6 +44,15 @@ import org.apache.phoenix.iterate.ResultIterator; * Scan of a Phoenix table. */ public class PhoenixToEnumerableConverter extends ConverterImpl implements EnumerableRel { + public static final ThreadLocal<List<RuntimeContext>> RUNTIME_CONTEXT_LIST = + new ThreadLocal<List<RuntimeContext>>() { + @Override protected List<RuntimeContext> initialValue() { + return new LinkedList<RuntimeContext>(); + } + }; + public static final ThreadLocal<StatementPlan> QUERY_PLAN = + new ThreadLocal<StatementPlan>(); + private final StatementContext context; public static PhoenixToEnumerableConverter create( @@ -99,11 +109,12 @@ public class PhoenixToEnumerableConverter extends ConverterImpl implements Enume StatementPlan makePlan(PhoenixRel rel) { RuntimeContext runtimeContext = new RuntimeContextImpl(); - RuntimeContext.THREAD_LOCAL.get().add(runtimeContext); + RUNTIME_CONTEXT_LIST.get().add(runtimeContext); final PhoenixRelImplementor phoenixImplementor = new PhoenixRelImplementorImpl(context, runtimeContext); phoenixImplementor.pushContext(new ImplementorContext(true, false, ImmutableIntList.identity(rel.getRowType().getFieldCount()))); final StatementPlan plan = rel.implement(phoenixImplementor); + QUERY_PLAN.set(plan); if (!(plan instanceof QueryPlan)) { return plan; } http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/main/java/org/apache/phoenix/execute/RuntimeContext.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/RuntimeContext.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/RuntimeContext.java index 34568d4..784842e 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/RuntimeContext.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/RuntimeContext.java @@ -17,21 +17,13 @@ */ package org.apache.phoenix.execute; -import java.util.LinkedList; -import java.util.List; import java.util.Map; import org.apache.phoenix.expression.Expression; import org.apache.phoenix.schema.tuple.Tuple; public interface RuntimeContext { - ThreadLocal<List<RuntimeContext>> THREAD_LOCAL = - new ThreadLocal<List<RuntimeContext>>() { - @Override protected List<RuntimeContext> initialValue() { - return new LinkedList<RuntimeContext>(); - } - }; - + public static RuntimeContext EMPTY_CONTEXT = new RuntimeContext() { @Override http://git-wip-us.apache.org/repos/asf/phoenix/blob/d9caed0a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java index 4bc7d2b..e4275ff 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java @@ -68,7 +68,6 @@ import org.apache.phoenix.filter.EncodedQualifiersColumnProjectionFilter; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.jdbc.PhoenixPreparedStatement; -import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.BaseConnectionlessQueryTest; import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.query.QueryServices; @@ -89,6 +88,7 @@ import org.apache.phoenix.util.PropertiesUtil; import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ScanUtil; import org.apache.phoenix.util.SchemaUtil; +import org.apache.phoenix.util.TestUtil; import org.junit.Test; @@ -1767,7 +1767,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String[] queries = queryList.toArray(new String[queryList.size()]); for (int i = 0; i < queries.length; i++) { String query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue(plan.getOrderBy() == OrderBy.FWD_ROW_KEY_ORDER_BY); } // Negative test @@ -1776,7 +1776,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { queryList.add(String.format("SELECT * FROM T WHERE %s(k2)=2.0", sub)); } for (String query : queryList.toArray(new String[queryList.size()])) { - Scan scan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query).getContext().getScan(); + Scan scan = ((QueryPlan) TestUtil.getQueryPlan(conn, query)).getContext().getScan(); assertNotNull(scan.getFilter()); assertTrue(scan.getStartRow().length == 0); assertTrue(scan.getStopRow().length == 0); @@ -1799,7 +1799,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { for (int i = 0; i < queries.length; i++) { String query = queries[i]; QueryPlan plan = - conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue(query, plan.getOrderBy() == OrderBy.REV_ROW_KEY_ORDER_BY); } // Negative test @@ -1808,7 +1808,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { queryList.add(String.format("SELECT * FROM T WHERE %s(k2)=2.0", sub)); } for (String query : queryList.toArray(new String[queryList.size()])) { - Scan scan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query).getContext().getScan(); + Scan scan = ((QueryPlan) TestUtil.getQueryPlan(conn, query)).getContext().getScan(); assertNotNull(scan.getFilter()); assertTrue(scan.getStartRow().length == 0); assertTrue(scan.getStopRow().length == 0); @@ -1835,7 +1835,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue("Expected order by to be compiled out: " + query, plan.getOrderBy() == OrderBy.FWD_ROW_KEY_ORDER_BY); } } @@ -1854,7 +1854,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue("Expected order by to be compiled out: " + query, plan.getOrderBy() == OrderBy.REV_ROW_KEY_ORDER_BY); } } @@ -1876,7 +1876,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertFalse("Expected order by not to be compiled out: " + query, plan.getOrderBy().getOrderByExpressions().isEmpty()); } } @@ -1897,7 +1897,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue("Expected group by to be order preserving: " + query, plan.getGroupBy().isOrderPreserving()); } } @@ -1930,7 +1930,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue("Expected group by to be order preserving: " + query, plan.getGroupBy().isOrderPreserving()); } } @@ -1949,7 +1949,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertFalse("Expected group by not to be order preserving: " + query, plan.getGroupBy().isOrderPreserving()); } } @@ -1968,7 +1968,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertTrue("Expected plan to use round robin iterator " + query, plan.useRoundRobinIterator()); } } @@ -1993,7 +1993,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertFalse("Expected plan to not use round robin iterator " + query, plan.useRoundRobinIterator()); } } @@ -2022,7 +2022,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { String query; for (int i = 0; i < queries.length; i++) { query = queries[i]; - QueryPlan plan = conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query); + QueryPlan plan = (QueryPlan) TestUtil.getQueryPlan(conn, query); assertFalse("Expected plan to not use round robin iterator " + query, plan.useRoundRobinIterator()); } }