From 94308b3447fa54ee33a6d63628bdb8ceb95f0240 Mon Sep 17 00:00:00 2001 From: Ben Maizels Date: Mon, 19 Oct 2020 10:04:54 -0700 Subject: [PATCH] Fix for handling special characters in attribute names with WRITE_IF_NOT_EXISTS update behavior --- .../bugfix-AmazonDynamoDBEnhancedClient-6338e31.json | 5 +++++ .../dynamodb/internal/operations/UpdateItemOperation.java | 3 ++- .../functionaltests/models/RecordWithUpdateBehaviors.java | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-6338e31.json diff --git a/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-6338e31.json b/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-6338e31.json new file mode 100644 index 000000000000..5a94bf3c3462 --- /dev/null +++ b/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-6338e31.json @@ -0,0 +1,5 @@ +{ + "type": "bugfix", + "category": "Amazon DynamoDB Enhanced Client", + "description": "Fix for handling special characters in attribute names with WRITE_IF_NOT_EXISTS update behavior" +} diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java index 3e181b78ae3e..1e34cb470a29 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java @@ -59,7 +59,8 @@ public class UpdateItemOperation key -> "#AMZN_MAPPED_" + EnhancedClientUtils.cleanAttributeName(key); private static final Function CONDITIONAL_UPDATE_MAPPER = - key -> "if_not_exists(" + key + ", " + EXPRESSION_VALUE_KEY_MAPPER.apply(key) + ")"; + key -> "if_not_exists(" + EXPRESSION_KEY_MAPPER.apply(key) + ", " + + EXPRESSION_VALUE_KEY_MAPPER.apply(key) + ")"; private final UpdateItemEnhancedRequest request; diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/RecordWithUpdateBehaviors.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/RecordWithUpdateBehaviors.java index 8dbcbdad829e..cc6edf4b4a2c 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/RecordWithUpdateBehaviors.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/RecordWithUpdateBehaviors.java @@ -17,6 +17,7 @@ import java.time.Instant; import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbVersionAttribute; +import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbUpdateBehavior; @@ -41,6 +42,7 @@ public void setId(String id) { } @DynamoDbUpdateBehavior(WRITE_IF_NOT_EXISTS) + @DynamoDbAttribute("created-on") // Forces a test on attribute name cleaning public Instant getCreatedOn() { return createdOn; }