-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DynamoDB: Wrap all values in UPDATE statements in quotes #19
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
|
@@ -139,14 +139,16 @@ 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}'" | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can also check if there is a reusable method in sqlalchemy or crate-python, which would already have sufficient test coverage. And such a method would be easier to re-use, since we will need it several times. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hi. Thanks for tagging. We are talking about quoting values on this spot, right? We provided a generic quoting function for schema- and table-names per DatabaseAdapter.quote_relation_name, based on SQLAlchemy's identifier preparer. So, Nomen est omen, the identifier preparer is about quoting identifiers. I will have a look if there is something similar for values. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On this spot, is it about proper quoting, or rather about escaping special characters within the value string at hand? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think that this SO conversation includes good and relevant content and pointers? Please correct me if I'm looking at the wrong thing. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will be merging as-is, including @hlcianfagna's suggestion. Generalizing and improving the ad hoc implementation, I am deferring to a subsequent iteration. |
||||||||
constraints.append(constraint) | ||||||||
|
||||||||
return ", ".join(constraints) | ||||||||
|
||||||||
def keys_to_where(self, keys: t.Dict[str, t.Dict[str, str]]) -> str: | ||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We may need to replace
'
with''
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right. Or we use some other notation, like $$. Even though that will not eliminate the need for escaping.