Repository navigation
Expand an empty slice in In to NULL instead of returning an error. - #22
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
An empty or nil slice passed to
Innow expands to the SQL literalNULLand binds no argument, sox IN (?)becomesx IN (NULL), which matches no row.NULLis the only fragment that is valid and type-safe inside the parentheses on Postgres 16, MySQL 8.4, SQLite, SQL Server 2022 and Oracle 23 (an untyped empty subquery fails on Postgres for non-text columns).x NOT IN (?)becomesx NOT IN (NULL), which also matches no row by SQL three-valued logic; the doc comment says so and an integration case pins it. Answers upstream #945, whose own change boundnilto the placeholder rather than emittingIN ().Callers that used the old error as an empty-list guard must check the length themselves; this gets a changelog line. The two error-table cases in the existing tests are removed; a 17-case table test and integration cases on all three databases are added.
Local run with Postgres 16, MySQL 8.4 and SQLite: 106 pass, 3 skip, 0 fail.