feat: Allow OUTER keyword as function parameter name#2021
Conversation
|
Thank you for your contribution, very clean and efficient. |
Thanks for the speedy response @manticore-projects 😁 I just wanted to double check you're happy with the solution. As explained in the PR description, I don't think it's ideal! I feel like we could do it a better way e.g. just using |
I know its not ideal, but it is efficient and fixes the problem right now while maintaining the options for improving it later. |
|
OK sounds good, as long as you're happy 😁 Will get the formatting sorted 👍 |
|
That should be all sorted now! |
|
Thank you again for your contribution! |
Context
SQL keywords are sometimes allowed as parameter names in table functions. For example, the following statement is valid on Snowflake:
Note that the second named parameter passed to the table function
flattenisouter, which is a SQL keyword, and it is unquoted.Currently, statements like this fail to parse, I think because SQL keywords are not allowed as parameter names. However, as this is a valid statement, I'd like to be able to parse it.
Details
The production in the grammar which handles named parameters is
OracleNamedFunctionParameter. Currently, this is using theRelObjectNameExt2production to match the parameter name. I think (although I don't understand how) this does not match keywords. Since parameter names are not objects, I thought we could use the<S_IDENTIFIER>token, which looks like it should match something likeouter. However, this doesn't appear to match keywords, again I don't understand how - looking at the<S_IDENTIFIER>token, it looks like it will match any sequence of unicode characters 🤔 . As a simple (probably wrong) solution, I've manually added the<K_OUTER>token as a possible match inOracleNamedFunctionParameter:But this feels wrong. I don't think parameter names necessarily need to be valid object names, hence why I wanted to use
<S_IDENTIFIER>, but I can't work out why<S_IDENTIFIER>won't match keywords. Happy to discuss this further, any help would be much appreciated!