Skip to content

Commit c354262

Browse files
committed
Fix bug in renameTable
1 parent 6ad930f commit c354262

File tree

4 files changed

+125
-1
lines changed

4 files changed

+125
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ public void renameTable(String namespace, String oldTableName, String newTableNa
10221022
renameIndexInternal(
10231023
connection, namespace, newTableName, indexedColumnName, oldIndexName, newIndexName);
10241024
}
1025-
addTableMetadata(connection, namespace, newTableName, tableMetadata, false, false);
1025+
addTableMetadata(connection, namespace, newTableName, tableMetadata, true, false);
10261026
}
10271027
} catch (SQLException e) {
10281028
throw new ExecutionException(

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3426,6 +3426,18 @@ public void renameTable_ForMysql_ShouldWorkProperly() throws SQLException, Execu
34263426
"ALTER TABLE `ns`.`table` RENAME TO `ns`.`table_new`",
34273427
"DELETE FROM `" + METADATA_SCHEMA + "`.`metadata` WHERE `full_table_name` = 'ns.table'",
34283428
"SELECT DISTINCT `full_table_name` FROM `" + METADATA_SCHEMA + "`.`metadata`",
3429+
"CREATE SCHEMA IF NOT EXISTS `" + METADATA_SCHEMA + "`",
3430+
"CREATE TABLE IF NOT EXISTS `"
3431+
+ METADATA_SCHEMA
3432+
+ "`.`metadata`("
3433+
+ "`full_table_name` VARCHAR(128),"
3434+
+ "`column_name` VARCHAR(128),"
3435+
+ "`data_type` VARCHAR(20) NOT NULL,"
3436+
+ "`key_type` VARCHAR(20),"
3437+
+ "`clustering_order` VARCHAR(10),"
3438+
+ "`indexed` BOOLEAN NOT NULL,"
3439+
+ "`ordinal_position` INTEGER NOT NULL,"
3440+
+ "PRIMARY KEY (`full_table_name`, `column_name`))",
34293441
"INSERT INTO `"
34303442
+ METADATA_SCHEMA
34313443
+ "`.`metadata` VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,false,1)",
@@ -3446,6 +3458,11 @@ public void renameTable_ForOracle_ShouldWorkProperly() throws SQLException, Exec
34463458
+ METADATA_SCHEMA
34473459
+ "\".\"metadata\" WHERE \"full_table_name\" = 'ns.table'",
34483460
"SELECT DISTINCT \"full_table_name\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\"",
3461+
"CREATE USER \"" + METADATA_SCHEMA + "\" IDENTIFIED BY \"Oracle1234!@#$\"",
3462+
"ALTER USER \"" + METADATA_SCHEMA + "\" quota unlimited on USERS",
3463+
"CREATE TABLE \""
3464+
+ METADATA_SCHEMA
3465+
+ "\".\"metadata\"(\"full_table_name\" VARCHAR2(128),\"column_name\" VARCHAR2(128),\"data_type\" VARCHAR2(20) NOT NULL,\"key_type\" VARCHAR2(20),\"clustering_order\" VARCHAR2(10),\"indexed\" NUMBER(1) NOT NULL,\"ordinal_position\" INTEGER NOT NULL,PRIMARY KEY (\"full_table_name\", \"column_name\"))",
34493466
"INSERT INTO \""
34503467
+ METADATA_SCHEMA
34513468
+ "\".\"metadata\" VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,0,1)",
@@ -3467,6 +3484,18 @@ public void renameTable_ForPostgresql_ShouldWorkProperly()
34673484
+ METADATA_SCHEMA
34683485
+ "\".\"metadata\" WHERE \"full_table_name\" = 'ns.table'",
34693486
"SELECT DISTINCT \"full_table_name\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\"",
3487+
"CREATE SCHEMA IF NOT EXISTS \"" + METADATA_SCHEMA + "\"",
3488+
"CREATE TABLE IF NOT EXISTS \""
3489+
+ METADATA_SCHEMA
3490+
+ "\".\"metadata\"("
3491+
+ "\"full_table_name\" VARCHAR(128),"
3492+
+ "\"column_name\" VARCHAR(128),"
3493+
+ "\"data_type\" VARCHAR(20) NOT NULL,"
3494+
+ "\"key_type\" VARCHAR(20),"
3495+
+ "\"clustering_order\" VARCHAR(10),"
3496+
+ "\"indexed\" BOOLEAN NOT NULL,"
3497+
+ "\"ordinal_position\" INTEGER NOT NULL,"
3498+
+ "PRIMARY KEY (\"full_table_name\", \"column_name\"))",
34703499
"INSERT INTO \""
34713500
+ METADATA_SCHEMA
34723501
+ "\".\"metadata\" VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,false,1)",
@@ -3486,6 +3515,18 @@ public void renameTable_ForSqlServer_ShouldWorkProperly()
34863515
"EXEC sp_rename '[ns].[table]', 'table_new'",
34873516
"DELETE FROM [" + METADATA_SCHEMA + "].[metadata] WHERE [full_table_name] = 'ns.table'",
34883517
"SELECT DISTINCT [full_table_name] FROM [" + METADATA_SCHEMA + "].[metadata]",
3518+
"CREATE SCHEMA [" + METADATA_SCHEMA + "]",
3519+
"CREATE TABLE ["
3520+
+ METADATA_SCHEMA
3521+
+ "].[metadata]("
3522+
+ "[full_table_name] VARCHAR(128),"
3523+
+ "[column_name] VARCHAR(128),"
3524+
+ "[data_type] VARCHAR(20) NOT NULL,"
3525+
+ "[key_type] VARCHAR(20),"
3526+
+ "[clustering_order] VARCHAR(10),"
3527+
+ "[indexed] BIT NOT NULL,"
3528+
+ "[ordinal_position] INTEGER NOT NULL,"
3529+
+ "PRIMARY KEY ([full_table_name], [column_name]))",
34893530
"INSERT INTO ["
34903531
+ METADATA_SCHEMA
34913532
+ "].[metadata] VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,0,1)",
@@ -3504,6 +3545,17 @@ public void renameTable_ForSqlite_ShouldWorkProperly() throws SQLException, Exec
35043545
"ALTER TABLE \"ns$table\" RENAME TO \"ns$table_new\"",
35053546
"DELETE FROM \"" + METADATA_SCHEMA + "$metadata\" WHERE \"full_table_name\" = 'ns.table'",
35063547
"SELECT DISTINCT \"full_table_name\" FROM \"" + METADATA_SCHEMA + "$metadata\"",
3548+
"CREATE TABLE IF NOT EXISTS \""
3549+
+ METADATA_SCHEMA
3550+
+ "$metadata\"("
3551+
+ "\"full_table_name\" TEXT,"
3552+
+ "\"column_name\" TEXT,"
3553+
+ "\"data_type\" TEXT NOT NULL,"
3554+
+ "\"key_type\" TEXT,"
3555+
+ "\"clustering_order\" TEXT,"
3556+
+ "\"indexed\" BOOLEAN NOT NULL,"
3557+
+ "\"ordinal_position\" INTEGER NOT NULL,"
3558+
+ "PRIMARY KEY (\"full_table_name\", \"column_name\"))",
35073559
"INSERT INTO \""
35083560
+ METADATA_SCHEMA
35093561
+ "$metadata\" VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,FALSE,1)",
@@ -3524,6 +3576,18 @@ public void renameTable_ForDb2_ShouldWorkProperly() throws SQLException, Executi
35243576
+ METADATA_SCHEMA
35253577
+ "\".\"metadata\" WHERE \"full_table_name\" = 'ns.table'",
35263578
"SELECT DISTINCT \"full_table_name\" FROM \"" + METADATA_SCHEMA + "\".\"metadata\"",
3579+
"CREATE SCHEMA \"" + METADATA_SCHEMA + "\"",
3580+
"CREATE TABLE IF NOT EXISTS \""
3581+
+ METADATA_SCHEMA
3582+
+ "\".\"metadata\"("
3583+
+ "\"full_table_name\" VARCHAR(128) NOT NULL,"
3584+
+ "\"column_name\" VARCHAR(128) NOT NULL,"
3585+
+ "\"data_type\" VARCHAR(20) NOT NULL,"
3586+
+ "\"key_type\" VARCHAR(20),"
3587+
+ "\"clustering_order\" VARCHAR(10),"
3588+
+ "\"indexed\" BOOLEAN NOT NULL,"
3589+
+ "\"ordinal_position\" INTEGER NOT NULL,"
3590+
+ "PRIMARY KEY (\"full_table_name\", \"column_name\"))",
35273591
"INSERT INTO \""
35283592
+ METADATA_SCHEMA
35293593
+ "\".\"metadata\" VALUES ('ns.table_new','c1','TEXT','PARTITION',NULL,false,1)",

integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,6 +1568,36 @@ public void renameTable_ForExistingTableWithIndexes_ShouldRenameTableAndIndexesC
15681568
}
15691569
}
15701570

1571+
@Test
1572+
public void renameTable_IfOnlyOneTableExists_ShouldRenameTableCorrectly()
1573+
throws ExecutionException {
1574+
String newTableName = "new" + getTable4();
1575+
try {
1576+
// Arrange
1577+
admin.createNamespace(namespace3);
1578+
Map<String, String> options = getCreationOptions();
1579+
TableMetadata tableMetadata =
1580+
TableMetadata.newBuilder()
1581+
.addColumn(getColumnName1(), DataType.INT)
1582+
.addColumn(getColumnName2(), DataType.INT)
1583+
.addPartitionKey(getColumnName1())
1584+
.build();
1585+
admin.createTable(namespace3, getTable4(), tableMetadata, options);
1586+
1587+
// Act
1588+
admin.renameTable(namespace3, getTable4(), newTableName);
1589+
1590+
// Assert
1591+
assertThat(admin.tableExists(namespace3, getTable4())).isFalse();
1592+
assertThat(admin.tableExists(namespace3, newTableName)).isTrue();
1593+
assertThat(admin.getTableMetadata(namespace3, newTableName)).isEqualTo(tableMetadata);
1594+
} finally {
1595+
admin.dropTable(namespace3, getTable4(), true);
1596+
admin.dropTable(namespace3, newTableName, true);
1597+
admin.dropNamespace(namespace3, true);
1598+
}
1599+
}
1600+
15711601
@Test
15721602
public void alterColumnType_ForNonExistingTable_ShouldThrowIllegalArgumentException() {
15731603
// Arrange

integration-test/src/main/java/com/scalar/db/api/DistributedTransactionAdminIntegrationTestBase.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,6 +1464,36 @@ public void renameTable_ForExistingTableWithIndexes_ShouldRenameTableAndIndexesC
14641464
}
14651465
}
14661466

1467+
@Test
1468+
public void renameTable_IfOnlyOneTableExists_ShouldRenameTableCorrectly()
1469+
throws ExecutionException {
1470+
String newTableName = "new" + TABLE4;
1471+
try {
1472+
// Arrange
1473+
admin.createNamespace(namespace3);
1474+
Map<String, String> options = getCreationOptions();
1475+
TableMetadata tableMetadata =
1476+
TableMetadata.newBuilder()
1477+
.addColumn("c1", DataType.INT)
1478+
.addColumn("c2", DataType.INT)
1479+
.addPartitionKey("c1")
1480+
.build();
1481+
admin.createTable(namespace3, TABLE4, tableMetadata, options);
1482+
1483+
// Act
1484+
admin.renameTable(namespace3, TABLE4, newTableName);
1485+
1486+
// Assert
1487+
assertThat(admin.tableExists(namespace3, TABLE4)).isFalse();
1488+
assertThat(admin.tableExists(namespace3, newTableName)).isTrue();
1489+
assertThat(admin.getTableMetadata(namespace3, newTableName)).isEqualTo(tableMetadata);
1490+
} finally {
1491+
admin.dropTable(namespace3, TABLE4, true);
1492+
admin.dropTable(namespace3, newTableName, true);
1493+
admin.dropNamespace(namespace3, true);
1494+
}
1495+
}
1496+
14671497
@Test
14681498
public void createCoordinatorTables_ShouldCreateCoordinatorTablesCorrectly()
14691499
throws ExecutionException {

0 commit comments

Comments
 (0)