github.com/iasthc/atlas/cmd/atlas@v0.0.0-20230523071841-73246df3f88d/internal/sqlparse/sqliteparse/Parser.g4 (about)

     1  /*
     2   * The MIT License (MIT)
     3   *
     4   * Copyright (c) 2014 by Bart Kiers
     5   *
     6   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
     7   * associated documentation files (the "Software"), to deal in the Software without restriction,
     8   * including without limitation the rights to use, copy, modify, merge, publish, distribute,
     9   * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
    10   * furnished to do so, subject to the following conditions:
    11   *
    12   * The above copyright notice and this permission notice shall be included in all copies or
    13   * substantial portions of the Software.
    14   *
    15   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
    16   * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    17   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    18   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    20   *
    21   * Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser
    22   * Developed by:
    23   *     Bart Kiers, bart@big-o.nl
    24   *     Martin Mirchev, marti_2203@abv.bg
    25   *     Mike Lische, mike@lischke-online.de
    26   */
    27  
    28  // $antlr-format alignTrailingComments on, columnLimit 130, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments off
    29  // $antlr-format useTab off, allowShortRulesOnASingleLine off, allowShortBlocksOnASingleLine on, alignSemicolons ownLine
    30  
    31  parser grammar Parser;
    32  
    33  options {
    34      tokenVocab = Lexer;
    35  }
    36  
    37  parse: (sql_stmt_list)* EOF
    38  ;
    39  
    40  sql_stmt_list:
    41      SCOL* sql_stmt (SCOL+ sql_stmt)* SCOL*
    42  ;
    43  
    44  sql_stmt: (EXPLAIN_ (QUERY_ PLAN_)?)? (
    45          alter_table_stmt
    46          | analyze_stmt
    47          | attach_stmt
    48          | begin_stmt
    49          | commit_stmt
    50          | create_index_stmt
    51          | create_table_stmt
    52          | create_trigger_stmt
    53          | create_view_stmt
    54          | create_virtual_table_stmt
    55          | delete_stmt
    56          | delete_stmt_limited
    57          | detach_stmt
    58          | drop_stmt
    59          | insert_stmt
    60          | pragma_stmt
    61          | reindex_stmt
    62          | release_stmt
    63          | rollback_stmt
    64          | savepoint_stmt
    65          | select_stmt
    66          | update_stmt
    67          | update_stmt_limited
    68          | vacuum_stmt
    69      )
    70  ;
    71  
    72  alter_table_stmt:
    73      ALTER_ TABLE_ (schema_name DOT)? table_name (
    74          RENAME_ (
    75              TO_ new_table_name = table_name
    76              | COLUMN_? old_column_name = column_name TO_ new_column_name = column_name
    77          )
    78          | ADD_ COLUMN_? column_def
    79          | DROP_ COLUMN_? column_name
    80      )
    81  ;
    82  
    83  analyze_stmt:
    84      ANALYZE_ (schema_name | (schema_name DOT)? table_or_index_name)?
    85  ;
    86  
    87  attach_stmt:
    88      ATTACH_ DATABASE_? expr AS_ schema_name
    89  ;
    90  
    91  begin_stmt:
    92      BEGIN_ (DEFERRED_ | IMMEDIATE_ | EXCLUSIVE_)? (
    93          TRANSACTION_ transaction_name?
    94      )?
    95  ;
    96  
    97  commit_stmt: (COMMIT_ | END_) TRANSACTION_?
    98  ;
    99  
   100  rollback_stmt:
   101      ROLLBACK_ TRANSACTION_? (TO_ SAVEPOINT_? savepoint_name)?
   102  ;
   103  
   104  savepoint_stmt:
   105      SAVEPOINT_ savepoint_name
   106  ;
   107  
   108  release_stmt:
   109      RELEASE_ SAVEPOINT_? savepoint_name
   110  ;
   111  
   112  create_index_stmt:
   113      CREATE_ UNIQUE_? INDEX_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? index_name ON_ table_name OPEN_PAR
   114          indexed_column (COMMA indexed_column)* CLOSE_PAR (WHERE_ expr)?
   115  ;
   116  
   117  indexed_column: (column_name | expr) (COLLATE_ collation_name)? asc_desc?
   118  ;
   119  
   120  create_table_stmt:
   121      CREATE_ (TEMP_ | TEMPORARY_)? TABLE_ (IF_ NOT_ EXISTS_)? (
   122          schema_name DOT
   123      )? table_name (
   124          OPEN_PAR column_def (COMMA column_def)*? (COMMA table_constraint)* CLOSE_PAR (
   125              WITHOUT_ row_ROW_ID = IDENTIFIER
   126          )?
   127          | AS_ select_stmt
   128      )
   129  ;
   130  
   131  column_def:
   132      column_name type_name? column_constraint*
   133  ;
   134  
   135  type_name:
   136      name+? (
   137          OPEN_PAR signed_number CLOSE_PAR
   138          | OPEN_PAR signed_number COMMA signed_number CLOSE_PAR
   139      )?
   140  ;
   141  
   142  column_constraint: (CONSTRAINT_ name)? (
   143          (PRIMARY_ KEY_ asc_desc? conflict_clause? AUTOINCREMENT_?)
   144          | (NOT_ NULL_ | UNIQUE_) conflict_clause?
   145          | CHECK_ OPEN_PAR expr CLOSE_PAR
   146          | DEFAULT_ (signed_number | literal_value | OPEN_PAR expr CLOSE_PAR)
   147          | COLLATE_ collation_name
   148          | foreign_key_clause
   149          | (GENERATED_ ALWAYS_)? AS_ OPEN_PAR expr CLOSE_PAR (
   150              STORED_
   151              | VIRTUAL_
   152          )?
   153      )
   154  ;
   155  
   156  signed_number: (PLUS | MINUS)? NUMERIC_LITERAL
   157  ;
   158  
   159  table_constraint: (CONSTRAINT_ name)? (
   160          (PRIMARY_ KEY_ | UNIQUE_) OPEN_PAR indexed_column (
   161              COMMA indexed_column
   162          )* CLOSE_PAR conflict_clause?
   163          | CHECK_ OPEN_PAR expr CLOSE_PAR
   164          | FOREIGN_ KEY_ OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR foreign_key_clause
   165      )
   166  ;
   167  
   168  foreign_key_clause:
   169      REFERENCES_ foreign_table (
   170          OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR
   171      )? (
   172          ON_ (DELETE_ | UPDATE_) (
   173              SET_ (NULL_ | DEFAULT_)
   174              | CASCADE_
   175              | RESTRICT_
   176              | NO_ ACTION_
   177          )
   178          | MATCH_ name
   179      )* (NOT_? DEFERRABLE_ (INITIALLY_ (DEFERRED_ | IMMEDIATE_))?)?
   180  ;
   181  
   182  conflict_clause:
   183      ON_ CONFLICT_ (
   184          ROLLBACK_
   185          | ABORT_
   186          | FAIL_
   187          | IGNORE_
   188          | REPLACE_
   189      )
   190  ;
   191  
   192  create_trigger_stmt:
   193      CREATE_ (TEMP_ | TEMPORARY_)? TRIGGER_ (IF_ NOT_ EXISTS_)? (
   194          schema_name DOT
   195      )? trigger_name (BEFORE_ | AFTER_ | INSTEAD_ OF_)? (
   196          DELETE_
   197          | INSERT_
   198          | UPDATE_ (OF_ column_name ( COMMA column_name)*)?
   199      ) ON_ table_name (FOR_ EACH_ ROW_)? (WHEN_ expr)? BEGIN_ (
   200          (update_stmt | insert_stmt | delete_stmt | select_stmt) SCOL
   201      )+ END_
   202  ;
   203  
   204  create_view_stmt:
   205      CREATE_ (TEMP_ | TEMPORARY_)? VIEW_ (IF_ NOT_ EXISTS_)? (
   206          schema_name DOT
   207      )? view_name (OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR)? AS_ select_stmt
   208  ;
   209  
   210  create_virtual_table_stmt:
   211      CREATE_ VIRTUAL_ TABLE_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? table_name USING_ module_name (
   212          OPEN_PAR module_argument (COMMA module_argument)* CLOSE_PAR
   213      )?
   214  ;
   215  
   216  with_clause:
   217      WITH_ RECURSIVE_? cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR (
   218          COMMA cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR
   219      )*
   220  ;
   221  
   222  cte_table_name:
   223      table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)?
   224  ;
   225  
   226  recursive_cte:
   227      cte_table_name AS_ OPEN_PAR initial_select UNION_ ALL_? recursive_select CLOSE_PAR
   228  ;
   229  
   230  common_table_expression:
   231      table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)? AS_ OPEN_PAR select_stmt CLOSE_PAR
   232  ;
   233  
   234  delete_stmt:
   235      with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? returning_clause?
   236  ;
   237  
   238  delete_stmt_limited:
   239      with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? returning_clause? (
   240          order_by_stmt? limit_stmt
   241      )?
   242  ;
   243  
   244  detach_stmt:
   245      DETACH_ DATABASE_? schema_name
   246  ;
   247  
   248  drop_stmt:
   249      DROP_ object = (INDEX_ | TABLE_ | TRIGGER_ | VIEW_) (
   250          IF_ EXISTS_
   251      )? (schema_name DOT)? any_name
   252  ;
   253  
   254  /*
   255   SQLite understands the following binary operators, in order from highest to lowest precedence:
   256      ||
   257      * / %
   258      + -
   259      << >> & |
   260      < <= > >=
   261      = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP
   262      AND
   263      OR
   264   */
   265  expr:
   266      literal_value
   267      | BIND_PARAMETER
   268      | ((schema_name DOT)? table_name DOT)? column_name
   269      | unary_operator expr
   270      | expr PIPE2 expr
   271      | expr ( STAR | DIV | MOD) expr
   272      | expr ( PLUS | MINUS) expr
   273      | expr ( LT2 | GT2 | AMP | PIPE) expr
   274      | expr ( LT | LT_EQ | GT | GT_EQ) expr
   275      | expr (
   276          ASSIGN
   277          | EQ
   278          | NOT_EQ1
   279          | NOT_EQ2
   280          | IS_
   281          | IS_ NOT_
   282          | IN_
   283          | LIKE_
   284          | GLOB_
   285          | MATCH_
   286          | REGEXP_
   287      ) expr
   288      | expr AND_ expr
   289      | expr OR_ expr
   290      | function_name OPEN_PAR ((DISTINCT_? expr ( COMMA expr)*) | STAR)? CLOSE_PAR filter_clause? over_clause?
   291      | OPEN_PAR expr (COMMA expr)* CLOSE_PAR
   292      | CAST_ OPEN_PAR expr AS_ type_name CLOSE_PAR
   293      | expr COLLATE_ collation_name
   294      | expr NOT_? (LIKE_ | GLOB_ | REGEXP_ | MATCH_) expr (
   295          ESCAPE_ expr
   296      )?
   297      | expr ( ISNULL_ | NOTNULL_ | NOT_ NULL_)
   298      | expr IS_ NOT_? expr
   299      | expr NOT_? BETWEEN_ expr AND_ expr
   300      | expr NOT_? IN_ (
   301          OPEN_PAR (select_stmt | expr ( COMMA expr)*)? CLOSE_PAR
   302          | ( schema_name DOT)? table_name
   303          | (schema_name DOT)? table_function_name OPEN_PAR (expr (COMMA expr)*)? CLOSE_PAR
   304      )
   305      | ((NOT_)? EXISTS_)? OPEN_PAR select_stmt CLOSE_PAR
   306      | CASE_ expr? (WHEN_ expr THEN_ expr)+ (ELSE_ expr)? END_
   307      | raise_function
   308  ;
   309  
   310  raise_function:
   311      RAISE_ OPEN_PAR (
   312          IGNORE_
   313          | (ROLLBACK_ | ABORT_ | FAIL_) COMMA error_message
   314      ) CLOSE_PAR
   315  ;
   316  
   317  literal_value:
   318      NUMERIC_LITERAL
   319      | STRING_LITERAL
   320      | BLOB_LITERAL
   321      | NULL_
   322      | TRUE_
   323      | FALSE_
   324      | CURRENT_TIME_
   325      | CURRENT_DATE_
   326      | CURRENT_TIMESTAMP_
   327  ;
   328  
   329  insert_stmt:
   330      with_clause? (
   331          INSERT_
   332          | REPLACE_
   333          | INSERT_ OR_ (
   334              REPLACE_
   335              | ROLLBACK_
   336              | ABORT_
   337              | FAIL_
   338              | IGNORE_
   339          )
   340      ) INTO_ (schema_name DOT)? table_name (AS_ table_alias)? (
   341          OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR
   342      )? (
   343          (
   344              (
   345                  VALUES_ OPEN_PAR expr (COMMA expr)* CLOSE_PAR (
   346                      COMMA OPEN_PAR expr ( COMMA expr)* CLOSE_PAR
   347                  )*
   348                  | select_stmt
   349              ) upsert_clause?
   350          )
   351          | DEFAULT_ VALUES_
   352      ) returning_clause?
   353  ;
   354  
   355  returning_clause:
   356      RETURNING_ result_column (COMMA result_column)*
   357  ;
   358  
   359  upsert_clause:
   360      ON_ CONFLICT_ (
   361          OPEN_PAR indexed_column (COMMA indexed_column)* CLOSE_PAR (WHERE_ expr)?
   362      )? DO_ (
   363          NOTHING_
   364          | UPDATE_ SET_ (
   365              (column_name | column_name_list) ASSIGN expr (
   366                  COMMA (column_name | column_name_list) ASSIGN expr
   367              )* (WHERE_ expr)?
   368          )
   369      )
   370  ;
   371  
   372  pragma_stmt:
   373      PRAGMA_ (schema_name DOT)? pragma_name (
   374          ASSIGN pragma_value
   375          | OPEN_PAR pragma_value CLOSE_PAR
   376      )?
   377  ;
   378  
   379  pragma_value:
   380      signed_number
   381      | name
   382      | STRING_LITERAL
   383  ;
   384  
   385  reindex_stmt:
   386      REINDEX_ (collation_name | (schema_name DOT)? (table_name | index_name))?
   387  ;
   388  
   389  select_stmt:
   390      common_table_stmt? select_core (compound_operator select_core)* order_by_stmt? limit_stmt?
   391  ;
   392  
   393  join_clause:
   394      table_or_subquery (join_operator table_or_subquery join_constraint?)*
   395  ;
   396  
   397  select_core:
   398      (
   399          SELECT_ (DISTINCT_ | ALL_)? result_column (COMMA result_column)* (
   400              FROM_ (table_or_subquery (COMMA table_or_subquery)* | join_clause)
   401          )? (WHERE_ expr)? (GROUP_ BY_ expr (COMMA expr)* (HAVING_ expr)?)? (
   402              WINDOW_ window_name AS_ window_defn (
   403                  COMMA window_name AS_ window_defn
   404              )*
   405          )?
   406      )
   407      | VALUES_ OPEN_PAR expr (COMMA expr)* CLOSE_PAR (
   408          COMMA OPEN_PAR expr ( COMMA expr)* CLOSE_PAR
   409      )*
   410  ;
   411  
   412  factored_select_stmt:
   413      select_stmt
   414  ;
   415  
   416  simple_select_stmt:
   417      common_table_stmt? select_core order_by_stmt? limit_stmt?
   418  ;
   419  
   420  compound_select_stmt:
   421      common_table_stmt? select_core (
   422          (UNION_ ALL_? | INTERSECT_ | EXCEPT_) select_core
   423      )+ order_by_stmt? limit_stmt?
   424  ;
   425  
   426  table_or_subquery: (
   427          (schema_name DOT)? table_name (AS_? table_alias)? (
   428              INDEXED_ BY_ index_name
   429              | NOT_ INDEXED_
   430          )?
   431      )
   432      | (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR (
   433          AS_? table_alias
   434      )?
   435      | OPEN_PAR (table_or_subquery (COMMA table_or_subquery)* | join_clause) CLOSE_PAR
   436      | OPEN_PAR select_stmt CLOSE_PAR (AS_? table_alias)?
   437  ;
   438  
   439  result_column:
   440      STAR
   441      | table_name DOT STAR
   442      | expr ( AS_? column_alias)?
   443  ;
   444  
   445  join_operator:
   446      COMMA
   447      | NATURAL_? (LEFT_ OUTER_? | INNER_ | CROSS_)? JOIN_
   448  ;
   449  
   450  join_constraint:
   451      ON_ expr
   452      | USING_ OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR
   453  ;
   454  
   455  compound_operator:
   456      UNION_ ALL_?
   457      | INTERSECT_
   458      | EXCEPT_
   459  ;
   460  
   461  update_stmt:
   462      with_clause? UPDATE_ (
   463          OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_)
   464      )? qualified_table_name SET_ assignment_list (
   465          FROM_ (table_or_subquery (COMMA table_or_subquery)* | join_clause)
   466      )? (WHERE_ where = expr)? returning_clause?
   467  ;
   468  
   469  assignment_list:
   470      assignment
   471      (COMMA assignment)*
   472  ;
   473  
   474  assignment:
   475      (column_name | column_name_list) ASSIGN expr
   476  ;
   477  
   478  column_name_list:
   479      OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR
   480  ;
   481  
   482  update_stmt_limited:
   483      with_clause? UPDATE_ (
   484          OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_)
   485      )? qualified_table_name SET_ (column_name | column_name_list) ASSIGN expr (
   486          COMMA (column_name | column_name_list) ASSIGN expr
   487      )* (WHERE_ expr)? returning_clause? (order_by_stmt? limit_stmt)?
   488  ;
   489  
   490  qualified_table_name: (schema_name DOT)? table_name (AS_ alias)? (
   491          INDEXED_ BY_ index_name
   492          | NOT_ INDEXED_
   493      )?
   494  ;
   495  
   496  vacuum_stmt:
   497      VACUUM_ schema_name? (INTO_ filename)?
   498  ;
   499  
   500  filter_clause:
   501      FILTER_ OPEN_PAR WHERE_ expr CLOSE_PAR
   502  ;
   503  
   504  window_defn:
   505      OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? (
   506          ORDER_ BY_ ordering_term (COMMA ordering_term)*
   507      ) frame_spec? CLOSE_PAR
   508  ;
   509  
   510  over_clause:
   511      OVER_ (
   512          window_name
   513          | OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? (
   514              ORDER_ BY_ ordering_term (COMMA ordering_term)*
   515          )? frame_spec? CLOSE_PAR
   516      )
   517  ;
   518  
   519  frame_spec:
   520      frame_clause (
   521          EXCLUDE_ (NO_ OTHERS_)
   522          | CURRENT_ ROW_
   523          | GROUP_
   524          | TIES_
   525      )?
   526  ;
   527  
   528  frame_clause: (RANGE_ | ROWS_ | GROUPS_) (
   529          frame_single
   530          | BETWEEN_ frame_left AND_ frame_right
   531      )
   532  ;
   533  
   534  simple_function_invocation:
   535      simple_func OPEN_PAR (expr (COMMA expr)* | STAR) CLOSE_PAR
   536  ;
   537  
   538  aggregate_function_invocation:
   539      aggregate_func OPEN_PAR (DISTINCT_? expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause?
   540  ;
   541  
   542  window_function_invocation:
   543      window_function OPEN_PAR (expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause? OVER_ (
   544          window_defn
   545          | window_name
   546      )
   547  ;
   548  
   549  common_table_stmt: //additional structures
   550      WITH_ RECURSIVE_? common_table_expression (COMMA common_table_expression)*
   551  ;
   552  
   553  order_by_stmt:
   554      ORDER_ BY_ ordering_term (COMMA ordering_term)*
   555  ;
   556  
   557  limit_stmt:
   558      LIMIT_ expr ((OFFSET_ | COMMA) expr)?
   559  ;
   560  
   561  ordering_term:
   562      expr (COLLATE_ collation_name)? asc_desc? (NULLS_ (FIRST_ | LAST_))?
   563  ;
   564  
   565  asc_desc:
   566      ASC_
   567      | DESC_
   568  ;
   569  
   570  frame_left:
   571      expr PRECEDING_
   572      | expr FOLLOWING_
   573      | CURRENT_ ROW_
   574      | UNBOUNDED_ PRECEDING_
   575  ;
   576  
   577  frame_right:
   578      expr PRECEDING_
   579      | expr FOLLOWING_
   580      | CURRENT_ ROW_
   581      | UNBOUNDED_ FOLLOWING_
   582  ;
   583  
   584  frame_single:
   585      expr PRECEDING_
   586      | UNBOUNDED_ PRECEDING_
   587      | CURRENT_ ROW_
   588  ;
   589  
   590  // unknown
   591  
   592  window_function:
   593      (FIRST_VALUE_ | LAST_VALUE_) OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc frame_clause
   594          ? CLOSE_PAR
   595      | (CUME_DIST_ | PERCENT_RANK_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr? CLOSE_PAR
   596      | (DENSE_RANK_ | RANK_ | ROW_NUMBER_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc
   597          CLOSE_PAR
   598      | (LAG_ | LEAD_) OPEN_PAR expr offset? default_value? CLOSE_PAR OVER_ OPEN_PAR partition_by?
   599          order_by_expr_asc_desc CLOSE_PAR
   600      | NTH_VALUE_ OPEN_PAR expr COMMA signed_number CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc
   601          frame_clause? CLOSE_PAR
   602      | NTILE_ OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc CLOSE_PAR
   603  ;
   604  
   605  offset:
   606      COMMA signed_number
   607  ;
   608  
   609  default_value:
   610      COMMA signed_number
   611  ;
   612  
   613  partition_by:
   614      PARTITION_ BY_ expr+
   615  ;
   616  
   617  order_by_expr:
   618      ORDER_ BY_ expr+
   619  ;
   620  
   621  order_by_expr_asc_desc:
   622      ORDER_ BY_ expr_asc_desc
   623  ;
   624  
   625  expr_asc_desc:
   626      expr asc_desc? (COMMA expr asc_desc?)*
   627  ;
   628  
   629  //TODO BOTH OF THESE HAVE TO BE REWORKED TO FOLLOW THE SPEC
   630  initial_select:
   631      select_stmt
   632  ;
   633  
   634  recursive_select:
   635      select_stmt
   636  ;
   637  
   638  unary_operator:
   639      MINUS
   640      | PLUS
   641      | TILDE
   642      | NOT_
   643  ;
   644  
   645  error_message:
   646      STRING_LITERAL
   647  ;
   648  
   649  module_argument: // TODO check what exactly is permitted here
   650      expr
   651      | column_def
   652  ;
   653  
   654  column_alias:
   655      IDENTIFIER
   656      | STRING_LITERAL
   657  ;
   658  
   659  keyword:
   660      ABORT_
   661      | ACTION_
   662      | ADD_
   663      | AFTER_
   664      | ALL_
   665      | ALTER_
   666      | ANALYZE_
   667      | AND_
   668      | AS_
   669      | ASC_
   670      | ATTACH_
   671      | AUTOINCREMENT_
   672      | BEFORE_
   673      | BEGIN_
   674      | BETWEEN_
   675      | BY_
   676      | CASCADE_
   677      | CASE_
   678      | CAST_
   679      | CHECK_
   680      | COLLATE_
   681      | COLUMN_
   682      | COMMIT_
   683      | CONFLICT_
   684      | CONSTRAINT_
   685      | CREATE_
   686      | CROSS_
   687      | CURRENT_DATE_
   688      | CURRENT_TIME_
   689      | CURRENT_TIMESTAMP_
   690      | DATABASE_
   691      | DEFAULT_
   692      | DEFERRABLE_
   693      | DEFERRED_
   694      | DELETE_
   695      | DESC_
   696      | DETACH_
   697      | DISTINCT_
   698      | DROP_
   699      | EACH_
   700      | ELSE_
   701      | END_
   702      | ESCAPE_
   703      | EXCEPT_
   704      | EXCLUSIVE_
   705      | EXISTS_
   706      | EXPLAIN_
   707      | FAIL_
   708      | FOR_
   709      | FOREIGN_
   710      | FROM_
   711      | FULL_
   712      | GLOB_
   713      | GROUP_
   714      | HAVING_
   715      | IF_
   716      | IGNORE_
   717      | IMMEDIATE_
   718      | IN_
   719      | INDEX_
   720      | INDEXED_
   721      | INITIALLY_
   722      | INNER_
   723      | INSERT_
   724      | INSTEAD_
   725      | INTERSECT_
   726      | INTO_
   727      | IS_
   728      | ISNULL_
   729      | JOIN_
   730      | KEY_
   731      | LEFT_
   732      | LIKE_
   733      | LIMIT_
   734      | MATCH_
   735      | NATURAL_
   736      | NO_
   737      | NOT_
   738      | NOTNULL_
   739      | NULL_
   740      | OF_
   741      | OFFSET_
   742      | ON_
   743      | OR_
   744      | ORDER_
   745      | OUTER_
   746      | PLAN_
   747      | PRAGMA_
   748      | PRIMARY_
   749      | QUERY_
   750      | RAISE_
   751      | RECURSIVE_
   752      | REFERENCES_
   753      | REGEXP_
   754      | REINDEX_
   755      | RELEASE_
   756      | RENAME_
   757      | REPLACE_
   758      | RESTRICT_
   759      | RIGHT_
   760      | ROLLBACK_
   761      | ROW_
   762      | ROWS_
   763      | SAVEPOINT_
   764      | SELECT_
   765      | SET_
   766      | TABLE_
   767      | TEMP_
   768      | TEMPORARY_
   769      | THEN_
   770      | TO_
   771      | TRANSACTION_
   772      | TRIGGER_
   773      | UNION_
   774      | UNIQUE_
   775      | UPDATE_
   776      | USING_
   777      | VACUUM_
   778      | VALUES_
   779      | VIEW_
   780      | VIRTUAL_
   781      | WHEN_
   782      | WHERE_
   783      | WITH_
   784      | WITHOUT_
   785      | FIRST_VALUE_
   786      | OVER_
   787      | PARTITION_
   788      | RANGE_
   789      | PRECEDING_
   790      | UNBOUNDED_
   791      | CURRENT_
   792      | FOLLOWING_
   793      | CUME_DIST_
   794      | DENSE_RANK_
   795      | LAG_
   796      | LAST_VALUE_
   797      | LEAD_
   798      | NTH_VALUE_
   799      | NTILE_
   800      | PERCENT_RANK_
   801      | RANK_
   802      | ROW_NUMBER_
   803      | GENERATED_
   804      | ALWAYS_
   805      | STORED_
   806      | TRUE_
   807      | FALSE_
   808      | WINDOW_
   809      | NULLS_
   810      | FIRST_
   811      | LAST_
   812      | FILTER_
   813      | GROUPS_
   814      | EXCLUDE_
   815  ;
   816  
   817  // TODO: check all names below
   818  
   819  name:
   820      any_name
   821  ;
   822  
   823  function_name:
   824      any_name
   825  ;
   826  
   827  schema_name:
   828      any_name
   829  ;
   830  
   831  table_name:
   832      any_name
   833  ;
   834  
   835  table_or_index_name:
   836      any_name
   837  ;
   838  
   839  column_name:
   840      any_name
   841  ;
   842  
   843  collation_name:
   844      any_name
   845  ;
   846  
   847  foreign_table:
   848      any_name
   849  ;
   850  
   851  index_name:
   852      any_name
   853  ;
   854  
   855  trigger_name:
   856      any_name
   857  ;
   858  
   859  view_name:
   860      any_name
   861  ;
   862  
   863  module_name:
   864      any_name
   865  ;
   866  
   867  pragma_name:
   868      any_name
   869  ;
   870  
   871  savepoint_name:
   872      any_name
   873  ;
   874  
   875  table_alias:
   876      any_name
   877  ;
   878  
   879  transaction_name:
   880      any_name
   881  ;
   882  
   883  window_name:
   884      any_name
   885  ;
   886  
   887  alias:
   888      any_name
   889  ;
   890  
   891  filename:
   892      any_name
   893  ;
   894  
   895  base_window_name:
   896      any_name
   897  ;
   898  
   899  simple_func:
   900      any_name
   901  ;
   902  
   903  aggregate_func:
   904      any_name
   905  ;
   906  
   907  table_function_name:
   908      any_name
   909  ;
   910  
   911  any_name:
   912      IDENTIFIER
   913      | keyword
   914      | STRING_LITERAL
   915      | OPEN_PAR any_name CLOSE_PAR
   916  ;