-
Notifications
You must be signed in to change notification settings - Fork 43
Description
Occasionally we would like to use Update expressions for more advanced updates than seem to be available when modifying an attribute and using the existing #update methods. We particularly need this for transactions.
For example:
- Use
ADD/DELETEto modify items in a set - Use
if_not_existsfunction to control behavior when multiple updates occur in succession - Accumulate a value during a transaction (similar to
increment!but in a transaction)
It would be great if there were a way to do this in special cases while still largely taking advantages of the conveniences afforded by this SDK.
Unfortunately, update_expression is always set directly with no opportunity to override it.
E.g. Item Operations:
https://github.com/aws/aws-sdk-ruby-record/blob/92e0070eea16698e23be8e31d3a36e681dc079e9/lib/aws-record/record/item_operations.rb#L609
E.g. Transactions:
https://github.com/aws/aws-sdk-ruby-record/blob/92e0070eea16698e23be8e31d3a36e681dc079e9/lib/aws-record/record/transactions.rb#L294
Some potential ideas:
- If
update_expressionis passed inopts, use it instead of a generated one. - If
update_expressionis passed inopts, merge it with the generated one (might need to combine with the generatedSET/REMOVEclauses) - A way to pass-through raw
updateclauses toAws::Record::Transactions.transact_writethat only set the minimal key/table rather than the full transformation (similar todelete). - A way to generate more raw actions similar to
#transact_check_expression.
Thanks!