diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/JdbcAdmin.java b/core/src/main/java/com/scalar/db/storage/jdbc/JdbcAdmin.java index 4bcad3970d..f578b3b5c9 100644 --- a/core/src/main/java/com/scalar/db/storage/jdbc/JdbcAdmin.java +++ b/core/src/main/java/com/scalar/db/storage/jdbc/JdbcAdmin.java @@ -894,14 +894,7 @@ void createIndex( Connection connection, String schema, String table, String indexedColumn, boolean ifNotExists) throws SQLException { String indexName = getIndexName(schema, table, indexedColumn); - String createIndexStatement = - "CREATE INDEX " - + enclose(indexName) - + " ON " - + encloseFullTableName(schema, table) - + " (" - + enclose(indexedColumn) - + ")"; + String createIndexStatement = rdbEngine.createIndexSql(schema, table, indexName, indexedColumn); if (ifNotExists) { createIndexStatement = rdbEngine.tryAddIfNotExistsToCreateIndexSql(createIndexStatement); } diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java index 425697ec4a..7e57ff55b4 100644 --- a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java +++ b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java @@ -144,9 +144,23 @@ public String tableExistsInternalTableCheckSql(String fullTableName) { return "SELECT 1 FROM " + fullTableName + " FETCH FIRST 1 ROWS ONLY"; } + @Override + public String createIndexSql( + String schema, String table, String indexName, String indexedColumn) { + return "CREATE INDEX " + + enclose(schema) + + "." + + enclose(indexName) + + " ON " + + encloseFullTableName(schema, table) + + " (" + + enclose(indexedColumn) + + ")"; + } + @Override public String dropIndexSql(String schema, String table, String indexName) { - return "DROP INDEX " + enclose(indexName); + return "DROP INDEX " + enclose(schema) + "." + enclose(indexName); } @Override diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java index ac1a38fd2f..eb624fa25d 100644 --- a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java +++ b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java @@ -102,6 +102,17 @@ void dropNamespaceTranslateSQLException(SQLException e, String namespace) String tableExistsInternalTableCheckSql(String fullTableName); + default String createIndexSql( + String schema, String table, String indexName, String indexedColumn) { + return "CREATE INDEX " + + enclose(indexName) + + " ON " + + encloseFullTableName(schema, table) + + " (" + + enclose(indexedColumn) + + ")"; + } + String dropIndexSql(String schema, String table, String indexName); /** diff --git a/core/src/test/java/com/scalar/db/storage/jdbc/JdbcAdminTest.java b/core/src/test/java/com/scalar/db/storage/jdbc/JdbcAdminTest.java index f2c0bede08..347d0633e7 100644 --- a/core/src/test/java/com/scalar/db/storage/jdbc/JdbcAdminTest.java +++ b/core/src/test/java/com/scalar/db/storage/jdbc/JdbcAdminTest.java @@ -565,8 +565,8 @@ public void createTableInternal_ForOracle_ShouldCreateTableAndIndexes() throws S "CREATE TABLE \"my_ns\".\"foo_table\"(\"c3\" NUMBER(1),\"c1\" VARCHAR2(128),\"c4\" RAW(128),\"c2\" NUMBER(16),\"c5\" NUMBER(10),\"c6\" BINARY_DOUBLE,\"c7\" BINARY_FLOAT,\"c8\" DATE,\"c9\" TIMESTAMP(6),\"c10\" TIMESTAMP(3),\"c11\" TIMESTAMP(3) WITH TIME ZONE, PRIMARY KEY (\"c3\",\"c1\",\"c4\")) ROWDEPENDENCIES", "ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255", "CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)", - "CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", - "CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); } @Test @@ -579,8 +579,8 @@ public void createTableInternal_ForOracle_ShouldCreateTableAndIndexes() throws S "CREATE TABLE \"my_ns\".\"foo_table\"(\"c3\" NUMBER(1),\"c1\" VARCHAR2(64),\"c4\" RAW(64),\"c2\" NUMBER(16),\"c5\" NUMBER(10),\"c6\" BINARY_DOUBLE,\"c7\" BINARY_FLOAT,\"c8\" DATE,\"c9\" TIMESTAMP(6),\"c10\" TIMESTAMP(3),\"c11\" TIMESTAMP(3) WITH TIME ZONE, PRIMARY KEY (\"c3\",\"c1\",\"c4\")) ROWDEPENDENCIES", "ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255", "CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)", - "CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", - "CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); } @Test @@ -706,8 +706,8 @@ public void createTableInternal_IfNotExistsForOracle_ShouldCreateTableAndIndexes "CREATE TABLE \"my_ns\".\"foo_table\"(\"c3\" NUMBER(1),\"c1\" VARCHAR2(128),\"c4\" RAW(128),\"c2\" NUMBER(16),\"c5\" NUMBER(10),\"c6\" BINARY_DOUBLE,\"c7\" BINARY_FLOAT,\"c8\" DATE,\"c9\" TIMESTAMP(6),\"c10\" TIMESTAMP(3),\"c11\" TIMESTAMP(3) WITH TIME ZONE, PRIMARY KEY (\"c3\",\"c1\",\"c4\")) ROWDEPENDENCIES", "ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255", "CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)", - "CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", - "CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")", + "CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")"); } @Test @@ -2363,7 +2363,7 @@ public void createIndex_ForColumnTypeWithoutRequiredAlterationForMysql_ShouldCre "SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC", - "CREATE INDEX \"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")", + "CREATE INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")", "UPDATE \"" + METADATA_SCHEMA + "\".\"metadata\" SET \"indexed\"=1 WHERE \"full_table_name\"='my_ns.my_tbl' AND \"column_name\"='my_column'"); @@ -2480,7 +2480,7 @@ private void createIndex_ForColumnTypeWithoutRequiredAlterationForX_ShouldCreate + METADATA_SCHEMA + "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC", "ALTER TABLE \"my_ns\".\"my_tbl\" MODIFY ( \"my_column\" VARCHAR2(128) )", - "CREATE INDEX \"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")", + "CREATE INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")", "UPDATE \"" + METADATA_SCHEMA + "\".\"metadata\" SET \"indexed\"=1 WHERE \"full_table_name\"='my_ns.my_tbl' AND \"column_name\"='my_column'"); @@ -2603,7 +2603,7 @@ public void dropIndex_forColumnTypeWithoutRequiredAlterationForOracle_ShouldDrop "SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC", - "DROP INDEX \"index_my_ns_my_tbl_my_column\"", + "DROP INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\"", "UPDATE \"" + METADATA_SCHEMA + "\".\"metadata\" SET \"indexed\"=0 WHERE \"full_table_name\"='my_ns.my_tbl' AND \"column_name\"='my_column'"); @@ -2715,7 +2715,7 @@ public void dropIndex_forColumnTypeWithRequiredAlterationForOracle_ShouldDropInd "SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC", - "DROP INDEX \"index_my_ns_my_tbl_my_column\"", + "DROP INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\"", "ALTER TABLE \"my_ns\".\"my_tbl\" MODIFY ( \"my_column\" VARCHAR2(4000) )", "UPDATE \"" + METADATA_SCHEMA