Skip to content

Commit a848e63

Browse files
committed
Make drop column unsupported in CosmosAdmin and DynamoAdmin
1 parent d2b4a97 commit a848e63

File tree

5 files changed

+14
-136
lines changed

5 files changed

+14
-136
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,12 @@ public enum CoreError implements ScalarDbError {
684684
"The column %s is specified as a primary key or an index key",
685685
"",
686686
""),
687+
COSMOS_DROP_COLUMN_NOT_SUPPORTED(
688+
Category.USER_ERROR,
689+
"0217",
690+
"Drop column functionality is not supported in Cosmos DB",
691+
"",
692+
""),
687693

688694
//
689695
// Errors for the concurrency error category

core/src/main/java/com/scalar/db/storage/cosmos/CosmosAdmin.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -647,18 +647,8 @@ columnName, getFullTableName(namespace, table)),
647647
@Override
648648
public void dropColumnFromTable(String namespace, String table, String columnName)
649649
throws ExecutionException {
650-
try {
651-
TableMetadata currentTableMetadata = getTableMetadata(namespace, table);
652-
TableMetadata updatedTableMetadata =
653-
TableMetadata.newBuilder(currentTableMetadata).removeColumn(columnName).build();
654-
upsertTableMetadata(namespace, table, updatedTableMetadata);
655-
} catch (ExecutionException e) {
656-
throw new ExecutionException(
657-
String.format(
658-
"Adding the new %s column to the %s container failed",
659-
columnName, getFullTableName(namespace, table)),
660-
e);
661-
}
650+
throw new UnsupportedOperationException(
651+
CoreError.COSMOS_DROP_COLUMN_NOT_SUPPORTED.buildMessage());
662652
}
663653

664654
@Override

core/src/main/java/com/scalar/db/storage/dynamo/DynamoAdmin.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,20 +1443,8 @@ columnName, getFullTableName(namespace, table)),
14431443
@Override
14441444
public void dropColumnFromTable(String nonPrefixedNamespace, String table, String columnName)
14451445
throws ExecutionException {
1446-
Namespace namespace = Namespace.of(namespacePrefix, nonPrefixedNamespace);
1447-
try {
1448-
TableMetadata currentTableMetadata = getTableMetadata(nonPrefixedNamespace, table);
1449-
TableMetadata updatedTableMetadata =
1450-
TableMetadata.newBuilder(currentTableMetadata).removeColumn(columnName).build();
1451-
1452-
upsertTableMetadata(namespace, table, updatedTableMetadata);
1453-
} catch (ExecutionException e) {
1454-
throw new ExecutionException(
1455-
String.format(
1456-
"Dropping the %s column from the %s table failed",
1457-
columnName, getFullTableName(namespace, table)),
1458-
e);
1459-
}
1446+
throw new UnsupportedOperationException(
1447+
"Drop column functionality is not supported in DynamoDB");
14601448
}
14611449

14621450
@Override

core/src/test/java/com/scalar/db/storage/cosmos/CosmosAdminTest.java

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,49 +1131,6 @@ public void addNewColumnToTable_ShouldWorkProperly() throws ExecutionException {
11311131
verify(container).upsertItem(expectedCosmosTableMetadata);
11321132
}
11331133

1134-
@Test
1135-
public void dropColumnFromTable_ShouldWorkProperly() throws ExecutionException {
1136-
// Arrange
1137-
String namespace = "ns";
1138-
String table = "table";
1139-
String column1 = "c1";
1140-
String column2 = "c2";
1141-
String fullTableName = getFullTableName(namespace, table);
1142-
@SuppressWarnings("unchecked")
1143-
CosmosItemResponse<CosmosTableMetadata> response = mock(CosmosItemResponse.class);
1144-
1145-
when(client.getDatabase(METADATA_DATABASE)).thenReturn(database);
1146-
when(database.getContainer(CosmosAdmin.TABLE_METADATA_CONTAINER)).thenReturn(container);
1147-
when(container.readItem(
1148-
anyString(),
1149-
any(PartitionKey.class),
1150-
ArgumentMatchers.<Class<CosmosTableMetadata>>any()))
1151-
.thenReturn(response);
1152-
1153-
CosmosTableMetadata cosmosTableMetadata =
1154-
CosmosTableMetadata.newBuilder()
1155-
.partitionKeyNames(Sets.newLinkedHashSet(column1))
1156-
.columns(ImmutableMap.of(column1, "text", column2, "int"))
1157-
.build();
1158-
1159-
when(response.getItem()).thenReturn(cosmosTableMetadata);
1160-
1161-
// Act
1162-
admin.dropColumnFromTable(namespace, table, column2);
1163-
1164-
// Assert
1165-
verify(container)
1166-
.readItem(fullTableName, new PartitionKey(fullTableName), CosmosTableMetadata.class);
1167-
1168-
CosmosTableMetadata expectedCosmosTableMetadata =
1169-
CosmosTableMetadata.newBuilder()
1170-
.id(fullTableName)
1171-
.partitionKeyNames(Sets.newLinkedHashSet(column1))
1172-
.columns(ImmutableMap.of(column1, "text"))
1173-
.build();
1174-
verify(container).upsertItem(expectedCosmosTableMetadata);
1175-
}
1176-
11771134
@Test
11781135
public void unsupportedOperations_ShouldThrowUnsupportedException() {
11791136
// Arrange
@@ -1192,11 +1149,13 @@ public void unsupportedOperations_ShouldThrowUnsupportedException() {
11921149
() ->
11931150
admin.importTable(
11941151
namespace, table, Collections.emptyMap(), Collections.emptyMap()));
1152+
Throwable thrown4 = catchThrowable(() -> admin.dropColumnFromTable(namespace, table, column));
11951153

11961154
// Assert
11971155
assertThat(thrown1).isInstanceOf(UnsupportedOperationException.class);
11981156
assertThat(thrown2).isInstanceOf(UnsupportedOperationException.class);
11991157
assertThat(thrown3).isInstanceOf(UnsupportedOperationException.class);
1158+
assertThat(thrown4).isInstanceOf(UnsupportedOperationException.class);
12001159
}
12011160

12021161
@Test

core/src/test/java/com/scalar/db/storage/dynamo/DynamoAdminTestBase.java

Lines changed: 2 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,73 +1441,6 @@ public void addNewColumnToTable_ShouldWorkProperly() throws ExecutionException {
14411441
.build());
14421442
}
14431443

1444-
@Test
1445-
public void dropColumnFromTable_ShouldWorkProperly() throws ExecutionException {
1446-
// Arrange
1447-
String column1 = "c1";
1448-
String column2 = "c2";
1449-
1450-
GetItemResponse response = mock(GetItemResponse.class);
1451-
when(client.getItem(any(GetItemRequest.class))).thenReturn(response);
1452-
when(response.item())
1453-
.thenReturn(
1454-
ImmutableMap.<String, AttributeValue>builder()
1455-
.put(
1456-
DynamoAdmin.METADATA_ATTR_TABLE,
1457-
AttributeValue.builder().s(getFullTableName()).build())
1458-
.put(
1459-
DynamoAdmin.METADATA_ATTR_COLUMNS,
1460-
AttributeValue.builder()
1461-
.m(
1462-
ImmutableMap.<String, AttributeValue>builder()
1463-
.put(column1, AttributeValue.builder().s("text").build())
1464-
.put(column2, AttributeValue.builder().s("int").build())
1465-
.build())
1466-
.build())
1467-
.put(
1468-
DynamoAdmin.METADATA_ATTR_PARTITION_KEY,
1469-
AttributeValue.builder().l(AttributeValue.builder().s(column1).build()).build())
1470-
.build());
1471-
1472-
// Act
1473-
admin.dropColumnFromTable(NAMESPACE, TABLE, column2);
1474-
1475-
// Assert
1476-
// Get metadata
1477-
Map<String, AttributeValue> key = new HashMap<>();
1478-
key.put(
1479-
DynamoAdmin.METADATA_ATTR_TABLE, AttributeValue.builder().s(getFullTableName()).build());
1480-
verify(client)
1481-
.getItem(
1482-
GetItemRequest.builder()
1483-
.tableName(getFullMetadataTableName())
1484-
.key(key)
1485-
.consistentRead(true)
1486-
.build());
1487-
1488-
// Put metadata
1489-
Map<String, AttributeValue> itemValues = new HashMap<>();
1490-
itemValues.put(
1491-
DynamoAdmin.METADATA_ATTR_TABLE, AttributeValue.builder().s(getFullTableName()).build());
1492-
Map<String, AttributeValue> columns = new HashMap<>();
1493-
1494-
columns.put(
1495-
column1, AttributeValue.builder().s(DataType.TEXT.toString().toLowerCase()).build());
1496-
1497-
itemValues.put(DynamoAdmin.METADATA_ATTR_COLUMNS, AttributeValue.builder().m(columns).build());
1498-
itemValues.put(
1499-
DynamoAdmin.METADATA_ATTR_PARTITION_KEY,
1500-
AttributeValue.builder()
1501-
.l(Collections.singletonList(AttributeValue.builder().s(column1).build()))
1502-
.build());
1503-
verify(client)
1504-
.putItem(
1505-
PutItemRequest.builder()
1506-
.tableName(getFullMetadataTableName())
1507-
.item(itemValues)
1508-
.build());
1509-
}
1510-
15111444
@Test
15121445
public void
15131446
createNamespace_WithNonExistingNamespacesTable_ShouldCreateNamespacesTableAndAddNamespace()
@@ -1784,11 +1717,13 @@ public void unsupportedOperations_ShouldThrowUnsupportedException() {
17841717
() ->
17851718
admin.importTable(
17861719
NAMESPACE, TABLE, Collections.emptyMap(), Collections.emptyMap()));
1720+
Throwable thrown4 = catchThrowable(() -> admin.dropColumnFromTable(NAMESPACE, TABLE, "c1"));
17871721

17881722
// Assert
17891723
assertThat(thrown1).isInstanceOf(UnsupportedOperationException.class);
17901724
assertThat(thrown2).isInstanceOf(UnsupportedOperationException.class);
17911725
assertThat(thrown3).isInstanceOf(UnsupportedOperationException.class);
1726+
assertThat(thrown4).isInstanceOf(UnsupportedOperationException.class);
17921727
}
17931728

17941729
@Test

0 commit comments

Comments
 (0)