diff --git a/.changes/next-release/feature-AmazonDynamoDBEnhancedClient-2532061.json b/.changes/next-release/feature-AmazonDynamoDBEnhancedClient-2532061.json new file mode 100644 index 000000000000..a7dc14ee9b00 --- /dev/null +++ b/.changes/next-release/feature-AmazonDynamoDBEnhancedClient-2532061.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "Amazon DynamoDB Enhanced Client", + "contributor": "", + "description": "Use String instead of Select enum for ProjectionExpression to support future values" +} diff --git a/services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryIntegrationTest.java b/services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryIntegrationTest.java index 5ca76dec9011..adfb9eddd2ad 100644 --- a/services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryIntegrationTest.java +++ b/services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryIntegrationTest.java @@ -18,7 +18,6 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.greaterThanOrEqualTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; @@ -35,7 +34,6 @@ import org.junit.BeforeClass; import org.junit.Test; import software.amazon.awssdk.enhanced.dynamodb.model.Page; -import software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional; import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.Record; import software.amazon.awssdk.enhanced.dynamodb.model.ScanEnhancedRequest; diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java index 08de12485155..d228c6e36311 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java @@ -53,7 +53,7 @@ public final class QueryEnhancedRequest { private final QueryConditional queryConditional; private final Map exclusiveStartKey; private final Boolean scanIndexForward; - private final Select select; + private final String select; private final Integer limit; private final Boolean consistentRead; private final Expression filterExpression; @@ -119,11 +119,11 @@ public Boolean scanIndexForward() { } /** - * Returns the value of select, or null if it doesn't exist. + * Returns the value of select as Enum, or null if it doesn't exist. * @return */ public Select select() { - return select; + return Select.fromValue(this.select); } /** @@ -131,7 +131,7 @@ public Select select() { * @return */ public String selectAsString() { - return String.valueOf(select); + return select; } /** @@ -266,7 +266,7 @@ public static final class Builder { private QueryConditional queryConditional; private Map exclusiveStartKey; private Boolean scanIndexForward; - private Select select; + private String select; private Integer limit; private Boolean consistentRead; private Expression filterExpression; @@ -307,6 +307,17 @@ public Builder scanIndexForward(Boolean scanIndexForward) { * @return a builder of this type */ public Builder select(Select select) { + this.select = select == null ? null : select.toString(); + return this; + } + + /** + * Determines the attributes to be returned in the result. See {@link Select} string values for examples and constraints. + * By default, all attributes are returned. + * @param select + * @return a builder of this type + */ + public Builder select(String select) { this.select = select; return this; } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicQueryTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicQueryTest.java index 20eb068d34c3..68c158827c52 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicQueryTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicQueryTest.java @@ -584,7 +584,7 @@ public void queryAllRecordsDefaultSettings_withSelect_specificAttributes() { mappedTable.query(b -> b .queryConditional(keyEqualTo(k -> k.partitionValue("id-value"))) .attributesToProject("value") - .select(Select.SPECIFIC_ATTRIBUTES) + .select("SPECIFIC_ATTRIBUTES") ).iterator(); assertThat(results.hasNext(), is(true)); @@ -606,7 +606,7 @@ public void queryAllRecordsDefaultSettings_withSelect_allAttributes() { Iterator> results = mappedTable.query(b -> b .queryConditional(keyEqualTo(k -> k.partitionValue("id-value"))) - .select(Select.ALL_ATTRIBUTES) + .select("ALL_ATTRIBUTES") ).iterator(); assertThat(results.hasNext(), is(true)); diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicScanTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicScanTest.java index d7e3ba50d05a..95ba4b4f7767 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicScanTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicScanTest.java @@ -45,7 +45,6 @@ import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; -import software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocument; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.InnerAttributeRecord; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.NestedTestRecord; import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema; diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/document/BasicQueryTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/document/BasicQueryTest.java index 7b5f1d602223..50584ea45d24 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/document/BasicQueryTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/document/BasicQueryTest.java @@ -48,7 +48,6 @@ import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.EnhancedType; import software.amazon.awssdk.enhanced.dynamodb.Expression; -import software.amazon.awssdk.enhanced.dynamodb.JsonTestUtils; import software.amazon.awssdk.enhanced.dynamodb.Key; import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName; import software.amazon.awssdk.enhanced.dynamodb.TableMetadata; @@ -61,14 +60,10 @@ import software.amazon.awssdk.enhanced.dynamodb.model.Page; import software.amazon.awssdk.enhanced.dynamodb.model.PageIterable; import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest; -import software.amazon.awssdk.protocols.jsoncore.JsonNode; -import software.amazon.awssdk.protocols.jsoncore.JsonNodeParser; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest; import software.amazon.awssdk.services.dynamodb.model.Select; -import software.amazon.awssdk.thirdparty.jackson.core.JsonParser; -import software.amazon.awssdk.thirdparty.jackson.core.JsonToken; public class BasicQueryTest extends LocalDynamoDbSyncTestBase { private DynamoDbClient lowLevelClient; @@ -252,7 +247,7 @@ public void queryAllRecordsDefaultSettings_withSelect_specificAttributes() { Iterator> results = docMappedtable.query(b -> b .queryConditional(keyEqualTo(k -> k.partitionValue("id-value"))) - .select(Select.SPECIFIC_ATTRIBUTES) + .select("SPECIFIC_ATTRIBUTES") .attributesToProject("value") ).iterator(); @@ -293,7 +288,7 @@ public void queryAllRecordsDefaultSettings_withSelect_count() { Iterator> results = docMappedtable.query(b -> b .queryConditional(keyEqualTo(k -> k.partitionValue("id-value"))) - .select(Select.COUNT) + .select("COUNT") ).iterator();