BREAKING CHANGE: drop support for executing raw SQL strings in execute()
methods for all dialects
#3761
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue reference: #3598
Description of changes
Support for execution of raw SQL strings is removed.
With this change, one needs to wrap an SQL string in
sql
tagged function (i.e. sql`<string>`) or insql.raw(string)
(in case the SQL string isn't static) before passing it to.execute()
.Why?
Unlike raw strings,
sql
tagged templates are by design safe from SQL injections.In case one cannot use a tagged template, then wrapping an SQL string in
sql.raw()
still makes the intent more clear and visible (e.g. for code reviewers) that one needs to pay extra attention to what is being executed.Currently, accidentally missing/removing
sql
when using.execute()
method, could lead to an SQL injection vulnerability. For example, these 2 snippets look similar:vs