Track null arguments in order to provide the appropriate type when converting them. #3298
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.
This PR fixes an issue occurring when:
None : Option<T>
is bound to a query, and that query executed.Some(t: T) : Option<T>
.Since queries are cached by default, the type of value considered for the bound parameter is
Option::<i32>::None
.This will raise a Postgres error on the second execution
"incorrect binary data format in bind parameter <n>"
.The fix consists in storing the value type of null values (using the result of the
encode
function to determine if the value is null), and then using aNone
value with the correct type (for exampleOption::<String>::None
to persist a nullableTEXT
value).I am quite new to the
sqlx
library and there might be a better implementation but this one seems to be quite consistent with the implementation for theMySQL
driver.