You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2017/04/13 05:10:40 UTC
[2/2] phoenix git commit: PHOENIX-3785 Replace
unwrap(PhoenixStatement.class) with new Calcite-Phoenix statement classes
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 <ma...@gmail.com>
Authored: Wed Apr 12 22:10:21 2017 -0700
Committer: maryannxue <ma...@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());
}
}