Merge pull request #2295 from garrettheel/condition-expr-or-evaluation
dynamodb2: Defer evaluation of the OR RHS in condition expr
This commit is contained in:
commit
25ab3afc31
@ -1004,8 +1004,7 @@ class OpOr(Op):
|
||||
|
||||
def expr(self, item):
|
||||
lhs = self.lhs.expr(item)
|
||||
rhs = self.rhs.expr(item)
|
||||
return lhs or rhs
|
||||
return lhs or self.rhs.expr(item)
|
||||
|
||||
|
||||
class Func(object):
|
||||
|
@ -1964,6 +1964,36 @@ def test_condition_expression__attr_doesnt_exist():
|
||||
update_if_attr_doesnt_exist()
|
||||
|
||||
|
||||
@mock_dynamodb2
|
||||
def test_condition_expression__or_order():
|
||||
client = boto3.client('dynamodb', region_name='us-east-1')
|
||||
|
||||
client.create_table(
|
||||
TableName='test',
|
||||
KeySchema=[{'AttributeName': 'forum_name', 'KeyType': 'HASH'}],
|
||||
AttributeDefinitions=[
|
||||
{'AttributeName': 'forum_name', 'AttributeType': 'S'},
|
||||
],
|
||||
ProvisionedThroughput={'ReadCapacityUnits': 1, 'WriteCapacityUnits': 1},
|
||||
)
|
||||
|
||||
# ensure that the RHS of the OR expression is not evaluated if the LHS
|
||||
# returns true (as it would result an error)
|
||||
client.update_item(
|
||||
TableName='test',
|
||||
Key={
|
||||
'forum_name': {'S': 'the-key'},
|
||||
},
|
||||
UpdateExpression='set #ttl=:ttl',
|
||||
ConditionExpression='attribute_not_exists(#ttl) OR #ttl <= :old_ttl',
|
||||
ExpressionAttributeNames={'#ttl': 'ttl'},
|
||||
ExpressionAttributeValues={
|
||||
':ttl': {'N': '6'},
|
||||
':old_ttl': {'N': '5'},
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@mock_dynamodb2
|
||||
def test_query_gsi_with_range_key():
|
||||
dynamodb = boto3.client('dynamodb', region_name='us-east-1')
|
||||
|
Loading…
Reference in New Issue
Block a user