Manually preserve cconvert values until sqlite3_step #308
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.
Fixes #306.
The core issue here is that when we
bind!
some values to an insert statement, the _cconvert_ed value needs to remain valid (i.e. not GC-able) until we execute the insert statement insqlite3_step
. In eachSQLite.Stmt
, we have aparams
field for storing these values, but we weren't accounting for the fact that some values, (in the original issue case, InlineStrings), may becconvert
ed to a different value when they're actually bound, and it's the cconverted value that we need to store inparams
until the statement is executed.