Skip to content

Commit

Permalink
DynamoDB: Wrap all values in UPDATE statements in quotes
Browse files Browse the repository at this point in the history
  • Loading branch information
hammerhead authored and Andreas Motl committed Aug 16, 2024
1 parent a59da18 commit 68ce5d8
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## Unreleased
- DynamoDB: Fixed a syntax issue with `text` data type in `UPDATE` statements

## 2024/08/16 v0.0.6
- Changed `UPDATE` statements from DMS not to write the entire `data`
Expand Down
5 changes: 3 additions & 2 deletions src/commons_codec/transform/dynamodb.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,14 @@ def values_to_update(self, keys: t.Dict[str, t.Dict[str, str]]) -> str:
{'humidity': {'N': '84.84'}, 'temperature': {'N': '55.66'}}
OUT:
data['humidity] = 84.84, temperature = 55.66
data['humidity] = '84.84', temperature = '55.66'
"""
values_clause = self.deserialize_item(keys)

constraints: t.List[str] = []
for key_name, key_value in values_clause.items():
constraint = f"{self.DATA_COLUMN}['{key_name}'] = {key_value}"
key_value = str(key_value).replace("'", "''")
constraint = f"{self.DATA_COLUMN}['{key_name}'] = '{key_value}'"
constraints.append(constraint)
return ", ".join(constraints)

Expand Down
4 changes: 3 additions & 1 deletion tests/transform/test_dynamodb.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,14 @@
"humidity": {"N": "84.84"},
"temperature": {"N": "55.66"},
"device": {"S": "bar"},
"location": {"S": "Sydney"},
"timestamp": {"S": "2024-07-12T01:17:42"},
},
"OldImage": {
"humidity": {"N": "84.84"},
"temperature": {"N": "42.42"},
"device": {"S": "foo"},
"location": {"S": "Sydney"},
"timestamp": {"S": "2024-07-12T01:17:42"},
},
"SizeBytes": 161,
Expand Down Expand Up @@ -145,7 +147,7 @@ def test_decode_cdc_insert_nested():
def test_decode_cdc_modify():
assert (
DynamoCDCTranslatorCrateDB(table_name="foo").to_sql(MSG_MODIFY) == 'UPDATE "foo" '
"SET data['humidity'] = 84.84, data['temperature'] = 55.66 "
"SET data['humidity'] = '84.84', data['temperature'] = '55.66', data['location'] = 'Sydney' "
"WHERE data['device'] = 'foo' AND data['timestamp'] = '2024-07-12T01:17:42';"
)

Expand Down

0 comments on commit 68ce5d8

Please sign in to comment.