http://git-wip-us.apache.org/repos/asf/phoenix/blob/d77d2492/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 b7537a6..8283b28 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 @@ -43,7 +43,6 @@ import java.util.Properties; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; @@ -51,7 +50,8 @@ import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.phoenix.compile.ColumnResolver; import org.apache.phoenix.compile.FromCompiler; -import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT; +import org.apache.phoenix.end2end.BaseHBaseManagedTimeTableReuseIT; +import org.apache.phoenix.end2end.BaseOwnClusterIT; import org.apache.phoenix.end2end.Shadower; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; @@ -78,16 +78,13 @@ import org.junit.runners.Parameterized.Parameters; import com.google.common.collect.Maps; @RunWith(Parameterized.class) -public class IndexIT extends BaseHBaseManagedTimeIT { +public class IndexIT extends BaseOwnClusterIT { private final boolean localIndex; private final boolean transactional; private final boolean mutable; private final String tableDDLOptions; - private final String tableName; - private final String indexName; - private final String fullTableName; - private final String fullIndexName; + public IndexIT(boolean localIndex, boolean mutable, boolean transactional) { this.localIndex = localIndex; @@ -102,14 +99,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { optionBuilder.append(" TRANSACTIONAL=true "); } this.tableDDLOptions = optionBuilder.toString(); - this.tableName = TestUtil.DEFAULT_DATA_TABLE_NAME + ( transactional ? "_TXN" : ""); - this.indexName = "IDX" + ( transactional ? "_TXN" : ""); - this.fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); - this.fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); } @BeforeClass - @Shadower(classBeingShadowed = BaseHBaseManagedTimeIT.class) + @Shadower(classBeingShadowed = BaseHBaseManagedTimeTableReuseIT.class) public static void doSetup() throws Exception { Map<String,String> props = Maps.newHashMapWithExpectedSize(1); props.put(QueryServices.TRANSACTIONS_ENABLED, Boolean.toString(true)); @@ -127,6 +120,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testIndexWithNullableFixedWithCols() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; @@ -183,6 +180,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testDeleteFromAllPKColumnIndex() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; @@ -237,6 +238,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testCreateIndexAfterUpsertStarted() throws Exception { + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); testCreateIndexAfterUpsertStarted(false, fullTableName + "1", fullIndexName + "1"); if (transactional) { testCreateIndexAfterUpsertStarted(true, fullTableName + "2", fullIndexName + "2"); @@ -334,6 +339,11 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testDeleteFromNonPKColumnIndex() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); + String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); @@ -384,6 +394,9 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testGroupByCount() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; @@ -402,6 +415,9 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testSelectDistinctOnTableWithSecondaryImmutableIndex() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; @@ -425,6 +441,9 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testInClauseWithIndexOnColumnOfUsignedIntType() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl ="CREATE TABLE " + fullTableName + BaseTest.TEST_TABLE_SCHEMA + tableDDLOptions; @@ -447,6 +466,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void createIndexOnTableWithSpecifiedDefaultCF() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -485,6 +508,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testIndexWithNullableDateCol() throws Exception { + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); @@ -541,6 +568,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testSelectAllAndAliasWithIndex() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -616,6 +647,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testSelectCF() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -673,6 +708,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testUpsertAfterIndexDrop() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -733,7 +772,12 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testMultipleUpdatesAcrossRegions() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - String testTable = fullTableName+"_MULTIPLE_UPDATES"; + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); + + String testTable = fullTableName+"_MULTIPLE_UPDATES"; try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -741,8 +785,8 @@ public class IndexIT extends BaseHBaseManagedTimeIT { // make sure that the tables are empty, but reachable conn.createStatement().execute( "CREATE TABLE " + testTable - + " (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) " + HTableDescriptor.MAX_FILESIZE + "=1, " + HTableDescriptor.MEMSTORE_FLUSHSIZE + "=1 " - + (!tableDDLOptions.isEmpty() ? "," + tableDDLOptions : "") + "SPLIT ON ('b')"); + + " (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) " + + (!tableDDLOptions.isEmpty() ? tableDDLOptions : "") + "SPLIT ON ('b')"); query = "SELECT * FROM " + testTable; rs = conn.createStatement().executeQuery(query); assertFalse(rs.next()); @@ -821,6 +865,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testIndexWithCaseSensitiveCols() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -932,6 +980,9 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testInFilterOnIndexedTable() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -950,6 +1001,10 @@ public class IndexIT extends BaseHBaseManagedTimeIT { @Test public void testIndexWithDecimalCol() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IND_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d77d2492/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java index a48cc4b..8cce14a 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java @@ -17,10 +17,7 @@ */ package org.apache.phoenix.end2end.index; -import static org.apache.phoenix.util.TestUtil.INDEX_DATA_SCHEMA; -import static org.apache.phoenix.util.TestUtil.INDEX_DATA_TABLE; -import static org.apache.phoenix.util.TestUtil.MUTABLE_INDEX_DATA_TABLE; -import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; +import static org.apache.phoenix.util.TestUtil.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -36,8 +33,9 @@ import java.sql.SQLException; import java.sql.Types; import java.util.Properties; +import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; -import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT; +import org.apache.phoenix.end2end.BaseHBaseManagedTimeTableReuseIT; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; @@ -56,7 +54,7 @@ import org.apache.phoenix.util.TestUtil; import org.junit.Test; -public class IndexMetadataIT extends BaseHBaseManagedTimeIT { +public class IndexMetadataIT extends BaseHBaseManagedTimeTableReuseIT { private enum Order {ASC, DESC}; @@ -122,167 +120,169 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); conn.setAutoCommit(false); + String indexDataTable = generateRandomString(); + String indexName = generateRandomString(); try { - ensureTableCreated(getUrl(), MUTABLE_INDEX_DATA_TABLE); - String ddl = "CREATE INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + ensureTableCreated(getUrl(), indexDataTable, MUTABLE_INDEX_DATA_TABLE); + String ddl = "CREATE INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (varchar_col1 ASC, varchar_col2 ASC, int_pk DESC)" + " INCLUDE (int_col1, int_col2)"; PreparedStatement stmt = conn.prepareStatement(ddl); stmt.execute(); // Verify the metadata for index is correct. - ResultSet rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, false, false); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 1, "A:VARCHAR_COL1", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 2, "B:VARCHAR_COL2", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 3, ":INT_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 4, ":VARCHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 5, ":CHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 6, ":LONG_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 7, ":DECIMAL_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 8, ":DATE_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 9, "A:INT_COL1", null); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX", 10, "B:INT_COL2", null); + ResultSet rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 1, "A:VARCHAR_COL1", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 2, "B:VARCHAR_COL2", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 3, ":INT_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 4, ":VARCHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 5, ":CHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 6, ":LONG_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 7, ":DECIMAL_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 8, ":DATE_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 9, "A:INT_COL1", null); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 10, "B:INT_COL2", null); assertFalse(rs.next()); - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), StringUtil.escapeLike("IDX"), new String[] {PTableType.INDEX.getValue().getString() }); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), StringUtil.escapeLike(indexName ), new String[] {PTableType.INDEX.getValue().getString() }); assertTrue(rs.next()); assertEquals(PIndexState.ACTIVE.toString(), rs.getString("INDEX_STATE")); // Verify that there is a row inserted into the data table for the index table. - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName ); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(1)); + assertEquals(indexName , rs.getString(1)); assertFalse(rs.next()); - assertActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " UNUSABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " UNUSABLE"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "IDX", new String[] {PTableType.INDEX.toString()}); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), indexName , new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(3)); + assertEquals(indexName , rs.getString(3)); assertEquals(PIndexState.INACTIVE.toString(), rs.getString("INDEX_STATE")); assertFalse(rs.next()); - assertActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " USABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " USABLE"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "IDX", new String[] {PTableType.INDEX.toString()}); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), indexName , new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(3)); + assertEquals(indexName , rs.getString(3)); assertEquals(PIndexState.ACTIVE.toString(), rs.getString("INDEX_STATE")); assertFalse(rs.next()); - assertActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " DISABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " DISABLE"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "IDX", new String[] {PTableType.INDEX.toString()}); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), indexName , new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(3)); + assertEquals(indexName , rs.getString(3)); assertEquals(PIndexState.DISABLE.toString(), rs.getString("INDEX_STATE")); assertFalse(rs.next()); - assertNoActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertNoActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); try { - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " USABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " USABLE"; conn.createStatement().execute(ddl); fail(); } catch (SQLException e) { assertEquals(SQLExceptionCode.INVALID_INDEX_STATE_TRANSITION.getErrorCode(), e.getErrorCode()); } try { - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " UNUSABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " UNUSABLE"; conn.createStatement().execute(ddl); fail(); } catch (SQLException e) { assertEquals(SQLExceptionCode.INVALID_INDEX_STATE_TRANSITION.getErrorCode(), e.getErrorCode()); } - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + " REBUILD"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " REBUILD"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "IDX", new String[] {PTableType.INDEX.toString()}); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), indexName , new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(3)); + assertEquals(indexName , rs.getString(3)); assertEquals(PIndexState.ACTIVE.toString(), rs.getString("INDEX_STATE")); assertFalse(rs.next()); - assertActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); - ddl = "DROP INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE; + ddl = "DROP INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable; stmt = conn.prepareStatement(ddl); stmt.execute(); - assertNoActiveIndex(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE); + assertNoActiveIndex(conn, INDEX_DATA_SCHEMA, indexDataTable); // Assert the rows for index table is completely removed. - rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, false, false); + rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); assertFalse(rs.next()); // Assert the row in the original data table is removed. // Verify that there is a row inserted into the data table for the index table. - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName ); assertFalse(rs.next()); // Create another two indexes, and drops the table, verifies the indexes are dropped as well. - ddl = "CREATE INDEX IDX1 ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + ddl = "CREATE INDEX " + indexName + "1 ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (varchar_col1 ASC, varchar_col2 ASC, int_pk DESC)" + " INCLUDE (int_col1, int_col2)"; stmt = conn.prepareStatement(ddl); stmt.execute(); - ddl = "CREATE INDEX IDX2 ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + ddl = "CREATE INDEX " + indexName + "2 ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (varchar_col1 ASC, varchar_col2 ASC, int_pk DESC)" + " INCLUDE (long_pk, int_col2)"; stmt = conn.prepareStatement(ddl); stmt.execute(); - rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, false, false); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 1, "A:VARCHAR_COL1", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 2, "B:VARCHAR_COL2", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 3, ":INT_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 4, ":VARCHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 5, ":CHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 6, ":LONG_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 7, ":DECIMAL_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 8, ":DATE_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 9, "A:INT_COL1", null); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1", 10, "B:INT_COL2", null); + rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 1, "A:VARCHAR_COL1", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 2, "B:VARCHAR_COL2", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 3, ":INT_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 4, ":VARCHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 5, ":CHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 6, ":LONG_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 7, ":DECIMAL_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 8, ":DATE_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 9, "A:INT_COL1", null); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1", 10, "B:INT_COL2", null); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 1, "A:VARCHAR_COL1", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 2, "B:VARCHAR_COL2", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 3, ":INT_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 4, ":VARCHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 5, ":CHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 6, ":LONG_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 7, ":DECIMAL_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 8, ":DATE_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2", 9, "B:INT_COL2", null); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 1, "A:VARCHAR_COL1", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 2, "B:VARCHAR_COL2", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 3, ":INT_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 4, ":VARCHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 5, ":CHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 6, ":LONG_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 7, ":DECIMAL_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 8, ":DATE_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2", 9, "B:INT_COL2", null); assertFalse(rs.next()); // Create another table in the same schema - String diffTableNameInSameSchema = INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE + "2"; + String diffTableNameInSameSchema = INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + "2"; conn.createStatement().execute("CREATE TABLE " + diffTableNameInSameSchema + "(k INTEGER PRIMARY KEY)"); try { - conn.createStatement().execute("DROP INDEX IDX1 ON " + diffTableNameInSameSchema); - fail("Should have realized index IDX1 is not on the table"); + conn.createStatement().execute("DROP INDEX " + indexName + "1 ON " + diffTableNameInSameSchema); + fail("Should have realized index " + indexName + "1 is not on the table"); } catch (TableNotFoundException ignore) { } - ddl = "DROP TABLE " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + MUTABLE_INDEX_DATA_TABLE; + ddl = "DROP TABLE " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable; stmt = conn.prepareStatement(ddl); stmt.execute(); - rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, false, false); + rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); assertFalse(rs.next()); - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX1"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName + "1"); assertFalse(rs.next()); - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, MUTABLE_INDEX_DATA_TABLE, "IDX2"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName + "2"); assertFalse(rs.next()); } finally { conn.close(); @@ -295,54 +295,56 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { // column. The definition is defined in IndexUtil.getIndexColumnDataType. Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); + String indexDataTable = generateRandomString(); + String indexName = generateRandomString(); conn.setAutoCommit(false); try { - ensureTableCreated(getUrl(), INDEX_DATA_TABLE); - String ddl = "CREATE INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE + ensureTableCreated(getUrl(), indexDataTable, INDEX_DATA_TABLE); + String ddl = "CREATE INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (char_col1 ASC, int_col2 ASC, long_col2 DESC)" + " INCLUDE (int_col1)"; PreparedStatement stmt = conn.prepareStatement(ddl); stmt.execute(); // Verify the CHAR, INT and LONG are converted to right type. - ResultSet rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, false, false); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 1, "A:CHAR_COL1", Order.ASC, Types.VARCHAR); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 2, "B:INT_COL2", Order.ASC, Types.DECIMAL); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 3, "B:LONG_COL2", Order.DESC, Types.DECIMAL); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 4, ":VARCHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 5, ":CHAR_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 6, ":INT_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 7, ":LONG_PK", Order.DESC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 8, ":DECIMAL_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 9, ":DATE_PK", Order.ASC); - assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX", 10, "A:INT_COL1", null); + ResultSet rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 1, "A:CHAR_COL1", Order.ASC, Types.VARCHAR); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 2, "B:INT_COL2", Order.ASC, Types.DECIMAL); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 3, "B:LONG_COL2", Order.DESC, Types.DECIMAL); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 4, ":VARCHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 5, ":CHAR_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 6, ":INT_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 7, ":LONG_PK", Order.DESC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 8, ":DECIMAL_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 9, ":DATE_PK", Order.ASC); + assertIndexInfoMetadata(rs, INDEX_DATA_SCHEMA, indexDataTable, indexName , 10, "A:INT_COL1", null); assertFalse(rs.next()); - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName ); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(1)); + assertEquals(indexName , rs.getString(1)); assertFalse(rs.next()); - ddl = "ALTER INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE + " UNUSABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " UNUSABLE"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. - rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "IDX", new String[] {PTableType.INDEX.toString()}); + rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), indexName , new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); - assertEquals("IDX", rs.getString(3)); + assertEquals(indexName , rs.getString(3)); assertEquals(PIndexState.INACTIVE.toString(), rs.getString("INDEX_STATE")); assertFalse(rs.next()); - ddl = "DROP INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE; + ddl = "DROP INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable; stmt = conn.prepareStatement(ddl); stmt.execute(); // Assert the rows for index table is completely removed. - rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, false, false); + rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); assertFalse(rs.next()); // Assert the row in the original data table is removed. // Verify that there is a row inserted into the data table for the index table. - rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, "IDX"); + rs = IndexTestUtil.readDataTableIndexRow(conn, INDEX_DATA_SCHEMA, indexDataTable, indexName ); assertFalse(rs.next()); } finally { conn.close(); @@ -355,27 +357,28 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { Connection conn = DriverManager.getConnection(getUrl(), props); conn.setAutoCommit(false); String indexName = "\"lowerCaseIndex\""; + String indexDataTable = generateRandomString(); try { - ensureTableCreated(getUrl(), INDEX_DATA_TABLE); - String ddl = "CREATE INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE + ensureTableCreated(getUrl(), indexDataTable, INDEX_DATA_TABLE); + String ddl = "CREATE INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (char_col1 ASC, int_col2 ASC, long_col2 DESC)" + " INCLUDE (int_col1)"; PreparedStatement stmt = conn.prepareStatement(ddl); stmt.execute(); - ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE + " UNUSABLE"; + ddl = "ALTER INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " UNUSABLE"; conn.createStatement().execute(ddl); // Verify the metadata for index is correct. ResultSet rs = conn.getMetaData().getTables(null, StringUtil.escapeLike(INDEX_DATA_SCHEMA), "lowerCaseIndex", new String[] {PTableType.INDEX.toString()}); assertTrue(rs.next()); assertEquals("lowerCaseIndex", rs.getString(3)); - ddl = "DROP INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE; + ddl = "DROP INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable; stmt = conn.prepareStatement(ddl); stmt.execute(); // Assert the rows for index table is completely removed. - rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, INDEX_DATA_TABLE, false, false); + rs = conn.getMetaData().getIndexInfo(null, INDEX_DATA_SCHEMA, indexDataTable, false, false); assertFalse(rs.next()); } finally { conn.close(); @@ -388,9 +391,11 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); conn.setAutoCommit(false); + String indexDataTable = generateRandomString(); + String indexName = generateRandomString(); try { - ensureTableCreated(getUrl(), TestUtil.INDEX_DATA_TABLE); - String ddl = "CREATE INDEX IDX ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + INDEX_DATA_TABLE + ensureTableCreated(getUrl(), indexDataTable, TestUtil.INDEX_DATA_TABLE); + String ddl = "CREATE INDEX " + indexName + " ON " + INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + indexDataTable + " (a.int_col1, a.long_col1, b.int_col2, b.long_col2)" + " INCLUDE(int_col1, int_col2)"; PreparedStatement stmt = conn.prepareStatement(ddl); @@ -447,18 +452,20 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); conn.setAutoCommit(false); - String ddl = "create table test_table (char_pk varchar not null," + String testTable = generateRandomString(); + String indexName = generateRandomString(); + String ddl = "create table " + testTable + " (char_pk varchar not null," + " a.int_col integer, a.long_col integer," + " b.int_col integer, b.long_col integer" + " constraint pk primary key (char_pk))"; PreparedStatement stmt = conn.prepareStatement(ddl); stmt.execute(); - ddl = "CREATE INDEX IDX1 ON test_table (a.int_col, b.int_col)"; + ddl = "CREATE INDEX " + indexName + "1 ON " + testTable + " (a.int_col, b.int_col)"; stmt = conn.prepareStatement(ddl); stmt.execute(); try { - ddl = "CREATE INDEX IDX2 ON test_table (int_col)"; + ddl = "CREATE INDEX " + indexName + "2 ON " + testTable + " (int_col)"; stmt = conn.prepareStatement(ddl); stmt.execute(); fail("Should have caught exception"); @@ -472,9 +479,11 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { @Test public void testBinaryNonnullableIndex() throws Exception { Connection conn = DriverManager.getConnection(getUrl()); + String testTable = generateRandomString(); + String indexName = generateRandomString(); try { String ddl = - "CREATE TABLE test_table ( " + "CREATE TABLE " + testTable + " ( " + "v1 BINARY(64) NOT NULL, " + "v2 VARCHAR, " + "v3 BINARY(64), " @@ -484,68 +493,72 @@ public class IndexMetadataIT extends BaseHBaseManagedTimeIT { conn.commit(); try { - conn.createStatement().execute("CREATE INDEX idx ON test_table (v3) INCLUDE (v4)"); + conn.createStatement().execute("CREATE INDEX " + indexName + " ON " + testTable + " (v3) INCLUDE (v4)"); fail("Should have seen SQLExceptionCode.VARBINARY_IN_ROW_KEY"); } catch (SQLException e) { assertEquals(SQLExceptionCode.VARBINARY_IN_ROW_KEY.getErrorCode(), e.getErrorCode()); } try { - conn.createStatement().execute("CREATE INDEX idx3 ON test_table (v2, v3) INCLUDE (v4)"); + conn.createStatement().execute("CREATE INDEX " + indexName + "3 ON " + testTable + " (v2, v3) INCLUDE (v4)"); fail("Should have seen SQLExceptionCode.VARBINARY_IN_ROW_KEY"); } catch (SQLException e) { assertEquals(SQLExceptionCode.VARBINARY_IN_ROW_KEY.getErrorCode(), e.getErrorCode()); } - conn.createStatement().execute("CREATE INDEX idx4 ON test_table (v4) INCLUDE (v2)"); + conn.createStatement().execute("CREATE INDEX " + indexName + "4 ON " + testTable + " (v4) INCLUDE (v2)"); conn.commit(); - conn.createStatement().execute("CREATE INDEX varbinLastInRow ON test_table (v1, v3)"); + conn.createStatement().execute("CREATE INDEX varbinLastInRow ON " + testTable + " (v1, v3)"); conn.commit(); - conn.createStatement().execute( "CREATE INDEX idx5 ON test_table (v2) INCLUDE (v4, v3, v1)"); + conn.createStatement().execute( "CREATE INDEX " + indexName + "5 ON " + testTable + " (v2) INCLUDE (v4, v3, v1)"); conn.commit(); conn.createStatement().executeQuery( - "select v1,v2,v3,v4 FROM test_table where v2 = 'abc' and v3 != 'a'"); + "select v1,v2,v3,v4 FROM " + testTable + " where v2 = 'abc' and v3 != 'a'"); } finally { conn.close(); } } - + @Test public void testAsyncCreatedDate() throws Exception { Date d0 = new Date(System.currentTimeMillis()); Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); conn.setAutoCommit(false); - String ddl = "create table test_table (k varchar primary key, v1 varchar, v2 varchar, v3 varchar)"; + String testTable = generateRandomString(); + + + String ddl = "create table " + testTable + " (k varchar primary key, v1 varchar, v2 varchar, v3 varchar)"; PreparedStatement stmt = conn.prepareStatement(ddl); stmt.execute(); + String indexName = "ASYNCIND_" + generateRandomString(); - ddl = "CREATE INDEX IDX1 ON test_table (v1) ASYNC"; + ddl = "CREATE INDEX " + indexName + "1 ON " + testTable + " (v1) ASYNC"; stmt = conn.prepareStatement(ddl); stmt.execute(); - ddl = "CREATE INDEX IDX2 ON test_table (v2) ASYNC"; + ddl = "CREATE INDEX " + indexName + "2 ON " + testTable + " (v2) ASYNC"; stmt = conn.prepareStatement(ddl); stmt.execute(); - ddl = "CREATE INDEX IDX3 ON test_table (v3)"; + ddl = "CREATE INDEX " + indexName + "3 ON " + testTable + " (v3)"; stmt = conn.prepareStatement(ddl); stmt.execute(); ResultSet rs = conn.createStatement().executeQuery( "select table_name, " + PhoenixDatabaseMetaData.ASYNC_CREATED_DATE + " " + "from system.catalog (" + PhoenixDatabaseMetaData.ASYNC_CREATED_DATE + " " + PDate.INSTANCE.getSqlTypeName() + ") " + - "where " + PhoenixDatabaseMetaData.ASYNC_CREATED_DATE + " is not null " + + "where " + PhoenixDatabaseMetaData.ASYNC_CREATED_DATE + " is not null and table_name like 'ASYNCIND_%' " + "order by " + PhoenixDatabaseMetaData.ASYNC_CREATED_DATE ); assertTrue(rs.next()); - assertEquals("IDX1", rs.getString(1)); + assertEquals(indexName + "1", rs.getString(1)); Date d1 = rs.getDate(2); assertTrue(d1.after(d0)); assertTrue(rs.next()); - assertEquals("IDX2", rs.getString(1)); + assertEquals(indexName + "2", rs.getString(1)); Date d2 = rs.getDate(2); assertTrue(d2.after(d1)); assertFalse(rs.next()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d77d2492/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 416c452..f254c49 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 @@ -17,6 +17,8 @@ */ package org.apache.phoenix.end2end.index; +import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName; +import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -49,7 +51,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.coprocessor.BaseScannerRegionObserver; -import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT; +import org.apache.phoenix.end2end.BaseHBaseManagedTimeTableReuseIT; import org.apache.phoenix.end2end.Shadower; import org.apache.phoenix.hbase.index.IndexRegionSplitPolicy; import org.apache.phoenix.jdbc.PhoenixConnection; @@ -57,10 +59,8 @@ import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.query.QueryServices; -import org.apache.phoenix.schema.PTable; +import org.apache.phoenix.schema.*; import org.apache.phoenix.schema.PTable.IndexType; -import org.apache.phoenix.schema.PTableKey; -import org.apache.phoenix.schema.TableNotFoundException; import org.apache.phoenix.util.ByteUtil; import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ReadOnlyProps; @@ -75,24 +75,16 @@ import org.junit.runners.Parameterized.Parameters; import com.google.common.collect.Maps; @RunWith(Parameterized.class) -public class LocalIndexIT extends BaseHBaseManagedTimeIT { - - private String schemaName="TEST"; +public class LocalIndexIT extends BaseHBaseManagedTimeTableReuseIT { private boolean isNamespaceMapped; - private String tableName = schemaName + ".T"; - private String indexTableName = schemaName + ".I"; - private String indexName = "I"; - private String indexPhysicalTableName; - private TableName physicalTableName; + String schemaName="TEST"; public LocalIndexIT(boolean isNamespaceMapped) { this.isNamespaceMapped = isNamespaceMapped; - this.physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); - this.indexPhysicalTableName = this.physicalTableName.getNameAsString(); } @BeforeClass - @Shadower(classBeingShadowed = BaseHBaseManagedTimeIT.class) + @Shadower(classBeingShadowed = BaseHBaseManagedTimeTableReuseIT.class) public static void doSetup() throws Exception { Map<String,String> props = Maps.newHashMapWithExpectedSize(3); // Drop the HBase table metadata for this test @@ -125,6 +117,10 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexRoundTrip() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + createBaseTable(tableName, null, null); Connection conn1 = DriverManager.getConnection(getUrl()); conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName + "(v1)"); @@ -145,6 +141,9 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexCreationWithSplitsShouldFail() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, null, null); Connection conn1 = getConnection(); Connection conn2 = getConnection(); @@ -161,6 +160,9 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexCreationWithSaltingShouldFail() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, null, null); Connection conn1 = getConnection(); Connection conn2 = getConnection(); @@ -177,6 +179,11 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexTableRegionSplitPolicyAndSplitKeys() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + createBaseTable(tableName, null,"('e','i','o')"); Connection conn1 = getConnection(); Connection conn2 = getConnection(); @@ -202,23 +209,34 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { return DriverManager.getConnection(getUrl(),props); } + @Test public void testDropLocalIndexTable() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); createBaseTable(tableName, null, null); + + String sequenceName = getViewIndexSequenceName(PNameFactory.newName(tableName), null, isNamespaceMapped); + String sequenceSchemaName = getViewIndexSequenceSchemaName(PNameFactory.newName(tableName), isNamespaceMapped); + Connection conn1 = getConnection(); Connection conn2 = getConnection(); conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName + "(v1)"); + verifySequence(null, sequenceName, sequenceSchemaName, true); conn2.createStatement().executeQuery("SELECT * FROM " + tableName).next(); conn1.createStatement().execute("DROP TABLE "+ tableName); - ResultSet rs = conn2.createStatement().executeQuery("SELECT " - + PhoenixDatabaseMetaData.SEQUENCE_SCHEMA + "," - + PhoenixDatabaseMetaData.SEQUENCE_NAME - + " FROM " + PhoenixDatabaseMetaData.SYSTEM_SEQUENCE); - assertFalse("View index sequences should be deleted.", rs.next()); + + verifySequence(null, sequenceName, sequenceSchemaName, false); } @Test public void testPutsToLocalIndexTable() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = getConnection(); conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName + "(v1)"); @@ -253,6 +271,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testBuildIndexWhenUserTableAlreadyHasData() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); conn1.createStatement().execute("UPSERT INTO "+tableName+" values('b',1,2,4,'z')"); @@ -287,6 +311,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScan() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); try{ @@ -419,6 +449,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScanJoinColumnsFromDataTable() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = getConnection(); try{ @@ -553,6 +589,10 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testIndexPlanSelectionIfBothGlobalAndLocalIndexesHasSameColumnsAndOrder() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = getConnection(); conn1.createStatement().execute("UPSERT INTO "+tableName+" values('b',1,2,4,'z')"); @@ -570,8 +610,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { conn1.close(); } + @Test public void testDropLocalIndexShouldDeleteDataFromLocalIndexTable() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); try { @@ -583,7 +627,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName + "(v1)"); conn1.createStatement().execute("DROP INDEX " + indexName + " ON " + tableName); HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); - HTable table = new HTable(admin.getConfiguration() ,TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME)); + HTable table = new HTable(admin.getConfiguration() ,TableName.valueOf(tableName)); Pair<byte[][], byte[][]> startEndKeys = table.getStartEndKeys(); byte[][] startKeys = startEndKeys.getFirst(); byte[][] endKeys = startEndKeys.getSecond(); @@ -614,6 +658,10 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexRowsShouldBeDeletedWhenUserTableRowsDeleted() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); try { @@ -636,6 +684,9 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testScanWhenATableHasMultipleLocalIndexes() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); try { @@ -658,6 +709,9 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexesOnTableWithImmutableRows() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = getConnection(); try { @@ -701,6 +755,10 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScanWithInList() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String indexTableName = schemaName + "." + indexName; + createBaseTable(tableName, null, "('e','i','o')"); Connection conn1 = DriverManager.getConnection(getUrl()); try{ @@ -731,13 +789,15 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { Connection conn1 = DriverManager.getConnection(getUrl()); try{ Statement statement = conn1.createStatement(); - statement.execute("create table example (id integer not null,fn varchar," + String tableName = generateRandomString(); + String indexName = generateRandomString(); + statement.execute("create table " + tableName + " (id integer not null,fn varchar," + "ln varchar constraint pk primary key(id)) DEFAULT_COLUMN_FAMILY='F'"); - statement.execute("upsert into example values(1,'fn','ln')"); + statement.execute("upsert into " + tableName + " values(1,'fn','ln')"); statement - .execute("create local index my_idx on example (fn)"); - statement.execute("upsert into example values(2,'fn1','ln1')"); - ResultSet rs = statement.executeQuery("SELECT COUNT(*) FROM my_idx"); + .execute("create local index " + indexName + " on " + tableName + " (fn)"); + statement.execute("upsert into " + tableName + " values(2,'fn1','ln1')"); + ResultSet rs = statement.executeQuery("SELECT COUNT(*) FROM " + indexName ); assertTrue(rs.next()); } finally { conn1.close(); @@ -746,6 +806,11 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScanAfterRegionSplit() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + if (isNamespaceMapped) { return; } createBaseTable(tableName, null, "('e','j','o')"); Connection conn1 = getConnection(); @@ -838,6 +903,9 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScanWithSmallChunks() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + createBaseTable(tableName, 3, null); Properties props = new Properties(); props.setProperty(QueryServices.SCAN_RESULT_CHUNK_SIZE, "2"); @@ -881,6 +949,11 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT { @Test public void testLocalIndexScanAfterRegionsMerge() throws Exception { + String tableName = schemaName + "." + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); + String indexPhysicalTableName = physicalTableName.getNameAsString(); + if (isNamespaceMapped) { return; } createBaseTable(tableName, null, "('e','j','o')"); Connection conn1 = getConnection(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d77d2492/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java index 6a49076..f0f8721 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java @@ -35,16 +35,14 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Properties; - import jline.internal.Log; - import org.apache.hadoop.hbase.HRegionInfo; -import org.apache.hadoop.hbase.MetaTableAccessor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.HBaseAdmin; +import org.apache.hadoop.hbase.MetaTableAccessor; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; -import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT; +import org.apache.phoenix.end2end.BaseHBaseManagedTimeTableReuseIT; import org.apache.phoenix.end2end.Shadower; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.query.QueryServices; @@ -66,30 +64,24 @@ import com.google.common.collect.Maps; import com.google.common.primitives.Doubles; @RunWith(Parameterized.class) -public class MutableIndexIT extends BaseHBaseManagedTimeIT { +public class MutableIndexIT extends BaseHBaseManagedTimeTableReuseIT { protected final boolean localIndex; private final String tableDDLOptions; - private final String tableName; - private final String indexName; - private final String fullTableName; - private final String fullIndexName; + private final boolean transactional; public MutableIndexIT(boolean localIndex, boolean transactional) { this.localIndex = localIndex; + this.transactional = transactional; StringBuilder optionBuilder = new StringBuilder(); if (transactional) { optionBuilder.append("TRANSACTIONAL=true"); } this.tableDDLOptions = optionBuilder.toString(); - this.tableName = TestUtil.DEFAULT_DATA_TABLE_NAME + ( transactional ? "_TXN" : ""); - this.indexName = "IDX" + ( transactional ? "_TXN" : ""); - this.fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); - this.fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); } @BeforeClass - @Shadower(classBeingShadowed = BaseHBaseManagedTimeIT.class) + @Shadower(classBeingShadowed = BaseHBaseManagedTimeTableReuseIT.class) public static void doSetup() throws Exception { Map<String,String> props = Maps.newHashMapWithExpectedSize(1); props.put(QueryServices.TRANSACTIONS_ENABLED, Boolean.toString(true)); @@ -110,7 +102,12 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); - createMultiCFTestTable(fullTableName, tableDDLOptions); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); + + createMultiCFTestTable(fullTableName, tableDDLOptions); populateMultiCFTestTable(fullTableName); PreparedStatement stmt = conn.prepareStatement("CREATE " + (localIndex ? " LOCAL " : "") + " INDEX " + indexName + " ON " + fullTableName + " (char_col1 ASC, int_col1 ASC) INCLUDE (long_col1, long_col2)"); @@ -203,7 +200,12 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { @Test public void testCoveredColumns() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { + conn.setAutoCommit(false); String query; ResultSet rs; @@ -308,6 +310,10 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { @Test public void testCompoundIndexKey() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -423,6 +429,10 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { @Test public void testMultipleUpdatesToSingleRow() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String query; @@ -503,6 +513,9 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { @Test public void testUpsertingNullForIndexedColumns() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName); String testTableName = tableName + "_" + System.currentTimeMillis(); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); @@ -586,8 +599,10 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { public void testAlterTableWithImmutability() throws Exception { String query; ResultSet rs; - String tableName = TestUtil.DEFAULT_DATA_TABLE_NAME + "_" + System.currentTimeMillis(); - String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + String tableName = "TBL_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); @@ -623,16 +638,20 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { props.setProperty(QueryServices.SCAN_CACHE_SIZE_ATTRIB, Integer.toString(2)); props.put(QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB, Boolean.toString(false)); Connection conn1 = DriverManager.getConnection(getUrl()); - HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); + + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); dropTable(admin, conn1); try{ String[] strings = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; - createTableAndLoadData(conn1, strings, isReverse); + createTableAndLoadData(conn1, tableName, indexName, strings, isReverse); ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM " + tableName); assertTrue(rs.next()); - splitDuringScan(conn1, strings, admin, isReverse); + splitDuringScan(conn1, tableName, indexName, strings, admin, isReverse); dropTable(admin, conn1); + } finally { dropTable(admin, conn1); if(conn1 != null) conn1.close(); @@ -641,23 +660,21 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { } private void dropTable(HBaseAdmin admin, Connection conn) throws SQLException, IOException { - try { - conn.createStatement().execute("DROP TABLE IF EXISTS "+ tableName); - } finally { - if(admin.tableExists(tableName)) { - admin.disableTable(TableName.valueOf(tableName)); - admin.deleteTable(TableName.valueOf(tableName)); - } - if(!localIndex) { - if(admin.tableExists(indexName)) { - admin.disableTable(TableName.valueOf(indexName)); - admin.deleteTable(TableName.valueOf(indexName)); - } - } - } + + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + conn.createStatement().execute("DROP TABLE IF EXISTS "+ tableName); + if(admin.tableExists(tableName)) { + admin.disableTable(TableName.valueOf(tableName)); + admin.deleteTable(TableName.valueOf(tableName)); + } + if(!localIndex && admin.tableExists(indexName)) { + admin.disableTable(indexName); + admin.deleteTable(indexName); + } } - private void createTableAndLoadData(Connection conn1, String[] strings, boolean isReverse) throws SQLException { + private void createTableAndLoadData(Connection conn1, String tableName, String indexName, String[] strings, boolean isReverse) throws SQLException { createBaseTable(conn1, tableName, null); for (int i = 0; i < 26; i++) { conn1.createStatement().execute( @@ -673,6 +690,8 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { public void testIndexHalfStoreFileReader() throws Exception { Connection conn1 = DriverManager.getConnection(getUrl()); HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); try { dropTable(admin, conn1); createBaseTable(conn1, tableName, "('e')"); @@ -738,9 +757,11 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { } } - private List<HRegionInfo> splitDuringScan(Connection conn1, String[] strings, HBaseAdmin admin, boolean isReverse) + + private List<HRegionInfo> splitDuringScan(Connection conn1, String tableName, String indexName, String[] strings, HBaseAdmin admin, boolean isReverse) throws SQLException, IOException, InterruptedException { ResultSet rs; + String query = "SELECT t_id,k1,v1 FROM " + tableName; rs = conn1.createStatement().executeQuery(query); String[] tIdColumnValues = new String[26]; @@ -815,9 +836,10 @@ public class MutableIndexIT extends BaseHBaseManagedTimeIT { @Test public void testTenantSpecificConnection() throws Exception { - String tableName = TestUtil.DEFAULT_DATA_TABLE_NAME + "_" + System.currentTimeMillis(); - String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + String tableName = "TBL_" + generateRandomString(); + String indexName = "IDX_" + generateRandomString(); + String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName); + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); // create data table
