/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include #include namespace Aws { namespace SimpleDB { /** * Amazon SimpleDB is a web service providing the core database functions of data * indexing and querying in the cloud. By offloading the time and effort associated * with building and operating a web-scale database, SimpleDB provides developers * the freedom to focus on application development.

A traditional, clustered * relational database requires a sizable upfront capital outlay, is complex to * design, and often requires extensive and repetitive database administration. * Amazon SimpleDB is dramatically simpler, requiring no schema, automatically * indexing your data and providing a simple API for storage and access. This * approach eliminates the administrative burden of data modeling, index * maintenance, and performance tuning. Developers gain access to this * functionality within Amazon's proven computing environment, are able to scale * instantly, and pay only for what they use.

Visit http://aws.amazon.com/simpledb/ for * more information.

*/ class AWS_SIMPLEDB_API SimpleDBClient : public Aws::Client::AWSXMLClient, public Aws::Client::ClientWithAsyncTemplateMethods { public: typedef Aws::Client::AWSXMLClient BASECLASS; static const char* SERVICE_NAME; static const char* ALLOCATION_TAG; typedef SimpleDBClientConfiguration ClientConfigurationType; typedef SimpleDBEndpointProvider EndpointProviderType; /** * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SimpleDBClient(const Aws::SimpleDB::SimpleDBClientConfiguration& clientConfiguration = Aws::SimpleDB::SimpleDBClientConfiguration(), std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG)); /** * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SimpleDBClient(const Aws::Auth::AWSCredentials& credentials, std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG), const Aws::SimpleDB::SimpleDBClientConfiguration& clientConfiguration = Aws::SimpleDB::SimpleDBClientConfiguration()); /** * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied, * the default http client factory will be used */ SimpleDBClient(const std::shared_ptr& credentialsProvider, std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG), const Aws::SimpleDB::SimpleDBClientConfiguration& clientConfiguration = Aws::SimpleDB::SimpleDBClientConfiguration()); /* Legacy constructors due deprecation */ /** * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SimpleDBClient(const Aws::Client::ClientConfiguration& clientConfiguration); /** * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SimpleDBClient(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration); /** * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied, * the default http client factory will be used */ SimpleDBClient(const std::shared_ptr& credentialsProvider, const Aws::Client::ClientConfiguration& clientConfiguration); /* End of legacy constructors due deprecation */ virtual ~SimpleDBClient(); /** * Converts any request object to a presigned URL with the GET method, using region for the signer and a timeout of 15 minutes. */ Aws::String ConvertRequestToPresignedUrl(const Aws::AmazonSerializableWebServiceRequest& requestToConvert, const char* region) const; /** *

Performs multiple DeleteAttributes operations in a single call, which * reduces round trips and latencies. This enables Amazon SimpleDB to optimize * requests, which generally yields better throughput.

The following * limitations are enforced for this operation:

  • 1 MB request size
  • *
  • 25 item limit per BatchDeleteAttributes operation

See * Also:

AWS * API Reference

*/ virtual Model::BatchDeleteAttributesOutcome BatchDeleteAttributes(const Model::BatchDeleteAttributesRequest& request) const; /** * A Callable wrapper for BatchDeleteAttributes that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::BatchDeleteAttributesOutcomeCallable BatchDeleteAttributesCallable(const BatchDeleteAttributesRequestT& request) const { return SubmitCallable(&SimpleDBClient::BatchDeleteAttributes, request); } /** * An Async wrapper for BatchDeleteAttributes that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void BatchDeleteAttributesAsync(const BatchDeleteAttributesRequestT& request, const BatchDeleteAttributesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::BatchDeleteAttributes, request, handler, context); } /** *

The BatchPutAttributes operation creates or replaces attributes * within one or more items. By using this operation, the client can perform * multiple PutAttribute operation with a single call. This helps yield * savings in round trips and latencies, enabling Amazon SimpleDB to optimize * requests and generally produce better throughput.

The client may * specify the item name with the Item.X.ItemName parameter. The * client may specify new attributes using a combination of the * Item.X.Attribute.Y.Name and Item.X.Attribute.Y.Value * parameters. The client may specify the first attribute for the first item using * the parameters Item.0.Attribute.0.Name and * Item.0.Attribute.0.Value, and for the second attribute for the * first item by the parameters Item.0.Attribute.1.Name and * Item.0.Attribute.1.Value, and so on.

Attributes are * uniquely identified within an item by their name/value combination. For example, * a single item can have the attributes { "first_name", "first_value" * } and { "first_name", "second_value" }. However, it cannot * have two attribute instances where both the Item.X.Attribute.Y.Name * and Item.X.Attribute.Y.Value are the same.

Optionally, the * requester can supply the Replace parameter for each individual * value. Setting this value to true will cause the new attribute * values to replace the existing attribute values. For example, if an item * I has the attributes { 'a', '1' }, { 'b', '2'} and * { 'b', '3' } and the requester does a BatchPutAttributes of * {'I', 'b', '4' } with the Replace parameter set to true, the final * attributes of the item will be { 'a', '1' } and { 'b', '4' * }, replacing the previous values of the 'b' attribute with the new value. *

This operation is vulnerable to exceeding the maximum URL size * when making a REST request using the HTTP GET method. This operation does not * support conditions using Expected.X.Name, * Expected.X.Value, or Expected.X.Exists. *

You can execute multiple BatchPutAttributes operations and * other operations in parallel. However, large numbers of concurrent * BatchPutAttributes calls can result in Service Unavailable (503) * responses.

The following limitations are enforced for this operation: *

  • 256 attribute name-value pairs per item
  • 1 MB request size
  • *
  • 1 billion attributes per domain
  • 10 GB of total user data storage * per domain
  • 25 item limit per BatchPutAttributes * operation

See Also:

AWS * API Reference

*/ virtual Model::BatchPutAttributesOutcome BatchPutAttributes(const Model::BatchPutAttributesRequest& request) const; /** * A Callable wrapper for BatchPutAttributes that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::BatchPutAttributesOutcomeCallable BatchPutAttributesCallable(const BatchPutAttributesRequestT& request) const { return SubmitCallable(&SimpleDBClient::BatchPutAttributes, request); } /** * An Async wrapper for BatchPutAttributes that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void BatchPutAttributesAsync(const BatchPutAttributesRequestT& request, const BatchPutAttributesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::BatchPutAttributes, request, handler, context); } /** *

The CreateDomain operation creates a new domain. The domain * name should be unique among the domains associated with the Access Key ID * provided in the request. The CreateDomain operation may take 10 or * more seconds to complete.

The client can create up to 100 domains per * account.

If the client requires additional domains, go to * http://aws.amazon.com/contact-us/simpledb-limit-request/.

See * Also:

AWS * API Reference

*/ virtual Model::CreateDomainOutcome CreateDomain(const Model::CreateDomainRequest& request) const; /** * A Callable wrapper for CreateDomain that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::CreateDomainOutcomeCallable CreateDomainCallable(const CreateDomainRequestT& request) const { return SubmitCallable(&SimpleDBClient::CreateDomain, request); } /** * An Async wrapper for CreateDomain that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void CreateDomainAsync(const CreateDomainRequestT& request, const CreateDomainResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::CreateDomain, request, handler, context); } /** *

Deletes one or more attributes associated with an item. If all attributes of * the item are deleted, the item is deleted.

* DeleteAttributes is an idempotent operation; running it multiple * times on the same item or attribute does not result in an error response.

*

Because Amazon SimpleDB makes multiple copies of item data and uses an * eventual consistency update model, performing a GetAttributes or * Select operation (read) immediately after a DeleteAttributes * or PutAttributes operation (write) might not return updated item data. *

See Also:

AWS * API Reference

*/ virtual Model::DeleteAttributesOutcome DeleteAttributes(const Model::DeleteAttributesRequest& request) const; /** * A Callable wrapper for DeleteAttributes that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::DeleteAttributesOutcomeCallable DeleteAttributesCallable(const DeleteAttributesRequestT& request) const { return SubmitCallable(&SimpleDBClient::DeleteAttributes, request); } /** * An Async wrapper for DeleteAttributes that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void DeleteAttributesAsync(const DeleteAttributesRequestT& request, const DeleteAttributesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::DeleteAttributes, request, handler, context); } /** *

The DeleteDomain operation deletes a domain. Any items (and * their attributes) in the domain are deleted as well. The * DeleteDomain operation might take 10 or more seconds to complete. *

See Also:

AWS * API Reference

*/ virtual Model::DeleteDomainOutcome DeleteDomain(const Model::DeleteDomainRequest& request) const; /** * A Callable wrapper for DeleteDomain that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::DeleteDomainOutcomeCallable DeleteDomainCallable(const DeleteDomainRequestT& request) const { return SubmitCallable(&SimpleDBClient::DeleteDomain, request); } /** * An Async wrapper for DeleteDomain that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void DeleteDomainAsync(const DeleteDomainRequestT& request, const DeleteDomainResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::DeleteDomain, request, handler, context); } /** *

Returns information about the domain, including when the domain was created, * the number of items and attributes in the domain, and the size of the attribute * names and values.

See Also:

AWS * API Reference

*/ virtual Model::DomainMetadataOutcome DomainMetadata(const Model::DomainMetadataRequest& request) const; /** * A Callable wrapper for DomainMetadata that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::DomainMetadataOutcomeCallable DomainMetadataCallable(const DomainMetadataRequestT& request) const { return SubmitCallable(&SimpleDBClient::DomainMetadata, request); } /** * An Async wrapper for DomainMetadata that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void DomainMetadataAsync(const DomainMetadataRequestT& request, const DomainMetadataResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::DomainMetadata, request, handler, context); } /** *

Returns all of the attributes associated with the specified item. * Optionally, the attributes returned can be limited to one or more attributes by * specifying an attribute name parameter.

If the item does not exist on * the replica that was accessed for this operation, an empty set is returned. The * system does not return an error as it cannot guarantee the item does not exist * on other replicas.

See Also:

AWS * API Reference

*/ virtual Model::GetAttributesOutcome GetAttributes(const Model::GetAttributesRequest& request) const; /** * A Callable wrapper for GetAttributes that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::GetAttributesOutcomeCallable GetAttributesCallable(const GetAttributesRequestT& request) const { return SubmitCallable(&SimpleDBClient::GetAttributes, request); } /** * An Async wrapper for GetAttributes that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void GetAttributesAsync(const GetAttributesRequestT& request, const GetAttributesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::GetAttributes, request, handler, context); } /** *

The ListDomains operation lists all domains associated with the * Access Key ID. It returns domain names up to the limit set by MaxNumberOfDomains. A NextToken is returned if there are more than * MaxNumberOfDomains domains. Calling ListDomains * successive times with the NextToken provided by the operation * returns up to MaxNumberOfDomains more domain names with each * successive operation call.

See Also:

AWS API * Reference

*/ virtual Model::ListDomainsOutcome ListDomains(const Model::ListDomainsRequest& request) const; /** * A Callable wrapper for ListDomains that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::ListDomainsOutcomeCallable ListDomainsCallable(const ListDomainsRequestT& request) const { return SubmitCallable(&SimpleDBClient::ListDomains, request); } /** * An Async wrapper for ListDomains that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void ListDomainsAsync(const ListDomainsRequestT& request, const ListDomainsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::ListDomains, request, handler, context); } /** *

The PutAttributes operation creates or replaces attributes in an item. The * client may specify new attributes using a combination of the * Attribute.X.Name and Attribute.X.Value parameters. The * client specifies the first attribute by the parameters * Attribute.0.Name and Attribute.0.Value, the second * attribute by the parameters Attribute.1.Name and * Attribute.1.Value, and so on.

Attributes are uniquely * identified in an item by their name/value combination. For example, a single * item can have the attributes { "first_name", "first_value" } and * { "first_name", second_value" }. However, it cannot have two * attribute instances where both the Attribute.X.Name and * Attribute.X.Value are the same.

Optionally, the requestor * can supply the Replace parameter for each individual attribute. * Setting this value to true causes the new attribute value to * replace the existing attribute value(s). For example, if an item has the * attributes { 'a', '1' }, { 'b', '2'} and { 'b', * '3' } and the requestor calls PutAttributes using the * attributes { 'b', '4' } with the Replace parameter set * to true, the final attributes of the item are changed to { 'a', '1' * } and { 'b', '4' }, which replaces the previous values of * the 'b' attribute with the new value.

You cannot specify an empty * string as an attribute name.

Because Amazon SimpleDB makes multiple * copies of client data and uses an eventual consistency update model, an * immediate GetAttributes or Select operation (read) immediately * after a PutAttributes or DeleteAttributes operation (write) might * not return the updated data.

The following limitations are enforced for * this operation:

  • 256 total attribute name-value pairs per item
  • *
  • One billion attributes per domain
  • 10 GB of total user data storage * per domain

See Also:

AWS * API Reference

*/ virtual Model::PutAttributesOutcome PutAttributes(const Model::PutAttributesRequest& request) const; /** * A Callable wrapper for PutAttributes that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::PutAttributesOutcomeCallable PutAttributesCallable(const PutAttributesRequestT& request) const { return SubmitCallable(&SimpleDBClient::PutAttributes, request); } /** * An Async wrapper for PutAttributes that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void PutAttributesAsync(const PutAttributesRequestT& request, const PutAttributesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::PutAttributes, request, handler, context); } /** *

The Select operation returns a set of attributes for * ItemNames that match the select expression. Select is * similar to the standard SQL SELECT statement.

The total size of the * response cannot exceed 1 MB in total size. Amazon SimpleDB automatically adjusts * the number of items returned per page to enforce this limit. For example, if the * client asks to retrieve 2500 items, but each individual item is 10 kB in size, * the system returns 100 items and an appropriate NextToken so the * client can access the next page of results.

For information on how to * construct select expressions, see Using Select to Create Amazon SimpleDB Queries * in the Developer Guide.

See Also:

AWS API * Reference

*/ virtual Model::SelectOutcome Select(const Model::SelectRequest& request) const; /** * A Callable wrapper for Select that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::SelectOutcomeCallable SelectCallable(const SelectRequestT& request) const { return SubmitCallable(&SimpleDBClient::Select, request); } /** * An Async wrapper for Select that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void SelectAsync(const SelectRequestT& request, const SelectResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SimpleDBClient::Select, request, handler, context); } void OverrideEndpoint(const Aws::String& endpoint); std::shared_ptr& accessEndpointProvider(); private: friend class Aws::Client::ClientWithAsyncTemplateMethods; void init(const SimpleDBClientConfiguration& clientConfiguration); SimpleDBClientConfiguration m_clientConfiguration; std::shared_ptr m_executor; std::shared_ptr m_endpointProvider; }; } // namespace SimpleDB } // namespace Aws