// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 /** * Before running this C++ code example, set up your development environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started.html * * For information on the structure of the code examples and how to build and run the examples, see * https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started-code-examples.html. * **/ // snippet-start:[dynamodb.cpp.update_item.inc] #include #include #include #include #include // snippet-end:[dynamodb.cpp.update_item.inc] #include "dynamodb_samples.h" // snippet-start:[dynamodb.cpp.update_item.code] //! Update an Amazon DynamoDB table item. /*! \sa updateItem() \param tableName: The table name. \param partitionKey: The partition key. \param partitionValue: The value for the partition key. \param attributeKey: The key for the attribute to be updated. \param attributeValue: The value for the attribute to be updated. \param clientConfiguration: AWS client configuration. \return bool: Function succeeded. */ /* * The example code only sets/updates an attribute value. It processes * the attribute value as a string, even if the value could be interpreted * as a number. Also, the example code does not remove an existing attribute * from the key value. */ bool AwsDoc::DynamoDB::updateItem(const Aws::String &tableName, const Aws::String &partitionKey, const Aws::String &partitionValue, const Aws::String &attributeKey, const Aws::String &attributeValue, const Aws::Client::ClientConfiguration &clientConfiguration) { Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration); // *** Define UpdateItem request arguments. // Define TableName argument. Aws::DynamoDB::Model::UpdateItemRequest request; request.SetTableName(tableName); // Define KeyName argument. Aws::DynamoDB::Model::AttributeValue attribValue; attribValue.SetS(partitionValue); request.AddKey(partitionKey, attribValue); // Construct the SET update expression argument. Aws::String update_expression("SET #a = :valueA"); request.SetUpdateExpression(update_expression); // Construct attribute name argument. Aws::Map expressionAttributeNames; expressionAttributeNames["#a"] = attributeKey; request.SetExpressionAttributeNames(expressionAttributeNames); // Construct attribute value argument. Aws::DynamoDB::Model::AttributeValue attributeUpdatedValue; attributeUpdatedValue.SetS(attributeValue); Aws::Map expressionAttributeValues; expressionAttributeValues[":valueA"] = attributeUpdatedValue; request.SetExpressionAttributeValues(expressionAttributeValues); // Update the item. const Aws::DynamoDB::Model::UpdateItemOutcome &outcome = dynamoClient.UpdateItem( request); if (outcome.IsSuccess()) { std::cout << "Item was updated" << std::endl; } else { std::cerr << outcome.GetError().GetMessage() << std::endl; return false; } return waitTableActive(tableName, dynamoClient); } // snippet-end:[dynamodb.cpp.update_item.code] /* * main function * * Usage: 'run_update_item * ' * * Prerequisites: Create a pre-populated DynamoDB table. * * For instructions on populating a table with sample data, see * https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.html. * */ #ifndef TESTING_BUILD int main(int argc, char **argv) { if (argc < 6) { std::cout << R"( Usage: run_update_item Where: table_name - Name of the table to put the item in. partition_key - The partition key. partition_value - The value of the partition key. attribute_key - The attribute key. attribute_value - The attribute value. )"; return 1; } Aws::SDKOptions options; Aws::InitAPI(options); { const Aws::String tableName(argv[1]); const Aws::String partitionKey(argv[2]); const Aws::String partitionValue(argv[3]); const Aws::String attributeKey(argv[4]); const Aws::String attributeValue(argv[5]); Aws::Client::ClientConfiguration clientConfig; // Optional: Set to the AWS Region (overrides config file). // clientConfig.region = "us-east-1"; AwsDoc::DynamoDB::updateItem(tableName, partitionKey, partitionValue, attributeKey, attributeValue, clientConfig); } Aws::ShutdownAPI(options); return 0; } #endif // TESTING_BUILD