Conversation
A list value split on every comma, also on a comma inside a quoted item. Title ^^ ["Warm, with syrup"] matched Warm and with syrup, not the one title. Escape the commas in each quoted item and split the list only on the commas between items. BREAKING CHANGE: a quoted list item with a comma is now one item. In and not-in filters with such an item return different rows.
pdevito3
force-pushed
the
fm/qk-breaking-quoted-list-comma
branch
from
October 1, 2026 21:37
470a70f to
f6037a3
Compare
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.
For later consideration in a major version. Do not merge now. #134 restored the v1.14.2 list split to keep v1.x compatible (restore commit
01e8b50). This PR re-appliesc90861c. The captain decides on this PR separately.Summary
,and\in each quoted item before it joins the items.SplitListItemssplits the list only on a comma that is not escaped, then trims each item. The in and not-in paths use it.v1.14.2 behavior (and main)
The list text is split on every comma with
Split(','). A comma inside a quoted item also splits the item.New behavior
A quoted item is one item, also when it holds a comma. An unquoted list (
[20, 30, 40]) does not change.Example
Warm,with syrup, anda\b. A person with the titleWarm, with syrupdoes not match.Warm, with syrupanda\b. The person with the titleWarm, with syrupmatches.Justification
Quotes mark where a value starts and stops. A comma inside the quotes is part of the value. The old split made it impossible to filter by a value that holds a comma.
Migration
A caller that put many values in one quoted item must write each value as its own quoted item:
["Warm", "with syrup"].README
The
inoperator example now tells that a quoted list item can hold a comma.Tests
These tests come back from main before #134:
FilterParsingRegressionTests.list_value_with_comma_is_split_into_items->list_value_with_comma_is_one_item(theory, 5 cases: 4 cases expect one item again, the trim case is the same)FilterParsingRegressionTests.list_value_with_comma_is_split_into_items->list_value_with_comma_is_one_item(Postgres, the in and not-in rows swap back)dotnet test: 470 unit tests and 297 Postgres integration tests (Testcontainers) pass, 0 failures.Rebase on main
This branch is rebased on current main. On main, the list parser also returns a flag for a dot-only number in the list. The rebase keeps this flag and escapes each item value with
EscapeListItem.