diff --git a/.brazil.json b/.brazil.json
index ca68c3d1a48a..f5e231e1727f 100644
--- a/.brazil.json
+++ b/.brazil.json
@@ -319,7 +319,7 @@
"skipImport": true
},
"dynamodb-mapper": {
- "packageName": "AwsJavaSdk-DynamoDbMapper"
+ "skipImport": true
}
},
"dependencies": {
diff --git a/services-custom/dynamodb-mapper/pom.xml b/services-custom/dynamodb-mapper/pom.xml
index 43271ff9bbb3..25818329c041 100644
--- a/services-custom/dynamodb-mapper/pom.xml
+++ b/services-custom/dynamodb-mapper/pom.xml
@@ -41,35 +41,16 @@
org.apache.maven.pluginsmaven-compiler-plugin
-
+
software/amazon/awssdk/mapper/dynamodb/ConfigureS3LinksTest.javasoftware/amazon/awssdk/mapper/dynamodb/DynamoDBS3IntegrationTest.javasoftware/amazon/awssdk/mapper/dynamodb/DynamoDBS3IntegrationTestBase.java
- software/amazon/awssdk/mapper/dynamodb/GenerateDeleteTableRequestTest.java
- software/amazon/awssdk/mapper/dynamodb/GsiAlwaysUpdateTest.java
- software/amazon/awssdk/mapper/dynamodb/LocalDynamoDB.java
- software/amazon/awssdk/mapper/dynamodb/LocalDynamoDBTestBase.javasoftware/amazon/awssdk/mapper/dynamodb/S3ClientCacheIntegrationTest.javasoftware/amazon/awssdk/mapper/dynamodb/S3LinkIDTest.javasoftware/amazon/awssdk/mapper/dynamodb/S3LinkTest.java
- software/amazon/awssdk/mapper/dynamodb/BatchLoadTest.java
- software/amazon/awssdk/mapper/dynamodb/mapper/BatchWriteTest.java
-
- software/amazon/awssdk/mapper/dynamodb/JsonIntegrationTest.java
- software/amazon/awssdk/mapper/dynamodb/mapper/GenerateCreateTableRequest2Test.java
- software/amazon/awssdk/mapper/dynamodb/mapper/GenerateCreateTableRequestTest.java
- software/amazon/awssdk/mapper/dynamodb/mapper/HashKeyOnlyTableWithGSITest.java
- software/amazon/awssdk/mapper/dynamodb/mapper/MapperLoadingStrategyConfigTest.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/DynamoDBTableResource.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/ResourceCentricBlockJUnit4ClassRunner.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/TestResourceUtils.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/tables/BasicTempTable.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/tables/TempTableWithBinaryKey.java
- software/amazon/awssdk/mapper/dynamodb/test/resources/tables/TempTableWithSecondaryIndexes.java
@@ -126,11 +107,6 @@
dynamodb${awsjavasdk.version}
-
- com.amazonaws
- aws-java-sdk-dynamodb
- ${sdk-v1.version}
- com.amazonawsaws-java-sdk-s3
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/AbstractDynamoDBMapper.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/AbstractDynamoDBMapper.java
index a47ca74fcd51..642794209711 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/AbstractDynamoDBMapper.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/AbstractDynamoDBMapper.java
@@ -16,8 +16,8 @@
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper.FailedBatch;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
-import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
-import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest;
import com.amazonaws.services.s3.model.Region;
import java.util.Arrays;
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapper.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapper.java
index e337b22a9da1..6d6ecab9f821 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapper.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapper.java
@@ -24,7 +24,7 @@
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapperConfig.ConsistentReads;
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapperConfig.SaveBehavior;
import software.amazon.awssdk.services.dynamodb.model.AttributeAction;
-import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
+import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.AttributeValueUpdate;
import software.amazon.awssdk.services.dynamodb.model.BatchGetItemRequest;
@@ -35,18 +35,20 @@
import software.amazon.awssdk.services.dynamodb.model.ConditionCheck;
import software.amazon.awssdk.services.dynamodb.model.ConditionalCheckFailedException;
import software.amazon.awssdk.services.dynamodb.model.ConditionalOperator;
-import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest;
import software.amazon.awssdk.services.dynamodb.model.Delete;
import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest;
import software.amazon.awssdk.services.dynamodb.model.DeleteRequest;
-import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest;
import software.amazon.awssdk.services.dynamodb.model.ExpectedAttributeValue;
import software.amazon.awssdk.services.dynamodb.model.Get;
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
import software.amazon.awssdk.services.dynamodb.model.GetItemResponse;
+import software.amazon.awssdk.services.dynamodb.model.GlobalSecondaryIndex;
import software.amazon.awssdk.services.dynamodb.model.ItemResponse;
-import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
+import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement;
import software.amazon.awssdk.services.dynamodb.model.KeysAndAttributes;
+import software.amazon.awssdk.services.dynamodb.model.LocalSecondaryIndex;
import software.amazon.awssdk.services.dynamodb.model.Put;
import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
import software.amazon.awssdk.services.dynamodb.model.PutItemResponse;
@@ -55,7 +57,7 @@
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure;
-import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;
+import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType;
import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
import software.amazon.awssdk.services.dynamodb.model.ScanResponse;
import software.amazon.awssdk.services.dynamodb.model.Select;
@@ -2255,31 +2257,44 @@ public CreateTableRequest generateCreateTableRequest(Class clazz, DynamoD
config = mergeConfig(config);
final DynamoDBMapperTableModel model = getTableModel(clazz, config);
- final CreateTableRequest request = new CreateTableRequest();
- request.setTableName(getTableName(clazz, config));
- request.withKeySchema(new KeySchemaElement(model.hashKey().name(), com.amazonaws.services.dynamodbv2.model.KeyType.HASH));
+ final List keySchema = new ArrayList();
+ keySchema.add(KeySchemaElement.builder().attributeName(model.hashKey().name()).keyType(HASH).build());
if (model.rangeKeyIfExists() != null) {
- request.withKeySchema(new KeySchemaElement(model.rangeKey().name(), com.amazonaws.services.dynamodbv2.model.KeyType.RANGE));
+ keySchema.add(KeySchemaElement.builder().attributeName(model.rangeKey().name()).keyType(RANGE).build());
}
- request.setGlobalSecondaryIndexes(model.globalSecondaryIndexes());
- request.setLocalSecondaryIndexes(model.localSecondaryIndexes());
+
+ final List attributeDefinitions = new ArrayList();
for (final DynamoDBMapperFieldModel field : model.fields()) {
if (field.keyType() != null || field.indexed()) {
- request.withAttributeDefinitions(new AttributeDefinition()
- .withAttributeType(ScalarAttributeType.valueOf(field.attributeType().name()))
- .withAttributeName(field.name())
- );
+ attributeDefinitions.add(AttributeDefinition.builder()
+ .attributeType(ScalarAttributeType.valueOf(field.attributeType().name()))
+ .attributeName(field.name())
+ .build());
}
}
- return request;
+
+ final CreateTableRequest.Builder request = CreateTableRequest.builder()
+ .tableName(getTableName(clazz, config))
+ .keySchema(keySchema)
+ .attributeDefinitions(attributeDefinitions);
+ // globalSecondaryIndexes()/localSecondaryIndexes() rebuild their collections on every call and
+ // return null (not empty) when the class declares none, so read once and guard on null to keep
+ // the v1 behavior of leaving the field unset.
+ final Collection globalSecondaryIndexes = model.globalSecondaryIndexes();
+ if (globalSecondaryIndexes != null) {
+ request.globalSecondaryIndexes(globalSecondaryIndexes);
+ }
+ final Collection localSecondaryIndexes = model.localSecondaryIndexes();
+ if (localSecondaryIndexes != null) {
+ request.localSecondaryIndexes(localSecondaryIndexes);
+ }
+ return request.build();
}
@Override
public DeleteTableRequest generateDeleteTableRequest(Class clazz, DynamoDBMapperConfig config) {
config = mergeConfig(config);
- DeleteTableRequest deleteTableRequest = new DeleteTableRequest();
- deleteTableRequest.setTableName(getTableName(clazz, config));
- return deleteTableRequest;
+ return DeleteTableRequest.builder().tableName(getTableName(clazz, config)).build();
}
/**
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapperTableModel.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapperTableModel.java
index b6e90f79b9d3..1357ee1b6e27 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapperTableModel.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBMapperTableModel.java
@@ -16,18 +16,18 @@
import static software.amazon.awssdk.services.dynamodb.model.KeyType.HASH;
import static software.amazon.awssdk.services.dynamodb.model.KeyType.RANGE;
-import static com.amazonaws.services.dynamodbv2.model.ProjectionType.KEYS_ONLY;
+import static software.amazon.awssdk.services.dynamodb.model.ProjectionType.KEYS_ONLY;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.KeyType;
-import com.amazonaws.services.dynamodbv2.model.GlobalSecondaryIndex;
-import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
-import com.amazonaws.services.dynamodbv2.model.LocalSecondaryIndex;
-import com.amazonaws.services.dynamodbv2.model.Projection;
-import com.amazonaws.services.dynamodbv2.model.ProjectionType;
+import software.amazon.awssdk.services.dynamodb.model.GlobalSecondaryIndex;
+import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement;
+import software.amazon.awssdk.services.dynamodb.model.LocalSecondaryIndex;
+import software.amazon.awssdk.services.dynamodb.model.Projection;
import java.util.Arrays;
import java.util.ArrayList;
+import java.util.List;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumMap;
@@ -190,12 +190,15 @@ public GlobalSecondaryIndex globalSecondaryIndex(final String indexName) {
return null;
}
final GlobalSecondaryIndex gsi = globalSecondaryIndexes.get(indexName);
- final GlobalSecondaryIndex copy = new GlobalSecondaryIndex().withIndexName(gsi.getIndexName());
- copy.withProjection(new Projection().withProjectionType(gsi.getProjection().getProjectionType()));
- for (final KeySchemaElement key : gsi.getKeySchema()) {
- copy.withKeySchema(new KeySchemaElement(key.getAttributeName(), key.getKeyType()));
+ final List keySchema = new ArrayList();
+ for (final KeySchemaElement key : gsi.keySchema()) {
+ keySchema.add(KeySchemaElement.builder().attributeName(key.attributeName()).keyType(key.keyType()).build());
}
- return copy;
+ return GlobalSecondaryIndex.builder()
+ .indexName(gsi.indexName())
+ .projection(Projection.builder().projectionType(gsi.projection().projectionType()).build())
+ .keySchema(keySchema)
+ .build();
}
/**
@@ -224,12 +227,15 @@ public LocalSecondaryIndex localSecondaryIndex(final String indexName) {
return null;
}
final LocalSecondaryIndex lsi = localSecondaryIndexes.get(indexName);
- final LocalSecondaryIndex copy = new LocalSecondaryIndex().withIndexName(lsi.getIndexName());
- copy.withProjection(new Projection().withProjectionType(lsi.getProjection().getProjectionType()));
- for (final KeySchemaElement key : lsi.getKeySchema()) {
- copy.withKeySchema(new KeySchemaElement(key.getAttributeName(), key.getKeyType()));
+ final List keySchema = new ArrayList();
+ for (final KeySchemaElement key : lsi.keySchema()) {
+ keySchema.add(KeySchemaElement.builder().attributeName(key.attributeName()).keyType(key.keyType()).build());
}
- return copy;
+ return LocalSecondaryIndex.builder()
+ .indexName(lsi.indexName())
+ .projection(Projection.builder().projectionType(lsi.projection().projectionType()).build())
+ .keySchema(keySchema)
+ .build();
}
/**
@@ -371,33 +377,42 @@ public Builder with(final DynamoDBMapperFieldModel field) {
}
public Map globalSecondaryIndexes() {
- final Map map = new LinkedHashMap();
+ // v2 index models are immutable, so stage each index's key schema and build once. The hash
+ // key is collected first and the range key (if any) appended in a second pass, matching v1.
+ final Map> keySchemasByIndex = new LinkedHashMap>();
for (final DynamoDBMapperFieldModel field : fields.values()) {
for (final String indexName : field.globalSecondaryIndexNames(HASH)) {
- final GlobalSecondaryIndex gsi = new GlobalSecondaryIndex().withIndexName(indexName);
- if (map.put(indexName, gsi) != null) {
+ final List keySchema = new ArrayList();
+ keySchema.add(KeySchemaElement.builder().attributeName(field.name()).keyType(KeyType.HASH).build());
+ if (keySchemasByIndex.put(indexName, keySchema) != null) {
throw new DynamoDBMappingException(
targetType.getSimpleName() + "[" + field.name() + "]; must not duplicate GSI " + indexName
);
}
- gsi.withProjection(new Projection().withProjectionType(KEYS_ONLY));
- gsi.withKeySchema(new KeySchemaElement(field.name(), com.amazonaws.services.dynamodbv2.model.KeyType.HASH));
}
}
for (final DynamoDBMapperFieldModel field : fields.values()) {
for (final String indexName : field.globalSecondaryIndexNames(RANGE)) {
- final GlobalSecondaryIndex gsi = map.get(indexName);
- if (gsi == null) {
+ final List keySchema = keySchemasByIndex.get(indexName);
+ if (keySchema == null) {
throw new DynamoDBMappingException(
targetType.getSimpleName() + "[" + field.name() + "]; no HASH key for GSI " + indexName
);
}
- gsi.withKeySchema(new KeySchemaElement(field.name(), com.amazonaws.services.dynamodbv2.model.KeyType.RANGE));
+ keySchema.add(KeySchemaElement.builder().attributeName(field.name()).keyType(KeyType.RANGE).build());
}
}
- if (map.isEmpty()) {
+ if (keySchemasByIndex.isEmpty()) {
return Collections.emptyMap();
}
+ final Map map = new LinkedHashMap();
+ for (final Map.Entry> entry : keySchemasByIndex.entrySet()) {
+ map.put(entry.getKey(), GlobalSecondaryIndex.builder()
+ .indexName(entry.getKey())
+ .projection(Projection.builder().projectionType(KEYS_ONLY).build())
+ .keySchema(entry.getValue())
+ .build());
+ }
return Collections.unmodifiableMap(map);
}
@@ -405,15 +420,18 @@ public Map localSecondaryIndexes() {
final Map map = new LinkedHashMap();
for (final DynamoDBMapperFieldModel field : fields.values()) {
for (final String indexName : field.localSecondaryIndexNames()) {
- final LocalSecondaryIndex lsi = new LocalSecondaryIndex().withIndexName(indexName);
+ final LocalSecondaryIndex lsi = LocalSecondaryIndex.builder()
+ .indexName(indexName)
+ .projection(Projection.builder().projectionType(KEYS_ONLY).build())
+ .keySchema(
+ KeySchemaElement.builder().attributeName(keys.get(HASH).name()).keyType(KeyType.HASH).build(),
+ KeySchemaElement.builder().attributeName(field.name()).keyType(KeyType.RANGE).build())
+ .build();
if (map.put(indexName, lsi) != null) {
throw new DynamoDBMappingException(
targetType.getSimpleName() + "[" + field.name() + "]; must not duplicate LSI " + indexName
);
}
- lsi.withProjection(new Projection().withProjectionType(KEYS_ONLY));
- lsi.withKeySchema(new KeySchemaElement(keys.get(HASH).name(), com.amazonaws.services.dynamodbv2.model.KeyType.HASH));
- lsi.withKeySchema(new KeySchemaElement(field.name(), com.amazonaws.services.dynamodbv2.model.KeyType.RANGE));
}
}
if (map.isEmpty()) {
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBTableMapper.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBTableMapper.java
index da273ac18d7a..16e33612bbf5 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBTableMapper.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBTableMapper.java
@@ -18,12 +18,16 @@
import software.amazon.awssdk.mapper.dynamodb.DynamoDBDeleteExpression;
import software.amazon.awssdk.mapper.dynamodb.DynamoDBSaveExpression;
import software.amazon.awssdk.services.dynamodb.model.ConditionalCheckFailedException;
+import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest;
import software.amazon.awssdk.services.dynamodb.model.ExpectedAttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.GlobalSecondaryIndex;
import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput;
import software.amazon.awssdk.services.dynamodb.model.ResourceInUseException;
import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException;
import software.amazon.awssdk.services.dynamodb.model.TableDescription;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -128,7 +132,7 @@
* @param The range key value type; use ? if no range key.
*
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient
*/
public final class DynamoDBTableMapper {
@@ -311,7 +315,7 @@ public void save(T object, DynamoDBSaveExpression saveExpression) {
* @throws ConditionalCheckFailedException If the object exists.
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper#save
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBSaveExpression
- * @see com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue
+ * @see software.amazon.awssdk.services.dynamodb.model.ExpectedAttributeValue
*/
public void saveIfNotExists(T object) throws ConditionalCheckFailedException {
final DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
@@ -329,7 +333,7 @@ public void saveIfNotExists(T object) throws ConditionalCheckFailedException {
* @throws ConditionalCheckFailedException If the object does not exist.
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper#save
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBSaveExpression
- * @see com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue
+ * @see software.amazon.awssdk.services.dynamodb.model.ExpectedAttributeValue
*/
public void saveIfExists(T object) throws ConditionalCheckFailedException {
final DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
@@ -367,7 +371,7 @@ public final void delete(final T object, final DynamoDBDeleteExpression deleteEx
* @throws ConditionalCheckFailedException If the object does not exist.
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper#delete
* @see software.amazon.awssdk.mapper.dynamodb.DynamoDBDeleteExpression
- * @see com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue
+ * @see software.amazon.awssdk.services.dynamodb.model.ExpectedAttributeValue
*/
public void deleteIfExists(T object) throws ConditionalCheckFailedException {
final DynamoDBDeleteExpression deleteExpression = new DynamoDBDeleteExpression();
@@ -462,10 +466,12 @@ public PaginatedParallelScanList parallelScan(DynamoDBScanExpression scanExpr
* table, when it was created, the primary key schema, and any indexes on
* the table.
* @return The describe table results.
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB#describeTable
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient#describeTable
*/
public TableDescription describeTable() {
- throw new UnsupportedOperationException("table admin not yet ported to v2");
+ return db.describeTable(DescribeTableRequest.builder()
+ .tableName(mapper.getTableName(model.targetType(), config))
+ .build()).table();
}
/**
@@ -473,11 +479,22 @@ public TableDescription describeTable() {
* throughput for all global secondary indexes.
* @param throughput The provisioned throughput.
* @return The table decription.
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB#createTable
- * @see com.amazonaws.services.dynamodbv2.model.CreateTableRequest
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient#createTable
+ * @see software.amazon.awssdk.services.dynamodb.model.CreateTableRequest
*/
public TableDescription createTable(ProvisionedThroughput throughput) {
- throw new UnsupportedOperationException("table admin not yet ported to v2");
+ // v1 mutated the generated request in place to stamp throughput onto the table and every GSI;
+ // v2 requests/indexes are immutable, so rebuild each GSI with the throughput and rebuild the request.
+ final CreateTableRequest generated = mapper.generateCreateTableRequest(model.targetType());
+ final CreateTableRequest.Builder request = generated.toBuilder().provisionedThroughput(throughput);
+ if (generated.hasGlobalSecondaryIndexes()) {
+ final List indexes = new ArrayList();
+ for (final GlobalSecondaryIndex gsi : generated.globalSecondaryIndexes()) {
+ indexes.add(gsi.toBuilder().provisionedThroughput(throughput).build());
+ }
+ request.globalSecondaryIndexes(indexes);
+ }
+ return db.createTable(request.build()).tableDescription();
}
/**
@@ -485,8 +502,8 @@ public TableDescription createTable(ProvisionedThroughput throughput) {
* ialready exists.
* @param throughput The provisioned throughput.
* @return True if created, or false if the table already existed.
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB#createTable
- * @see com.amazonaws.services.dynamodbv2.model.CreateTableRequest
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient#createTable
+ * @see software.amazon.awssdk.services.dynamodb.model.CreateTableRequest
*/
public boolean createTableIfNotExists(ProvisionedThroughput throughput) {
try {
@@ -503,19 +520,19 @@ public boolean createTableIfNotExists(ProvisionedThroughput throughput) {
/**
* Deletes the table.
* @return The table decription.
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB#deleteTable
- * @see com.amazonaws.services.dynamodbv2.model.DeleteTableRequest
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient#deleteTable
+ * @see software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest
*/
public TableDescription deleteTable() {
- throw new UnsupportedOperationException("table admin not yet ported to v2");
+ return db.deleteTable(mapper.generateDeleteTableRequest(model.targetType())).tableDescription();
}
/**
* Deletes the table and ignores the {@code ResourceNotFoundException} if
* it does not already exist.
* @return True if the table was deleted, or false if the table did not exist.
- * @see com.amazonaws.services.dynamodbv2.AmazonDynamoDB#deleteTable
- * @see com.amazonaws.services.dynamodbv2.model.DeleteTableRequest
+ * @see software.amazon.awssdk.services.dynamodb.DynamoDbClient#deleteTable
+ * @see software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest
*/
public boolean deleteTableIfExists() {
try {
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBVersionAttribute.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBVersionAttribute.java
index 1deb20b85bc5..899edd44f1ba 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBVersionAttribute.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/DynamoDBVersionAttribute.java
@@ -35,7 +35,7 @@
* matches the client's. New objects will be assigned a version of 1 when saved.
*
Note that for batchWrite, and by extension batchSave and batchDelete, no
* version checks are performed, as required by the
- * {@link com.amazonaws.services.dynamodbv2.AmazonDynamoDB#batchWriteItem(BatchWriteItemRequest)}
+ * {@link software.amazon.awssdk.services.dynamodb.DynamoDbClient#batchWriteItem(BatchWriteItemRequest)}
* API.
Note that for batchWrite, and by extension batchSave and batchDelete,
* no version checks are performed, as required by the
- * {@link com.amazonaws.services.dynamodbv2.AmazonDynamoDB#batchWriteItem(BatchWriteItemRequest)}
+ * {@link software.amazon.awssdk.services.dynamodb.DynamoDbClient#batchWriteItem(BatchWriteItemRequest)}
* API.
*
*
May be used as a meta-annotation.
diff --git a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/IDynamoDBMapper.java b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/IDynamoDBMapper.java
index dba27bf1f635..ad1424b78fca 100644
--- a/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/IDynamoDBMapper.java
+++ b/services-custom/dynamodb-mapper/src/main/java/software/amazon/awssdk/mapper/dynamodb/IDynamoDBMapper.java
@@ -14,13 +14,13 @@
*/
package software.amazon.awssdk.mapper.dynamodb;
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapper.FailedBatch;
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapperConfig.PaginationLoadingStrategy;
import software.amazon.awssdk.mapper.dynamodb.DynamoDBMapperConfig.SaveBehavior;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
-import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
-import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest;
+import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest;
import com.amazonaws.services.s3.model.Region;
import java.util.List;
@@ -159,8 +159,8 @@ public interface IDynamoDBMapper {
/**
* Saves an item in DynamoDB. The service method used is determined by the
* {@link DynamoDBMapperConfig#getSaveBehavior()} value, to use either
- * {@link AmazonDynamoDB#putItem} or
- * {@link AmazonDynamoDB#updateItem}:
+ * {@link DynamoDbClient#putItem} or
+ * {@link DynamoDbClient#updateItem}:
*
*
UPDATE (default) : UPDATE will not affect unmodeled attributes on a save operation
* and a null value for the modeled attribute will remove it from that item in DynamoDB. Because
@@ -217,7 +217,7 @@ public interface IDynamoDBMapper {
void delete(T object, DynamoDBDeleteExpression deleteExpression, DynamoDBMapperConfig config);
/**
- * Transactionally writes objects specified by transactionWriteRequest by calling {@link AmazonDynamoDB#transactWriteItems} API.
+ * Transactionally writes objects specified by transactionWriteRequest by calling {@link DynamoDbClient#transactWriteItems} API.
* Changes to objects which are put or updated are applied in-memory. Such in-memory updates are NOT thread safe.
*
* This method ignores any SaveBehavior set on the mapper. Whether an object is put or updated is solely determined by the
@@ -242,7 +242,7 @@ public interface IDynamoDBMapper {
void transactionWrite(TransactionWriteRequest transactionWriteRequest);
/**
- * Transactionally writes objects specified by transactionWriteRequest by calling {@link AmazonDynamoDB#transactWriteItems} API.
+ * Transactionally writes objects specified by transactionWriteRequest by calling {@link DynamoDbClient#transactWriteItems} API.
* Changes to objects which are put or updated are applied in-memory. Such in-memory updates are NOT thread safe.
*
* This method ignores any SaveBehavior set on the mapper. Whether an object is put or updated is solely determined by the
@@ -272,7 +272,7 @@ public interface IDynamoDBMapper {
void transactionWrite(TransactionWriteRequest transactionWriteRequest, DynamoDBMapperConfig config);
/**
- * Transactionally loads objects specified by transactionLoadRequest by calling {@link AmazonDynamoDB#transactGetItems} API.
+ * Transactionally loads objects specified by transactionLoadRequest by calling {@link DynamoDbClient#transactGetItems} API.
*
* Any exceptions from underlying API are thrown as is. For more information, please refer
* https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html
@@ -286,7 +286,7 @@ public interface IDynamoDBMapper {
List