[phoenix] branch 4.x-PHOENIX-5923 updated: PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES
This is an automated email from the ASF dual-hosted git repository. gokcen pushed a commit to branch 4.x-PHOENIX-5923 in repository https://gitbox.apache.org/repos/asf/phoenix.git The following commit(s) were added to refs/heads/4.x-PHOENIX-5923 by this push: new 9f5a0bf PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES 9f5a0bf is described below commit 9f5a0bf75ea571ff629e9aaa3001d61cbfa37663 Author: Gokcen Iskender AuthorDate: Wed Nov 11 16:37:39 2020 -0800 PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES Signed-off-by: Gokcen Iskender --- .../org/apache/phoenix/end2end/CreateTableIT.java | 90 ++ .../org/apache/phoenix/schema/MetaDataClient.java | 104 +++-- 2 files changed, 166 insertions(+), 28 deletions(-) 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 4f6ccab..0099668 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 @@ -622,6 +622,96 @@ public class CreateTableIT extends ParallelStatsDisabledIT { } } +@Test +public void testCreateIndexWithDifferentStorageAndEncoding() throws Exception { +verifyIndexSchemeChange(false, false); +verifyIndexSchemeChange(false, true); +verifyIndexSchemeChange(true, false); +verifyIndexSchemeChange(true, true); + +String tableName = generateUniqueName(); +String indexName = generateUniqueName(); +String createTableDDL = "create IMMUTABLE TABLE " + tableName + "(id char(1) NOT NULL, col1 char(1), col2 char(1) " ++ "CONSTRAINT NAME_PK PRIMARY KEY (id)) IMMUTABLE_STORAGE_SCHEME=SINGLE_CELL_ARRAY_WITH_OFFSETS"; +String createIndexDDL = "create INDEX " + indexName + " ON " + tableName + " (col1) INCLUDE (col2) IMMUTABLE_STORAGE_SCHEME=ONE_CELL_PER_COLUMN"; + +Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES); +try (Connection conn = DriverManager.getConnection(getUrl(), props)) { +conn.createStatement().execute(createTableDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.TWO_BYTE_QUALIFIERS, +ImmutableStorageScheme.SINGLE_CELL_ARRAY_WITH_OFFSETS, tableName, conn); + +boolean failed = false; +try { +conn.createStatement().execute(createIndexDDL); +} catch (SQLException e) { +assertEquals(e.getErrorCode(), SQLExceptionCode.INVALID_IMMUTABLE_STORAGE_SCHEME_CHANGE.getErrorCode()); +failed = true; +} +assertEquals(true, failed); +} +} + +private void verifyIndexSchemeChange(boolean immutable, boolean multiTenant) throws Exception{ +Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES); +String nonEncodedOneCellPerColumnTable = generateUniqueName(); +String createTableDDL; +String createIndexDDL; + +String createTableBaseDDL = "create " + (immutable? " IMMUTABLE ":"") + " TABLE %s (" ++ " id char(1) NOT NULL," + " col1 integer NOT NULL," ++ " col2 bigint NOT NULL," ++ " CONSTRAINT NAME_PK PRIMARY KEY (id, col1, col2)) MULTI_TENANT=" + (multiTenant? "true,":"false,"); + +String createIndexBaseDDL = "create index %s ON %s (col1) INCLUDE (col2) "; + +try (Connection conn = DriverManager.getConnection(getUrl(), props)) { +createTableDDL = String.format(createTableBaseDDL, nonEncodedOneCellPerColumnTable); +createTableDDL += "IMMUTABLE_STORAGE_SCHEME=ONE_CELL_PER_COLUMN, COLUMN_ENCODED_BYTES=0"; +conn.createStatement().execute(createTableDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.NON_ENCODED_QUALIFIERS, +ImmutableStorageScheme.ONE_CELL_PER_COLUMN, +nonEncodedOneCellPerColumnTable, conn); + +String idxName = "IDX_" + generateUniqueName(); +// Don't specify anything to see if it inherits from parent +createIndexDDL = String.format(createIndexBaseDDL, idxName, nonEncodedOneCellPerColumnTable); +conn.createStatement().execute(createIndexDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.NON_ENCODED_QUALIFIERS, +ImmutableStorageScheme.ONE_CELL_PER_COLUMN, +idxName, conn); + +idxName = "IDX_" + generateUniqueName(); +createIndexDDL = String.format(createIndexBaseDDL, idxName, nonEncodedOneCellPerColumnTable); +createIndexDDL += "IMMUTABLE_STORAGE_SCHEME=SINGLE_CELL_ARRAY_WITH_OFFSETS"; +
[phoenix] branch 4.x-PHOENIX-5923 updated: PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES
This is an automated email from the ASF dual-hosted git repository. gokcen pushed a commit to branch 4.x-PHOENIX-5923 in repository https://gitbox.apache.org/repos/asf/phoenix.git The following commit(s) were added to refs/heads/4.x-PHOENIX-5923 by this push: new a2cd0a1 PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES a2cd0a1 is described below commit a2cd0a13ae5b11a13306e7f6d023559bc3f3e49c Author: Gokcen Iskender AuthorDate: Wed Nov 11 16:37:39 2020 -0800 PHOENIX-6220 CREATE INDEX shouldn't ignore IMMUTABLE_STORAGE_SCHEME and COLUMN_ENDCODED_BYTES Signed-off-by: Gokcen Iskender --- .../org/apache/phoenix/end2end/CreateTableIT.java | 91 ++ .../org/apache/phoenix/schema/MetaDataClient.java | 104 +++-- 2 files changed, 167 insertions(+), 28 deletions(-) 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 4f6ccab..c92be7c 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 @@ -622,6 +622,97 @@ public class CreateTableIT extends ParallelStatsDisabledIT { } } +@Test +public void testCreateIndexWithDifferentStorageAndEncoding() throws Exception { +verifyIndexSchemeChange(false, false); +verifyIndexSchemeChange(false, true); +verifyIndexSchemeChange(true, false); +verifyIndexSchemeChange(true, true); + +String tableName = generateUniqueName(); +String indexName = generateUniqueName(); +String createTableDDL = "create IMMUTABLE TABLE " + tableName + "(id char(1) NOT NULL, col1 char(1), col2 char(1) " ++ "CONSTRAINT NAME_PK PRIMARY KEY (id)) IMMUTABLE_STORAGE_SCHEME=SINGLE_CELL_ARRAY_WITH_OFFSETS"; +String createIndexDDL = "create INDEX " + indexName + " ON " + tableName + " (col1) INCLUDE (col2) IMMUTABLE_STORAGE_SCHEME=ONE_CELL_PER_COLUMN"; + +Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES); +try (Connection conn = DriverManager.getConnection(getUrl(), props)) { +conn.createStatement().execute(createTableDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.TWO_BYTE_QUALIFIERS, +ImmutableStorageScheme.SINGLE_CELL_ARRAY_WITH_OFFSETS, tableName, conn); + +boolean failed = false; +try { +conn.createStatement().execute(createIndexDDL); +} catch (SQLException e) { +assertEquals(e.getErrorCode(), SQLExceptionCode.INVALID_IMMUTABLE_STORAGE_SCHEME_CHANGE.getErrorCode()); +failed = true; +} +assertEquals(true, failed); +} +} + +private void verifyIndexSchemeChange(boolean immutable, boolean multiTenant) throws Exception{ +Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES); +String nonEncodedOneCellPerColumnTable = generateUniqueName(); +String createTableDDL; +String createIndexDDL; +String tableName= "[TABLE_NAME]"; +String indexName= "[INDEX_NAME]"; +String createTableBaseDDL = "create " + (immutable? " IMMUTABLE ":"") + " TABLE [TABLE_NAME] (" ++ " id char(1) NOT NULL," + " col1 integer NOT NULL," ++ " col2 bigint NOT NULL," ++ " CONSTRAINT NAME_PK PRIMARY KEY (id, col1, col2)) MULTI_TENANT=" + (multiTenant? "true,":"false,"); + +String createIndexBaseDDL = "create index [INDEX_NAME] ON [TABLE_NAME] (col1) INCLUDE (col2) "; + +try (Connection conn = DriverManager.getConnection(getUrl(), props)) { +createTableDDL = createTableBaseDDL.replace(tableName, nonEncodedOneCellPerColumnTable); +createTableDDL += "IMMUTABLE_STORAGE_SCHEME=ONE_CELL_PER_COLUMN, COLUMN_ENCODED_BYTES=0"; +conn.createStatement().execute(createTableDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.NON_ENCODED_QUALIFIERS, +ImmutableStorageScheme.ONE_CELL_PER_COLUMN, +nonEncodedOneCellPerColumnTable, conn); + +String idxName = "IDX_" + generateUniqueName(); +// Don't specify anything to see if it inherits from parent +createIndexDDL = createIndexBaseDDL.replace(indexName, idxName).replace(tableName, nonEncodedOneCellPerColumnTable); +conn.createStatement().execute(createIndexDDL); + assertColumnEncodingMetadata(QualifierEncodingScheme.NON_ENCODED_QUALIFIERS, +ImmutableStorageScheme.ONE_CELL_PER_COLUMN, +idxName, conn); + +idxName = "IDX_" + generateUniqueName(); +createIndexDDL = createIndexBaseDDL.replace(indexName,