Skip to content

CALCITE-5624: add parser option to skip array constructor#3137

Closed
MasseGuillaume wants to merge 2 commits intoapache:mainfrom
MasseGuillaume:CALCITE-5624
Closed

CALCITE-5624: add parser option to skip array constructor#3137
MasseGuillaume wants to merge 2 commits intoapache:mainfrom
MasseGuillaume:CALCITE-5624

Conversation

@MasseGuillaume
Copy link
Copy Markdown
Contributor

@MasseGuillaume MasseGuillaume commented Mar 30, 2023

for example in Apache Spark the array constructor is defined using a buildtin function:
array(1, 2, 3)

I don't think there is an easy way to test parser freemarker options, alternatively, I could implement this using SqlParser.Config.

for example in spark the array constructor is defined
using a buildtin function:

array(1, 2, 3)
@MasseGuillaume
Copy link
Copy Markdown
Contributor Author

MasseGuillaume commented Mar 30, 2023

Hum I don't think it's enough to parse, I will work on a unit test. It's probably tokenizing the array keyword ...

stack trace
[info]   org.apache.calcite.sql.parser.SqlParseException: Encountered "array" at line 1, column 1.
[info] Was expecting one of:
[info]     "CURSOR" ...
[info]     "EXISTS" ...
[info]     "NOT" ...
[info]     "ROW" ...
[info]     "UNIQUE" ...
[info]     "(" ...
[info]     "+" ...
[info]     "-" ...
[info]     "INTERVAL" ...
[info]     <UNSIGNED_INTEGER_LITERAL> ...
[info]     <DECIMAL_NUMERIC_LITERAL> ...
[info]     <APPROX_NUMERIC_LITERAL> ...
[info]     <BINARY_STRING_LITERAL> ...
[info]     <PREFIXED_STRING_LITERAL> ...
[info]     <QUOTED_STRING> ...
[info]     <UNICODE_STRING_LITERAL> ...
[info]     <C_STYLE_ESCAPED_STRING_LITERAL> ...
[info]     <BIG_QUERY_DOUBLE_QUOTED_STRING> ...
[info]     <BIG_QUERY_QUOTED_STRING> ...
[info]     "TRUE" ...
[info]     "FALSE" ...
[info]     "UNKNOWN" ...
[info]     "NULL" ...
[info]     <LBRACE_D> ...
[info]     <LBRACE_T> ...
[info]     <LBRACE_TS> ...
[info]     "DATE" ...
[info]     "DATETIME" ...
[info]     "TIME" ...
[info]     "TIMESTAMP" ...
[info]     "?" ...
[info]     "CAST" ...
[info]     "EXTRACT" ...
[info]     "POSITION" ...
[info]     "CONVERT" ...
[info]     "TRANSLATE" ...
[info]     "OVERLAY" ...
[info]     "FLOOR" ...
[info]     "CEIL" ...
[info]     "CEILING" ...
[info]     "SUBSTRING" ...
[info]     "TRIM" ...
[info]     "CLASSIFIER" ...
[info]     "MATCH_NUMBER" ...
[info]     "RUNNING" ...
[info]     "PREV" ...
[info]     "NEXT" ...
[info]     "JSON_EXISTS" ...
[info]     "JSON_VALUE" ...
[info]     "JSON_QUERY" ...
[info]     "JSON_OBJECT" ...
[info]     "JSON_OBJECTAGG" ...
[info]     "JSON_ARRAY" ...
[info]     "JSON_ARRAYAGG" ...
[info]     <LBRACE_FN> ...
[info]     "MULTISET" ...
[info]     "PERIOD" ...
[info]     "SPECIFIC" ...
[info]     <IDENTIFIER> ...
[info]     <HYPHENATED_IDENTIFIER> ...
[info]     <QUOTED_IDENTIFIER> ...
[info]     <BACK_QUOTED_IDENTIFIER> ...
[info]     <BIG_QUERY_BACK_QUOTED_IDENTIFIER> ...
[info]     <BRACKET_QUOTED_IDENTIFIER> ...
[info]     <UNICODE_QUOTED_IDENTIFIER> ...
[info]     "ABS" ...
[info]     "AVG" ...
[info]     "CARDINALITY" ...
[info]     "CHAR" ...
[info]     "CHAR_LENGTH" ...
[info]     "CHARACTER_LENGTH" ...
[info]     "COALESCE" ...
[info]     "COLLECT" ...
[info]     "COVAR_POP" ...
[info]     "COVAR_SAMP" ...
[info]     "CUME_DIST" ...
[info]     "COUNT" ...
[info]     "CURRENT_DATE" ...
[info]     "CURRENT_TIME" ...
[info]     "CURRENT_TIMESTAMP" ...
[info]     "DENSE_RANK" ...
[info]     "ELEMENT" ...
[info]     "EVERY" ...
[info]     "EXP" ...
[info]     "FIRST_VALUE" ...
[info]     "FUSION" ...
[info]     "INTERSECTION" ...
[info]     "GROUPING" ...
[info]     "HOUR" ...
[info]     "LAG" ...
[info]     "LEAD" ...
[info]     "LEFT" ...
[info]     "LAST_VALUE" ...
[info]     "LN" ...
[info]     "LOCALTIME" ...
[info]     "LOCALTIMESTAMP" ...
[info]     "LOWER" ...
[info]     "MAX" ...
[info]     "MIN" ...
[info]     "MINUTE" ...
[info]     "MOD" ...
[info]     "MONTH" ...
[info]     "NTH_VALUE" ...
[info]     "NTILE" ...
[info]     "NULLIF" ...
[info]     "OCTET_LENGTH" ...
[info]     "PERCENT_RANK" ...
[info]     "PERCENTILE_CONT" ...
[info]     "PERCENTILE_DISC" ...
[info]     "POWER" ...
[info]     "RANK" ...
[info]     "REGR_COUNT" ...
[info]     "REGR_SXX" ...
[info]     "REGR_SYY" ...
[info]     "RIGHT" ...
[info]     "ROW_NUMBER" ...
[info]     "SECOND" ...
[info]     "SOME" ...
[info]     "SQRT" ...
[info]     "STDDEV_POP" ...
[info]     "STDDEV_SAMP" ...
[info]     "SUM" ...
[info]     "UPPER" ...
[info]     "TRUNCATE" ...
[info]     "USER" ...
[info]     "VAR_POP" ...
[info]     "VAR_SAMP" ...
[info]     "YEAR" ...
[info]     "CURRENT_CATALOG" ...
[info]     "CURRENT_DEFAULT_TRANSFORM_GROUP" ...
[info]     "CURRENT_PATH" ...
[info]     "CURRENT_ROLE" ...
[info]     "CURRENT_SCHEMA" ...
[info]     "CURRENT_USER" ...
[info]     "SESSION_USER" ...
[info]     "SYSTEM_USER" ...
[info]     "NEW" ...
[info]     "CASE" ...
[info]     "CURRENT" ...

@MasseGuillaume
Copy link
Copy Markdown
Contributor Author

Hum I don't think it's enough to parse, I will work on a unit test. It's probably tokenizing the array keyword ...

Okay I figured it out, I just needed to add the token <ARRAY> to ReservedFunctionName. Regarding the testing strategy, I don't see a clear solution.

@sonarqubecloud
Copy link
Copy Markdown

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
No Duplication information No Duplication information

@MasseGuillaume
Copy link
Copy Markdown
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant