Skip to content

Commit 9bde83e

Browse files
committed
Revert to first implementation of this feature.
1 parent a7e960e commit 9bde83e

File tree

10 files changed

+20
-206
lines changed

10 files changed

+20
-206
lines changed

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

-52
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;
@@ -182,56 +180,6 @@ public void query_withReturnConsumedCapacityAndDifferentReadConsistency_checksCo
182180
assertThat(strongConsumedCapacity.capacityUnits(), is(greaterThanOrEqualTo(eventualConsumedCapacity.capacityUnits())));
183181
}
184182

185-
@Test
186-
public void query_withStringProjectionExpression_checksProjectedAttributes() {
187-
insertRecords();
188-
189-
String projectionExpression = "id, sort";
190-
Iterator<Page<Record>> results =
191-
mappedTable.query(QueryEnhancedRequest.builder()
192-
.queryConditional(sortBetween(k -> k.partitionValue("id-value").sortValue(2),
193-
k -> k.partitionValue("id-value").sortValue(6)))
194-
.returnStringProjectionExpression(projectionExpression)
195-
.limit(3)
196-
.build())
197-
.iterator();
198-
199-
Page<Record> page1 = results.next();
200-
assertThat(results.hasNext(), is(true));
201-
Page<Record> page2 = results.next();
202-
assertThat(results.hasNext(), is(false));
203-
204-
assertThat(page1.items().get(0).getId(), is(notNullValue()));
205-
assertThat(page1.items().get(0).getSort(), is(notNullValue()));
206-
207-
assertThat(page2.items().get(0).getId(), is(notNullValue()));
208-
assertThat(page2.items().get(0).getSort(), is(notNullValue()));
209-
}
210-
211-
@Test
212-
public void scan_withStringProjectionExpression_checksProjectedAttributes() {
213-
insertRecords();
214-
215-
String projectionExpression = "id, sort";
216-
Iterator<Page<Record>> results =
217-
mappedTable.scan(ScanEnhancedRequest.builder()
218-
.returnStringProjectionExpression(projectionExpression)
219-
.limit(5)
220-
.build())
221-
.iterator();
222-
223-
Page<Record> page1 = results.next();
224-
assertThat(results.hasNext(), is(true));
225-
Page<Record> page2 = results.next();
226-
assertThat(results.hasNext(), is(false));
227-
228-
assertThat(page1.items().get(0).getId(), is(notNullValue()));
229-
assertThat(page1.items().get(0).getSort(), is(notNullValue()));
230-
231-
assertThat(page2.items().get(0).getId(), is(notNullValue()));
232-
assertThat(page2.items().get(0).getSort(), is(notNullValue()));
233-
}
234-
235183
private Map<String, AttributeValue> getKeyMap(int sort) {
236184
Map<String, AttributeValue> result = new HashMap<>();
237185
result.put("id", stringValue(RECORDS.get(sort).getId()));

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperation.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ public QueryRequest generateRequest(TableSchema<T> tableSchema,
6767
expressionNames = Expression.joinNames(expressionNames, this.request.filterExpression().expressionNames());
6868
}
6969

70-
String projectionExpressionAsString = this.request.stringProjectionExpression();
71-
if (projectionExpressionAsString == null && this.request.attributesToProject() != null) {
70+
String projectionExpressionAsString = null;
71+
if (this.request.attributesToProject() != null) {
7272
ProjectionExpression attributesToProject = ProjectionExpression.create(this.request.nestedAttributesToProject());
7373
projectionExpressionAsString = attributesToProject.projectionExpressionAsString().orElse(null);
7474
expressionNames = Expression.joinNames(expressionNames, attributesToProject.expressionAttributeNames());

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

+14-29
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,12 @@ 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;
6060
private final List<NestedAttributeName> attributesToProject;
6161
private final String returnConsumedCapacity;
62-
private final String stringProjectionExpression;
6362

6463
private QueryEnhancedRequest(Builder builder) {
6564
this.queryConditional = builder.queryConditional;
@@ -70,7 +69,6 @@ private QueryEnhancedRequest(Builder builder) {
7069
this.consistentRead = builder.consistentRead;
7170
this.filterExpression = builder.filterExpression;
7271
this.returnConsumedCapacity = builder.returnConsumedCapacity;
73-
this.stringProjectionExpression = builder.stringProjectionExpression;
7472
this.attributesToProject = builder.attributesToProject != null
7573
? Collections.unmodifiableList(builder.attributesToProject)
7674
: null;
@@ -124,7 +122,7 @@ public Boolean scanIndexForward() {
124122
* Returns the value of select, or null if it doesn't exist.
125123
* @return
126124
*/
127-
public Select select() {
125+
public String select() {
128126
return select;
129127
}
130128

@@ -178,13 +176,6 @@ public List<NestedAttributeName> nestedAttributesToProject() {
178176
return attributesToProject;
179177
}
180178

181-
/**
182-
* Returns the String projection expression for the query operation.
183-
*/
184-
public String stringProjectionExpression() {
185-
return stringProjectionExpression;
186-
}
187-
188179

189180
/**
190181
* Whether to return the capacity consumed by this operation.
@@ -248,10 +239,6 @@ public boolean equals(Object o) {
248239
? !returnConsumedCapacity.equals(query.returnConsumedCapacity) : query.returnConsumedCapacity != null) {
249240
return false;
250241
}
251-
if (stringProjectionExpression != null
252-
? !stringProjectionExpression.equals(query.stringProjectionExpression) : query.stringProjectionExpression != null) {
253-
return false;
254-
}
255242
return filterExpression != null ? filterExpression.equals(query.filterExpression) : query.filterExpression == null;
256243
}
257244

@@ -266,7 +253,6 @@ public int hashCode() {
266253
result = 31 * result + (filterExpression != null ? filterExpression.hashCode() : 0);
267254
result = 31 * result + (attributesToProject != null ? attributesToProject.hashCode() : 0);
268255
result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0);
269-
result = 31 * result + (stringProjectionExpression != null ? stringProjectionExpression.hashCode() : 0);
270256
return result;
271257
}
272258

@@ -280,13 +266,12 @@ public static final class Builder {
280266
private QueryConditional queryConditional;
281267
private Map<String, AttributeValue> exclusiveStartKey;
282268
private Boolean scanIndexForward;
283-
private Select select;
269+
private String select;
284270
private Integer limit;
285271
private Boolean consistentRead;
286272
private Expression filterExpression;
287273
private List<NestedAttributeName> attributesToProject;
288274
private String returnConsumedCapacity;
289-
private String stringProjectionExpression;
290275

291276
private Builder() {
292277
}
@@ -322,6 +307,17 @@ public Builder scanIndexForward(Boolean scanIndexForward) {
322307
* @return a builder of this type
323308
*/
324309
public Builder select(Select select) {
310+
this.select = 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) {
325321
this.select = select;
326322
return this;
327323
}
@@ -529,17 +525,6 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) {
529525
return this;
530526
}
531527

532-
/**
533-
* Sets the projection expression for the query operation.
534-
*
535-
* @param stringProjectionExpression the projection expression as a string
536-
* @return a builder of this type
537-
*/
538-
public Builder returnStringProjectionExpression(String stringProjectionExpression) {
539-
this.stringProjectionExpression = stringProjectionExpression;
540-
return this;
541-
}
542-
543528
public QueryEnhancedRequest build() {
544529
return new QueryEnhancedRequest(this);
545530
}

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

-13
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ public final class ScanEnhancedRequest {
5454
private final Integer segment;
5555
private final Integer totalSegments;
5656
private final String returnConsumedCapacity;
57-
private String stringProjectionExpression;
5857

5958
private ScanEnhancedRequest(Builder builder) {
6059
this.exclusiveStartKey = builder.exclusiveStartKey;
@@ -246,7 +245,6 @@ public int hashCode() {
246245
result = 31 * result + (select != null ? select.hashCode() : 0);
247246
result = 31 * result + (attributesToProject != null ? attributesToProject.hashCode() : 0);
248247
result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0);
249-
result = 31 * result + (stringProjectionExpression != null ? stringProjectionExpression.hashCode() : 0);
250248
return result;
251249
}
252250

@@ -264,7 +262,6 @@ public static final class Builder {
264262
private Integer segment;
265263
private Integer totalSegments;
266264
private String returnConsumedCapacity;
267-
private String stringProjectionExpression;
268265

269266
private Builder() {
270267
}
@@ -523,16 +520,6 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) {
523520
return this;
524521
}
525522

526-
/**
527-
* Whether to return the stringProjectionExpression for this operation.
528-
* @param stringProjectionExpression
529-
* @return a builder of this type
530-
*/
531-
public Builder returnStringProjectionExpression(String stringProjectionExpression) {
532-
this.stringProjectionExpression = stringProjectionExpression;
533-
return this;
534-
}
535-
536523
public ScanEnhancedRequest build() {
537524
return new ScanEnhancedRequest(this);
538525
}

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

-23
Original file line numberDiff line numberDiff line change
@@ -295,27 +295,4 @@ public void queryExclusiveStartKey() {
295295
assertThat(page.items(), is(KEYS_ONLY_RECORDS.subList(8, 10)));
296296
assertThat(page.lastEvaluatedKey(), is(nullValue()));
297297
}
298-
299-
@Test
300-
public void queryWithStringProjectionExpression() {
301-
insertRecords();
302-
303-
String projectionExpression = "id, sort";
304-
QueryEnhancedRequest request = QueryEnhancedRequest.builder()
305-
.queryConditional(keyEqualTo(k -> k.partitionValue("gsi-id-value")))
306-
.returnStringProjectionExpression(projectionExpression)
307-
.build();
308-
309-
SdkPublisher<Page<Record>> publisher = keysOnlyMappedIndex.query(request);
310-
311-
List<Page<Record>> results = drainPublisher(publisher, 1);
312-
Page<Record> page = results.get(0);
313-
314-
assertThat(page.items().size(), is(KEYS_ONLY_RECORDS.size()));
315-
316-
Record firstRecord = page.items().get(0);
317-
assertThat(firstRecord.getId(), is("id-value"));
318-
assertThat(firstRecord.getSort(), is(0));
319-
assertThat(firstRecord.getValue(), is(nullValue())); // Ensure non-projected attributes are not present
320-
}
321298
}

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

-23
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;
@@ -741,26 +740,4 @@ public void scanAllRecordsWithSelect_Count() {
741740

742741
assertThat(page.items().size(), is(0));
743742
}
744-
745-
@Test
746-
public void scanWithStringProjectionExpression() {
747-
insertRecords();
748-
749-
String projectionExpression = "id, sort";
750-
ScanEnhancedRequest request = ScanEnhancedRequest.builder()
751-
.returnStringProjectionExpression(projectionExpression)
752-
.build();
753-
754-
Iterator<Page<Record>> results = mappedTable.scan(request).iterator();
755-
756-
assertThat(results.hasNext(), is(true));
757-
Page<Record> page = results.next();
758-
assertThat(results.hasNext(), is(false));
759-
760-
assertThat(page.items().size(), is(RECORDS.size()));
761-
762-
Record firstRecord = page.items().get(0);
763-
assertThat(firstRecord.getId(), is("id-value"));
764-
assertThat(firstRecord.getSort(), is(0));
765-
}
766743
}

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

+2-30
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

@@ -676,27 +671,4 @@ public void queryAllRecordsDefaultSettings_withNestedProjectionNameEmptyNameMap(
676671

677672
});
678673
}
679-
680-
@Test
681-
public void queryWithStringProjectionExpression() {
682-
insertDocuments();
683-
684-
String projectionExpression = "id, sort";
685-
QueryEnhancedRequest request = QueryEnhancedRequest.builder()
686-
.queryConditional(keyEqualTo(k -> k.partitionValue("id-value")))
687-
.returnStringProjectionExpression(projectionExpression)
688-
.build();
689-
690-
Iterator<Page<EnhancedDocument>> results = docMappedtable.query(request).iterator();
691-
692-
assertThat(results.hasNext(), is(true));
693-
Page<EnhancedDocument> page = results.next();
694-
assertThat(results.hasNext(), is(false));
695-
696-
assertThat(page.items().size(), is(DOCUMENTS.size()));
697-
698-
EnhancedDocument firstRecord = page.items().get(0);
699-
assertThat(firstRecord.getString("id"), is("id-value"));
700-
assertThat(firstRecord.getNumber("sort").intValue(), is(0));
701-
}
702674
}

0 commit comments

Comments
 (0)