
software.amazon.awssdk.services.dynamodb.model.AttributeValueUpdate Maven / Gradle / Ivy
/*
* Copyright 2013-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
package software.amazon.awssdk.services.dynamodb.model;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.core.protocol.ProtocolMarshaller;
import software.amazon.awssdk.core.protocol.StructuredPojo;
import software.amazon.awssdk.services.dynamodb.transform.AttributeValueUpdateMarshaller;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
/**
*
* For the UpdateItem
operation, represents the attributes to be modified, the action to perform on each,
* and the new value for each.
*
*
*
* You cannot use UpdateItem
to update any primary key attributes. Instead, you will need to delete the
* item, and then use PutItem
to create a new item with new attributes.
*
*
*
* Attribute values cannot be null; string and binary type attributes must have lengths greater than zero; and set type
* attributes must not be empty. Requests with empty values will be rejected with a ValidationException
* exception.
*
*/
@Generated("software.amazon.awssdk:codegen")
public final class AttributeValueUpdate implements StructuredPojo,
ToCopyableBuilder {
private final AttributeValue value;
private final String action;
private AttributeValueUpdate(BuilderImpl builder) {
this.value = builder.value;
this.action = builder.action;
}
/**
*
* Represents the data for an attribute.
*
*
* Each attribute value is described as a name-value pair. The name is the data type, and the value is the data
* itself.
*
*
* For more information, see Data Types in the Amazon DynamoDB Developer Guide.
*
*
* @return Represents the data for an attribute.
*
* Each attribute value is described as a name-value pair. The name is the data type, and the value is the
* data itself.
*
*
* For more information, see Data Types in the Amazon DynamoDB Developer Guide.
*/
public AttributeValue value() {
return value;
}
/**
*
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
, and
* ADD
. The behavior depends on whether the specified primary key already exists in the table.
*
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is replaced by
* the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item. The data
* type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example, if the
* attribute value was the set [a,b,c]
and the DELETE
action specified [a,c]
,
* then the final attribute value would be [b]
. Specifying an empty set is an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added to the
* item. If the attribute does exist, then the behavior of ADD
depends on the data type of the
* attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the Value
is
* mathematically added to the existing attribute. If Value
is a negative number, then it is subtracted
* from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist before the
* update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement an
* attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For example, suppose
* that the item you want to update does not yet have an attribute named itemcount, but you decide to
* ADD
the number 3
to this attribute anyway, even though it currently does not exist.
* DynamoDB will create the itemcount attribute, set its initial value to 0
, and finally add
* 3
to it. The result will be a new itemcount attribute in the item, with a value of
* 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the Value
is
* added to the existing set. (This is a set operation, not mathematical addition.) For example, if the
* attribute value was the set [1,2]
, and the ADD
action specified [3]
, then
* the final attribute value would be [1,2,3]
. An error occurs if an Add action is specified for a set
* attribute and the attribute type specified does not match the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the
* Value
must also be a set of strings. The same holds true for number sets and binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers) for the
* attribute value. The only data types allowed are number and number set; no other data types can be specified.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #action} will
* return {@link AttributeAction#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from
* {@link #actionAsString}.
*
*
* @return Specifies how to perform the update. Valid values are PUT
(default), DELETE
,
* and ADD
. The behavior depends on whether the specified primary key already exists in the
* table.
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is
* replaced by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item.
* The data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example,
* if the attribute value was the set [a,b,c]
and the DELETE
action specified
* [a,c]
, then the final attribute value would be [b]
. Specifying an empty set is
* an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added
* to the item. If the attribute does exist, then the behavior of ADD
depends on the data type
* of the attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a negative
* number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist
* before the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement
* an attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For
* example, suppose that the item you want to update does not yet have an attribute named itemcount,
* but you decide to ADD
the number 3
to this attribute anyway, even though it
* currently does not exist. DynamoDB will create the itemcount attribute, set its initial value to
* 0
, and finally add 3
to it. The result will be a new itemcount attribute
* in the item, with a value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the
* Value
is added to the existing set. (This is a set operation, not mathematical
* addition.) For example, if the attribute value was the set [1,2]
, and the ADD
* action specified [3]
, then the final attribute value would be [1,2,3]
. An error
* occurs if an Add action is specified for a set attribute and the attribute type specified does not match
* the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of
* strings, the Value
must also be a set of strings. The same holds true for number sets and
* binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the
* attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers)
* for the attribute value. The only data types allowed are number and number set; no other data types can
* be specified.
*
*
* @see AttributeAction
*/
public AttributeAction action() {
return AttributeAction.fromValue(action);
}
/**
*
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
, and
* ADD
. The behavior depends on whether the specified primary key already exists in the table.
*
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is replaced by
* the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item. The data
* type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example, if the
* attribute value was the set [a,b,c]
and the DELETE
action specified [a,c]
,
* then the final attribute value would be [b]
. Specifying an empty set is an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added to the
* item. If the attribute does exist, then the behavior of ADD
depends on the data type of the
* attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the Value
is
* mathematically added to the existing attribute. If Value
is a negative number, then it is subtracted
* from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist before the
* update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement an
* attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For example, suppose
* that the item you want to update does not yet have an attribute named itemcount, but you decide to
* ADD
the number 3
to this attribute anyway, even though it currently does not exist.
* DynamoDB will create the itemcount attribute, set its initial value to 0
, and finally add
* 3
to it. The result will be a new itemcount attribute in the item, with a value of
* 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the Value
is
* added to the existing set. (This is a set operation, not mathematical addition.) For example, if the
* attribute value was the set [1,2]
, and the ADD
action specified [3]
, then
* the final attribute value would be [1,2,3]
. An error occurs if an Add action is specified for a set
* attribute and the attribute type specified does not match the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the
* Value
must also be a set of strings. The same holds true for number sets and binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers) for the
* attribute value. The only data types allowed are number and number set; no other data types can be specified.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #action} will
* return {@link AttributeAction#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from
* {@link #actionAsString}.
*
*
* @return Specifies how to perform the update. Valid values are PUT
(default), DELETE
,
* and ADD
. The behavior depends on whether the specified primary key already exists in the
* table.
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is
* replaced by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item.
* The data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example,
* if the attribute value was the set [a,b,c]
and the DELETE
action specified
* [a,c]
, then the final attribute value would be [b]
. Specifying an empty set is
* an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added
* to the item. If the attribute does exist, then the behavior of ADD
depends on the data type
* of the attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a negative
* number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist
* before the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement
* an attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For
* example, suppose that the item you want to update does not yet have an attribute named itemcount,
* but you decide to ADD
the number 3
to this attribute anyway, even though it
* currently does not exist. DynamoDB will create the itemcount attribute, set its initial value to
* 0
, and finally add 3
to it. The result will be a new itemcount attribute
* in the item, with a value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the
* Value
is added to the existing set. (This is a set operation, not mathematical
* addition.) For example, if the attribute value was the set [1,2]
, and the ADD
* action specified [3]
, then the final attribute value would be [1,2,3]
. An error
* occurs if an Add action is specified for a set attribute and the attribute type specified does not match
* the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of
* strings, the Value
must also be a set of strings. The same holds true for number sets and
* binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the
* attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers)
* for the attribute value. The only data types allowed are number and number set; no other data types can
* be specified.
*
*
* @see AttributeAction
*/
public String actionAsString() {
return action;
}
@Override
public Builder toBuilder() {
return new BuilderImpl(this);
}
public static Builder builder() {
return new BuilderImpl();
}
public static Class extends Builder> serializableBuilderClass() {
return BuilderImpl.class;
}
@Override
public int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + Objects.hashCode(value());
hashCode = 31 * hashCode + Objects.hashCode(actionAsString());
return hashCode;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof AttributeValueUpdate)) {
return false;
}
AttributeValueUpdate other = (AttributeValueUpdate) obj;
return Objects.equals(value(), other.value()) && Objects.equals(actionAsString(), other.actionAsString());
}
@Override
public String toString() {
return ToString.builder("AttributeValueUpdate").add("Value", value()).add("Action", actionAsString()).build();
}
public Optional getValueForField(String fieldName, Class clazz) {
switch (fieldName) {
case "Value":
return Optional.ofNullable(clazz.cast(value()));
case "Action":
return Optional.ofNullable(clazz.cast(actionAsString()));
default:
return Optional.empty();
}
}
@SdkInternalApi
@Override
public void marshall(ProtocolMarshaller protocolMarshaller) {
AttributeValueUpdateMarshaller.getInstance().marshall(this, protocolMarshaller);
}
public interface Builder extends CopyableBuilder {
/**
*
* Represents the data for an attribute.
*
*
* Each attribute value is described as a name-value pair. The name is the data type, and the value is the data
* itself.
*
*
* For more information, see Data Types in the Amazon DynamoDB Developer Guide.
*
*
* @param value
* Represents the data for an attribute.
*
* Each attribute value is described as a name-value pair. The name is the data type, and the value is
* the data itself.
*
*
* For more information, see Data Types in the Amazon DynamoDB Developer Guide.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder value(AttributeValue value);
/**
*
* Represents the data for an attribute.
*
*
* Each attribute value is described as a name-value pair. The name is the data type, and the value is the data
* itself.
*
*
* For more information, see Data Types in the Amazon DynamoDB Developer Guide.
*
* This is a convenience that creates an instance of the {@link AttributeValue.Builder} avoiding the need to
* create one manually via {@link AttributeValue#builder()}.
*
* When the {@link Consumer} completes, {@link AttributeValue.Builder#build()} is called immediately and its
* result is passed to {@link #value(AttributeValue)}.
*
* @param value
* a consumer that will call methods on {@link AttributeValue.Builder}
* @return Returns a reference to this object so that method calls can be chained together.
* @see #value(AttributeValue)
*/
default Builder value(Consumer value) {
return value(AttributeValue.builder().applyMutation(value).build());
}
/**
*
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
, and
* ADD
. The behavior depends on whether the specified primary key already exists in the table.
*
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is replaced
* by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item. The
* data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example, if
* the attribute value was the set [a,b,c]
and the DELETE
action specified
* [a,c]
, then the final attribute value would be [b]
. Specifying an empty set is an
* error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added to
* the item. If the attribute does exist, then the behavior of ADD
depends on the data type of the
* attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a negative
* number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist before
* the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement an
* attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For example,
* suppose that the item you want to update does not yet have an attribute named itemcount, but you
* decide to ADD
the number 3
to this attribute anyway, even though it currently does
* not exist. DynamoDB will create the itemcount attribute, set its initial value to 0
, and
* finally add 3
to it. The result will be a new itemcount attribute in the item, with a
* value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the Value
* is added to the existing set. (This is a set operation, not mathematical addition.) For example, if
* the attribute value was the set [1,2]
, and the ADD
action specified
* [3]
, then the final attribute value would be [1,2,3]
. An error occurs if an Add
* action is specified for a set attribute and the attribute type specified does not match the existing set
* type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of strings,
* the Value
must also be a set of strings. The same holds true for number sets and binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers) for
* the attribute value. The only data types allowed are number and number set; no other data types can be
* specified.
*
*
*
*
* @param action
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
,
* and ADD
. The behavior depends on whether the specified primary key already exists in the
* table.
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is
* replaced by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item.
* The data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For
* example, if the attribute value was the set [a,b,c]
and the DELETE
action
* specified [a,c]
, then the final attribute value would be [b]
. Specifying an
* empty set is an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are
* added to the item. If the attribute does exist, then the behavior of ADD
depends on the
* data type of the attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a
* negative number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist
* before the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or
* decrement an attribute value which does not yet exist, DynamoDB uses 0
as the initial
* value. For example, suppose that the item you want to update does not yet have an attribute named
* itemcount, but you decide to ADD
the number 3
to this attribute
* anyway, even though it currently does not exist. DynamoDB will create the itemcount attribute,
* set its initial value to 0
, and finally add 3
to it. The result will be a
* new itemcount attribute in the item, with a value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the
* Value
is added to the existing set. (This is a set operation, not mathematical
* addition.) For example, if the attribute value was the set [1,2]
, and the
* ADD
action specified [3]
, then the final attribute value would be
* [1,2,3]
. An error occurs if an Add action is specified for a set attribute and the
* attribute type specified does not match the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of
* strings, the Value
must also be a set of strings. The same holds true for number sets and
* binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the
* attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of
* numbers) for the attribute value. The only data types allowed are number and number set; no other data
* types can be specified.
*
*
* @see AttributeAction
* @return Returns a reference to this object so that method calls can be chained together.
* @see AttributeAction
*/
Builder action(String action);
/**
*
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
, and
* ADD
. The behavior depends on whether the specified primary key already exists in the table.
*
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is replaced
* by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item. The
* data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For example, if
* the attribute value was the set [a,b,c]
and the DELETE
action specified
* [a,c]
, then the final attribute value would be [b]
. Specifying an empty set is an
* error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are added to
* the item. If the attribute does exist, then the behavior of ADD
depends on the data type of the
* attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a negative
* number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist before
* the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or decrement an
* attribute value which does not yet exist, DynamoDB uses 0
as the initial value. For example,
* suppose that the item you want to update does not yet have an attribute named itemcount, but you
* decide to ADD
the number 3
to this attribute anyway, even though it currently does
* not exist. DynamoDB will create the itemcount attribute, set its initial value to 0
, and
* finally add 3
to it. The result will be a new itemcount attribute in the item, with a
* value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the Value
* is added to the existing set. (This is a set operation, not mathematical addition.) For example, if
* the attribute value was the set [1,2]
, and the ADD
action specified
* [3]
, then the final attribute value would be [1,2,3]
. An error occurs if an Add
* action is specified for a set attribute and the attribute type specified does not match the existing set
* type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of strings,
* the Value
must also be a set of strings. The same holds true for number sets and binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers) for
* the attribute value. The only data types allowed are number and number set; no other data types can be
* specified.
*
*
*
*
* @param action
* Specifies how to perform the update. Valid values are PUT
(default), DELETE
,
* and ADD
. The behavior depends on whether the specified primary key already exists in the
* table.
*
* If an item with the specified Key is found in the table:
*
*
* -
*
* PUT
- Adds the specified attribute to the item. If the attribute already exists, it is
* replaced by the new value.
*
*
* -
*
* DELETE
- If no value is specified, the attribute and its value are removed from the item.
* The data type of the specified value must match the existing value's data type.
*
*
* If a set of values is specified, then those values are subtracted from the old set. For
* example, if the attribute value was the set [a,b,c]
and the DELETE
action
* specified [a,c]
, then the final attribute value would be [b]
. Specifying an
* empty set is an error.
*
*
* -
*
* ADD
- If the attribute does not already exist, then the attribute and its values are
* added to the item. If the attribute does exist, then the behavior of ADD
depends on the
* data type of the attribute:
*
*
* -
*
* If the existing attribute is a number, and if Value
is also a number, then the
* Value
is mathematically added to the existing attribute. If Value
is a
* negative number, then it is subtracted from the existing attribute.
*
*
*
* If you use ADD
to increment or decrement a number value for an item that doesn't exist
* before the update, DynamoDB uses 0 as the initial value.
*
*
* In addition, if you use ADD
to update an existing item, and intend to increment or
* decrement an attribute value which does not yet exist, DynamoDB uses 0
as the initial
* value. For example, suppose that the item you want to update does not yet have an attribute named
* itemcount, but you decide to ADD
the number 3
to this attribute
* anyway, even though it currently does not exist. DynamoDB will create the itemcount attribute,
* set its initial value to 0
, and finally add 3
to it. The result will be a
* new itemcount attribute in the item, with a value of 3
.
*
*
* -
*
* If the existing data type is a set, and if the Value
is also a set, then the
* Value
is added to the existing set. (This is a set operation, not mathematical
* addition.) For example, if the attribute value was the set [1,2]
, and the
* ADD
action specified [3]
, then the final attribute value would be
* [1,2,3]
. An error occurs if an Add action is specified for a set attribute and the
* attribute type specified does not match the existing set type.
*
*
* Both sets must have the same primitive data type. For example, if the existing data type is a set of
* strings, the Value
must also be a set of strings. The same holds true for number sets and
* binary sets.
*
*
*
*
* This action is only valid for an existing attribute whose data type is number or is a set. Do not use
* ADD
for any other data types.
*
*
*
*
* If no item with the specified Key is found:
*
*
* -
*
* PUT
- DynamoDB creates a new item with the specified primary key, and then adds the
* attribute.
*
*
* -
*
* DELETE
- Nothing happens; there is no attribute to delete.
*
*
* -
*
* ADD
- DynamoDB creates an item with the supplied primary key and number (or set of
* numbers) for the attribute value. The only data types allowed are number and number set; no other data
* types can be specified.
*
*
* @see AttributeAction
* @return Returns a reference to this object so that method calls can be chained together.
* @see AttributeAction
*/
Builder action(AttributeAction action);
}
static final class BuilderImpl implements Builder {
private AttributeValue value;
private String action;
private BuilderImpl() {
}
private BuilderImpl(AttributeValueUpdate model) {
value(model.value);
action(model.action);
}
public final AttributeValue.Builder getValue() {
return value != null ? value.toBuilder() : null;
}
@Override
public final Builder value(AttributeValue value) {
this.value = value;
return this;
}
public final void setValue(AttributeValue.BuilderImpl value) {
this.value = value != null ? value.build() : null;
}
public final String getAction() {
return action;
}
@Override
public final Builder action(String action) {
this.action = action;
return this;
}
@Override
public final Builder action(AttributeAction action) {
this.action(action.toString());
return this;
}
public final void setAction(String action) {
this.action = action;
}
@Override
public AttributeValueUpdate build() {
return new AttributeValueUpdate(this);
}
}
}