Repository: phoenix Updated Branches: refs/heads/master 688452879 -> 89cea911c
PHOENIX-3370 VIEW derived from another VIEW with WHERE on a TABLE doesn't use parent VIEW indexes Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/89cea911 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/89cea911 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/89cea911 Branch: refs/heads/master Commit: 89cea911c1b5429363d32cbdeac3dadddccd5465 Parents: 6884528 Author: James Taylor <jamestay...@apache.org> Authored: Wed Oct 12 16:11:26 2016 -0700 Committer: James Taylor <jamestay...@apache.org> Committed: Wed Oct 12 16:11:26 2016 -0700 ---------------------------------------------------------------------- .../phoenix/compile/QueryCompilerTest.java | 64 +++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/89cea911/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 7697d8c..2439ac9 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 @@ -457,6 +457,29 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { return plan.getContext().getScan(); } + private QueryPlan getQueryPlan(String query) throws SQLException { + return getQueryPlan(query, Collections.emptyList()); + } + + private QueryPlan getOptimizedQueryPlan(String query) throws SQLException { + return getOptimizedQueryPlan(query, Collections.emptyList()); + } + + private QueryPlan getOptimizedQueryPlan(String query, List<Object> binds) throws SQLException { + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + PhoenixPreparedStatement statement = conn.prepareStatement(query).unwrap(PhoenixPreparedStatement.class); + for (Object bind : binds) { + statement.setObject(1, bind); + } + QueryPlan plan = statement.optimizeQuery(query); + return plan; + } finally { + conn.close(); + } + } + private QueryPlan getQueryPlan(String query, List<Object> binds) throws SQLException { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); @@ -2263,7 +2286,7 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { try (Connection conn = DriverManager.getConnection(getUrl(), props);) { try { conn.createStatement().execute( - "CREATE TABLE t (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR) GUIDE_POST_WIDTH = -1"); + "CREATE TABLE t (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR) GUIDE_POSTS_WIDTH = -1"); fail(); } catch (SQLException e) { assertEquals("Unexpected Exception", @@ -2443,4 +2466,43 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest { conn.close(); } } + + @Test + public void testIndexOnViewWithChildView() throws SQLException { + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.createStatement().execute("CREATE TABLE PLATFORM_ENTITY.GLOBAL_TABLE (\n" + + " ORGANIZATION_ID CHAR(15) NOT NULL,\n" + + " KEY_PREFIX CHAR(3) NOT NULL,\n" + + " CREATED_DATE DATE,\n" + + " CREATED_BY CHAR(15),\n" + + " CONSTRAINT PK PRIMARY KEY (\n" + + " ORGANIZATION_ID,\n" + + " KEY_PREFIX\n" + + " )\n" + + ") VERSIONS=1, IMMUTABLE_ROWS=true, MULTI_TENANT=true"); + conn.createStatement().execute("CREATE VIEW PLATFORM_ENTITY.GLOBAL_VIEW (\n" + + " INT1 BIGINT NOT NULL,\n" + + " DOUBLE1 DECIMAL(12, 3),\n" + + " IS_BOOLEAN BOOLEAN,\n" + + " TEXT1 VARCHAR,\n" + + " CONSTRAINT PKVIEW PRIMARY KEY\n" + + " (\n" + + " INT1\n" + + " )\n" + + ")\n" + + "AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE WHERE KEY_PREFIX = '123'"); + conn.createStatement().execute("CREATE INDEX GLOBAL_INDEX\n" + + "ON PLATFORM_ENTITY.GLOBAL_VIEW (TEXT1 DESC, INT1)\n" + + "INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE)"); + String query = "SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW\n" + + "WHERE ORGANIZATION_ID = '00Dxx0000002Col' AND TEXT1='Test' AND INT1=1"; + QueryPlan plan = getOptimizedQueryPlan(query); + assertEquals("PLATFORM_ENTITY.GLOBAL_VIEW", plan.getContext().getCurrentTable().getTable().getName() + .getString()); + query = "SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW\n" + + "WHERE ORGANIZATION_ID = '00Dxx0000002Col' AND TEXT1='Test'"; + plan = getOptimizedQueryPlan(query); + assertEquals("PLATFORM_ENTITY.GLOBAL_INDEX", plan.getContext().getCurrentTable().getTable().getName().getString()); + } + } }