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
/DELETE
to modify items in a set - Use
if_not_exists
function 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_expression
is passed inopts
, use it instead of a generated one. - If
update_expression
is passed inopts
, merge it with the generated one (might need to combine with the generatedSET
/REMOVE
clauses) - A way to pass-through raw
update
clauses toAws::Record::Transactions.transact_write
that 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!