Skip to content

Commit f1079a8

Browse files
authored
Allow string value for select for enhanced query request (#5869)
* Add builder for enhanced query request with String instead of Select enum * Remove unused imports * Added implementation for handling projection expression as string value. * Revert to first implementation of this feature. * Modified select() getter to allow backwards compatibility. Removed unnecessary conversion from selectAsString().
1 parent b6b1ad9 commit f1079a8

File tree

6 files changed

+26
-17
lines changed

6 files changed

+26
-17
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "Amazon DynamoDB Enhanced Client",
4+
"contributor": "",
5+
"description": "Use String instead of Select enum for ProjectionExpression to support future values"
6+
}

services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryIntegrationTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static org.hamcrest.CoreMatchers.notNullValue;
1919
import static org.hamcrest.MatcherAssert.assertThat;
2020
import static org.hamcrest.Matchers.equalTo;
21-
import static org.hamcrest.Matchers.greaterThan;
2221
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
2322
import static org.hamcrest.Matchers.is;
2423
import static org.hamcrest.Matchers.nullValue;
@@ -35,7 +34,6 @@
3534
import org.junit.BeforeClass;
3635
import org.junit.Test;
3736
import software.amazon.awssdk.enhanced.dynamodb.model.Page;
38-
import software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional;
3937
import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest;
4038
import software.amazon.awssdk.enhanced.dynamodb.model.Record;
4139
import software.amazon.awssdk.enhanced.dynamodb.model.ScanEnhancedRequest;

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java

+16-5
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public final class QueryEnhancedRequest {
5353
private final QueryConditional queryConditional;
5454
private final Map<String, AttributeValue> exclusiveStartKey;
5555
private final Boolean scanIndexForward;
56-
private final Select select;
56+
private final String select;
5757
private final Integer limit;
5858
private final Boolean consistentRead;
5959
private final Expression filterExpression;
@@ -119,19 +119,19 @@ public Boolean scanIndexForward() {
119119
}
120120

121121
/**
122-
* Returns the value of select, or null if it doesn't exist.
122+
* Returns the value of select as Enum, or null if it doesn't exist.
123123
* @return
124124
*/
125125
public Select select() {
126-
return select;
126+
return Select.fromValue(this.select);
127127
}
128128

129129
/**
130130
* Returns the value of select as a string, or null if it doesn't exist.
131131
* @return
132132
*/
133133
public String selectAsString() {
134-
return String.valueOf(select);
134+
return select;
135135
}
136136

137137
/**
@@ -266,7 +266,7 @@ public static final class Builder {
266266
private QueryConditional queryConditional;
267267
private Map<String, AttributeValue> exclusiveStartKey;
268268
private Boolean scanIndexForward;
269-
private Select select;
269+
private String select;
270270
private Integer limit;
271271
private Boolean consistentRead;
272272
private Expression filterExpression;
@@ -307,6 +307,17 @@ public Builder scanIndexForward(Boolean scanIndexForward) {
307307
* @return a builder of this type
308308
*/
309309
public Builder select(Select select) {
310+
this.select = select == null ? null : select.toString();
311+
return this;
312+
}
313+
314+
/**
315+
* Determines the attributes to be returned in the result. See {@link Select} string values for examples and constraints.
316+
* By default, all attributes are returned.
317+
* @param select
318+
* @return a builder of this type
319+
*/
320+
public Builder select(String select) {
310321
this.select = select;
311322
return this;
312323
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicQueryTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ public void queryAllRecordsDefaultSettings_withSelect_specificAttributes() {
584584
mappedTable.query(b -> b
585585
.queryConditional(keyEqualTo(k -> k.partitionValue("id-value")))
586586
.attributesToProject("value")
587-
.select(Select.SPECIFIC_ATTRIBUTES)
587+
.select("SPECIFIC_ATTRIBUTES")
588588
).iterator();
589589

590590
assertThat(results.hasNext(), is(true));
@@ -606,7 +606,7 @@ public void queryAllRecordsDefaultSettings_withSelect_allAttributes() {
606606
Iterator<Page<Record>> results =
607607
mappedTable.query(b -> b
608608
.queryConditional(keyEqualTo(k -> k.partitionValue("id-value")))
609-
.select(Select.ALL_ATTRIBUTES)
609+
.select("ALL_ATTRIBUTES")
610610
).iterator();
611611

612612
assertThat(results.hasNext(), is(true));

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/BasicScanTest.java

-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import software.amazon.awssdk.enhanced.dynamodb.Expression;
4646
import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName;
4747
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
48-
import software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocument;
4948
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.InnerAttributeRecord;
5049
import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.NestedTestRecord;
5150
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema;

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/document/BasicQueryTest.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
4949
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
5050
import software.amazon.awssdk.enhanced.dynamodb.Expression;
51-
import software.amazon.awssdk.enhanced.dynamodb.JsonTestUtils;
5251
import software.amazon.awssdk.enhanced.dynamodb.Key;
5352
import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName;
5453
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
@@ -61,14 +60,10 @@
6160
import software.amazon.awssdk.enhanced.dynamodb.model.Page;
6261
import software.amazon.awssdk.enhanced.dynamodb.model.PageIterable;
6362
import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest;
64-
import software.amazon.awssdk.protocols.jsoncore.JsonNode;
65-
import software.amazon.awssdk.protocols.jsoncore.JsonNodeParser;
6663
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
6764
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
6865
import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest;
6966
import software.amazon.awssdk.services.dynamodb.model.Select;
70-
import software.amazon.awssdk.thirdparty.jackson.core.JsonParser;
71-
import software.amazon.awssdk.thirdparty.jackson.core.JsonToken;
7267

7368
public class BasicQueryTest extends LocalDynamoDbSyncTestBase {
7469
private DynamoDbClient lowLevelClient;
@@ -252,7 +247,7 @@ public void queryAllRecordsDefaultSettings_withSelect_specificAttributes() {
252247
Iterator<Page<EnhancedDocument>> results =
253248
docMappedtable.query(b -> b
254249
.queryConditional(keyEqualTo(k -> k.partitionValue("id-value")))
255-
.select(Select.SPECIFIC_ATTRIBUTES)
250+
.select("SPECIFIC_ATTRIBUTES")
256251
.attributesToProject("value")
257252
).iterator();
258253

@@ -293,7 +288,7 @@ public void queryAllRecordsDefaultSettings_withSelect_count() {
293288
Iterator<Page<EnhancedDocument>> results =
294289
docMappedtable.query(b -> b
295290
.queryConditional(keyEqualTo(k -> k.partitionValue("id-value")))
296-
.select(Select.COUNT)
291+
.select("COUNT")
297292
).iterator();
298293

299294

0 commit comments

Comments
 (0)