Skip to content

Commit 335489c

Browse files
committed
Addressed PR feedback
1 parent 130d25a commit 335489c

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/update/UpdateExpressionResolver.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import software.amazon.awssdk.enhanced.dynamodb.update.UpdateAction;
4343
import software.amazon.awssdk.enhanced.dynamodb.update.UpdateExpression;
4444
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
45+
import software.amazon.awssdk.utils.Validate;
4546

4647
/**
4748
* Builds one {@link UpdateExpression} from three places the enhanced client can get updates:
@@ -91,8 +92,12 @@ public static final class Builder {
9192
* {@link #tableMetadata(TableMetadata)} is required so item {@code SET} and {@code REMOVE} actions can be generated.
9293
*
9394
* @return a new resolver instance
95+
* @throws NullPointerException if {@code nonKeyAttributes} is non-empty and {@code tableMetadata} was never set
9496
*/
9597
public UpdateExpressionResolver build() {
98+
if (!nonKeyAttributes.isEmpty()) {
99+
Validate.paramNotNull(tableMetadata, "tableMetadata");
100+
}
96101
return new UpdateExpressionResolver(this);
97102
}
98103

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/update/UpdateExpressionResolverTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.enhanced.dynamodb.internal.update;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1920
import static software.amazon.awssdk.enhanced.dynamodb.model.UpdateExpressionMergeStrategy.LEGACY;
2021
import static software.amazon.awssdk.enhanced.dynamodb.model.UpdateExpressionMergeStrategy.PRIORITIZE_HIGHER_SOURCE;
2122

@@ -48,6 +49,36 @@ public class UpdateExpressionResolverTest {
4849

4950
private static final TableMetadata TABLE_METADATA = StaticTableMetadata.builder().build();
5051

52+
@Test
53+
public void build_nonKeyAttributesWithoutTableMetadata_throwsNullPointerException() {
54+
Map<String, AttributeValue> itemMap = new HashMap<>();
55+
itemMap.put("attr", AttributeValue.builder().s("v").build());
56+
57+
assertThatThrownBy(() -> UpdateExpressionResolver.builder()
58+
.nonKeyAttributes(itemMap)
59+
.build())
60+
.isInstanceOf(NullPointerException.class)
61+
.hasMessageContaining("tableMetadata");
62+
}
63+
64+
@Test
65+
public void build_emptyNonKeyAttributesWithoutTableMetadata_succeeds() {
66+
UpdateExpressionResolver resolver =
67+
UpdateExpressionResolver
68+
.builder()
69+
.nonKeyAttributes(Collections.emptyMap())
70+
.requestExpression(
71+
UpdateExpression.builder()
72+
.addAction(SetAction.builder()
73+
.path("a")
74+
.value(":v")
75+
.putExpressionValue(":v", AttributeValue.builder().s("x").build())
76+
.build())
77+
.build())
78+
.build();
79+
assertThat(resolver.resolve()).isNotNull();
80+
}
81+
5182
// --------------------------------------------------------------
5283
// LEGACY — default merge strategy (order map, extension, request)
5384
// --------------------------------------------------------------

0 commit comments

Comments
 (0)