tnakama created CALCITE-7566:
--------------------------------

             Summary: Support BigQuery-style bare bracket array literals (e.g. 
[1, 2, 3]) under BigQuery conformance
                 Key: CALCITE-7566
                 URL: https://issues.apache.org/jira/browse/CALCITE-7566
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.41.0
            Reporter: tnakama


  

 BigQuery supports a shorthand syntax for array literals using just square 
brackets,
 without the `ARRAY` keyword:

 ```sql
 SELECT [1, 2, 3] AS arr;

 This is documented as equivalent to ARRAY<T>[...] / ARRAY[...] in BigQuery's 
Standard SQL:
 
https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#array_literals

 When parsing such queries with Calcite using fun=bigquery and/or 
conformance=BIG_QUERY, the parser fails because it only recognises
 ARRAY[...] / ARRAY(...) constructors.

 Reproduction

 SqlParser.Config config = SqlParser.config()
     .withConformance(SqlConformanceEnum.BIG_QUERY)
     .withLex(Lex.BIG_QUERY);
 SqlParser.create("SELECT [1, 2, 3]", config).parseQuery();
 // → SqlParseException: Encountered "[" at line 1, column 8

 Whereas BigQuery accepts it natively:
 $ bq query --use_legacy_sql=false 'SELECT [1, 2, 3] AS arr'
 +-----------+
 |    arr    |
 +-----------+
 | [1, 2, 3] |
 +-----------+

 Suggested implementation outline

 In core/src/main/codegen/templates/Parser.jj, the array constructor rule 
(around line 5252) currently requires the ARRAY keyword. Add a 
conformance-gated alternative in AtomicRowExpression (or wherever expression 
atoms are parsed) that, when getConformance().allowBareBracketArrayLiteral() 
(new predicate on SqlConformance) is true, accepts LBRACKET ... RBRACKET and 
emits the same ARRAY_VALUE_CONSTRUCTOR call.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to