You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2015/09/07 09:07:51 UTC

[7/8] tajo git commit: TAJO-1818: Separate sql parser into an independent maven module.

http://git-wip-us.apache.org/repos/asf/tajo/blob/d6bc9118/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4 b/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
deleted file mode 100644
index 41de218..0000000
--- a/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
+++ /dev/null
@@ -1,1639 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parser grammar SQLParser;
-
-options {
-	language=Java;
-	tokenVocab=SQLLexer;
-}
-
-@header {
-}
-
-@members {
-}
-
-/*
-===============================================================================
-  SQL statement (Start Symbol)
-===============================================================================
-*/
-sql
-  : (explain_clause)? statement (SEMI_COLON)? EOF
-  ;
-
-explain_clause
-  : EXPLAIN (GLOBAL)?
-  ;
-
-statement
-  : session_statement
-  | data_statement
-  | data_change_statement
-  | schema_statement
-  | index_statement
-  ;
-
-session_statement
-  : SET CATALOG dbname = identifier
-  | SET TIME ZONE (TO | EQUAL)? (Character_String_Literal | signed_numerical_literal | DEFAULT)
-  | SET (SESSION)? name=identifier (TO | EQUAL)?
-    (Character_String_Literal | signed_numerical_literal | boolean_literal | DEFAULT)
-  | RESET name=identifier
-  ;
-
-data_statement
-  : query_expression
-  ;
-
-data_change_statement
-  : insert_statement
-  ;
-
-schema_statement
-  : database_definition
-  | drop_database_statement
-  | create_table_statement
-  | drop_table_statement
-  | alter_tablespace_statement
-  | alter_table_statement
-  | truncate_table_statement
-  ;
-
-index_statement
-  : create_index_statement
-  | drop_index_statement
-  ;
-
-create_index_statement
-  : CREATE (u=UNIQUE)? INDEX index_name = identifier ON table_name (method_specifier)?
-    LEFT_PAREN sort_specifier_list RIGHT_PAREN param_clause? (where_clause)? (LOCATION path=Character_String_Literal)?
-  ;
-
-drop_index_statement
-  : DROP INDEX index_name = identifier
-  ;
-
-database_definition
-  : CREATE DATABASE (if_not_exists)? dbname = identifier
-  ;
-
-if_not_exists
-  : IF NOT EXISTS
-  ;
-
-drop_database_statement
-  : DROP DATABASE (if_exists)? dbname = identifier
-  ;
-
-if_exists
-  : IF EXISTS
-  ;
-
-create_table_statement
-  : CREATE EXTERNAL TABLE (if_not_exists)? table_name table_elements (TABLESPACE spacename=identifier)? USING storage_type=identifier
-    (param_clause)? (table_partitioning_clauses)? (LOCATION uri=Character_String_Literal)?
-  | CREATE TABLE (if_not_exists)? table_name table_elements (TABLESPACE spacename=identifier)? (USING storage_type=identifier)?
-    (param_clause)? (table_partitioning_clauses)? (AS query_expression)?
-  | CREATE TABLE (if_not_exists)? table_name (TABLESPACE spacename=identifier)? (USING storage_type=identifier)?
-    (param_clause)? (table_partitioning_clauses)? AS query_expression
-  | CREATE TABLE (if_not_exists)? table_name LIKE like_table_name=table_name
-  ;
-
-table_elements
-  : LEFT_PAREN field_element (COMMA field_element)* RIGHT_PAREN
-  ;
-
-field_element
-  : name=identifier field_type
-  ;
-
-field_type
-  : data_type
-  ;
-
-param_clause
-  : WITH LEFT_PAREN param (COMMA param)* RIGHT_PAREN
-  ;
-
-param
-  : key=Character_String_Literal EQUAL value=numeric_value_expression
-  ;
-
-method_specifier
-  : USING m=identifier
-  ;
-
-table_space_specifier
-  : TABLESPACE table_space_name
-  ;
-
-table_space_name
-  : identifier
-  ;
-
-table_partitioning_clauses
-  : range_partitions
-  | hash_partitions
-  | list_partitions
-  | column_partitions
-  ;
-
-range_partitions
-  : PARTITION BY RANGE LEFT_PAREN column_reference_list RIGHT_PAREN
-    LEFT_PAREN range_value_clause_list RIGHT_PAREN
-  ;
-
-range_value_clause_list
-  : range_value_clause (COMMA range_value_clause)*
-  ;
-
-range_value_clause
-  : PARTITION partition_name VALUES LESS THAN (LEFT_PAREN value_expression RIGHT_PAREN | LEFT_PAREN? MAXVALUE RIGHT_PAREN?)
-  ;
-
-hash_partitions
-  : PARTITION BY HASH LEFT_PAREN column_reference_list RIGHT_PAREN
-    (LEFT_PAREN individual_hash_partitions RIGHT_PAREN | hash_partitions_by_quantity)
-  ;
-
-individual_hash_partitions
-  : individual_hash_partition (COMMA individual_hash_partition)*
-  ;
-
-individual_hash_partition
-  : PARTITION partition_name
-  ;
-
-hash_partitions_by_quantity
-  : PARTITIONS quantity = numeric_value_expression
-  ;
-
-list_partitions
-  : PARTITION BY LIST LEFT_PAREN column_reference_list RIGHT_PAREN LEFT_PAREN  list_value_clause_list RIGHT_PAREN
-  ;
-
-list_value_clause_list
-  : list_value_partition (COMMA list_value_partition)*
-  ;
-
-list_value_partition
-  : PARTITION partition_name VALUES (IN)? LEFT_PAREN in_value_list RIGHT_PAREN
-  ;
-
-column_partitions
-  : PARTITION BY COLUMN table_elements
-  ;
-
-partition_name
-  : identifier
-  ;
-
-truncate_table_statement
-  : TRUNCATE (TABLE)? table_name (COMMA table_name)*
-  ;
-
-/*
-===============================================================================
-  11.21 <data types>
-===============================================================================
-*/
-
-drop_table_statement
-  : DROP TABLE (if_exists)? table_name (PURGE)?
-  ;
-
-/*
-===============================================================================
-  5.2 <token and separator>
-
-  Specifying lexical units (tokens and separators) that participate in SQL language
-===============================================================================
-*/
-
-identifier
-  : Regular_Identifier
-  | nonreserved_keywords
-  | Quoted_Identifier
-  ;
-
-nonreserved_keywords
-  : ADD
-  | AVG
-  | ALTER
-  | BETWEEN
-  | BY
-  | CATALOG
-  | CENTURY
-  | CHARACTER
-  | COALESCE
-  | COLLECT
-  | COLUMN
-  | COUNT
-  | CUBE
-  | CUME_DIST
-  | CURRENT
-  | DAY
-  | DEC
-  | DECADE
-  | DEFAULT
-  | DENSE_RANK
-  | DOW
-  | DOY
-  | DROP
-  | EPOCH
-  | EVERY
-  | EXISTS
-  | EXCLUDE
-  | EXPLAIN
-  | EXTERNAL
-  | EXTRACT
-  | FILTER
-  | FIRST
-  | FIRST_VALUE
-  | FOLLOWING
-  | FORMAT
-  | FUSION
-  | GROUPING
-  | HASH
-  | INDEX
-  | INSERT
-  | INTERSECTION
-  | ISODOW
-  | ISOYEAR
-  | LAST
-  | LAST_VALUE
-  | LESS
-  | LIST
-  | LOCATION
-  | MAP
-  | MAX
-  | MAXVALUE
-  | MICROSECONDS
-  | MILLENNIUM
-  | MILLISECONDS
-  | MIN
-  | MINUTE
-  | MONTH
-  | NATIONAL
-  | NO
-  | NULLIF
-  | OVERWRITE
-  | OTHERS
-  | PARTITION
-  | PARTITIONS
-  | PERCENT_RANK
-  | PRECEDING
-  | PRECISION
-  | PURGE
-  | QUARTER
-  | RANGE
-  | RANK
-  | RECORD
-  | REGEXP
-  | RENAME
-  | RESET
-  | RLIKE
-  | ROLLUP
-  | ROW
-  | ROWS
-  | ROW_NUMBER
-  | SECOND
-  | SET
-  | SESSION
-  | SIMILAR
-  | STDDEV_POP
-  | STDDEV_SAMP
-  | SUBPARTITION
-  | SUM
-  | TABLESPACE
-  | THAN
-  | TIES
-  | TIMEZONE
-  | TIMEZONE_HOUR
-  | TIMEZONE_MINUTE
-  | TRIM
-  | TO
-  | UNBOUNDED
-  | UNKNOWN
-  | VALUES
-  | VAR_POP
-  | VAR_SAMP
-  | VARYING
-  | WEEK
-  | YEAR
-  | ZONE
-
-  | BIGINT
-  | BIT
-  | BLOB
-  | BOOL
-  | BOOLEAN
-  | BYTEA
-  | CHAR
-  | DATE
-  | DECIMAL
-  | DOUBLE
-  | FLOAT
-  | FLOAT4
-  | FLOAT8
-  | INET4
-  | INT
-  | INT1
-  | INT2
-  | INT4
-  | INT8
-  | INTEGER
-  | INTERVAL
-  | NCHAR
-  | NUMERIC
-  | NVARCHAR
-  | REAL
-  | SMALLINT
-  | TEXT
-  | TIME
-  | TIMESTAMP
-  | TIMESTAMPTZ
-  | TIMETZ
-  | TINYINT
-  | VARBINARY
-  | VARBIT
-  | VARCHAR
-  ;
-
-/*
-===============================================================================
-  5.3 <literal>
-===============================================================================
-*/
-
-unsigned_literal
-  : unsigned_numeric_literal
-  | general_literal
-  ;
-
-general_literal
-  : Character_String_Literal
-  | datetime_literal
-  | boolean_literal
-  ;
-
-datetime_literal
-  : timestamp_literal
-  | time_literal
-  | date_literal
-  | interval_literal
-  ;
-
-time_literal
-  : TIME time_string=Character_String_Literal
-  ;
-
-timestamp_literal
-  : TIMESTAMP timestamp_string=Character_String_Literal
-  ;
-
-date_literal
-  : DATE date_string=Character_String_Literal
-  ;
-
-interval_literal
-  : INTERVAL interval_string=Character_String_Literal
-  ;
-
-boolean_literal
-  : TRUE | FALSE | UNKNOWN
-  ;
-
-/*
-===============================================================================
-  6.1 <data types>
-===============================================================================
-*/
-
-data_type
-  : predefined_type
-  ;
-
-predefined_type
-  : character_string_type
-  | national_character_string_type
-  | binary_large_object_string_type
-  | numeric_type
-  | boolean_type
-  | datetime_type
-  | bit_type
-  | binary_type
-  | network_type
-  | record_type
-  | map_type
-  ;
-
-character_string_type
-  : CHARACTER type_length?
-  | CHAR type_length?
-  | CHARACTER VARYING type_length?
-  | CHAR VARYING type_length?
-  | VARCHAR type_length?
-  | TEXT
-  ;
-
-type_length
-  : LEFT_PAREN NUMBER RIGHT_PAREN
-  ;
-
-national_character_string_type
-  : NATIONAL CHARACTER type_length?
-  | NATIONAL CHAR type_length?
-  | NCHAR type_length?
-  | NATIONAL CHARACTER VARYING type_length?
-  | NATIONAL CHAR VARYING type_length?
-  | NCHAR VARYING type_length?
-  | NVARCHAR type_length?
-  ;
-
-binary_large_object_string_type
-  : BLOB type_length?
-  | BYTEA type_length?
-  ;
-
-numeric_type
-  : exact_numeric_type | approximate_numeric_type
-  ;
-
-exact_numeric_type
-  : NUMERIC (precision_param)?
-  | DECIMAL (precision_param)?
-  | DEC (precision_param)?
-  | INT1
-  | TINYINT
-  | INT2
-  | SMALLINT
-  | INT4
-  | INT
-  | INTEGER
-  | INT8
-  | BIGINT
-  ;
-
-approximate_numeric_type
-  : FLOAT (precision_param)?
-  | FLOAT4
-  | REAL
-  | FLOAT8
-  | DOUBLE
-  | DOUBLE PRECISION
-  ;
-
-precision_param
-  : LEFT_PAREN precision=NUMBER RIGHT_PAREN
-  | LEFT_PAREN precision=NUMBER COMMA scale=NUMBER RIGHT_PAREN
-  ;
-
-boolean_type
-  : BOOLEAN
-  | BOOL
-  ;
-
-datetime_type
-  : DATE
-  | INTERVAL
-  | TIME
-  | TIME WITH TIME ZONE
-  | TIMETZ
-  | TIMESTAMP
-  | TIMESTAMP WITH TIME ZONE
-  | TIMESTAMPTZ
-  ;
-
-bit_type
-  : BIT type_length?
-  | VARBIT type_length?
-  | BIT VARYING type_length?
-  ;
-
-binary_type
-  : BINARY type_length?
-  | BINARY VARYING type_length?
-  | VARBINARY type_length?
-  ;
-
-network_type
-  : INET4
-  ;
-
-record_type
-  : RECORD table_elements
-  ;
-
-map_type
-  : MAP LTH key_type=data_type COMMA value_type=data_type GTH
-  ;
-
-/*
-===============================================================================
-  6.3 <value_expression_primary>
-===============================================================================
-*/
-value_expression_primary
-  : parenthesized_value_expression
-  | nonparenthesized_value_expression_primary
-  ;
-
-parenthesized_value_expression
-  : LEFT_PAREN value_expression RIGHT_PAREN
-  ;
-
-nonparenthesized_value_expression_primary
-  : unsigned_value_specification
-  | column_reference
-  | set_function_specification
-  | window_function
-  | scalar_subquery
-  | case_expression
-  | cast_specification
-  | routine_invocation
-  ;
-
-/*
-===============================================================================
-  6.4 <unsigned value specification>
-===============================================================================
-*/
-
-unsigned_value_specification
-  : unsigned_literal
-  ;
-
-unsigned_numeric_literal
-  : NUMBER
-  | REAL_NUMBER
-  ;
-
-signed_numerical_literal
-  : sign? unsigned_numeric_literal
-  ;
-
-/*
-===============================================================================
-  6.9 <set function specification>
-
-  Invoke an SQL-invoked routine.
-===============================================================================
-*/
-set_function_specification
-  : aggregate_function
-  ;
-
-aggregate_function
-  : COUNT LEFT_PAREN MULTIPLY RIGHT_PAREN
-  | general_set_function filter_clause?
-  ;
-
-general_set_function
-  : set_function_type LEFT_PAREN set_qualifier? value_expression RIGHT_PAREN
-  ;
-
-set_function_type
-  : AVG
-  | MAX
-  | MIN
-  | SUM
-  | EVERY
-  | ANY
-  | SOME
-  | COUNT
-  | STDDEV_POP
-  | STDDEV_SAMP
-  | VAR_SAMP
-  | VAR_POP
-  | COLLECT
-  | FUSION
-  | INTERSECTION
-  ;
-
-filter_clause
-  : FILTER LEFT_PAREN WHERE search_condition RIGHT_PAREN
-  ;
-
-grouping_operation
-  : GROUPING LEFT_PAREN column_reference_list RIGHT_PAREN
-  ;
-
-/*
-===============================================================================
-  6.10 window function
-===============================================================================
-*/
-
-window_function
-  : window_function_type OVER window_name_or_specification
-  ;
-
-window_function_type
-  : rank_function_type LEFT_PAREN RIGHT_PAREN
-  | ROW_NUMBER LEFT_PAREN RIGHT_PAREN
-  | aggregate_function
-  | FIRST_VALUE LEFT_PAREN column_reference RIGHT_PAREN
-  | LAST_VALUE LEFT_PAREN column_reference RIGHT_PAREN
-  | LAG LEFT_PAREN column_reference ( COMMA numeric_value_expression ( COMMA common_value_expression )? )? RIGHT_PAREN
-  | LEAD LEFT_PAREN column_reference ( COMMA numeric_value_expression ( COMMA common_value_expression )? )? RIGHT_PAREN
-  ;
-
-rank_function_type
-  : RANK | DENSE_RANK | PERCENT_RANK | CUME_DIST
-  ;
-
-
-window_name_or_specification
-  : window_name
-  | window_specification
-  ;
-
-/*
-===============================================================================
-  6.11 <case expression>
-===============================================================================
-*/
-
-case_expression
-  : case_specification
-  ;
-
-case_abbreviation
-  : NULLIF LEFT_PAREN numeric_value_expression COMMA boolean_value_expression  RIGHT_PAREN
-  | COALESCE LEFT_PAREN numeric_value_expression ( COMMA boolean_value_expression  )+ RIGHT_PAREN
-  ;
-
-case_specification
-  : simple_case
-  | searched_case
-  ;
-
-simple_case
-  : CASE boolean_value_expression ( simple_when_clause )+ ( else_clause  )? END
-  ;
-
-searched_case
-  : CASE (searched_when_clause)+ (else_clause)? END
-  ;
-
-simple_when_clause : WHEN search_condition THEN result ;
-
-searched_when_clause
-  : WHEN c=search_condition THEN r=result
-  ;
-
-else_clause
-  : ELSE r=result
-  ;
-
-result
-  : value_expression | NULL
-  ;
-
-/*
-===============================================================================
-  6.12 <cast specification>
-===============================================================================
-*/
-
-cast_specification
-  : CAST LEFT_PAREN cast_operand AS cast_target RIGHT_PAREN
-  ;
-
-cast_operand
-  : value_expression
-  ;
-
-cast_target
-  : data_type
-  ;
-
-/*
-===============================================================================
-  6.25 <value expression>
-===============================================================================
-*/
-value_expression
-  : common_value_expression
-  | row_value_expression
-  | boolean_value_expression
-  ;
-
-common_value_expression
-  : numeric_value_expression
-  | string_value_expression
-  | datetime_value_expression
-  | NULL
-  ;
-
-/*
-===============================================================================
-  6.26 <numeric value expression>
-
-  Specify a comparison of two row values.
-===============================================================================
-*/
-
-numeric_value_expression
-  : left=term ((PLUS|MINUS) right=term)*
-  ;
-
-term
-  : left=factor ((MULTIPLY|DIVIDE|MODULAR) right=factor)*
-  ;
-
-factor
-  : (sign)? numeric_primary
-  ;
-
-array
-  : LEFT_PAREN numeric_value_expression (COMMA numeric_value_expression )* RIGHT_PAREN
-  ;
-
-numeric_primary
-  : value_expression_primary (CAST_EXPRESSION cast_target)*
-  | numeric_value_function
-  ;
-
-sign
-  : PLUS | MINUS
-  ;
-
-/*
-===============================================================================
-  6.27 <numeric value function>
-===============================================================================
-*/
-
-numeric_value_function
-  : extract_expression
-  | datetime_value_function
-  ;
-
-extract_expression
-  : EXTRACT LEFT_PAREN extract_field_string=extract_field FROM extract_source RIGHT_PAREN
-  ;
-
-extract_field
-  : primary_datetime_field
-  | time_zone_field
-  | extended_datetime_field
-  ;
-
-time_zone_field
-  : TIMEZONE | TIMEZONE_HOUR | TIMEZONE_MINUTE
-  ;
-
-extract_source
-  : datetime_value_expression
-  ;
-
-/*
-===============================================================================
-  6.28 <string value expression>
-===============================================================================
-*/
-
-string_value_expression
-  : character_value_expression
-  ;
-
-character_value_expression
-  : character_factor (CONCATENATION_OPERATOR character_factor)*
-  ;
-
-character_factor
-  : character_primary
-  ;
-
-character_primary
-  : value_expression_primary
-  | string_value_function
-  ;
-
-/*
-===============================================================================
-  6.29 <string value function>
-===============================================================================
-*/
-
-string_value_function
-  : trim_function
-  ;
-
-trim_function
-  : TRIM LEFT_PAREN trim_operands RIGHT_PAREN
-  ;
-
-trim_operands
-  : ((trim_specification)? (trim_character=character_value_expression)? FROM)? trim_source=character_value_expression
-  | trim_source=character_value_expression COMMA trim_character=character_value_expression
-  ;
-
-trim_specification
-  : LEADING | TRAILING | BOTH
-  ;
-
-/*
-===============================================================================
-  6.30 <datetime_value_expression>
-===============================================================================
-*/
-datetime_value_expression
-  : datetime_term
-  ;
-datetime_term
-  : datetime_factor
-  ;
-
-datetime_factor
-  : datetime_primary
-  ;
-
-datetime_primary
-  : value_expression_primary
-  | datetime_value_function
-  ;
-
-/*
-===============================================================================
-  6.31 <datetime_value_function>
-===============================================================================
-*/
-
-datetime_value_function
-  : current_date_value_function
-  | current_time_value_function
-  | current_timestamp_value_function
-  ;
-
-current_date_value_function
-  : CURRENT_DATE
-  | CURRENT_DATE LEFT_PAREN RIGHT_PAREN
-  ;
-
-current_time_value_function
-  : CURRENT_TIME
-  | CURRENT_TIME LEFT_PAREN RIGHT_PAREN
-  ;
-
-current_timestamp_value_function
-  : CURRENT_TIMESTAMP
-  ;
-
-/*
-===============================================================================
-  6.34 <boolean value expression>
-===============================================================================
-*/
-
-boolean_value_expression
-  : or_predicate
-  ;
-
-or_predicate
-  : and_predicate (OR or_predicate)*
-  ;
-
-and_predicate
-  : boolean_factor (AND and_predicate)*
-  ;
-
-boolean_factor
-  : boolean_test
-  | NOT boolean_test
-  ;
-
-boolean_test
-  : boolean_primary is_clause?
-  ;
-
-is_clause
-  : IS NOT? t=truth_value
-  ;
-
-truth_value
-  : TRUE | FALSE | UNKNOWN
-  ;
-
-boolean_primary
-  : predicate
-  | boolean_predicand
-  ;
-
-boolean_predicand
-  : parenthesized_boolean_value_expression
-  | nonparenthesized_value_expression_primary
-  ;
-
-parenthesized_boolean_value_expression
-  : LEFT_PAREN boolean_value_expression RIGHT_PAREN
-  ;
-
-/*
-===============================================================================
-  7.2 <row value expression>
-===============================================================================
-*/
-row_value_expression
-  : row_value_special_case
-  | explicit_row_value_constructor
-  ;
-
-row_value_special_case
-  : nonparenthesized_value_expression_primary
-  ;
-
-explicit_row_value_constructor
-  : NULL
-  ;
-
-row_value_predicand
-  : row_value_special_case
-  | row_value_constructor_predicand
-  ;
-
-row_value_constructor_predicand
-  : common_value_expression
-  | boolean_predicand
-//  | explicit_row_value_constructor
-  ;
-
-/*
-===============================================================================
-  7.4 <table expression>
-===============================================================================
-*/
-
-table_expression
-  : from_clause
-    where_clause?
-    groupby_clause?
-    having_clause?
-    orderby_clause?
-    window_clause?
-    limit_clause?
-  ;
-
-/*
-===============================================================================
-  7.5 <from clause>
-===============================================================================
-*/
-
-from_clause
-  : FROM table_reference_list
-  ;
-
-table_reference_list
-  :table_reference (COMMA table_reference)*
-  ;
-
-/*
-===============================================================================
-  7.6 <table reference>
-===============================================================================
-*/
-
-table_reference
-  : joined_table
-  | table_primary
-  ;
-
-/*
-===============================================================================
-  7.7 <joined table>
-===============================================================================
-*/
-
-joined_table
-  : table_primary joined_table_primary+
-  ;
-
-joined_table_primary
-  : CROSS JOIN right=table_primary
-  | (t=join_type)? JOIN right=table_primary s=join_specification
-  | NATURAL (t=join_type)? JOIN right=table_primary
-  | UNION JOIN right=table_primary
-  ;
-
-cross_join
-  : CROSS JOIN r=table_primary
-  ;
-
-qualified_join
-  : (t=join_type)? JOIN r=table_primary s=join_specification
-  ;
-
-natural_join
-  : NATURAL (t=join_type)? JOIN r=table_primary
-  ;
-
-union_join
-  : UNION JOIN r=table_primary
-  ;
-
-join_type
-  : INNER
-  | t=outer_join_type
-  ;
-
-outer_join_type
-  : outer_join_type_part2 OUTER?
-  ;
-
-outer_join_type_part2
-  : LEFT
-  | RIGHT
-  | FULL
-  ;
-
-join_specification
-  : join_condition
-  | named_columns_join
-  ;
-
-join_condition
-  : ON search_condition
-  ;
-
-named_columns_join
-  : USING LEFT_PAREN f=column_reference_list RIGHT_PAREN
-  ;
-
-table_primary
-  : table_or_query_name ((AS)? alias=identifier)? (LEFT_PAREN column_name_list RIGHT_PAREN)?
-  | derived_table (AS)? name=identifier (LEFT_PAREN column_name_list RIGHT_PAREN)?
-  ;
-
-column_name_list
-  :  identifier  ( COMMA identifier  )*
-  ;
-
-derived_table
-  : table_subquery
-  ;
-
-/*
-===============================================================================
-  7.8 <where clause>
-===============================================================================
-*/
-where_clause
-  : WHERE search_condition
-  ;
-
-search_condition
-  : value_expression // instead of boolean_value_expression, we use value_expression for more flexibility.
-  ;
-
-/*
-===============================================================================
-  7.9 <group by clause>
-===============================================================================
-*/
-groupby_clause
-  : GROUP BY g=grouping_element_list
-  ;
-
-grouping_element_list
-  : grouping_element (COMMA grouping_element)*
-  ;
-
-grouping_element
-  : rollup_list
-  | cube_list
-  | empty_grouping_set
-  | ordinary_grouping_set
-  ;
-
-ordinary_grouping_set
-  : row_value_predicand
-  | LEFT_PAREN row_value_predicand_list RIGHT_PAREN
-  ;
-
-ordinary_grouping_set_list
-  : ordinary_grouping_set (COMMA ordinary_grouping_set)*
-  ;
-
-rollup_list
-  : ROLLUP LEFT_PAREN c=ordinary_grouping_set_list RIGHT_PAREN
-  ;
-
-cube_list
-  : CUBE LEFT_PAREN c=ordinary_grouping_set_list RIGHT_PAREN
-  ;
-
-empty_grouping_set
-  : LEFT_PAREN RIGHT_PAREN
-  ;
-
-having_clause
-  : HAVING boolean_value_expression
-  ;
-
-row_value_predicand_list
-  : row_value_predicand (COMMA row_value_predicand)*
-  ;
-
-
- /*
- ===============================================================================
-   7.11 <window clause> (p331)
- ===============================================================================
- */
-
-window_clause
-  : WINDOW window_definition_list;
-
-window_definition_list
-  : window_definition (COMMA window_definition)*
-  ;
-
-window_definition
-  : window_name AS window_specification
-  ;
-
-window_name
-  : identifier
-  ;
-
-window_specification
-  : LEFT_PAREN window_specification_details RIGHT_PAREN
-  ;
-
-window_specification_details
-  : (existing_window_name)? (window_partition_clause)? (window_order_clause)? (window_frame_clause)?
-  ;
-
-existing_window_name
-  : window_name
-  ;
-
-window_partition_clause
-  : PARTITION BY row_value_predicand_list
-  ;
-
-window_order_clause
-  : orderby_clause
-  ;
-
-window_frame_clause
-  : window_frame_units window_frame_extent (window_frame_exclusion)?
-  ;
-
-window_frame_units
-  : ROWS | RANGE
-  ;
-
-window_frame_extent
-  : window_frame_start_bound
-  | window_frame_between
-  ;
-
-window_frame_start_bound
-  : UNBOUNDED PRECEDING
-  | unsigned_value_specification PRECEDING // window_frame_preceding
-  | CURRENT ROW
-  ;
-
-window_frame_between
-  : BETWEEN bound1=window_frame_start_bound AND bound2=window_frame_end_bound
-  ;
-
-window_frame_end_bound
-  : UNBOUNDED FOLLOWING
-  | unsigned_value_specification FOLLOWING // window_frame_following FOLLOWING
-  | CURRENT ROW
-  ;
-
-window_frame_exclusion
-  : EXCLUDE CURRENT ROW
-  | EXCLUDE GROUP
-  | EXCLUDE TIES
-  | EXCLUDE NO OTHERS
-  ;
-
-/*
-===============================================================================
-  7.13 <query expression>
-===============================================================================
-*/
-query_expression
-  : query_expression_body
-  ;
-
-query_expression_body
-  : non_join_query_expression
-  | joined_table
-  ;
-
-non_join_query_expression
-  : (non_join_query_term
-  | joined_table (UNION | EXCEPT) (ALL|DISTINCT)? query_term)
-    ((UNION | EXCEPT) (ALL|DISTINCT)? query_term)*
-  ;
-
-query_term
-  : non_join_query_term
-  | joined_table
-  ;
-
-non_join_query_term
-  : ( non_join_query_primary
-  | joined_table INTERSECT (ALL|DISTINCT)? query_primary)
-    (INTERSECT (ALL|DISTINCT)? query_primary)*
-  ;
-
-query_primary
-  : non_join_query_primary
-  | joined_table
-  ;
-
-non_join_query_primary
-  : simple_table
-  | LEFT_PAREN non_join_query_expression RIGHT_PAREN
-  ;
-
-simple_table
-  : query_specification
-  | explicit_table
-  ;
-
-explicit_table
-  : TABLE table_or_query_name
-  ;
-
-table_or_query_name
-  : table_name
-  | identifier
-  ;
-
-table_name
-  : identifier (DOT identifier ( DOT identifier)? )?
-  ;
-
-column_name
-  : identifier
-  ;
-
-query_specification
-  : SELECT set_qualifier? select_list table_expression?
-  ;
-
-select_list
-  : select_sublist (COMMA select_sublist)*
-  ;
-
-select_sublist
-  : derived_column
-  | qualified_asterisk
-  ;
-
-derived_column
-  : value_expression as_clause?
-  ;
-
-qualified_asterisk
-  : (tb_name=identifier DOT)? MULTIPLY
-  ;
-
-set_qualifier
-  : DISTINCT
-  | ALL
-  ;
-
-column_reference
-  : identifier (DOT identifier)*
-  ;
-
-as_clause
-  : (AS)? identifier
-  ;
-
-column_reference_list
-  : column_reference (COMMA column_reference)*
-  ;
-
-/*
-==============================================================================================
-  7.15 <subquery>
-
-  Specify a scalar value, a row, or a table derived from a query_expression .
-==============================================================================================
-*/
-
-scalar_subquery
-  :  subquery
-  ;
-
-row_subquery
-  :  subquery
-  ;
-
-table_subquery
-  : subquery
-  ;
-
-subquery
-  :  LEFT_PAREN query_expression RIGHT_PAREN
-  ;
-
-/*
-===============================================================================
-  8.1 <predicate>
-===============================================================================
-*/
-
-predicate
-  : comparison_predicate
-  | between_predicate
-  | in_predicate
-  | pattern_matching_predicate // like predicate and other similar predicates
-  | null_predicate
-  | exists_predicate
-  ;
-
-/*
-===============================================================================
-  8.2 <comparison predicate>
-
-  Specify a comparison of two row values.
-===============================================================================
-*/
-comparison_predicate
-  : left=row_value_predicand c=comp_op right=row_value_predicand
-  ;
-
-comp_op
-  : EQUAL
-  | NOT_EQUAL
-  | LTH
-  | LEQ
-  | GTH
-  | GEQ
-  ;
-
-/*
-===============================================================================
-  8.3 <between predicate>
-===============================================================================
-*/
-
-between_predicate
-  : predicand=row_value_predicand between_predicate_part_2
-  ;
-
-between_predicate_part_2
-  : (NOT)? BETWEEN (ASYMMETRIC | SYMMETRIC)? begin=row_value_predicand AND end=row_value_predicand
-  ;
-
-
-/*
-===============================================================================
-  8.4 <in predicate>
-===============================================================================
-*/
-
-in_predicate
-  : predicand=numeric_value_expression  NOT? IN in_predicate_value
-  ;
-
-in_predicate_value
-  : table_subquery
-  | LEFT_PAREN in_value_list RIGHT_PAREN
-  ;
-
-in_value_list
-  : row_value_predicand  ( COMMA row_value_predicand )*
-  ;
-
-/*
-===============================================================================
-  8.5, 8.6 <pattern matching predicate>
-
-  Specify a pattern-matching comparison.
-===============================================================================
-*/
-
-pattern_matching_predicate
-  : f=row_value_predicand pattern_matcher s=Character_String_Literal
-  ;
-
-pattern_matcher
-  : NOT? negativable_matcher
-  | regex_matcher
-  ;
-
-negativable_matcher
-  : LIKE
-  | ILIKE
-  | SIMILAR TO
-  | REGEXP
-  | RLIKE
-  ;
-
-regex_matcher
-  : Similar_To
-  | Not_Similar_To
-  | Similar_To_Case_Insensitive
-  | Not_Similar_To_Case_Insensitive
-  ;
-
-/*
-===============================================================================
-  8.7 <null predicate>
-
-  Specify a test for a null value.
-===============================================================================
-*/
-
-null_predicate
-  : predicand=row_value_predicand IS (n=NOT)? NULL
-  ;
-
-/*
-==============================================================================================
-  8.8 <quantified comparison predicate>
-
-  Specify a quantified comparison.
-==============================================================================================
-*/
-
-quantified_comparison_predicate
-  : l=numeric_value_expression  c=comp_op q=quantifier s=table_subquery
-  ;
-
-quantifier : all  | some ;
-
-all : ALL;
-
-some : SOME | ANY;
-
-/*
-==============================================================================================
-  8.9 <exists predicate>
-
-  Specify a test for a non_empty set.
-==============================================================================================
-*/
-
-exists_predicate
-  : NOT? EXISTS s=table_subquery
-  ;
-
-
-/*
-==============================================================================================
-  8.10 <unique predicate>
-
-  Specify a test for the absence of duplicate rows
-==============================================================================================
-*/
-
-unique_predicate
-  : UNIQUE s=table_subquery
-  ;
-
-/*
-===============================================================================
-  10.1 <interval qualifier>
-
-  Specify the precision of an interval data type.
-===============================================================================
-*/
-
-primary_datetime_field
-	:	non_second_primary_datetime_field
-	|	SECOND
-	;
-
-non_second_primary_datetime_field
-  : YEAR | MONTH | DAY | HOUR | MINUTE
-  ;
-
-extended_datetime_field
-  : CENTURY | DECADE | DOW | DOY | EPOCH | ISODOW | ISOYEAR | MICROSECONDS | MILLENNIUM | MILLISECONDS | QUARTER | WEEK
-  ;
-
-/*
-===============================================================================
-  10.4 <routine invocation>
-
-  Invoke an SQL-invoked routine.
-===============================================================================
-*/
-
-routine_invocation
-  : function_name LEFT_PAREN sql_argument_list? RIGHT_PAREN
-  ;
-
-function_names_for_reserved_words
-  : LEFT
-  | RIGHT
-  ;
-
-function_name
-  : identifier
-  | function_names_for_reserved_words
-  ;
-
-sql_argument_list
-  : value_expression (COMMA value_expression)*
-  ;
-
-/*
-===============================================================================
-  14.1 <declare cursor>
-===============================================================================
-*/
-
-orderby_clause
-  : ORDER BY sort_specifier_list
-  ;
-
-sort_specifier_list
-  : sort_specifier (COMMA sort_specifier)*
-  ;
-
-sort_specifier
-  : key=row_value_predicand order=order_specification? null_order=null_ordering?
-  ;
-
-order_specification
-  : ASC
-  | DESC
-  ;
-
-limit_clause
-  : LIMIT e=numeric_value_expression
-  ;
-
-null_ordering
-  : NULL FIRST
-  | NULL LAST
-  ;
-
-/*
-===============================================================================
-  14.8 <insert statement>
-===============================================================================
-*/
-
-insert_statement
-  : INSERT (OVERWRITE)? INTO table_name (LEFT_PAREN column_reference_list RIGHT_PAREN)? query_expression
-  | INSERT (OVERWRITE)? INTO LOCATION path=Character_String_Literal (USING storage_type=identifier (param_clause)?)? query_expression
-  ;
-
-/*
-===============================================================================
-  <alter table>
-===============================================================================
-*/
-
-alter_tablespace_statement
-  : ALTER TABLESPACE space_name=identifier LOCATION uri=Character_String_Literal
-  ;
-
-alter_table_statement
-  : ALTER TABLE table_name RENAME TO table_name
-  | ALTER TABLE table_name RENAME COLUMN column_name TO column_name
-  | ALTER TABLE table_name ADD COLUMN field_element
-  | ALTER TABLE table_name ADD (if_not_exists)? PARTITION LEFT_PAREN partition_column_value_list RIGHT_PAREN (LOCATION path=Character_String_Literal)?
-  | ALTER TABLE table_name DROP (if_exists)? PARTITION LEFT_PAREN partition_column_value_list RIGHT_PAREN (PURGE)?
-  | ALTER TABLE table_name SET PROPERTY property_list
-  ;
-
-partition_column_value_list
-  : partition_column_value (COMMA partition_column_value)*
-  ;
-
-partition_column_value
-  : identifier EQUAL row_value_predicand
-  ;
-
-property_list
-  : property (COMMA property)*
-  ;
-
-property
-  : key=Character_String_Literal EQUAL value=Character_String_Literal
-  ;