Skip to content

Commit bf49281

Browse files
authored
Fix Oracle engine to support multiple Oracle users for index operations (#2888)
1 parent ae80dd5 commit bf49281

File tree

4 files changed

+37
-19
lines changed

4 files changed

+37
-19
lines changed

core/src/main/java/com/scalar/db/storage/jdbc/JdbcAdmin.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -894,14 +894,7 @@ void createIndex(
894894
Connection connection, String schema, String table, String indexedColumn, boolean ifNotExists)
895895
throws SQLException {
896896
String indexName = getIndexName(schema, table, indexedColumn);
897-
String createIndexStatement =
898-
"CREATE INDEX "
899-
+ enclose(indexName)
900-
+ " ON "
901-
+ encloseFullTableName(schema, table)
902-
+ " ("
903-
+ enclose(indexedColumn)
904-
+ ")";
897+
String createIndexStatement = rdbEngine.createIndexSql(schema, table, indexName, indexedColumn);
905898
if (ifNotExists) {
906899
createIndexStatement = rdbEngine.tryAddIfNotExistsToCreateIndexSql(createIndexStatement);
907900
}

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,23 @@ public String tableExistsInternalTableCheckSql(String fullTableName) {
144144
return "SELECT 1 FROM " + fullTableName + " FETCH FIRST 1 ROWS ONLY";
145145
}
146146

147+
@Override
148+
public String createIndexSql(
149+
String schema, String table, String indexName, String indexedColumn) {
150+
return "CREATE INDEX "
151+
+ enclose(schema)
152+
+ "."
153+
+ enclose(indexName)
154+
+ " ON "
155+
+ encloseFullTableName(schema, table)
156+
+ " ("
157+
+ enclose(indexedColumn)
158+
+ ")";
159+
}
160+
147161
@Override
148162
public String dropIndexSql(String schema, String table, String indexName) {
149-
return "DROP INDEX " + enclose(indexName);
163+
return "DROP INDEX " + enclose(schema) + "." + enclose(indexName);
150164
}
151165

152166
@Override

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,17 @@ void dropNamespaceTranslateSQLException(SQLException e, String namespace)
102102

103103
String tableExistsInternalTableCheckSql(String fullTableName);
104104

105+
default String createIndexSql(
106+
String schema, String table, String indexName, String indexedColumn) {
107+
return "CREATE INDEX "
108+
+ enclose(indexName)
109+
+ " ON "
110+
+ encloseFullTableName(schema, table)
111+
+ " ("
112+
+ enclose(indexedColumn)
113+
+ ")";
114+
}
115+
105116
String dropIndexSql(String schema, String table, String indexName);
106117

107118
/**

core/src/test/java/com/scalar/db/storage/jdbc/JdbcAdminTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,8 @@ public void createTableInternal_ForOracle_ShouldCreateTableAndIndexes() throws S
565565
"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",
566566
"ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255",
567567
"CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)",
568-
"CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
569-
"CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
568+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
569+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
570570
}
571571

572572
@Test
@@ -579,8 +579,8 @@ public void createTableInternal_ForOracle_ShouldCreateTableAndIndexes() throws S
579579
"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",
580580
"ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255",
581581
"CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)",
582-
"CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
583-
"CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
582+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
583+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
584584
}
585585

586586
@Test
@@ -706,8 +706,8 @@ public void createTableInternal_IfNotExistsForOracle_ShouldCreateTableAndIndexes
706706
"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",
707707
"ALTER TABLE \"my_ns\".\"foo_table\" INITRANS 3 MAXTRANS 255",
708708
"CREATE UNIQUE INDEX \"my_ns.foo_table_clustering_order_idx\" ON \"my_ns\".\"foo_table\" (\"c3\" ASC,\"c1\" DESC,\"c4\" ASC)",
709-
"CREATE INDEX \"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
710-
"CREATE INDEX \"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
709+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c4\" ON \"my_ns\".\"foo_table\" (\"c4\")",
710+
"CREATE INDEX \"my_ns\".\"index_my_ns_foo_table_c1\" ON \"my_ns\".\"foo_table\" (\"c1\")");
711711
}
712712

713713
@Test
@@ -2363,7 +2363,7 @@ public void createIndex_ForColumnTypeWithoutRequiredAlterationForMysql_ShouldCre
23632363
"SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \""
23642364
+ METADATA_SCHEMA
23652365
+ "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC",
2366-
"CREATE INDEX \"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")",
2366+
"CREATE INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")",
23672367
"UPDATE \""
23682368
+ METADATA_SCHEMA
23692369
+ "\".\"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
24802480
+ METADATA_SCHEMA
24812481
+ "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC",
24822482
"ALTER TABLE \"my_ns\".\"my_tbl\" MODIFY ( \"my_column\" VARCHAR2(128) )",
2483-
"CREATE INDEX \"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")",
2483+
"CREATE INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\" ON \"my_ns\".\"my_tbl\" (\"my_column\")",
24842484
"UPDATE \""
24852485
+ METADATA_SCHEMA
24862486
+ "\".\"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
26032603
"SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \""
26042604
+ METADATA_SCHEMA
26052605
+ "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC",
2606-
"DROP INDEX \"index_my_ns_my_tbl_my_column\"",
2606+
"DROP INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\"",
26072607
"UPDATE \""
26082608
+ METADATA_SCHEMA
26092609
+ "\".\"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
27152715
"SELECT \"column_name\",\"data_type\",\"key_type\",\"clustering_order\",\"indexed\" FROM \""
27162716
+ METADATA_SCHEMA
27172717
+ "\".\"metadata\" WHERE \"full_table_name\"=? ORDER BY \"ordinal_position\" ASC",
2718-
"DROP INDEX \"index_my_ns_my_tbl_my_column\"",
2718+
"DROP INDEX \"my_ns\".\"index_my_ns_my_tbl_my_column\"",
27192719
"ALTER TABLE \"my_ns\".\"my_tbl\" MODIFY ( \"my_column\" VARCHAR2(4000) )",
27202720
"UPDATE \""
27212721
+ METADATA_SCHEMA

0 commit comments

Comments
 (0)