Skip to content

Commit 4687f97

Browse files
feeblefakieKodaiD
andauthored
Backport to branch(3) : Add rename column (#3006)
Co-authored-by: Kodai Doki <[email protected]>
1 parent f9772c9 commit 4687f97

File tree

53 files changed

+1905
-46
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1905
-46
lines changed

core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraAdminCaseSensitivityIntegrationTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.scalar.db.storage.cassandra;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
35
import com.scalar.db.api.DistributedStorageAdminCaseSensitivityIntegrationTestBase;
6+
import com.scalar.db.api.TableMetadata;
47
import com.scalar.db.config.DatabaseConfig;
8+
import com.scalar.db.exception.storage.ExecutionException;
9+
import com.scalar.db.io.DataType;
10+
import java.util.Map;
511
import java.util.Properties;
12+
import org.junit.jupiter.api.Disabled;
613

714
public class CassandraAdminCaseSensitivityIntegrationTest
815
extends DistributedStorageAdminCaseSensitivityIntegrationTestBase {
@@ -22,4 +29,47 @@ protected String getSystemNamespaceName(Properties properties) {
2229
protected boolean isTimestampTypeSupported() {
2330
return false;
2431
}
32+
33+
@Override
34+
@Disabled("Renaming non-primary key columns is not supported in Cassandra")
35+
public void renameColumn_ShouldRenameColumnCorrectly() {}
36+
37+
@Override
38+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
39+
throws ExecutionException {
40+
try {
41+
// Arrange
42+
Map<String, String> options = getCreationOptions();
43+
TableMetadata currentTableMetadata =
44+
TableMetadata.newBuilder()
45+
.addColumn(getColumnName1(), DataType.INT)
46+
.addColumn(getColumnName2(), DataType.INT)
47+
.addColumn(getColumnName3(), DataType.TEXT)
48+
.addPartitionKey(getColumnName1())
49+
.addClusteringKey(getColumnName2())
50+
.addSecondaryIndex(getColumnName1())
51+
.build();
52+
admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options);
53+
54+
// Act
55+
admin.renameColumn(getNamespace1(), getTable4(), getColumnName1(), getColumnName4());
56+
57+
// Assert
58+
TableMetadata expectedTableMetadata =
59+
TableMetadata.newBuilder()
60+
.addColumn(getColumnName4(), DataType.INT)
61+
.addColumn(getColumnName2(), DataType.INT)
62+
.addColumn(getColumnName3(), DataType.TEXT)
63+
.addPartitionKey(getColumnName4())
64+
.addClusteringKey(getColumnName2())
65+
.addSecondaryIndex(getColumnName4())
66+
.build();
67+
assertThat(admin.getTableMetadata(getNamespace1(), getTable4()))
68+
.isEqualTo(expectedTableMetadata);
69+
assertThat(admin.indexExists(getNamespace1(), getTable4(), getColumnName1())).isFalse();
70+
assertThat(admin.indexExists(getNamespace1(), getTable4(), getColumnName4())).isTrue();
71+
} finally {
72+
admin.dropTable(getNamespace1(), getTable4(), true);
73+
}
74+
}
2575
}

core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraAdminIntegrationTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.scalar.db.storage.cassandra;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
35
import com.scalar.db.api.DistributedStorageAdminIntegrationTestBase;
6+
import com.scalar.db.api.TableMetadata;
47
import com.scalar.db.config.DatabaseConfig;
8+
import com.scalar.db.exception.storage.ExecutionException;
9+
import com.scalar.db.io.DataType;
10+
import java.util.Map;
511
import java.util.Properties;
12+
import org.junit.jupiter.api.Disabled;
613

714
public class CassandraAdminIntegrationTest extends DistributedStorageAdminIntegrationTestBase {
815
@Override
@@ -21,4 +28,47 @@ protected String getSystemNamespaceName(Properties properties) {
2128
protected boolean isTimestampTypeSupported() {
2229
return false;
2330
}
31+
32+
@Override
33+
@Disabled("Renaming non-primary key columns is not supported in Cassandra")
34+
public void renameColumn_ShouldRenameColumnCorrectly() {}
35+
36+
@Override
37+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
38+
throws ExecutionException {
39+
try {
40+
// Arrange
41+
Map<String, String> options = getCreationOptions();
42+
TableMetadata currentTableMetadata =
43+
TableMetadata.newBuilder()
44+
.addColumn(getColumnName1(), DataType.INT)
45+
.addColumn(getColumnName2(), DataType.INT)
46+
.addColumn(getColumnName3(), DataType.TEXT)
47+
.addPartitionKey(getColumnName1())
48+
.addClusteringKey(getColumnName2())
49+
.addSecondaryIndex(getColumnName1())
50+
.build();
51+
admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options);
52+
53+
// Act
54+
admin.renameColumn(getNamespace1(), getTable4(), getColumnName1(), getColumnName4());
55+
56+
// Assert
57+
TableMetadata expectedTableMetadata =
58+
TableMetadata.newBuilder()
59+
.addColumn(getColumnName4(), DataType.INT)
60+
.addColumn(getColumnName2(), DataType.INT)
61+
.addColumn(getColumnName3(), DataType.TEXT)
62+
.addPartitionKey(getColumnName4())
63+
.addClusteringKey(getColumnName2())
64+
.addSecondaryIndex(getColumnName4())
65+
.build();
66+
assertThat(admin.getTableMetadata(getNamespace1(), getTable4()))
67+
.isEqualTo(expectedTableMetadata);
68+
assertThat(admin.indexExists(getNamespace1(), getTable4(), getColumnName1())).isFalse();
69+
assertThat(admin.indexExists(getNamespace1(), getTable4(), getColumnName4())).isTrue();
70+
} finally {
71+
admin.dropTable(getNamespace1(), getTable4(), true);
72+
}
73+
}
2474
}

core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraAdminPermissionIntegrationTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import static com.scalar.db.storage.cassandra.CassandraPermissionTestUtils.MAX_RETRY_COUNT;
44
import static com.scalar.db.storage.cassandra.CassandraPermissionTestUtils.SLEEP_BETWEEN_RETRIES_SECONDS;
5+
import static org.assertj.core.api.Assertions.assertThatCode;
56

67
import com.google.common.util.concurrent.Uninterruptibles;
78
import com.scalar.db.api.DistributedStorageAdminPermissionIntegrationTestBase;
9+
import com.scalar.db.exception.storage.ExecutionException;
810
import com.scalar.db.util.AdminTestUtils;
911
import com.scalar.db.util.PermissionTestUtils;
1012
import java.util.Collections;
@@ -138,4 +140,17 @@ public void addRawColumnToTable_WithSufficientPermission_ShouldSucceed() {}
138140
@Override
139141
@Disabled("Import-related functionality is not supported in Cassandra")
140142
public void importTable_WithSufficientPermission_ShouldSucceed() {}
143+
144+
@Test
145+
@Override
146+
public void renameColumn_WithSufficientPermission_ShouldSucceed() throws ExecutionException {
147+
// Arrange
148+
createNamespaceByRoot();
149+
createTableByRoot();
150+
151+
// Act Assert
152+
// Cassandra does not support renaming non-primary key columns
153+
assertThatCode(() -> adminForNormalUser.renameColumn(NAMESPACE, TABLE, COL_NAME1, NEW_COL_NAME))
154+
.doesNotThrowAnyException();
155+
}
141156
}

core/src/integration-test/java/com/scalar/db/storage/cassandra/ConsensusCommitAdminIntegrationTestWithCassandra.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package com.scalar.db.storage.cassandra;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.scalar.db.api.TableMetadata;
36
import com.scalar.db.config.DatabaseConfig;
7+
import com.scalar.db.exception.storage.ExecutionException;
8+
import com.scalar.db.io.DataType;
49
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
510
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
611
import com.scalar.db.transaction.consensuscommit.Coordinator;
12+
import java.util.Map;
713
import java.util.Properties;
14+
import org.junit.jupiter.api.Disabled;
815

916
public class ConsensusCommitAdminIntegrationTestWithCassandra
1017
extends ConsensusCommitAdminIntegrationTestBase {
@@ -40,4 +47,46 @@ protected boolean isTimestampTypeSupported() {
4047

4148
@Override
4249
protected void extraCheckOnCoordinatorTable() {}
50+
51+
@Override
52+
@Disabled("Renaming non-primary key columns is not supported in Cassandra")
53+
public void renameColumn_ShouldRenameColumnCorrectly() {}
54+
55+
@Override
56+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
57+
throws ExecutionException {
58+
try {
59+
// Arrange
60+
Map<String, String> options = getCreationOptions();
61+
TableMetadata currentTableMetadata =
62+
TableMetadata.newBuilder()
63+
.addColumn("c1", DataType.INT)
64+
.addColumn("c2", DataType.INT)
65+
.addColumn("c3", DataType.TEXT)
66+
.addPartitionKey("c1")
67+
.addClusteringKey("c2")
68+
.addSecondaryIndex("c1")
69+
.build();
70+
admin.createTable(namespace1, TABLE4, currentTableMetadata, options);
71+
72+
// Act
73+
admin.renameColumn(namespace1, TABLE4, "c1", "c4");
74+
75+
// Assert
76+
TableMetadata expectedTableMetadata =
77+
TableMetadata.newBuilder()
78+
.addColumn("c4", DataType.INT)
79+
.addColumn("c2", DataType.INT)
80+
.addColumn("c3", DataType.TEXT)
81+
.addPartitionKey("c4")
82+
.addClusteringKey("c2")
83+
.addSecondaryIndex("c4")
84+
.build();
85+
assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata);
86+
assertThat(admin.indexExists(namespace1, TABLE4, "c1")).isFalse();
87+
assertThat(admin.indexExists(namespace1, TABLE4, "c4")).isTrue();
88+
} finally {
89+
admin.dropTable(namespace1, TABLE4, true);
90+
}
91+
}
4392
}

core/src/integration-test/java/com/scalar/db/storage/cassandra/SingleCrudOperationTransactionAdminIntegrationTestWithCassandra.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package com.scalar.db.storage.cassandra;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.scalar.db.api.TableMetadata;
36
import com.scalar.db.config.DatabaseConfig;
7+
import com.scalar.db.exception.storage.ExecutionException;
8+
import com.scalar.db.io.DataType;
49
import com.scalar.db.transaction.singlecrudoperation.SingleCrudOperationTransactionAdminIntegrationTestBase;
510
import java.util.Collections;
611
import java.util.Map;
712
import java.util.Properties;
13+
import org.junit.jupiter.api.Disabled;
814

915
public class SingleCrudOperationTransactionAdminIntegrationTestWithCassandra
1016
extends SingleCrudOperationTransactionAdminIntegrationTestBase {
@@ -28,4 +34,46 @@ protected String getSystemNamespaceName(Properties properties) {
2834
protected boolean isTimestampTypeSupported() {
2935
return false;
3036
}
37+
38+
@Override
39+
@Disabled("Renaming non-primary key columns is not supported in Cassandra")
40+
public void renameColumn_ShouldRenameColumnCorrectly() {}
41+
42+
@Override
43+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly()
44+
throws ExecutionException {
45+
try {
46+
// Arrange
47+
Map<String, String> options = getCreationOptions();
48+
TableMetadata currentTableMetadata =
49+
TableMetadata.newBuilder()
50+
.addColumn("c1", DataType.INT)
51+
.addColumn("c2", DataType.INT)
52+
.addColumn("c3", DataType.TEXT)
53+
.addPartitionKey("c1")
54+
.addClusteringKey("c2")
55+
.addSecondaryIndex("c1")
56+
.build();
57+
admin.createTable(namespace1, TABLE4, currentTableMetadata, options);
58+
59+
// Act
60+
admin.renameColumn(namespace1, TABLE4, "c1", "c4");
61+
62+
// Assert
63+
TableMetadata expectedTableMetadata =
64+
TableMetadata.newBuilder()
65+
.addColumn("c4", DataType.INT)
66+
.addColumn("c2", DataType.INT)
67+
.addColumn("c3", DataType.TEXT)
68+
.addPartitionKey("c4")
69+
.addClusteringKey("c2")
70+
.addSecondaryIndex("c4")
71+
.build();
72+
assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata);
73+
assertThat(admin.indexExists(namespace1, TABLE4, "c1")).isFalse();
74+
assertThat(admin.indexExists(namespace1, TABLE4, "c4")).isTrue();
75+
} finally {
76+
admin.dropTable(namespace1, TABLE4, true);
77+
}
78+
}
3179
}

core/src/integration-test/java/com/scalar/db/storage/cosmos/ConsensusCommitAdminIntegrationTestWithCosmos.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,31 @@ public void dropColumnFromTable_ForNonExistingColumn_ShouldThrowIllegalArgumentE
5757
@Disabled("Cosmos DB does not support dropping columns")
5858
public void dropColumnFromTable_ForPrimaryKeyColumn_ShouldThrowIllegalArgumentException() {}
5959

60-
@Disabled("Cosmos DB does not support dropping columns")
6160
@Override
61+
@Disabled("Cosmos DB does not support dropping columns")
6262
public void dropColumnFromTable_ForIndexedColumn_ShouldDropColumnAndIndexCorrectly() {}
6363

6464
@Override
6565
@Disabled("Cosmos DB does not support dropping columns")
6666
public void dropColumnFromTable_IfNotExists_ForNonExistingColumn_ShouldNotThrowAnyException() {}
67+
68+
@Override
69+
@Disabled("Cosmos DB does not support renaming columns")
70+
public void renameColumn_ShouldRenameColumnCorrectly() {}
71+
72+
@Override
73+
@Disabled("Cosmos DB does not support renaming columns")
74+
public void renameColumn_ForNonExistingTable_ShouldThrowIllegalArgumentException() {}
75+
76+
@Override
77+
@Disabled("Cosmos DB does not support renaming columns")
78+
public void renameColumn_ForNonExistingColumn_ShouldThrowIllegalArgumentException() {}
79+
80+
@Override
81+
@Disabled("Cosmos DB does not support renaming columns")
82+
public void renameColumn_ForPrimaryKeyColumn_ShouldRenameColumnCorrectly() {}
83+
84+
@Override
85+
@Disabled("Cosmos DB does not support renaming columns")
86+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly() {}
6787
}

core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosAdminCaseSensitivityIntegrationTest.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,47 @@ protected String getSystemNamespaceName(Properties properties) {
2626
.orElse(DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME);
2727
}
2828

29-
@Disabled("Cosmos DB does not support dropping columns")
3029
@Override
30+
@Disabled("Cosmos DB does not support dropping columns")
3131
public void dropColumnFromTable_DropColumnForEachExistingDataType_ShouldDropColumnsCorrectly() {}
3232

33-
@Disabled("Cosmos DB does not support dropping columns")
3433
@Override
34+
@Disabled("Cosmos DB does not support dropping columns")
3535
public void dropColumnFromTable_ForNonExistingTable_ShouldThrowIllegalArgumentException() {}
3636

37-
@Disabled("Cosmos DB does not support dropping columns")
3837
@Override
38+
@Disabled("Cosmos DB does not support dropping columns")
3939
public void dropColumnFromTable_ForNonExistingColumn_ShouldThrowIllegalArgumentException() {}
4040

41-
@Disabled("Cosmos DB does not support dropping columns")
4241
@Override
42+
@Disabled("Cosmos DB does not support dropping columns")
4343
public void dropColumnFromTable_ForPrimaryKeyColumn_ShouldThrowIllegalArgumentException() {}
4444

45-
@Disabled("Cosmos DB does not support dropping columns")
4645
@Override
46+
@Disabled("Cosmos DB does not support dropping columns")
4747
public void dropColumnFromTable_ForIndexedColumn_ShouldDropColumnAndIndexCorrectly() {}
4848

49-
@Disabled("Cosmos DB does not support dropping columns")
5049
@Override
50+
@Disabled("Cosmos DB does not support dropping columns")
5151
public void dropColumnFromTable_IfExists_ForNonExistingColumn_ShouldNotThrowAnyException() {}
52+
53+
@Override
54+
@Disabled("Cosmos DB does not support renaming columns")
55+
public void renameColumn_ShouldRenameColumnCorrectly() {}
56+
57+
@Override
58+
@Disabled("Cosmos DB does not support renaming columns")
59+
public void renameColumn_ForNonExistingTable_ShouldThrowIllegalArgumentException() {}
60+
61+
@Override
62+
@Disabled("Cosmos DB does not support renaming columns")
63+
public void renameColumn_ForNonExistingColumn_ShouldThrowIllegalArgumentException() {}
64+
65+
@Override
66+
@Disabled("Cosmos DB does not support renaming columns")
67+
public void renameColumn_ForPrimaryKeyColumn_ShouldRenameColumnCorrectly() {}
68+
69+
@Override
70+
@Disabled("Cosmos DB does not support renaming columns")
71+
public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly() {}
5272
}

0 commit comments

Comments
 (0)