fix: parse PostgreSQL JSON path deletion and existence operators - #2664
Merged
manticore-projects merged 1 commit intoSep 21, 2026
Merged
manticore-projects merged 1 commit into
manticore-projects merged 1 commit into
Conversation
Signed-off-by: minleejae <mmj9808@gmail.com>
Contributor
|
Thank you! |
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.
PostgreSQL
jsonb #- text[]currently becomes an Intersects expression followed by unary minus, so both output paths emit# -and the SQL fails on PostgreSQL.jsonb @? jsonpathis also missing; without whitespace, the lexer can absorb@into the preceding identifier.Recognize
#-and@?as complete tokens and reuse JsonOperator plus the existing expression precedence loop. Preserve left-associative chains, comparisons and JDBC parameters. In the PostgreSQL dialect, handle existing JSON access operators (->,->>,#>,#>>) and concatenation at the same precedence, so mixed chains preserve their left-to-right AST structure in both parser modes, and split@out of unquoted identifiers as already done for#. Existing hash operators and identifier behavior in other dialects retain regression coverage. The legacy-#branch remains accepted for compatibility.Tests check the actual operator and child AST types, visitors, mutations, missing operands, no-whitespace forms and token locations. JSON path contents remain string expressions; this does not add a JSON path parser.
References: PostgreSQL JSON operators, operator precedence.
Validation:
checkpassed on Java 17, including grammar ambiguity, formatting, static analysis, coverage and the full test suite. JUnit XML totals: 7822 tests, 0 failures/errors, 25 skipped.