Skip to content

Commit c03a8e0

Browse files
committed
Apply suggestions
1 parent f87a79e commit c03a8e0

8 files changed

+226
-16
lines changed

core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static org.assertj.core.api.Assertions.assertThatCode;
4+
5+
import com.scalar.db.api.TableMetadata;
36
import com.scalar.db.config.DatabaseConfig;
47
import com.scalar.db.exception.storage.ExecutionException;
8+
import com.scalar.db.io.DataType;
59
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
610
import com.scalar.db.util.AdminTestUtils;
11+
import java.util.Map;
712
import java.util.Properties;
813
import org.junit.jupiter.api.Test;
914
import org.junit.jupiter.api.condition.DisabledIf;
15+
import org.junit.jupiter.api.condition.EnabledIf;
1016

1117
public class ConsensusCommitAdminIntegrationTestWithJdbcDatabase
1218
extends ConsensusCommitAdminIntegrationTestBase {
@@ -53,4 +59,34 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
5359
throws ExecutionException {
5460
super.renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly();
5561
}
62+
63+
@Test
64+
@EnabledIf("isDb2")
65+
public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOperationException()
66+
throws ExecutionException {
67+
try {
68+
// Arrange
69+
Map<String, String> options = getCreationOptions();
70+
TableMetadata currentTableMetadata =
71+
TableMetadata.newBuilder()
72+
.addColumn(COL_NAME1, DataType.INT)
73+
.addColumn(COL_NAME2, DataType.INT)
74+
.addColumn(COL_NAME3, DataType.TEXT)
75+
.addPartitionKey(COL_NAME1)
76+
.addClusteringKey(COL_NAME2)
77+
.addSecondaryIndex(COL_NAME3)
78+
.build();
79+
admin.createTable(namespace1, TABLE4, currentTableMetadata, options);
80+
81+
// Act Assert
82+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME1, COL_NAME4))
83+
.isInstanceOf(UnsupportedOperationException.class);
84+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME2, COL_NAME4))
85+
.isInstanceOf(UnsupportedOperationException.class);
86+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME3, COL_NAME4))
87+
.isInstanceOf(UnsupportedOperationException.class);
88+
} finally {
89+
admin.dropTable(namespace1, TABLE4, true);
90+
}
91+
}
5692
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminCaseSensitivityIntegrationTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static org.assertj.core.api.Assertions.assertThatCode;
4+
35
import com.scalar.db.api.DistributedStorageAdminCaseSensitivityIntegrationTestBase;
6+
import com.scalar.db.api.TableMetadata;
47
import com.scalar.db.config.DatabaseConfig;
58
import com.scalar.db.exception.storage.ExecutionException;
9+
import com.scalar.db.io.DataType;
610
import com.scalar.db.util.AdminTestUtils;
11+
import java.util.Map;
712
import java.util.Properties;
813
import org.junit.jupiter.api.Test;
914
import org.junit.jupiter.api.condition.DisabledIf;
15+
import org.junit.jupiter.api.condition.EnabledIf;
1016

1117
public class JdbcAdminCaseSensitivityIntegrationTest
1218
extends DistributedStorageAdminCaseSensitivityIntegrationTestBase {
@@ -52,4 +58,43 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
5258
throws ExecutionException {
5359
super.renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly();
5460
}
61+
62+
@Test
63+
@EnabledIf("isDb2")
64+
public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOperationException()
65+
throws ExecutionException {
66+
try {
67+
// Arrange
68+
Map<String, String> options = getCreationOptions();
69+
TableMetadata currentTableMetadata =
70+
TableMetadata.newBuilder()
71+
.addColumn(getColumnName1(), DataType.INT)
72+
.addColumn(getColumnName2(), DataType.INT)
73+
.addColumn(getColumnName3(), DataType.TEXT)
74+
.addPartitionKey(getColumnName1())
75+
.addClusteringKey(getColumnName2())
76+
.addSecondaryIndex(getColumnName3())
77+
.build();
78+
admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options);
79+
80+
// Act Assert
81+
assertThatCode(
82+
() ->
83+
admin.renameColumn(
84+
getNamespace1(), getTable4(), getColumnName1(), getColumnName4()))
85+
.isInstanceOf(UnsupportedOperationException.class);
86+
assertThatCode(
87+
() ->
88+
admin.renameColumn(
89+
getNamespace1(), getTable4(), getColumnName2(), getColumnName4()))
90+
.isInstanceOf(UnsupportedOperationException.class);
91+
assertThatCode(
92+
() ->
93+
admin.renameColumn(
94+
getNamespace1(), getTable4(), getColumnName3(), getColumnName4()))
95+
.isInstanceOf(UnsupportedOperationException.class);
96+
} finally {
97+
admin.dropTable(getNamespace1(), getTable4(), true);
98+
}
99+
}
55100
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static org.assertj.core.api.Assertions.assertThatCode;
4+
35
import com.scalar.db.api.DistributedStorageAdminIntegrationTestBase;
6+
import com.scalar.db.api.TableMetadata;
47
import com.scalar.db.config.DatabaseConfig;
58
import com.scalar.db.exception.storage.ExecutionException;
9+
import com.scalar.db.io.DataType;
610
import com.scalar.db.util.AdminTestUtils;
11+
import java.util.Map;
712
import java.util.Properties;
813
import org.junit.jupiter.api.Test;
914
import org.junit.jupiter.api.condition.DisabledIf;
15+
import org.junit.jupiter.api.condition.EnabledIf;
1016

1117
public class JdbcAdminIntegrationTest extends DistributedStorageAdminIntegrationTestBase {
1218
private RdbEngineStrategy rdbEngine;
@@ -51,4 +57,43 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
5157
throws ExecutionException {
5258
super.renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly();
5359
}
60+
61+
@Test
62+
@EnabledIf("isDb2")
63+
public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOperationException()
64+
throws ExecutionException {
65+
try {
66+
// Arrange
67+
Map<String, String> options = getCreationOptions();
68+
TableMetadata currentTableMetadata =
69+
TableMetadata.newBuilder()
70+
.addColumn(getColumnName1(), DataType.INT)
71+
.addColumn(getColumnName2(), DataType.INT)
72+
.addColumn(getColumnName3(), DataType.TEXT)
73+
.addPartitionKey(getColumnName1())
74+
.addClusteringKey(getColumnName2())
75+
.addSecondaryIndex(getColumnName3())
76+
.build();
77+
admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options);
78+
79+
// Act Assert
80+
assertThatCode(
81+
() ->
82+
admin.renameColumn(
83+
getNamespace1(), getTable4(), getColumnName1(), getColumnName4()))
84+
.isInstanceOf(UnsupportedOperationException.class);
85+
assertThatCode(
86+
() ->
87+
admin.renameColumn(
88+
getNamespace1(), getTable4(), getColumnName2(), getColumnName4()))
89+
.isInstanceOf(UnsupportedOperationException.class);
90+
assertThatCode(
91+
() ->
92+
admin.renameColumn(
93+
getNamespace1(), getTable4(), getColumnName3(), getColumnName4()))
94+
.isInstanceOf(UnsupportedOperationException.class);
95+
} finally {
96+
admin.dropTable(getNamespace1(), getTable4(), true);
97+
}
98+
}
5499
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static org.assertj.core.api.Assertions.assertThatCode;
4+
5+
import com.scalar.db.api.TableMetadata;
36
import com.scalar.db.config.DatabaseConfig;
47
import com.scalar.db.exception.storage.ExecutionException;
8+
import com.scalar.db.io.DataType;
59
import com.scalar.db.transaction.singlecrudoperation.SingleCrudOperationTransactionAdminIntegrationTestBase;
610
import com.scalar.db.util.AdminTestUtils;
11+
import java.util.Map;
712
import java.util.Properties;
813
import org.junit.jupiter.api.Test;
914
import org.junit.jupiter.api.condition.DisabledIf;
15+
import org.junit.jupiter.api.condition.EnabledIf;
1016

1117
public class SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase
1218
extends SingleCrudOperationTransactionAdminIntegrationTestBase {
@@ -53,4 +59,34 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
5359
throws ExecutionException {
5460
super.renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly();
5561
}
62+
63+
@Test
64+
@EnabledIf("isDb2")
65+
public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOperationException()
66+
throws ExecutionException {
67+
try {
68+
// Arrange
69+
Map<String, String> options = getCreationOptions();
70+
TableMetadata currentTableMetadata =
71+
TableMetadata.newBuilder()
72+
.addColumn(COL_NAME1, DataType.INT)
73+
.addColumn(COL_NAME2, DataType.INT)
74+
.addColumn(COL_NAME3, DataType.TEXT)
75+
.addPartitionKey(COL_NAME1)
76+
.addClusteringKey(COL_NAME2)
77+
.addSecondaryIndex(COL_NAME3)
78+
.build();
79+
admin.createTable(namespace1, TABLE4, currentTableMetadata, options);
80+
81+
// Act Assert
82+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME1, COL_NAME4))
83+
.isInstanceOf(UnsupportedOperationException.class);
84+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME2, COL_NAME4))
85+
.isInstanceOf(UnsupportedOperationException.class);
86+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME3, COL_NAME4))
87+
.isInstanceOf(UnsupportedOperationException.class);
88+
} finally {
89+
admin.dropTable(namespace1, TABLE4, true);
90+
}
91+
}
5692
}

core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package com.scalar.db.transaction.jdbc;
22

3+
import static org.assertj.core.api.Assertions.assertThatCode;
4+
35
import com.scalar.db.api.DistributedTransactionAdminIntegrationTestBase;
6+
import com.scalar.db.api.TableMetadata;
47
import com.scalar.db.config.DatabaseConfig;
58
import com.scalar.db.exception.storage.ExecutionException;
9+
import com.scalar.db.io.DataType;
610
import com.scalar.db.storage.jdbc.JdbcConfig;
711
import com.scalar.db.storage.jdbc.JdbcEnv;
812
import com.scalar.db.storage.jdbc.JdbcTestUtils;
913
import com.scalar.db.storage.jdbc.RdbEngineFactory;
1014
import com.scalar.db.storage.jdbc.RdbEngineStrategy;
1115
import com.scalar.db.util.AdminTestUtils;
16+
import java.util.Map;
1217
import java.util.Properties;
1318
import org.junit.jupiter.api.Disabled;
1419
import org.junit.jupiter.api.Test;
1520
import org.junit.jupiter.api.condition.DisabledIf;
21+
import org.junit.jupiter.api.condition.EnabledIf;
1622

1723
public class JdbcTransactionAdminIntegrationTest
1824
extends DistributedTransactionAdminIntegrationTestBase {
@@ -124,4 +130,34 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
124130
throws ExecutionException {
125131
super.renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly();
126132
}
133+
134+
@Test
135+
@EnabledIf("isDb2")
136+
public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOperationException()
137+
throws ExecutionException {
138+
try {
139+
// Arrange
140+
Map<String, String> options = getCreationOptions();
141+
TableMetadata currentTableMetadata =
142+
TableMetadata.newBuilder()
143+
.addColumn(COL_NAME1, DataType.INT)
144+
.addColumn(COL_NAME2, DataType.INT)
145+
.addColumn(COL_NAME3, DataType.TEXT)
146+
.addPartitionKey(COL_NAME1)
147+
.addClusteringKey(COL_NAME2)
148+
.addSecondaryIndex(COL_NAME3)
149+
.build();
150+
admin.createTable(namespace1, TABLE4, currentTableMetadata, options);
151+
152+
// Act Assert
153+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME1, COL_NAME4))
154+
.isInstanceOf(UnsupportedOperationException.class);
155+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME2, COL_NAME4))
156+
.isInstanceOf(UnsupportedOperationException.class);
157+
assertThatCode(() -> admin.renameColumn(namespace1, TABLE4, COL_NAME3, COL_NAME4))
158+
.isInstanceOf(UnsupportedOperationException.class);
159+
} finally {
160+
admin.dropTable(namespace1, TABLE4, true);
161+
}
162+
}
127163
}

core/src/main/java/com/scalar/db/common/CoreError.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -692,26 +692,26 @@ public enum CoreError implements ScalarDbError {
692692
""),
693693
DYNAMO_DROP_COLUMN_NOT_SUPPORTED(
694694
Category.USER_ERROR, "0218", "DynamoDB does not support the dropping column feature", "", ""),
695-
RENAME_PRIMARY_KEY_COLUMN_NOT_SUPPORTED(
696-
Category.USER_ERROR,
697-
"0219",
698-
"Primary key columns cannot be renamed. Table: %s; Column: %s",
699-
"",
700-
""),
701695
COSMOS_RENAME_COLUMN_NOT_SUPPORTED(
702696
Category.USER_ERROR,
703-
"0220",
697+
"0219",
704698
"Cosmos DB does not support the renaming column feature",
705699
"",
706700
""),
707701
DYNAMO_RENAME_COLUMN_NOT_SUPPORTED(
708-
Category.USER_ERROR, "0221", "DynamoDB does not support the renaming column feature", "", ""),
702+
Category.USER_ERROR, "0220", "DynamoDB does not support the renaming column feature", "", ""),
709703
CASSANDRA_RENAME_NON_PRIMARY_KEY_COLUMN_NOT_SUPPORTED(
710704
Category.USER_ERROR,
711-
"0222",
705+
"0221",
712706
"Cassandra does not support renaming non-primary key columns",
713707
"",
714708
""),
709+
DB2_RENAME_PRIMARY_OR_INDEX_KEY_COLUMN_NOT_SUPPORTED(
710+
Category.USER_ERROR,
711+
"0222",
712+
"Db2 does not support renaming primary key or index key columns",
713+
"",
714+
""),
715715

716716
//
717717
// Errors for the concurrency error category

core/src/main/java/com/scalar/db/common/DecoratedDistributedTransactionAdmin.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,6 @@ public void addNewColumnToTable(
187187
distributedTransactionAdmin.addNewColumnToTable(namespace, table, columnName, columnType);
188188
}
189189

190-
@Override
191-
public void renameColumn(
192-
String namespace, String table, String oldColumnName, String newColumnName)
193-
throws ExecutionException {
194-
distributedTransactionAdmin.renameColumn(namespace, table, oldColumnName, newColumnName);
195-
}
196-
197190
@Override
198191
public void addNewColumnToTable(
199192
String namespace, String table, String columnName, DataType columnType, boolean encrypted)
@@ -228,6 +221,13 @@ public void dropColumnFromTable(
228221
distributedTransactionAdmin.dropColumnFromTable(namespace, table, columnName, ifExists);
229222
}
230223

224+
@Override
225+
public void renameColumn(
226+
String namespace, String table, String oldColumnName, String newColumnName)
227+
throws ExecutionException {
228+
distributedTransactionAdmin.renameColumn(namespace, table, oldColumnName, newColumnName);
229+
}
230+
231231
@Override
232232
public void importTable(String namespace, String table, Map<String, String> options)
233233
throws ExecutionException {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,12 +894,24 @@ public void renameColumn(
894894
TableMetadata.Builder tableMetadataBuilder =
895895
TableMetadata.newBuilder(currentTableMetadata).renameColumn(oldColumnName, newColumnName);
896896
if (currentTableMetadata.getPartitionKeyNames().contains(oldColumnName)) {
897+
if (rdbEngine instanceof RdbEngineDb2) {
898+
throw new UnsupportedOperationException(
899+
CoreError.DB2_RENAME_PRIMARY_OR_INDEX_KEY_COLUMN_NOT_SUPPORTED.buildMessage());
900+
}
897901
tableMetadataBuilder.renamePartitionKey(oldColumnName, newColumnName);
898902
}
899903
if (currentTableMetadata.getClusteringKeyNames().contains(oldColumnName)) {
904+
if (rdbEngine instanceof RdbEngineDb2) {
905+
throw new UnsupportedOperationException(
906+
CoreError.DB2_RENAME_PRIMARY_OR_INDEX_KEY_COLUMN_NOT_SUPPORTED.buildMessage());
907+
}
900908
tableMetadataBuilder.renameClusteringKey(oldColumnName, newColumnName);
901909
}
902910
if (currentTableMetadata.getSecondaryIndexNames().contains(oldColumnName)) {
911+
if (rdbEngine instanceof RdbEngineDb2) {
912+
throw new UnsupportedOperationException(
913+
CoreError.DB2_RENAME_PRIMARY_OR_INDEX_KEY_COLUMN_NOT_SUPPORTED.buildMessage());
914+
}
903915
tableMetadataBuilder.renameSecondaryIndex(oldColumnName, newColumnName);
904916
}
905917
TableMetadata updatedTableMetadata = tableMetadataBuilder.build();

0 commit comments

Comments
 (0)