Summary
Two UpdateExpression evaluation gaps versus real DynamoDB, surfaced by the dynamodb-conformance suite (Dynoxide 0.9.13).
- Pre-update snapshot read.
SET a = :v, b = a should evaluate the whole expression against the item's pre-update state, so b gets the old value of a. Dynoxide returns b = "NEW" (the value just assigned in the same call); AWS returns b = "OLD".
- Parenthesised arithmetic.
SET c = (c - :v) is rejected with ValidationException: Invalid UpdateExpression: Syntax error; Expected operand in SET, got (. AWS accepts the parentheses and applies the arithmetic (c = 7 for c=10, :v=3).
Both live in the UpdateExpression parser/evaluator. For reference, arithmetic around if_not_exists, nested list_append(if_not_exists(...)), map document-path SET, and list_append prepend ordering already match AWS.
Summary
Two
UpdateExpressionevaluation gaps versus real DynamoDB, surfaced by the dynamodb-conformance suite (Dynoxide 0.9.13).SET a = :v, b = ashould evaluate the whole expression against the item's pre-update state, sobgets the old value ofa. Dynoxide returnsb = "NEW"(the value just assigned in the same call); AWS returnsb = "OLD".SET c = (c - :v)is rejected withValidationException: Invalid UpdateExpression: Syntax error; Expected operand in SET, got (. AWS accepts the parentheses and applies the arithmetic (c = 7forc=10, :v=3).Both live in the UpdateExpression parser/evaluator. For reference, arithmetic around
if_not_exists, nestedlist_append(if_not_exists(...)), map document-path SET, andlist_appendprepend ordering already match AWS.