Postgres: Fix VARIADIC function call parsing #7002
Merged
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.
Brief summary of the change made
Fixes #6784.
Problem
SQLFluff couldn't parse PostgreSQL function calls with
VARIADIC
keyword, throwing "unparseable section" errors. The issue example was:Before this fix
What I did
Added
Sequence("VARIADIC", Ref("ExpressionSegment"))
to the PostgreSQLFunctionContentsGrammar
. Pretty simple fix that now handles:VARIADIC ARRAY[1, 2, 3]
VARIADIC ARRAY_REMOVE(...)
VARIADIC ARRAY(SELECT ...)
VARIADIC my_array
Why this approach
Went with
Sequence("VARIADIC", Ref("ExpressionSegment"))
because:VARIADIC
syntax is alwaysfunction_name(VARIADIC expression)
where the expression can be arrays, function calls, variables, or subqueriesVARIADIC
isn't optional - you either use it or you don't, no in-betweenAnyNumberOf
inFunctionContentsGrammar
so it plays nice with other function argumentsExpressionSegment
covers all the different things that can come afterVARIADIC
without needing separate rules for eachAfter this fix
Are there any other side effects of this change that we should be aware of?
Nope, no breaking changes. Just adds support for something that should have worked already. Only affects PostgreSQL dialect.
Pull Request checklist
.yml
rule test cases intest/fixtures/rules/std_rule_cases
..sql
/.yml
parser test cases intest/fixtures/dialects
(note YML files can be auto generated withtox -e generate-fixture-yml
).test/fixtures/linter/autofix
.