SQL Syntax 5.4-SNAPSHOT

    The EBNF and Railroad Diagrams for 0.2-SNAPSHOT.

    CompilationUnit

    direct_SQL_statement EOF
             ::= direct_SQL_statement* EOF
    Not referenced by any.

    non_reserved_word

    A ABSOLUTE ACTION ADA ADD ADMIN AFTER ALWAYS ASC ASSERTION ASSIGNMENT ATTRIBUTE ATTRIBUTES BEFORE BERNOULLI BREADTH C CASCADE CATALOG CATALOG_NAME CHAIN CHARACTER_SET_CATALOG CHARACTER_SET_NAME CHARACTER_SET_SCHEMA CHARACTERISTICS CHARACTERS CLASS_ORIGIN COBOL COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE COMMITTED CONDITION_NUMBER CONNECTION CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA CONSTRAINTS CONSTRUCTOR CONTAINS CONTINUE CURSOR_NAME DATA DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION DEFAULTS DEFERRABLE DEFERRED DEFINED DEFINER DEGREE DEPTH DERIVED DESC DESCRIPTOR DIAGNOSTICS DISPATCH DOMAIN DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE ENFORCED EQUALS EXCLUDE EXCLUDING EXPRESSION FINAL FIRST FLAG FOLLOWING FORTRAN FOUND G GENERAL GENERATED GO GOTO GRANTED HIERARCHY IF IGNORE IMMEDIATE IMPLEMENTATION INCLUDING INCREMENT INITIALLY INPUT INSTANCE INSTANTIABLE INSTEAD INVOKER ISOLATION K KEY KEY_MEMBER KEY_TYPE LAST LENGTH LEVEL LOCATOR M MAP MATCHED MAXVALUE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT MINVALUE MORE MUMPS NAMES NESTING NEXT NFC NFD NFKC NFKD NORMALIZED NULLABLE NULLS NUMBER OBJECT OCTETS OPTION OPTIONS ORDERING ORDINALITY OTHERS OUTPUT OVERRIDING P PAD PARAMETER_MODE PARAMETER_NAME PARAMETER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG PARAMETER_SPECIFIC_NAME PARAMETER_SPECIFIC_SCHEMA PARTIAL PASCAL PATH PLACING PLI PRECEDING PRESERVE PRIOR PRIVILEGES PROPERTIES PUBLIC READ RELATIVE REPEATABLE RESPECT RESTART RESTRICT RETURNED_CARDINALITY RETURNED_LENGTH RETURNED_OCTET_LENGTH RETURNED_SQLSTATE ROLE ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW_COUNT SCALE SCHEMA SCHEMA_NAME SCOPE_CATALOG SCOPE_NAME SCOPE_SCHEMA SECTION SECURITY SELF SEQUENCE SERIALIZABLE SERVER_NAME SESSION SETS SIMPLE SIZE SOURCE SPACE SPECIFIC_NAME STATE STATEMENT STRUCTURE STYLE SUBCLASS_ORIGIN T TABLE_NAME TEMPORARY TIES TOP_LEVEL_COUNT TRANSACTION TRANSACTION_ACTIVE TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK TRANSFORM TRANSFORMS TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRY_CAST TYPE UNBOUNDED UNCOMMITTED UNDER UNNAMED USAGE USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_CODE USER_DEFINED_TYPE_NAME USER_DEFINED_TYPE_SCHEMA VIEW WORK WRITE ZONE ABS ALL ARRAY_AGG AT AVG BLOB BOTH CARDINALITY CLOSE COLUMN CONDITION COUNT CUBE CURRENT CURRENT_CATALOG CURRENT_DATE CURRENT_DEFAULT_TRANSFORM_GROUP CURRENT_PATH CURRENT_ROLE CURRENT_SCHEMA CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TRANSFORM_GROUP_FOR_TYPE CURRENT_USER CURSOR CYCLE DATE DAY DAYS DEC DYNAMIC EXP EXTERNAL FILTER FLOOR FREE FUNCTION GLOBAL HOLD HOUR HOURS IDENTITY INDICATOR INTERSECTION INTERVAL LANGUAGE LEAD LOCAL LOWER MAX MERGE METHOD MIN MINUTE MINUTES MOD MODULE MONTH MONTHS NAME NEW NONE OCCURRENCE OFFSET OLD OPEN PARTITION POSITION POWER PRECISION RANGE RANK READS REF REFERENCES RELEASE RESULT RETURNS ROLLUP ROW ROW_NUMBER ROWS SAVEPOINT SCOPE SEARCH SECOND SECONDS SESSION_USER SQL START STATIC SUM SYSTEM TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER TRUNCATE UNKNOWN UPDATE UPPER USER VALUE VALUES VERSION VERSIONS WINDOW YEAR YEARS COMMENT DEFAULT USE LIMIT NUMERIC_HISTOGRAM REPLACE HISTOGRAM APPROEX_PERCENTILE MAP_AGG SET_AGG MAP_UNION "COUNT"
             ::= 'A'
               | 'ABSOLUTE'
               | 'ACTION'
               | 'ADA'
               | 'ADD'
               | 'ADMIN'
               | 'AFTER'
               | 'ALWAYS'
               | 'ASC'
               | 'ASSERTION'
               | 'ASSIGNMENT'
               | 'ATTRIBUTE'
               | 'ATTRIBUTES'
               | 'BEFORE'
               | 'BERNOULLI'
               | 'BREADTH'
               | 'C'
               | 'CASCADE'
               | 'CATALOG'
               | 'CATALOG_NAME'
               | 'CHAIN'
               | 'CHARACTER_SET_CATALOG'
               | 'CHARACTER_SET_NAME'
               | 'CHARACTER_SET_SCHEMA'
               | 'CHARACTERISTICS'
               | 'CHARACTERS'
               | 'CLASS_ORIGIN'
               | 'COBOL'
               | 'COLLATION'
               | 'COLLATION_CATALOG'
               | 'COLLATION_NAME'
               | 'COLLATION_SCHEMA'
               | 'COLUMN_NAME'
               | 'COMMAND_FUNCTION'
               | 'COMMAND_FUNCTION_CODE'
               | 'COMMITTED'
               | 'CONDITION_NUMBER'
               | 'CONNECTION'
               | 'CONNECTION_NAME'
               | 'CONSTRAINT_CATALOG'
               | 'CONSTRAINT_NAME'
               | 'CONSTRAINT_SCHEMA'
               | 'CONSTRAINTS'
               | 'CONSTRUCTOR'
               | 'CONTAINS'
               | 'CONTINUE'
               | 'CURSOR_NAME'
               | 'DATA'
               | 'DATETIME_INTERVAL_CODE'
               | 'DATETIME_INTERVAL_PRECISION'
               | 'DEFAULTS'
               | 'DEFERRABLE'
               | 'DEFERRED'
               | 'DEFINED'
               | 'DEFINER'
               | 'DEGREE'
               | 'DEPTH'
               | 'DERIVED'
               | 'DESC'
               | 'DESCRIPTOR'
               | 'DIAGNOSTICS'
               | 'DISPATCH'
               | 'DOMAIN'
               | 'DYNAMIC_FUNCTION'
               | 'DYNAMIC_FUNCTION_CODE'
               | 'ENFORCED'
               | 'EQUALS'
               | 'EXCLUDE'
               | 'EXCLUDING'
               | 'EXPRESSION'
               | 'FINAL'
               | 'FIRST'
               | 'FLAG'
               | 'FOLLOWING'
               | 'FORTRAN'
               | 'FOUND'
               | 'G'
               | 'GENERAL'
               | 'GENERATED'
               | 'GO'
               | 'GOTO'
               | 'GRANTED'
               | 'HIERARCHY'
               | 'IF'
               | 'IGNORE'
               | 'IMMEDIATE'
               | 'IMPLEMENTATION'
               | 'INCLUDING'
               | 'INCREMENT'
               | 'INITIALLY'
               | 'INPUT'
               | 'INSTANCE'
               | 'INSTANTIABLE'
               | 'INSTEAD'
               | 'INVOKER'
               | 'ISOLATION'
               | 'K'
               | 'KEY'
               | 'KEY_MEMBER'
               | 'KEY_TYPE'
               | 'LAST'
               | 'LENGTH'
               | 'LEVEL'
               | 'LOCATOR'
               | 'M'
               | 'MAP'
               | 'MATCHED'
               | 'MAXVALUE'
               | 'MESSAGE_LENGTH'
               | 'MESSAGE_OCTET_LENGTH'
               | 'MESSAGE_TEXT'
               | 'MINVALUE'
               | 'MORE'
               | 'MUMPS'
               | 'NAMES'
               | 'NESTING'
               | 'NEXT'
               | 'NFC'
               | 'NFD'
               | 'NFKC'
               | 'NFKD'
               | 'NORMALIZED'
               | 'NULLABLE'
               | 'NULLS'
               | 'NUMBER'
               | 'OBJECT'
               | 'OCTETS'
               | 'OPTION'
               | 'OPTIONS'
               | 'ORDERING'
               | 'ORDINALITY'
               | 'OTHERS'
               | 'OUTPUT'
               | 'OVERRIDING'
               | 'P'
               | 'PAD'
               | 'PARAMETER_MODE'
               | 'PARAMETER_NAME'
               | 'PARAMETER_ORDINAL_POSITION'
               | 'PARAMETER_SPECIFIC_CATALOG'
               | 'PARAMETER_SPECIFIC_NAME'
               | 'PARAMETER_SPECIFIC_SCHEMA'
               | 'PARTIAL'
               | 'PASCAL'
               | 'PATH'
               | 'PLACING'
               | 'PLI'
               | 'PRECEDING'
               | 'PRESERVE'
               | 'PRIOR'
               | 'PRIVILEGES'
               | 'PROPERTIES'
               | 'PUBLIC'
               | 'READ'
               | 'RELATIVE'
               | 'REPEATABLE'
               | 'RESPECT'
               | 'RESTART'
               | 'RESTRICT'
               | 'RETURNED_CARDINALITY'
               | 'RETURNED_LENGTH'
               | 'RETURNED_OCTET_LENGTH'
               | 'RETURNED_SQLSTATE'
               | 'ROLE'
               | 'ROUTINE'
               | 'ROUTINE_CATALOG'
               | 'ROUTINE_NAME'
               | 'ROUTINE_SCHEMA'
               | 'ROW_COUNT'
               | 'SCALE'
               | 'SCHEMA'
               | 'SCHEMA_NAME'
               | 'SCOPE_CATALOG'
               | 'SCOPE_NAME'
               | 'SCOPE_SCHEMA'
               | 'SECTION'
               | 'SECURITY'
               | 'SELF'
               | 'SEQUENCE'
               | 'SERIALIZABLE'
               | 'SERVER_NAME'
               | 'SESSION'
               | 'SETS'
               | 'SIMPLE'
               | 'SIZE'
               | 'SOURCE'
               | 'SPACE'
               | 'SPECIFIC_NAME'
               | 'STATE'
               | 'STATEMENT'
               | 'STRUCTURE'
               | 'STYLE'
               | 'SUBCLASS_ORIGIN'
               | 'T'
               | 'TABLE_NAME'
               | 'TEMPORARY'
               | 'TIES'
               | 'TOP_LEVEL_COUNT'
               | 'TRANSACTION'
               | 'TRANSACTION_ACTIVE'
               | 'TRANSACTIONS_COMMITTED'
               | 'TRANSACTIONS_ROLLED_BACK'
               | 'TRANSFORM'
               | 'TRANSFORMS'
               | 'TRIGGER_CATALOG'
               | 'TRIGGER_NAME'
               | 'TRIGGER_SCHEMA'
               | 'TRY_CAST'
               | 'TYPE'
               | 'UNBOUNDED'
               | 'UNCOMMITTED'
               | 'UNDER'
               | 'UNNAMED'
               | 'USAGE'
               | 'USER_DEFINED_TYPE_CATALOG'
               | 'USER_DEFINED_TYPE_CODE'
               | 'USER_DEFINED_TYPE_NAME'
               | 'USER_DEFINED_TYPE_SCHEMA'
               | 'VIEW'
               | 'WORK'
               | 'WRITE'
               | 'ZONE'
               | 'ABS'
               | 'ALL'
               | 'ARRAY_AGG'
               | 'AT'
               | 'AVG'
               | 'BLOB'
               | 'BOTH'
               | 'CARDINALITY'
               | 'CLOSE'
               | 'COLUMN'
               | 'CONDITION'
               | 'COUNT'
               | 'CUBE'
               | 'CURRENT'
               | 'CURRENT_CATALOG'
               | 'CURRENT_DATE'
               | 'CURRENT_DEFAULT_TRANSFORM_GROUP'
               | 'CURRENT_PATH'
               | 'CURRENT_ROLE'
               | 'CURRENT_SCHEMA'
               | 'CURRENT_TIME'
               | 'CURRENT_TIMESTAMP'
               | 'CURRENT_TRANSFORM_GROUP_FOR_TYPE'
               | 'CURRENT_USER'
               | 'CURSOR'
               | 'CYCLE'
               | 'DATE'
               | 'DAY'
               | 'DAYS'
               | 'DEC'
               | 'DYNAMIC'
               | 'EXP'
               | 'EXTERNAL'
               | 'FILTER'
               | 'FLOOR'
               | 'FREE'
               | 'FUNCTION'
               | 'GLOBAL'
               | 'HOLD'
               | 'HOUR'
               | 'HOURS'
               | 'IDENTITY'
               | 'INDICATOR'
               | 'INTERSECTION'
               | 'INTERVAL'
               | 'LANGUAGE'
               | 'LEAD'
               | 'LOCAL'
               | 'LOWER'
               | 'MAX'
               | 'MERGE'
               | 'METHOD'
               | 'MIN'
               | 'MINUTE'
               | 'MINUTES'
               | 'MOD'
               | 'MODULE'
               | 'MONTH'
               | 'MONTHS'
               | 'NAME'
               | 'NEW'
               | 'NONE'
               | 'OCCURRENCE'
               | 'OFFSET'
               | 'OLD'
               | 'OPEN'
               | 'PARTITION'
               | 'POSITION'
               | 'POWER'
               | 'PRECISION'
               | 'RANGE'
               | 'RANK'
               | 'READS'
               | 'REF'
               | 'REFERENCES'
               | 'RELEASE'
               | 'RESULT'
               | 'RETURNS'
               | 'ROLLUP'
               | 'ROW'
               | 'ROW_NUMBER'
               | 'ROWS'
               | 'SAVEPOINT'
               | 'SCOPE'
               | 'SEARCH'
               | 'SECOND'
               | 'SECONDS'
               | 'SESSION_USER'
               | 'SQL'
               | 'START'
               | 'STATIC'
               | 'SUM'
               | 'SYSTEM'
               | 'TIME'
               | 'TIMESTAMP'
               | 'TIMEZONE_HOUR'
               | 'TIMEZONE_MINUTE'
               | 'TRIGGER'
               | 'TRUNCATE'
               | 'UNKNOWN'
               | 'UPDATE'
               | 'UPPER'
               | 'USER'
               | 'VALUE'
               | 'VALUES'
               | 'VERSION'
               | 'VERSIONS'
               | 'WINDOW'
               | 'YEAR'
               | 'YEARS'
               | 'COMMENT'
               | 'DEFAULT'
               | 'USE'
               | 'LIMIT'
               | 'NUMERIC_HISTOGRAM'
               | 'REPLACE'
               | 'HISTOGRAM'
               | 'APPROEX_PERCENTILE'
               | 'MAP_AGG'
               | 'SET_AGG'
               | 'MAP_UNION'
               | '"COUNT"'
    Referenced by:

    left_bracket_or_trigraph

    [ ??(
             ::= '['
               | '??('

    right_bracket_or_trigraph

    ] ??)
             ::= ']'
               | '??)'

    literal

    signed_numeric_literal general_literal
               | general_literal

    signed_numeric_literal

    + - unsigned_numeric_literal
             ::= ( '+' | '-' )? unsigned_numeric_literal

    unsigned_literal

    unsigned_numeric_literal general_literal
             ::= unsigned_numeric_literal
               | general_literal

    unsigned_numeric_literal

    exact_numeric_literal approximate_numeric_literal
             ::= exact_numeric_literal
               | approximate_numeric_literal

    exact_numeric_literal

    unsigned_integer float_literal
             ::= unsigned_integer
               | float_literal
    Referenced by:

    general_literal

    character_string_literal national_character_string_literal Unicode_character_string_literal binary_string_literal datetime_literal interval_literal boolean_literal
             ::= character_string_literal
               | national_character_string_literal
               | Unicode_character_string_literal
               | binary_string_literal
               | datetime_literal
               | interval_literal
               | boolean_literal
    Referenced by:

    character_string_literal

    _ character_set_specification quoted_string
             ::= ( '_' character_set_specification )? quoted_string+

    Unicode_character_string_literal

    _ character_set_specification unicode_literal
             ::= ( '_' character_set_specification )? unicode_literal
    Referenced by:

    datetime_literal

    date_literal time_literal timestamp_literal
             ::= date_literal
               | time_literal
               | timestamp_literal
    Referenced by:

    date_literal

    DATE character_string_literal
             ::= 'DATE' character_string_literal
    Referenced by:

    time_literal

    TIME character_string_literal
             ::= 'TIME' character_string_literal
    Referenced by:

    timestamp_literal

    TIMESTAMP character_string_literal
             ::= 'TIMESTAMP' character_string_literal
    Referenced by:

    interval_literal

    INTERVAL + - character_string_literal interval_qualifier
             ::= 'INTERVAL' ( '+' | '-' )? character_string_literal interval_qualifier
    Referenced by:

    boolean_literal

    TRUE FALSE UNKNOWN
             ::= 'TRUE'
               | 'FALSE'
               | 'UNKNOWN'
    Referenced by:

    identifier

    actual_identifier _ identifier_suffix_chain
             ::= ( actual_identifier | '_' ) identifier_suffix_chain?

    actual_identifier

    regular_identifier delimited_identifier Unicode_delimited_identifier non_reserved_word
             ::= regular_identifier
               | delimited_identifier
               | Unicode_delimited_identifier
               | non_reserved_word

    table_name

    identifier_chain
             ::= identifier_chain

    schema_name

    identifier_chain
             ::= identifier_chain

    catalog_name

    identifier
             ::= identifier
    Not referenced by any.

    schema_qualified_name

    identifier_chain
             ::= identifier_chain

    local_or_schema_qualified_name

    identifier_chain
             ::= identifier_chain
    Not referenced by any.

    local_or_schema_qualifier

    MODULE schema_name
             ::= 'MODULE'
               | schema_name
    Not referenced by any.

    cursor_name

    identifier_chain
             ::= identifier_chain

    host_parameter_name

    : identifier
             ::= ':' identifier

    external_routine_name

    identifier character_string_literal
             ::= identifier
               | character_string_literal

    character_set_name

    schema_name . SQL_language_identifier
             ::= ( schema_name '.' )? SQL_language_identifier

    schema_resolved_user_defined_type_name

    user_defined_type_name
             ::= user_defined_type_name

    user_defined_type_name

    identifier_chain
             ::= identifier_chain

    SQL_identifier

    identifier extended_identifier
             ::= identifier
               | extended_identifier

    extended_identifier

    scope_option simple_value_specification

    dynamic_cursor_name

    cursor_name extended_cursor_name
             ::= cursor_name
               | extended_cursor_name

    extended_cursor_name

    scope_option simple_value_specification

    descriptor_name

    identifier extended_descriptor_name
             ::= identifier
               | extended_descriptor_name

    extended_descriptor_name

    scope_option simple_value_specification
    Referenced by:

    scope_option

    GLOBAL LOCAL
             ::= 'GLOBAL'
               | 'LOCAL'

    data_type

    predefined_type row_type reference_type presto_generic_type path_resolved_user_defined_type_name collection_type

    predefined_type

    character_string_type CHARACTER SET character_set_specification national_character_string_type collate_clause binary_string_type numeric_type BOOLEAN datetime_type interval_type
               | binary_string_type
               | numeric_type
               | 'BOOLEAN'
               | datetime_type
               | interval_type

    character_string_type

    CHARACTER CHAR VARYING ( character_length ) VARCHAR ( character_length ) character_large_object_type
             ::= ( 'CHARACTER' | 'CHAR' ) ( 'VARYING'? '(' character_length ')' )?
               | 'VARCHAR' ( '(' character_length ')' )?
               | character_large_object_type
    Referenced by:

    character_large_object_type

    CHARACTER CHAR LARGE OBJECT CLOB ( character_large_object_length )
             ::= ( ( 'CHARACTER' | 'CHAR' ) 'LARGE' 'OBJECT' | 'CLOB' ) ( '(' character_large_object_length ')' )?
    Referenced by:

    national_character_string_type

    NATIONAL CHARACTER CHAR NCHAR VARYING ( character_length ) national_character_large_object_type
             ::= ( 'NATIONAL' ( 'CHARACTER' | 'CHAR' ) | 'NCHAR' ) ( 'VARYING'? '(' character_length ')' )?
               | national_character_large_object_type
    Referenced by:

    national_character_large_object_type

    NATIONAL CHARACTER NCHAR LARGE OBJECT NCLOB ( character_large_object_length )
             ::= ( ( 'NATIONAL' 'CHARACTER' | 'NCHAR' ) 'LARGE' 'OBJECT' | 'NCLOB' ) ( '(' character_large_object_length ')' )?

    binary_string_type

    BINARY VARYING ( unsigned_integer ) VARBINARY ( unsigned_integer ) binary_large_object_string_type
             ::= 'BINARY' ( 'VARYING'? '(' unsigned_integer ')' )?
               | 'VARBINARY' ( '(' unsigned_integer ')' )?
               | binary_large_object_string_type
    Referenced by:

    binary_large_object_string_type

    BINARY LARGE OBJECT BLOB ( large_object_length )
             ::= ( 'BINARY' 'LARGE' 'OBJECT' | 'BLOB' ) ( '(' large_object_length ')' )?
    Referenced by:

    numeric_type

    exact_numeric_type approximate_numeric_type
             ::= exact_numeric_type
               | approximate_numeric_type
    Referenced by:

    exact_numeric_type

    NUMERIC DECIMAL DEC ( unsigned_integer , unsigned_integer ) SMALLINT INTEGER INT BIGINT
             ::= ( 'NUMERIC' | 'DECIMAL' | 'DEC' ) ( '(' unsigned_integer ( ',' unsigned_integer )? ')' )?
               | 'SMALLINT'
               | 'INTEGER'
               | 'INT'
               | 'BIGINT'
    Referenced by:

    approximate_numeric_type

    FLOAT ( unsigned_integer ) REAL DOUBLE PRECISION
             ::= 'FLOAT' ( '(' unsigned_integer ')' )?
               | 'REAL'
               | 'DOUBLE' 'PRECISION'?
    Referenced by:

    character_length

    unsigned_integer char_length_units
             ::= unsigned_integer char_length_units?

    large_object_length

    unsigned_integer multiplier large_object_length_token
             ::= unsigned_integer multiplier?
               | large_object_length_token

    character_large_object_length

    large_object_length char_length_units
             ::= large_object_length char_length_units?

    char_length_units

    CHARACTERS OCTETS
             ::= 'CHARACTERS'
               | 'OCTETS'

    datetime_type

    DATE TIME TIMESTAMP ( unsigned_integer ) with_or_without_time_zone
             ::= 'DATE'
               | ( 'TIME' | 'TIMESTAMP' ) ( '(' unsigned_integer ')' )? with_or_without_time_zone?
    Referenced by:

    with_or_without_time_zone

    WITH WITHOUT TIME ZONE
             ::= ( 'WITH' | 'WITHOUT' ) 'TIME' 'ZONE'
    Referenced by:

    interval_type

    INTERVAL interval_qualifier
             ::= 'INTERVAL' interval_qualifier
    Referenced by:

    row_type

    ROW row_type_body
    Referenced by:

    row_type_body

    ( field_definition , )
             ::= '(' field_definition ( ',' field_definition )* ')'
    Referenced by:

    reference_type

    REF ( referenced_type ) scope_clause
             ::= 'REF' '(' referenced_type ')' scope_clause?
    Referenced by:

    scope_clause

    SCOPE table_name
             ::= 'SCOPE' table_name

    referenced_type

    path_resolved_user_defined_type_name
    Referenced by:

    path_resolved_user_defined_type_name

    user_defined_type_name
             ::= user_defined_type_name

    collection_type

    array_type MULTISET
             ::= array_type
               | 'MULTISET'
    Referenced by:

    array_type

    ARRAY left_bracket_or_trigraph unsigned_integer right_bracket_or_trigraph
    Referenced by:

    field_definition

    identifier data_type
             ::= identifier data_type
    Referenced by:

    value_expression_primary

    parenthesized_value_expression nonparenthesized_value_expression_primary
             ::= parenthesized_value_expression

    parenthesized_value_expression

    ( value_expression , ) primary_suffix
             ::= '(' value_expression ( ',' value_expression )* ')' primary_suffix*
    Referenced by:

    nonparenthesized_value_expression_primary

    set_function_specification subquery case_expression cast_specification subtype_treatment new_specification reference_resolution collection_value_constructor multiset_element_reference next_value_expression window_function_type ( column_name_list ) unsigned_value_specification column_reference primary_suffix contextually_typed_value_specification

    primary_suffix

    field_reference attribute_or_method_reference method_invocation window_function array_element_reference static_method_invocation
             ::= field_reference
               | attribute_or_method_reference
               | method_invocation
               | window_function
               | array_element_reference
               | static_method_invocation

    collection_value_constructor

    array_value_constructor multiset_value_constructor
             ::= array_value_constructor
               | multiset_value_constructor

    value_specification

    literal general_value_specification
             ::= literal
               | general_value_specification

    unsigned_value_specification

    unsigned_literal general_value_specification
             ::= unsigned_literal
               | general_value_specification

    general_value_specification

    identifier_chain CURRENT_USER USER ? host_parameter_name current_collation_specification SESSION_USER SYSTEM_USER CURRENT_CATALOG CURRENT_PATH CURRENT_ROLE CURRENT_SCHEMA VALUE CURRENT_DEFAULT_TRANSFORM_GROUP CURRENT_TRANSFORM_GROUP_FOR_TYPE path_resolved_user_defined_type_name
             ::= identifier_chain
               | 'CURRENT_USER'
               | 'USER'
               | '?'
               | host_parameter_name
               | current_collation_specification
               | 'SESSION_USER'
               | 'SYSTEM_USER'
               | 'CURRENT_CATALOG'
               | 'CURRENT_PATH'
               | 'CURRENT_ROLE'
               | 'CURRENT_SCHEMA'
               | 'VALUE'
               | 'CURRENT_DEFAULT_TRANSFORM_GROUP'
               | 'CURRENT_TRANSFORM_GROUP_FOR_TYPE' path_resolved_user_defined_type_name

    simple_value_specification

    literal identifier_chain host_parameter_name
             ::= literal
               | identifier_chain
               | host_parameter_name

    target_specification

    identifier_chain column_reference target_array_element_specification ?

    simple_target_specification

    identifier_chain column_reference
             ::= identifier_chain
               | column_reference

    target_array_element_specification

    left_bracket_or_trigraph simple_value_specification right_bracket_or_trigraph
    Referenced by:

    current_collation_specification

    COLLATION FOR ( string_value_expression )
             ::= 'COLLATION' 'FOR' '(' string_value_expression ')'

    contextually_typed_value_specification

    implicitly_typed_value_specification DEFAULT
               | 'DEFAULT'

    implicitly_typed_value_specification

    NULL empty_specification
             ::= 'NULL'
               | empty_specification

    empty_specification

    ARRAY MULTISET left_bracket_or_trigraph right_bracket_or_trigraph
             ::= ( 'ARRAY' | 'MULTISET' ) left_bracket_or_trigraph right_bracket_or_trigraph

    identifier_chain

    identifier .
             ::= identifier ( '.' identifier )*

    column_reference

    identifier_chain MODULE . identifier . identifier
             ::= identifier_chain
               | 'MODULE' '.' identifier '.' identifier

    set_function_specification

    aggregate_function grouping_operation
             ::= aggregate_function
               | grouping_operation

    grouping_operation

    GROUPING ( column_reference , )
             ::= 'GROUPING' '(' column_reference ( ',' column_reference )* ')'

    window_function

    OVER window_name_or_specification
             ::= 'OVER' window_name_or_specification
    Referenced by:

    window_function_type

    rank_function_type ROW_NUMBER ( ) aggregate_function ntile_function lead_or_lag_function first_or_last_value_function nth_value_function
             ::= ( rank_function_type | 'ROW_NUMBER' ) '(' ')'
               | aggregate_function
               | ntile_function
               | lead_or_lag_function
               | first_or_last_value_function
               | nth_value_function

    rank_function_type

    RANK DENSE_RANK PERCENT_RANK CUME_DIST
             ::= 'RANK'
               | 'DENSE_RANK'
               | 'PERCENT_RANK'
               | 'CUME_DIST'

    ntile_function

    NTILE ( number_of_tiles )
             ::= 'NTILE' '(' number_of_tiles ')'
    Referenced by:

    number_of_tiles

    value_expression ?
             ::= value_expression
               | '?'
    Referenced by:

    lead_or_lag_function

    lead_or_lag ( value_expression , value_expression , value_expression ) null_treatment
             ::= lead_or_lag '(' value_expression ( ',' value_expression ( ',' value_expression )? )? ')' null_treatment?
    Referenced by:

    lead_or_lag

    LEAD LAG
             ::= 'LEAD'
               | 'LAG'
    Referenced by:

    null_treatment

    RESPECT IGNORE NULLS
             ::= ( 'RESPECT' | 'IGNORE' ) 'NULLS'

    first_or_last_value_function

    first_or_last_value ( value_expression ) null_treatment
             ::= first_or_last_value '(' value_expression ')' null_treatment?
    Referenced by:

    first_or_last_value

    FIRST_VALUE LAST_VALUE
             ::= 'FIRST_VALUE'
               | 'LAST_VALUE'

    nth_value_function

    NTH_VALUE ( value_expression , nth_row ) from_first_or_last null_treatment
             ::= 'NTH_VALUE' '(' value_expression ',' nth_row ')' from_first_or_last? null_treatment?
    Referenced by:

    nth_row

    simple_value_specification ?
               | '?'
    Referenced by:

    from_first_or_last

    FROM FIRST LAST
             ::= 'FROM' ( 'FIRST' | 'LAST' )
    Referenced by:

    window_name_or_specification

    in_line_window_specification identifier
             ::= in_line_window_specification
               | identifier
    Referenced by:

    in_line_window_specification

    window_specification
             ::= window_specification

    case_expression

    case_abbreviation case_specification
             ::= case_abbreviation
               | case_specification

    case_abbreviation

    NULLIF ( value_expression , COALESCE ( value_expression , value_expression )
             ::= ( 'NULLIF' '(' value_expression ',' | 'COALESCE' '(' ( value_expression ',' )+ ) value_expression ')'
    Referenced by:

    case_specification

    simple_case searched_case
             ::= simple_case
               | searched_case
    Referenced by:

    simple_case

    CASE case_operand simple_when_clause else_clause END
             ::= 'CASE' case_operand simple_when_clause+ else_clause? 'END'
    Referenced by:

    searched_case

    CASE searched_when_clause else_clause END
             ::= 'CASE' searched_when_clause+ else_clause? 'END'
    Referenced by:

    simple_when_clause

    WHEN when_operand_list THEN result
             ::= 'WHEN' when_operand_list 'THEN' result
    Referenced by:

    searched_when_clause

    WHEN search_condition THEN result
             ::= 'WHEN' search_condition 'THEN' result
    Referenced by:

    else_clause

    ELSE result
             ::= 'ELSE' result
    Referenced by:

    case_operand

    row_value_predicand overlaps_predicate_part_1
             ::= row_value_predicand
               | overlaps_predicate_part_1
    Referenced by:

    when_operand_list

    when_operand ,
             ::= when_operand ( ',' when_operand )*
    Referenced by:

    when_operand

    row_value_predicand comparison_predicate_part_2 between_predicate_part_2 in_predicate_part_2 character_like_predicate_part_2 octet_like_predicate_part_2 similar_predicate_part_2 regex_like_predicate_part_2 null_predicate_part_2 quantified_comparison_predicate_part_2 normalized_predicate_part_2 match_predicate_part_2 overlaps_predicate_part_2 distinct_predicate_part_2 member_predicate_part_2 submultiset_predicate_part_2 set_predicate_part_2 type_predicate_part_2
             ::= row_value_predicand
               | comparison_predicate_part_2
               | between_predicate_part_2
               | in_predicate_part_2
               | character_like_predicate_part_2
               | octet_like_predicate_part_2
               | similar_predicate_part_2
               | regex_like_predicate_part_2
               | null_predicate_part_2
               | normalized_predicate_part_2
               | match_predicate_part_2
               | overlaps_predicate_part_2
               | distinct_predicate_part_2
               | member_predicate_part_2
               | submultiset_predicate_part_2
               | set_predicate_part_2
               | type_predicate_part_2
    Referenced by:

    result

    value_expression NULL
               | 'NULL'

    cast_specification

    CAST ( cast_operand AS cast_target ) try_cast
             ::= 'CAST' '(' cast_operand 'AS' cast_target ')'
               | try_cast

    cast_operand

    value_expression implicitly_typed_value_specification
             ::= value_expression
               | implicitly_typed_value_specification

    cast_target

    data_type schema_qualified_name
             ::= data_type
               | schema_qualified_name

    next_value_expression

    NEXT VALUE FOR schema_qualified_name
             ::= 'NEXT' 'VALUE' 'FOR' schema_qualified_name

    field_reference

    . identifier
             ::= '.' identifier
    Referenced by:

    subtype_treatment

    TREAT ( value_expression AS target_subtype )
             ::= 'TREAT' '(' value_expression 'AS' target_subtype ')'

    target_subtype

    path_resolved_user_defined_type_name reference_type
               | reference_type
    Referenced by:

    method_invocation

    direct_invocation udaf_filter generalized_invocation
             ::= direct_invocation udaf_filter?
               | generalized_invocation

    direct_invocation

    SQL_argument_list
             ::= SQL_argument_list
    Referenced by:

    generalized_invocation

    . identifier SQL_argument_list
             ::= '.' identifier SQL_argument_list?
    Referenced by:

    static_method_invocation

    :: identifier SQL_argument_list
             ::= '::' identifier SQL_argument_list?
    Referenced by:

    new_specification

    NEW path_resolved_user_defined_type_name SQL_argument_list

    new_invocation

    method_invocation routine_invocation
             ::= method_invocation
               | routine_invocation
    Not referenced by any.

    attribute_or_method_reference

    lambda_body
             ::= lambda_body
    Referenced by:

    dereference_operation

    reference_value_expression -> identifier
             ::= reference_value_expression '->' identifier
    Not referenced by any.

    reference_resolution

    DEREF ( reference_value_expression )
             ::= 'DEREF' '(' reference_value_expression ')'

    array_element_reference

    left_bracket_or_trigraph value_expression right_bracket_or_trigraph
    Referenced by:

    multiset_element_reference

    ELEMENT ( multiset_value_expression )
             ::= 'ELEMENT' '(' multiset_value_expression ')'

    value_expression

    boolean_value_expression common_value_expression row_value_expression
             ::= boolean_value_expression
               | common_value_expression
               | row_value_expression

    common_value_expression

    numeric_value_expression string_value_expression datetime_value_expression interval_value_expression user_defined_type_value_expression reference_value_expression collection_value_expression
             ::= numeric_value_expression
               | string_value_expression
               | datetime_value_expression
               | interval_value_expression
               | user_defined_type_value_expression
               | reference_value_expression
               | collection_value_expression

    user_defined_type_value_expression

    value_expression_primary
             ::= value_expression_primary
    Referenced by:

    reference_value_expression

    value_expression_primary
             ::= value_expression_primary

    collection_value_expression

    array_value_expression multiset_value_expression
             ::= array_value_expression
               | multiset_value_expression

    numeric_value_expression

    term + -
             ::= term ( ( '+' | '-' ) term )*

    term

    factor * / %
    term     ::= factor ( ( '*' | '/' | '%' ) factor )*
    Referenced by:

    factor

    + - numeric_primary
    factor   ::= ( '+' | '-' )? numeric_primary
    Referenced by:

    numeric_primary

    numeric_value_function character_value_expression
             ::= numeric_value_function
               | character_value_expression
    Referenced by:

    numeric_value_function

    position_expression regex_occurrences_function regex_position_expression extract_expression length_expression cardinality_expression max_cardinality_expression absolute_value_expression modulus_expression natural_logarithm exponential_function power_function square_root floor_function ceiling_function width_bucket_function
             ::= position_expression
               | regex_occurrences_function
               | regex_position_expression
               | extract_expression
               | length_expression
               | cardinality_expression
               | max_cardinality_expression
               | absolute_value_expression
               | modulus_expression
               | natural_logarithm
               | exponential_function
               | power_function
               | square_root
               | floor_function
               | ceiling_function
               | width_bucket_function
    Referenced by:

    position_expression

    character_position_expression binary_position_expression
             ::= character_position_expression
               | binary_position_expression
    Referenced by:

    regex_occurrences_function

    OCCURRENCES_REGEX ( character_value_expression FLAG character_value_expression IN character_value_expression FROM numeric_value_expression USING char_length_units )
             ::= 'OCCURRENCES_REGEX' '(' character_value_expression ( 'FLAG' character_value_expression )? 'IN' character_value_expression ( 'FROM' numeric_value_expression )? ( 'USING' char_length_units )? ')'
    Referenced by:

    regex_position_expression

    POSITION_REGEX ( regex_position_start_or_after character_value_expression FLAG character_value_expression IN character_value_expression FROM numeric_value_expression USING char_length_units OCCURRENCE numeric_value_expression GROUP numeric_value_expression )
    Referenced by:

    regex_position_start_or_after

    START AFTER
             ::= 'START'
               | 'AFTER'

    character_position_expression

    POSITION ( character_value_expression IN character_value_expression USING char_length_units )
             ::= 'POSITION' '(' character_value_expression 'IN' character_value_expression ( 'USING' char_length_units )? ')'
    Referenced by:

    binary_position_expression

    POSITION ( binary_value_expression IN binary_value_expression )
             ::= 'POSITION' '(' binary_value_expression 'IN' binary_value_expression ')'
    Referenced by:

    length_expression

    char_length_expression octet_length_expression
             ::= char_length_expression
               | octet_length_expression
    Referenced by:

    char_length_expression

    CHAR_LENGTH CHARACTER_LENGTH ( character_value_expression USING char_length_units )
             ::= ( 'CHAR_LENGTH' | 'CHARACTER_LENGTH' ) '(' character_value_expression ( 'USING' char_length_units )? ')'
    Referenced by:

    octet_length_expression

    OCTET_LENGTH ( string_value_expression )
             ::= 'OCTET_LENGTH' '(' string_value_expression ')'
    Referenced by:

    extract_expression

    EXTRACT ( extract_field FROM extract_source )
             ::= 'EXTRACT' '(' extract_field 'FROM' extract_source ')'
    Referenced by:

    extract_field

    primary_datetime_field time_zone_field
             ::= primary_datetime_field
               | time_zone_field
    Referenced by:

    time_zone_field

    TIMEZONE_HOUR TIMEZONE_MINUTE
             ::= 'TIMEZONE_HOUR'
               | 'TIMEZONE_MINUTE'
    Referenced by:

    extract_source

    datetime_value_expression interval_value_expression
             ::= datetime_value_expression
               | interval_value_expression
    Referenced by:

    cardinality_expression

    CARDINALITY ( collection_value_expression )
             ::= 'CARDINALITY' '(' collection_value_expression ')'
    Referenced by:

    max_cardinality_expression

    MAX_CARDINALITY ( array_value_expression )
             ::= 'MAX_CARDINALITY' '(' array_value_expression ')'
    Referenced by:

    absolute_value_expression

    ABS ( numeric_value_expression )
             ::= 'ABS' '(' numeric_value_expression ')'
    Referenced by:

    modulus_expression

    MOD ( numeric_value_expression , numeric_value_expression )
             ::= 'MOD' '(' numeric_value_expression ',' numeric_value_expression ')'
    Referenced by:

    natural_logarithm

    LN ( numeric_value_expression )
             ::= 'LN' '(' numeric_value_expression ')'
    Referenced by:

    exponential_function

    EXP ( numeric_value_expression )
             ::= 'EXP' '(' numeric_value_expression ')'
    Referenced by:

    power_function

    POWER ( numeric_value_expression , numeric_value_expression )
             ::= 'POWER' '(' numeric_value_expression ',' numeric_value_expression ')'
    Referenced by:

    square_root

    SQRT ( numeric_value_expression )
             ::= 'SQRT' '(' numeric_value_expression ')'
    Referenced by:

    floor_function

    FLOOR ( numeric_value_expression )
             ::= 'FLOOR' '(' numeric_value_expression ')'
    Referenced by:

    ceiling_function

    CEIL CEILING ( numeric_value_expression )
             ::= ( 'CEIL' | 'CEILING' ) '(' numeric_value_expression ')'
    Referenced by:

    width_bucket_function

    WIDTH_BUCKET ( numeric_value_expression , numeric_value_expression , numeric_value_expression , numeric_value_expression )
             ::= 'WIDTH_BUCKET' '(' numeric_value_expression ',' numeric_value_expression ( ',' numeric_value_expression ',' numeric_value_expression )? ')'
    Referenced by:

    string_value_expression

    character_value_expression binary_value_expression
             ::= character_value_expression
               | binary_value_expression

    character_value_expression

    character_factor concatenation
             ::= character_factor concatenation*

    concatenation

    || character_factor
             ::= '||' character_factor

    character_factor

    character_primary collate_clause
             ::= character_primary collate_clause?

    character_primary

    string_value_function binary_value_expression
             ::= string_value_function
               | binary_value_expression
    Referenced by:

    binary_value_expression

    binary_primary binary_concatenation
             ::= binary_primary binary_concatenation*

    binary_primary

    string_value_function datetime_value_expression
             ::= string_value_function
               | datetime_value_expression

    binary_concatenation

    || binary_primary
             ::= '||' binary_primary
    Referenced by:

    string_value_function

    character_value_function binary_value_function
             ::= character_value_function
               | binary_value_function

    character_value_function

    character_substring_function regular_expression_substring_function regex_substring_function fold transcoding character_transliteration regex_transliteration trim_function character_overlay_function normalize_function specific_type_method
             ::= character_substring_function
               | regex_substring_function
               | fold
               | transcoding
               | character_transliteration
               | regex_transliteration
               | trim_function
               | character_overlay_function
               | normalize_function
               | specific_type_method
    Referenced by:

    character_substring_function

    SUBSTRING ( character_value_expression FROM numeric_value_expression FOR numeric_value_expression USING char_length_units )
             ::= 'SUBSTRING' '(' character_value_expression 'FROM' numeric_value_expression ( 'FOR' numeric_value_expression )? ( 'USING' char_length_units )? ')'
    Referenced by:

    regular_expression_substring_function

    SUBSTRING ( character_value_expression SIMILAR character_value_expression ESCAPE character_value_expression )
             ::= 'SUBSTRING' '(' character_value_expression 'SIMILAR' character_value_expression 'ESCAPE' character_value_expression ')'
    Referenced by:

    regex_substring_function

    SUBSTRING_REGEX ( character_value_expression FLAG character_value_expression IN character_value_expression FROM numeric_value_expression USING char_length_units OCCURRENCE numeric_value_expression GROUP numeric_value_expression )
             ::= 'SUBSTRING_REGEX' '(' character_value_expression ( 'FLAG' character_value_expression )? 'IN' character_value_expression ( 'FROM' numeric_value_expression )? ( 'USING' char_length_units )? ( 'OCCURRENCE' numeric_value_expression )? ( 'GROUP' numeric_value_expression )? ')'
    Referenced by:

    fold

    UPPER LOWER ( character_value_expression )
    fold     ::= ( 'UPPER' | 'LOWER' ) '(' character_value_expression ')'
    Referenced by:

    transcoding

    CONVERT ( character_value_expression USING schema_qualified_name )
             ::= 'CONVERT' '(' character_value_expression 'USING' schema_qualified_name ')'
    Referenced by:

    character_transliteration

    TRANSLATE ( character_value_expression USING schema_qualified_name )
             ::= 'TRANSLATE' '(' character_value_expression 'USING' schema_qualified_name ')'
    Referenced by:

    regex_transliteration

    TRANSLATE_REGEX ( character_value_expression FLAG character_value_expression IN character_value_expression WITH character_value_expression FROM numeric_value_expression USING char_length_units OCCURRENCE regex_transliteration_occurrence )
             ::= 'TRANSLATE_REGEX' '(' character_value_expression ( 'FLAG' character_value_expression )? 'IN' character_value_expression ( 'WITH' character_value_expression )? ( 'FROM' numeric_value_expression )? ( 'USING' char_length_units )? ( 'OCCURRENCE' regex_transliteration_occurrence )? ')'
    Referenced by:

    regex_transliteration_occurrence

    ALL numeric_value_expression
             ::= 'ALL'
               | numeric_value_expression
    Referenced by:

    trim_function

    TRIM ( trim_operands )
             ::= 'TRIM' '(' trim_operands ')'
    Referenced by:

    trim_operands

    trim_specification character_value_expression , FROM character_value_expression
             ::= trim_specification? character_value_expression ( ( ',' | 'FROM' ) character_value_expression )?
    Referenced by:

    trim_specification

    LEADING TRAILING BOTH
             ::= 'LEADING'
               | 'TRAILING'
               | 'BOTH'

    character_overlay_function

    OVERLAY ( character_value_expression PLACING character_value_expression FROM numeric_value_expression FOR numeric_value_expression USING char_length_units )
             ::= 'OVERLAY' '(' character_value_expression 'PLACING' character_value_expression 'FROM' numeric_value_expression ( 'FOR' numeric_value_expression )? ( 'USING' char_length_units )? ')'
    Referenced by:

    normalize_function

    NORMALIZE ( character_value_expression , normal_form , normalize_function_result_length )
             ::= 'NORMALIZE' '(' character_value_expression ( ',' normal_form ( ',' normalize_function_result_length )? )? ')'
    Referenced by:

    normal_form

    NFC NFD NFKC NFKD
             ::= 'NFC'
               | 'NFD'
               | 'NFKC'
               | 'NFKD'

    normalize_function_result_length

    character_length character_large_object_length
             ::= character_length
               | character_large_object_length
    Referenced by:

    specific_type_method

    . SPECIFICTYPE ( )
             ::= '.' 'SPECIFICTYPE' ( '(' ')' )?
    Referenced by:

    binary_value_function

    binary_substring_function binary_trim_function binary_overlay_function
             ::= binary_substring_function
               | binary_trim_function
               | binary_overlay_function
    Referenced by:

    binary_substring_function

    SUBSTRING ( binary_value_expression FROM numeric_value_expression FOR numeric_value_expression )
             ::= 'SUBSTRING' '(' binary_value_expression 'FROM' numeric_value_expression ( 'FOR' numeric_value_expression )? ')'
    Referenced by:

    binary_trim_function

    TRIM ( binary_trim_operands )
             ::= 'TRIM' '(' binary_trim_operands ')'
    Referenced by:

    binary_trim_operands

    trim_specification binary_value_expression , FROM binary_value_expression
             ::= trim_specification? binary_value_expression ( ( ',' | 'FROM' ) binary_value_expression )?
    Referenced by:

    binary_overlay_function

    OVERLAY ( binary_value_expression PLACING binary_value_expression FROM numeric_value_expression FOR numeric_value_expression )
             ::= 'OVERLAY' '(' binary_value_expression 'PLACING' binary_value_expression 'FROM' numeric_value_expression ( 'FOR' numeric_value_expression )? ')'
    Referenced by:

    datetime_value_expression

    datetime_term interval_value_expression
             ::= datetime_term
               | interval_value_expression

    datetime_term

    datetime_factor
             ::= datetime_factor

    datetime_factor

    datetime_primary time_zone
             ::= datetime_primary time_zone?
    Referenced by:

    datetime_primary

    datetime_value_function interval_value_expression
             ::= datetime_value_function
               | interval_value_expression
    Referenced by:

    time_zone

    AT time_zone_specifier
             ::= 'AT' time_zone_specifier
    Referenced by:

    time_zone_specifier

    LOCAL TIME ZONE interval_primary
             ::= 'LOCAL'
               | 'TIME' 'ZONE' interval_primary
    Referenced by:

    datetime_value_function

    CURRENT_DATE current_time_value_function current_timestamp_value_function current_local_time_value_function current_local_timestamp_value_function
             ::= 'CURRENT_DATE'
               | current_time_value_function
               | current_timestamp_value_function
               | current_local_time_value_function

    current_time_value_function

    CURRENT_TIME ( unsigned_integer )
             ::= 'CURRENT_TIME' ( '(' unsigned_integer ')' )?
    Referenced by:

    current_local_time_value_function

    LOCALTIME ( unsigned_integer )
             ::= 'LOCALTIME' ( '(' unsigned_integer ')' )?
    Referenced by:

    current_timestamp_value_function

    CURRENT_TIMESTAMP ( unsigned_integer )
             ::= 'CURRENT_TIMESTAMP' ( '(' unsigned_integer ')' )?
    Referenced by:

    current_local_timestamp_value_function

    LOCALTIMESTAMP ( unsigned_integer )
             ::= 'LOCALTIMESTAMP' ( '(' unsigned_integer ')' )?
    Referenced by:

    interval_value_expression

    interval_term ( datetime_value_expression - datetime_term ) interval_qualifier
             ::= interval_term
               | '(' datetime_value_expression '-' datetime_term ')' interval_qualifier

    interval_term

    interval_factor * / factor
             ::= interval_factor ( ( '*' | '/' ) factor )?

    interval_factor

    + - interval_primary
             ::= ( '+' | '-' )? interval_primary
    Referenced by:

    interval_primary

    interval_value_function array_value_expression interval_qualifier
             ::= interval_value_function

    interval_value_function

    interval_absolute_value_function
             ::= interval_absolute_value_function
    Referenced by:

    interval_absolute_value_function

    ABS ( interval_value_expression )
             ::= 'ABS' '(' interval_value_expression ')'
    Referenced by:

    boolean_value_expression

    boolean_term OR
             ::= boolean_term ( 'OR' boolean_term )*

    boolean_term

    boolean_factor AND
             ::= boolean_factor ( 'AND' boolean_factor )*
    Referenced by:

    boolean_factor

    NOT boolean_test
             ::= 'NOT'? boolean_test
    Referenced by:

    boolean_test

    boolean_primary IS NOT truth_value
             ::= boolean_primary ( 'IS' 'NOT'? truth_value )?
    Referenced by:

    truth_value

    TRUE FALSE UNKNOWN
             ::= 'TRUE'
               | 'FALSE'
               | 'UNKNOWN'
    Referenced by:

    boolean_primary

    predicate boolean_predicand
             ::= predicate
               | boolean_predicand
    Referenced by:

    boolean_predicand

    parenthesized_boolean_value_expression numeric_value_expression
               | numeric_value_expression
    Referenced by:

    parenthesized_boolean_value_expression

    ( boolean_value_expression )
             ::= '(' boolean_value_expression ')'
    Referenced by:

    array_value_expression

    array_primary ||
             ::= array_primary ( '||' array_primary )*

    array_value_expression_1

    array_value_expression
             ::= array_value_expression
    Not referenced by any.

    array_primary

    array_value_function multiset_value_expression
             ::= array_value_function
               | multiset_value_expression
    Referenced by:

    array_value_function

    trim_array_function
             ::= trim_array_function
    Referenced by:

    trim_array_function

    TRIM_ARRAY ( array_value_expression , numeric_value_expression )
             ::= 'TRIM_ARRAY' '(' array_value_expression ',' numeric_value_expression ')'
    Referenced by:

    array_value_constructor

    array_value_constructor_by_enumeration array_value_constructor_by_query
               | array_value_constructor_by_query

    array_value_constructor_by_enumeration

    ARRAY left_bracket_or_trigraph array_element_list right_bracket_or_trigraph
    Referenced by:

    array_element_list

    array_element ,
             ::= array_element ( ',' array_element )*

    array_element

    value_expression
             ::= value_expression
    Referenced by:

    array_value_constructor_by_query

    ARRAY subquery
             ::= 'ARRAY' subquery
    Referenced by:

    multiset_value_expression

    multiset_term MULTISET UNION EXCEPT ALL DISTINCT multiset_term
             ::= multiset_term ( 'MULTISET' ( 'UNION' | 'EXCEPT' ) ( 'ALL' | 'DISTINCT' )? multiset_term )?

    multiset_term

    multiset_primary MULTISET INTERSECT ALL DISTINCT multiset_primary
             ::= multiset_primary ( 'MULTISET' 'INTERSECT' ( 'ALL' | 'DISTINCT' )? multiset_primary )?

    multiset_primary

    multiset_set_function value_expression_primary
             ::= multiset_set_function
               | value_expression_primary
    Referenced by:

    multiset_set_function

    SET ( multiset_value_expression )
             ::= 'SET' '(' multiset_value_expression ')'
    Referenced by:

    multiset_value_constructor

    multiset_value_constructor_by_enumeration multiset_value_constructor_by_query table_value_constructor_by_query
               | multiset_value_constructor_by_query
               | table_value_constructor_by_query

    multiset_value_constructor_by_enumeration

    MULTISET left_bracket_or_trigraph multiset_element_list right_bracket_or_trigraph

    multiset_element_list

    multiset_element ,
             ::= multiset_element ( ',' multiset_element )*

    multiset_element

    value_expression
             ::= value_expression
    Referenced by:

    multiset_value_constructor_by_query

    MULTISET subquery
             ::= 'MULTISET' subquery

    table_value_constructor_by_query

    TABLE subquery
             ::= 'TABLE' subquery

    row_value_constructor

    explicit_row_value_constructor common_value_expression boolean_value_expression
             ::= explicit_row_value_constructor
               | common_value_expression
               | boolean_value_expression

    explicit_row_value_constructor

    ROW ( row_value_constructor_element_list ( row_value_constructor_element , row_value_constructor_element_list ) subquery
               | subquery

    row_value_constructor_element_list

    row_value_constructor_element ,

    row_value_constructor_element

    value_expression
             ::= value_expression

    contextually_typed_row_value_constructor

    common_value_expression boolean_value_expression contextually_typed_value_specification ( contextually_typed_value_specification contextually_typed_row_value_constructor_element , contextually_typed_row_value_constructor_element_list ROW ( contextually_typed_row_value_constructor_element_list )
             ::= common_value_expression
               | boolean_value_expression

    contextually_typed_row_value_constructor_element_list

    contextually_typed_row_value_constructor_element ,

    contextually_typed_row_value_constructor_element

    contextually_typed_value_specification

    row_value_constructor_predicand

    common_value_expression explicit_row_value_constructor
             ::= common_value_expression
               | explicit_row_value_constructor
    Referenced by:

    row_value_expression

    explicit_row_value_constructor row_value_special_case
             ::= explicit_row_value_constructor
               | row_value_special_case

    table_row_value_expression

    row_value_constructor row_value_special_case
             ::= row_value_constructor
               | row_value_special_case

    contextually_typed_row_value_expression

    contextually_typed_row_value_constructor row_value_special_case
               | row_value_special_case

    row_value_predicand

    row_value_constructor_predicand row_value_special_case
             ::= row_value_constructor_predicand
               | row_value_special_case

    row_value_special_case

    common_value_expression nonparenthesized_value_expression_primary
             ::= common_value_expression

    table_value_constructor

    VALUES row_value_expression_list
             ::= 'VALUES' row_value_expression_list
    Referenced by:

    row_value_expression_list

    table_row_value_expression ,
    Referenced by:

    contextually_typed_table_value_constructor

    VALUES contextually_typed_row_value_expression_list
             ::= 'VALUES' contextually_typed_row_value_expression_list
    Referenced by:

    contextually_typed_row_value_expression_list

    contextually_typed_row_value_expression ,

    table_expression

    from_clause where_clause group_by_clause having_clause window_clause

    from_clause

    FROM table_reference_list
             ::= 'FROM' table_reference_list
    Referenced by:

    table_reference_list

    table_reference ,
             ::= table_reference ( ',' table_reference )*
    Referenced by:

    table_reference

    table_factor joined_table
             ::= table_factor joined_table*

    table_factor

    table_primary sample_clause partitioned_join_table

    sample_clause

    TABLESAMPLE sample_method ( sample_percentage ) repeatable_clause
             ::= 'TABLESAMPLE' sample_method '(' sample_percentage ')' repeatable_clause?
    Referenced by:

    sample_method

    BERNOULLI SYSTEM
             ::= 'BERNOULLI'
               | 'SYSTEM'
    Referenced by:

    repeatable_clause

    REPEATABLE ( repeat_argument )
             ::= 'REPEATABLE' '(' repeat_argument ')'
    Referenced by:

    sample_percentage

    numeric_value_expression
             ::= numeric_value_expression
    Referenced by:

    repeat_argument

    numeric_value_expression
             ::= numeric_value_expression
    Referenced by:

    table_primary

    table_or_query_name derived_table parenthesized_joined_table lateral_derived_table collection_derived_table table_function_derived_table only_spec data_change_delta_table alias

    alias

    AS identifier identifier_suffix_chain ( column_name_list )
    Referenced by:

    system_version_specification

    AS OF SYSTEM TIME VERSIONS BEFORE AFTER SYSTEM TIME BETWEEN ASYMMETRIC SYMMETRIC SYSTEM TIME datetime_value_expression AND datetime_value_expression
             ::= ( 'AS' 'OF' 'SYSTEM' 'TIME' | 'VERSIONS' ( ( 'BEFORE' | 'AFTER' ) 'SYSTEM' 'TIME' | 'BETWEEN' ( 'ASYMMETRIC' | 'SYMMETRIC' )? 'SYSTEM' 'TIME' datetime_value_expression 'AND' ) ) datetime_value_expression
    Not referenced by any.

    only_spec

    ONLY ( table_or_query_name )
             ::= 'ONLY' '(' table_or_query_name ')'
    Referenced by:

    lateral_derived_table

    LATERAL subquery
             ::= 'LATERAL' subquery
    Referenced by:

    collection_derived_table

    UNNEST ( collection_value_expression , ) WITH ORDINALITY
             ::= 'UNNEST' '(' collection_value_expression ( ',' collection_value_expression )* ')' ( 'WITH' 'ORDINALITY' )?
    Referenced by:

    table_function_derived_table

    TABLE ( collection_value_expression )
             ::= 'TABLE' '(' collection_value_expression ')'
    Referenced by:

    derived_table

    query_expression subquery
             ::= query_expression
               | subquery
    Referenced by:

    table_or_query_name

    table_name identifier
             ::= table_name
               | identifier

    column_name_list

    identifier ,
             ::= identifier ( ',' identifier )*

    data_change_delta_table

    result_option TABLE ( data_change_statement )
             ::= result_option 'TABLE' '(' data_change_statement ')'
    Referenced by:

    data_change_statement

    delete_statement_searched insert_statement merge_statement update_statement_searched
             ::= delete_statement_searched
               | insert_statement
               | merge_statement
               | update_statement_searched
    Referenced by:

    result_option

    FINAL NEW OLD
             ::= 'FINAL'
               | 'NEW'
               | 'OLD'
    Referenced by:

    parenthesized_joined_table

    ( table_primary table_reference joined_table )
             ::= '(' ( table_primary | table_reference ) joined_table* ')'
    Referenced by:

    joined_table

    cross_join qualified_join natural_join
             ::= cross_join
               | qualified_join
               | natural_join

    cross_join

    CROSS JOIN table_factor
             ::= 'CROSS' 'JOIN' table_factor
    Referenced by:

    qualified_join

    join_type JOIN table_reference partitioned_join_table join_specification
    Referenced by:

    partitioned_join_table

    PARTITION BY partitioned_join_column_reference_list
             ::= 'PARTITION' 'BY' partitioned_join_column_reference_list

    partitioned_join_column_reference_list

    ( partitioned_join_column_reference , )
    Referenced by:

    partitioned_join_column_reference

    column_reference
             ::= column_reference

    natural_join

    NATURAL join_type JOIN table_factor partitioned_join_table
             ::= 'NATURAL' join_type? 'JOIN' ( table_factor | partitioned_join_table )
    Referenced by:

    join_specification

    join_condition named_columns_join
             ::= join_condition
               | named_columns_join
    Referenced by:

    join_condition

    ON search_condition
             ::= 'ON' search_condition
    Referenced by:

    named_columns_join

    USING ( join_column_list )
             ::= 'USING' '(' join_column_list ')'
    Referenced by:

    join_type

    INNER outer_join_type OUTER
             ::= 'INNER'
               | outer_join_type 'OUTER'?

    outer_join_type

    LEFT RIGHT FULL
             ::= 'LEFT'
               | 'RIGHT'
               | 'FULL'
    Referenced by:

    join_column_list

    column_name_list
             ::= column_name_list
    Referenced by:

    where_clause

    WHERE search_condition
             ::= 'WHERE' search_condition
    Referenced by:

    group_by_clause

    GROUP BY set_quantifier grouping_element_list
             ::= 'GROUP' 'BY' set_quantifier? grouping_element_list
    Referenced by:

    grouping_element_list

    grouping_element ,
             ::= grouping_element ( ',' grouping_element )*
    Referenced by:

    grouping_element

    rollup_list cube_list grouping_sets_specification empty_grouping_set ordinary_grouping_set
             ::= rollup_list
               | cube_list
               | grouping_sets_specification
               | empty_grouping_set
               | ordinary_grouping_set
    Referenced by:

    ordinary_grouping_set

    grouping_column_reference ( grouping_column_reference_list )
             ::= grouping_column_reference
               | '(' grouping_column_reference_list ')'

    grouping_column_reference

    grouping_expression column_reference collate_clause

    grouping_column_reference_list

    grouping_column_reference ,
    Referenced by:

    rollup_list

    ROLLUP ( ordinary_grouping_set_list )
             ::= 'ROLLUP' '(' ordinary_grouping_set_list ')'

    ordinary_grouping_set_list

    ordinary_grouping_set ,
             ::= ordinary_grouping_set ( ',' ordinary_grouping_set )*
    Referenced by:

    cube_list

    CUBE ( ordinary_grouping_set_list )
             ::= 'CUBE' '(' ordinary_grouping_set_list ')'

    grouping_sets_specification

    GROUPING SETS ( grouping_set_list )
             ::= 'GROUPING' 'SETS' '(' grouping_set_list ')'

    grouping_set_list

    grouping_set ,
             ::= grouping_set ( ',' grouping_set )*

    grouping_set

    rollup_list cube_list grouping_sets_specification empty_grouping_set ordinary_grouping_set
             ::= rollup_list
               | cube_list
               | grouping_sets_specification
               | empty_grouping_set
               | ordinary_grouping_set
    Referenced by:

    empty_grouping_set

    ( )
             ::= '(' ')'

    having_clause

    HAVING search_condition
             ::= 'HAVING' search_condition
    Referenced by:

    window_clause

    WINDOW window_definition_list
             ::= 'WINDOW' window_definition_list
    Referenced by:

    window_definition_list

    window_definition ,
             ::= window_definition ( ',' window_definition )*
    Referenced by:

    window_definition

    identifier AS window_specification
             ::= identifier 'AS' window_specification
    Referenced by:

    window_specification

    ( window_specification_details )
             ::= '(' window_specification_details? ')'

    window_specification_details

    window_partition_clause window_order_clause window_frame_clause existing_identifier
    Referenced by:

    existing_identifier

    identifier
             ::= identifier

    window_partition_clause

    PARTITION BY window_partition_column_reference_list
             ::= 'PARTITION' 'BY' window_partition_column_reference_list

    window_partition_column_reference_list

    window_partition_column_reference ,
    Referenced by:

    window_partition_column_reference

    value_expression column_reference collate_clause
             ::= ( value_expression | column_reference ) collate_clause?

    window_order_clause

    ORDER BY sort_specification_list
             ::= 'ORDER' 'BY' sort_specification_list

    window_frame_clause

    window_frame_units window_frame_extent window_frame_exclusion

    window_frame_units

    ROWS RANGE
             ::= 'ROWS'
               | 'RANGE'
    Referenced by:

    window_frame_extent

    window_frame_start window_frame_between
             ::= window_frame_start
               | window_frame_between
    Referenced by:

    window_frame_start

    UNBOUNDED PRECEDING CURRENT ROW window_frame_preceding
             ::= 'UNBOUNDED' 'PRECEDING'
               | 'CURRENT' 'ROW'
               | window_frame_preceding

    window_frame_preceding

    value_expression PRECEDING
             ::= value_expression 'PRECEDING'
    Referenced by:

    window_frame_between

    BETWEEN window_frame_bound AND window_frame_bound
             ::= 'BETWEEN' window_frame_bound 'AND' window_frame_bound
    Referenced by:

    window_frame_bound

    window_frame_start UNBOUNDED FOLLOWING window_frame_following
             ::= window_frame_start
               | 'UNBOUNDED' 'FOLLOWING'
               | window_frame_following
    Referenced by:

    window_frame_following

    value_expression FOLLOWING
             ::= value_expression 'FOLLOWING'
    Referenced by:

    window_frame_exclusion

    EXCLUDE CURRENT ROW GROUP TIES NO OTHERS
             ::= 'EXCLUDE' ( 'CURRENT' 'ROW' | 'GROUP' | 'TIES' | 'NO' 'OTHERS' )
    Referenced by:

    query_specification

    SELECT set_quantifier select_list table_expression
             ::= 'SELECT' set_quantifier? select_list table_expression?

    select_list

    * select_sublist , , * , select_sublist
             ::= ( '*' | select_sublist ( ',' select_sublist )* ( ',' '*' )? ) ( ',' select_sublist )*

    select_sublist

    derived_column . * AS ( all_fields_column_name_list ) as_clause
             ::= derived_column ( '.' '*' ( 'AS' '(' all_fields_column_name_list ')' )? | as_clause )?
    Referenced by:

    qualified_asterisk

    asterisked_identifier_chain . * all_fields_reference
             ::= asterisked_identifier_chain '.' '*'
               | all_fields_reference
    Not referenced by any.

    asterisked_identifier_chain

    identifier .
             ::= identifier ( '.' identifier )*
    Referenced by:

    derived_column

    value_expression as_clause
             ::= value_expression as_clause?
    Referenced by:

    as_clause

    AS identifier
             ::= 'AS'? identifier

    all_fields_reference

    value_expression_primary . * AS ( all_fields_column_name_list )
             ::= value_expression_primary '.' '*' ( 'AS' '(' all_fields_column_name_list ')' )?
    Referenced by:

    all_fields_column_name_list

    column_name_list
             ::= column_name_list

    query_expression

    with_clause query_expression_body order_by_clause result_offset_clause fetch_first_clause limit_clause

    with_clause

    WITH RECURSIVE with_list
             ::= 'WITH' 'RECURSIVE'? with_list
    Referenced by:

    with_list

    with_list_element ,
             ::= with_list_element ( ',' with_list_element )*
    Referenced by:

    with_list_element

    identifier ( column_name_list ) AS subquery search_or_cycle_clause
             ::= identifier ( '(' column_name_list ')' )? 'AS' subquery search_or_cycle_clause?
    Referenced by:

    query_expression_body

    query_term corresponding_spec ALL DISTINCT UNION EXCEPT
             ::= query_term ( ( 'UNION' | 'EXCEPT' ) ( 'ALL' | 'DISTINCT' )? corresponding_spec? query_term )*

    query_term

    query_primary corresponding_spec ALL DISTINCT INTERSECT
             ::= query_primary ( 'INTERSECT' ( 'ALL' | 'DISTINCT' )? corresponding_spec? query_primary )*
    Referenced by:

    query_primary

    ( query_expression_body order_by_clause limit_clause result_offset_clause fetch_first_clause ) simple_table
               | simple_table
    Referenced by:

    simple_table

    table_value_constructor explicit_table query_specification
             ::= table_value_constructor
               | explicit_table
               | query_specification
    Referenced by:

    explicit_table

    TABLE table_or_query_name
             ::= 'TABLE' table_or_query_name
    Referenced by:

    corresponding_spec

    CORRESPONDING BY ( column_name_list )
             ::= 'CORRESPONDING' ( 'BY' '(' column_name_list ')' )?

    order_by_clause

    ORDER BY sort_specification_list
             ::= 'ORDER' 'BY' sort_specification_list

    result_offset_clause

    OFFSET simple_value_specification ROW ROWS
             ::= 'OFFSET' simple_value_specification ( 'ROW' | 'ROWS' )

    fetch_first_clause

    FETCH FIRST NEXT simple_value_specification ROW ROWS ONLY
             ::= 'FETCH' ( 'FIRST' | 'NEXT' ) simple_value_specification? ( 'ROW' | 'ROWS' ) 'ONLY'

    search_or_cycle_clause

    search_clause cycle_clause cycle_clause
             ::= search_clause cycle_clause?
               | cycle_clause
    Referenced by:

    search_clause

    SEARCH recursive_search_order SET identifier
             ::= 'SEARCH' recursive_search_order 'SET' identifier
    Referenced by:

    recursive_search_order

    DEPTH BREADTH FIRST BY column_name_list
             ::= ( 'DEPTH' | 'BREADTH' ) 'FIRST' 'BY' column_name_list
    Referenced by:

    cycle_clause

    CYCLE cycle_column_list SET identifier TO value_expression DEFAULT value_expression USING identifier
             ::= 'CYCLE' cycle_column_list 'SET' identifier 'TO' value_expression 'DEFAULT' value_expression 'USING' identifier
    Referenced by:

    cycle_column_list

    identifier ,
             ::= identifier ( ',' identifier )*
    Referenced by:

    subquery

    ( query_expression )

    predicate

    exists_predicate unique_predicate row_value_predicand comparison_predicate between_predicate in_predicate like_predicate similar_predicate regex_like_predicate null_predicate quantified_comparison_predicate normalized_predicate match_predicate overlaps_predicate distinct_predicate member_predicate submultiset_predicate set_predicate type_predicate
             ::= exists_predicate
               | unique_predicate
    Referenced by:

    comparison_predicate

    comparison_predicate_part_2
             ::= comparison_predicate_part_2
    Referenced by:

    comparison_predicate_part_2

    comp_op row_value_predicand
             ::= comp_op row_value_predicand

    comp_op

    = <> < > <= >= !=
    comp_op  ::= '='
               | '<>'
               | '<'
               | '>'
               | '<='
               | '>='
               | '!='

    between_predicate

    between_predicate_part_2
             ::= between_predicate_part_2
    Referenced by:

    between_predicate_part_2

    NOT BETWEEN ASYMMETRIC SYMMETRIC row_value_predicand AND row_value_predicand
             ::= 'NOT'? 'BETWEEN' ( 'ASYMMETRIC' | 'SYMMETRIC' )? row_value_predicand 'AND' row_value_predicand

    in_predicate

    in_predicate_part_2
             ::= in_predicate_part_2
    Referenced by:

    in_predicate_part_2

    NOT IN in_predicate_value
             ::= 'NOT'? 'IN' in_predicate_value
    Referenced by:

    in_predicate_value

    ( in_value_list ) subquery
             ::= '(' in_value_list ')'
               | subquery
    Referenced by:

    in_value_list

    row_value_expression ,
             ::= row_value_expression ( ',' row_value_expression )*
    Referenced by:

    like_predicate

    character_like_predicate octet_like_predicate
             ::= character_like_predicate
               | octet_like_predicate
    Referenced by:

    character_like_predicate

    character_like_predicate_part_2
             ::= character_like_predicate_part_2
    Referenced by:

    character_like_predicate_part_2

    NOT LIKE character_value_expression ESCAPE character_value_expression
             ::= 'NOT'? 'LIKE' character_value_expression ( 'ESCAPE' character_value_expression )?

    octet_like_predicate

    octet_like_predicate_part_2
             ::= octet_like_predicate_part_2
    Referenced by:

    octet_like_predicate_part_2

    NOT LIKE binary_value_expression ESCAPE binary_value_expression
             ::= 'NOT'? 'LIKE' binary_value_expression ( 'ESCAPE' binary_value_expression )?

    similar_predicate

    similar_predicate_part_2
             ::= similar_predicate_part_2
    Referenced by:

    similar_predicate_part_2

    NOT SIMILAR TO character_value_expression ESCAPE character_value_expression
             ::= 'NOT'? 'SIMILAR' 'TO' character_value_expression ( 'ESCAPE' character_value_expression )?

    regex_like_predicate

    regex_like_predicate_part_2
             ::= regex_like_predicate_part_2
    Referenced by:

    regex_like_predicate_part_2

    NOT LIKE_REGEX character_value_expression FLAG character_value_expression
             ::= 'NOT'? 'LIKE_REGEX' character_value_expression ( 'FLAG' character_value_expression )?

    null_predicate

    null_predicate_part_2
             ::= null_predicate_part_2
    Referenced by:

    null_predicate_part_2

    IS NOT NULL
             ::= 'IS' 'NOT'? 'NULL'

    quantified_comparison_predicate

    quantified_comparison_predicate_part_2
    Referenced by:

    quantified_comparison_predicate_part_2

    comp_op ALL SOME ANY subquery
             ::= comp_op ( 'ALL' | 'SOME' | 'ANY' ) subquery

    exists_predicate

    EXISTS subquery
             ::= 'EXISTS' subquery
    Referenced by:

    unique_predicate

    UNIQUE subquery
             ::= 'UNIQUE' subquery
    Referenced by:

    normalized_predicate

    normalized_predicate_part_2
             ::= normalized_predicate_part_2
    Referenced by:

    normalized_predicate_part_2

    IS NOT normal_form NORMALIZED
             ::= 'IS' 'NOT'? normal_form? 'NORMALIZED'

    match_predicate

    match_predicate_part_2
             ::= match_predicate_part_2
    Referenced by:

    match_predicate_part_2

    MATCH UNIQUE SIMPLE PARTIAL FULL subquery
             ::= 'MATCH' 'UNIQUE'? ( 'SIMPLE' | 'PARTIAL' | 'FULL' )? subquery

    overlaps_predicate

    overlaps_predicate_part_2
             ::= overlaps_predicate_part_2
    Referenced by:

    overlaps_predicate_part_1

    row_value_predicand_1
             ::= row_value_predicand_1
    Referenced by:

    overlaps_predicate_part_2

    OVERLAPS row_value_predicand_2
             ::= 'OVERLAPS' row_value_predicand_2

    row_value_predicand_1

    row_value_predicand
             ::= row_value_predicand

    row_value_predicand_2

    row_value_predicand
             ::= row_value_predicand

    distinct_predicate

    distinct_predicate_part_2
             ::= distinct_predicate_part_2
    Referenced by:

    distinct_predicate_part_2

    IS NOT DISTINCT FROM row_value_predicand_4
             ::= 'IS' 'NOT'? 'DISTINCT' 'FROM' row_value_predicand_4

    row_value_predicand_3

    row_value_predicand
             ::= row_value_predicand
    Not referenced by any.

    row_value_predicand_4

    row_value_predicand
             ::= row_value_predicand

    member_predicate

    member_predicate_part_2
             ::= member_predicate_part_2
    Referenced by:

    member_predicate_part_2

    NOT MEMBER OF multiset_value_expression
             ::= 'NOT'? 'MEMBER' 'OF'? multiset_value_expression

    submultiset_predicate

    submultiset_predicate_part_2
             ::= submultiset_predicate_part_2
    Referenced by:

    submultiset_predicate_part_2

    NOT SUBMULTISET OF multiset_value_expression
             ::= 'NOT'? 'SUBMULTISET' 'OF'? multiset_value_expression

    set_predicate

    set_predicate_part_2
             ::= set_predicate_part_2
    Referenced by:

    set_predicate_part_2

    IS NOT A SET
             ::= 'IS' 'NOT'? 'A' 'SET'

    type_predicate

    type_predicate_part_2
             ::= type_predicate_part_2
    Referenced by:

    type_predicate_part_2

    IS NOT OF ( type_list )
             ::= 'IS' 'NOT'? 'OF' '(' type_list ')'

    type_list

    user_defined_type_specification ,
    Referenced by:

    user_defined_type_specification

    exclusive_user_defined_type_specification inclusive_user_defined_type_specification
    Referenced by:

    inclusive_user_defined_type_specification

    path_resolved_user_defined_type_name

    exclusive_user_defined_type_specification

    ONLY path_resolved_user_defined_type_name
             ::= 'ONLY' path_resolved_user_defined_type_name

    search_condition

    boolean_value_expression
             ::= boolean_value_expression

    interval_qualifier

    start_field TO end_field single_datetime_field
             ::= start_field 'TO' end_field
               | single_datetime_field

    start_field

    non_second_primary_datetime_field ( interval_leading_field_precision )

    end_field

    non_second_primary_datetime_field SECOND ( interval_fractional_seconds_precision )
             ::= non_second_primary_datetime_field
               | 'SECOND' ( '(' interval_fractional_seconds_precision ')' )?
    Referenced by:

    single_datetime_field

    start_field SECOND ( interval_leading_field_precision , interval_fractional_seconds_precision )
             ::= start_field
               | 'SECOND' ( '(' interval_leading_field_precision ( ',' interval_fractional_seconds_precision )? ')' )?
    Referenced by:

    primary_datetime_field

    non_second_primary_datetime_field SECOND
             ::= non_second_primary_datetime_field
               | 'SECOND'
    Referenced by:

    non_second_primary_datetime_field

    YEAR MONTH DAY HOUR MINUTE
             ::= 'YEAR'
               | 'MONTH'
               | 'DAY'
               | 'HOUR'
               | 'MINUTE'

    interval_fractional_seconds_precision

    unsigned_integer
             ::= unsigned_integer

    interval_leading_field_precision

    unsigned_integer
             ::= unsigned_integer

    language_clause

    LANGUAGE language_name
             ::= 'LANGUAGE' language_name

    language_name

    ADA C COBOL FORTRAN M MUMPS PASCAL PLI SQL
             ::= 'ADA'
               | 'C'
               | 'COBOL'
               | 'FORTRAN'
               | 'M'
               | 'MUMPS'
               | 'PASCAL'
               | 'PLI'
               | 'SQL'
    Referenced by:

    path_specification

    PATH schema_name_list
             ::= 'PATH' schema_name_list

    schema_name_list

    schema_name ,
             ::= schema_name ( ',' schema_name )*
    Referenced by:

    routine_invocation

    routine_name SQL_argument_list
             ::= routine_name SQL_argument_list

    routine_name

    schema_name . identifier
             ::= ( schema_name '.' )? identifier
    Referenced by:

    SQL_argument_list

    ( SQL_argument , )
             ::= '(' ( SQL_argument ( ',' SQL_argument )* )? ')'

    SQL_argument

    lambda value_expression generalized_expression named_argument_specification contextually_typed_value_specification target_specification
             ::= lambda
               | value_expression generalized_expression?
               | named_argument_specification
               | target_specification
    Referenced by:

    generalized_expression

    AS path_resolved_user_defined_type_name
             ::= 'AS' path_resolved_user_defined_type_name
    Referenced by:

    named_argument_specification

    identifier => named_argument_SQL_argument
             ::= identifier '=>' named_argument_SQL_argument
    Referenced by:

    named_argument_SQL_argument

    value_expression contextually_typed_value_specification target_specification
             ::= value_expression
               | target_specification

    character_set_specification

    standard_character_set_name implementation_defined_character_set_name user_defined_character_set_name
             ::= standard_character_set_name
               | user_defined_character_set_name

    standard_character_set_name

    character_set_name
             ::= character_set_name

    implementation_defined_character_set_name

    character_set_name
             ::= character_set_name

    user_defined_character_set_name

    character_set_name
             ::= character_set_name

    specific_routine_designator

    SPECIFIC routine_type schema_qualified_name routine_type member_name FOR schema_resolved_user_defined_type_name
             ::= 'SPECIFIC' routine_type schema_qualified_name

    routine_type

    ROUTINE FUNCTION PROCEDURE INSTANCE STATIC CONSTRUCTOR METHOD
             ::= 'ROUTINE'
               | 'FUNCTION'
               | 'PROCEDURE'
               | ( 'INSTANCE' | 'STATIC' | 'CONSTRUCTOR' )? 'METHOD'

    member_name

    member_name_alternatives data_type_list

    member_name_alternatives

    schema_qualified_name identifier
             ::= schema_qualified_name
               | identifier
    Referenced by:

    data_type_list

    ( data_type , )
             ::= '(' ( data_type ( ',' data_type )* )? ')'

    collate_clause

    COLLATE schema_qualified_name
             ::= 'COLLATE' schema_qualified_name

    constraint_name_definition

    CONSTRAINT schema_qualified_name
             ::= 'CONSTRAINT' schema_qualified_name

    constraint_characteristics

    constraint_check_time NOT DEFERRABLE NOT DEFERRABLE constraint_check_time constraint_enforcement constraint_enforcement
             ::= ( constraint_check_time ( 'NOT'? 'DEFERRABLE' )? | 'NOT'? 'DEFERRABLE' constraint_check_time? ) constraint_enforcement?
               | constraint_enforcement

    constraint_check_time

    INITIALLY DEFERRED IMMEDIATE
             ::= 'INITIALLY' ( 'DEFERRED' | 'IMMEDIATE' )

    constraint_enforcement

    NOT ENFORCED
             ::= 'NOT'? 'ENFORCED'

    aggregate_function

    COUNT ( * ) count general_set_function binary_set_function ordered_set_function array_aggregate_function presto_aggregations filter_clause

    general_set_function

    set_function_type ( set_quantifier value_expression extra_args_to_agg )
    Referenced by:

    set_function_type

    computational_operation
             ::= computational_operation
    Referenced by:

    computational_operation

    AVG MAX MIN SUM EVERY ANY SOME COUNT STDDEV_POP STDDEV_SAMP VAR_SAMP VAR_POP COLLECT FUSION INTERSECTION
             ::= 'AVG'
               | 'MAX'
               | 'MIN'
               | 'SUM'
               | 'EVERY'
               | 'ANY'
               | 'SOME'
               | 'COUNT'
               | 'STDDEV_POP'
               | 'STDDEV_SAMP'
               | 'VAR_SAMP'
               | 'VAR_POP'
               | 'COLLECT'
               | 'FUSION'
               | 'INTERSECTION'
    Referenced by:

    set_quantifier

    DISTINCT ALL
             ::= 'DISTINCT'
               | 'ALL'

    filter_clause

    FILTER ( WHERE search_condition )
             ::= 'FILTER' '(' 'WHERE' search_condition ')'

    binary_set_function

    binary_set_function_type ( dependent_variable_expression , independent_variable_expression )
    Referenced by:

    binary_set_function_type

    COVAR_POP COVAR_SAMP CORR REGR_SLOPE REGR_INTERCEPT REGR_COUNT REGR_R2 REGR_AVGX REGR_AVGY REGR_SXX REGR_SYY REGR_SXY
             ::= 'COVAR_POP'
               | 'COVAR_SAMP'
               | 'CORR'
               | 'REGR_SLOPE'
               | 'REGR_INTERCEPT'
               | 'REGR_COUNT'
               | 'REGR_R2'
               | 'REGR_AVGX'
               | 'REGR_AVGY'
               | 'REGR_SXX'
               | 'REGR_SYY'
               | 'REGR_SXY'
    Referenced by:

    dependent_variable_expression

    numeric_value_expression
             ::= numeric_value_expression
    Referenced by:

    independent_variable_expression

    numeric_value_expression
             ::= numeric_value_expression
    Referenced by:

    ordered_set_function

    hypothetical_set_function inverse_distribution_function
             ::= hypothetical_set_function
               | inverse_distribution_function
    Referenced by:

    hypothetical_set_function

    rank_function_type ( hypothetical_set_function_value_expression_list ) within_group_specification
    Referenced by:

    within_group_specification

    WITHIN GROUP ( ORDER BY sort_specification_list )
             ::= 'WITHIN' 'GROUP' '(' 'ORDER' 'BY' sort_specification_list ')'

    hypothetical_set_function_value_expression_list

    value_expression ,
             ::= value_expression ( ',' value_expression )*

    inverse_distribution_function

    inverse_distribution_function_type ( inverse_distribution_function_argument ) within_group_specification
    Referenced by:

    inverse_distribution_function_argument

    numeric_value_expression
             ::= numeric_value_expression

    inverse_distribution_function_type

    PERCENTILE_CONT PERCENTILE_DISC
             ::= 'PERCENTILE_CONT'
               | 'PERCENTILE_DISC'

    array_aggregate_function

    ARRAY_AGG ( DISTINCT value_expression ORDER BY sort_specification_list )
             ::= 'ARRAY_AGG' '(' 'DISTINCT'? value_expression ( 'ORDER' 'BY' sort_specification_list )? ')'
    Referenced by:

    sort_specification_list

    sort_specification ,
             ::= sort_specification ( ',' sort_specification )*

    sort_specification

    sort_key ordering_specification null_ordering
    Referenced by:

    sort_key

    value_expression
    Referenced by:

    ordering_specification

    ASC DESC
             ::= 'ASC'
               | 'DESC'
    Referenced by:

    null_ordering

    NULLS FIRST LAST
             ::= 'NULLS' ( 'FIRST' | 'LAST' )
    Referenced by:

    schema_definition

    CREATE SCHEMA if_not_exists schema_name_clause schema_character_set_or_path schema_element

    schema_character_set_or_path

    schema_character_set_specification schema_path_specification schema_path_specification schema_character_set_specification
    Referenced by:

    schema_name_clause

    schema_name AUTHORIZATION identifier AUTHORIZATION identifier
             ::= schema_name ( 'AUTHORIZATION' identifier )?
               | 'AUTHORIZATION' identifier
    Referenced by:

    schema_character_set_specification

    DEFAULT CHARACTER SET character_set_specification
             ::= 'DEFAULT' 'CHARACTER' 'SET' character_set_specification

    schema_path_specification

    path_specification
             ::= path_specification

    schema_element

    table_definition view_definition domain_definition character_set_definition collation_definition transliteration_definition assertion_definition trigger_definition user_defined_type_definition user_defined_cast_definition user_defined_ordering_definition transform_definition schema_routine sequence_generator_definition grant_statement role_definition
             ::= table_definition
               | view_definition
               | domain_definition
               | character_set_definition
               | collation_definition
               | transliteration_definition
               | assertion_definition
               | trigger_definition
               | user_defined_type_definition
               | user_defined_cast_definition
               | user_defined_ordering_definition
               | transform_definition
               | schema_routine
               | sequence_generator_definition
               | grant_statement
               | role_definition
    Referenced by:

    drop_schema_statement

    DROP SCHEMA schema_name drop_behavior
             ::= 'DROP' 'SCHEMA' schema_name drop_behavior

    drop_behavior

    CASCADE RESTRICT
             ::= 'CASCADE'
               | 'RESTRICT'

    table_definition

    CREATE table_scope TABLE if_not_exists table_name table_description WITH system_versioning_clause table_attributes table_contents_source table_contents_source table_description WITH system_versioning_clause table_attributes ON COMMIT table_commit_action ROWS

    table_contents_source

    typed_table_clause as_subquery_clause table_element_list
             ::= typed_table_clause
               | as_subquery_clause
               | table_element_list
    Referenced by:

    table_scope

    global_or_local TEMPORARY
             ::= global_or_local 'TEMPORARY'
    Referenced by:

    global_or_local

    GLOBAL LOCAL
             ::= 'GLOBAL'
               | 'LOCAL'
    Referenced by:

    system_versioning_clause

    SYSTEM VERSIONING retention_period_specification
             ::= 'SYSTEM' 'VERSIONING' retention_period_specification?

    retention_period_specification

    KEEP VERSIONS FOREVER FOR length_of_time time_unit
             ::= 'KEEP' 'VERSIONS' ( 'FOREVER' | 'FOR' length_of_time time_unit )

    length_of_time

    unsigned_integer
             ::= unsigned_integer

    time_unit

    SECOND SECONDS MINUTE MINUTES HOUR HOURS DAY DAYS MONTH MONTHS YEAR YEARS
             ::= 'SECOND'
               | 'SECONDS'
               | 'MINUTE'
               | 'MINUTES'
               | 'HOUR'
               | 'HOURS'
               | 'DAY'
               | 'DAYS'
               | 'MONTH'
               | 'MONTHS'
               | 'YEAR'
               | 'YEARS'

    table_commit_action

    PRESERVE DELETE
             ::= 'PRESERVE'
               | 'DELETE'

    table_element_list

    ( table_element , )
             ::= '(' table_element ( ',' table_element )* ')'

    table_element

    column_definition table_constraint_definition like_clause
             ::= column_definition
               | table_constraint_definition
               | like_clause
    Referenced by:

    typed_table_clause

    OF path_resolved_user_defined_type_name subtable_clause typed_table_element_list
    Referenced by:

    typed_table_element_list

    ( typed_table_element , )
             ::= '(' typed_table_element ( ',' typed_table_element )* ')'
    Referenced by:

    typed_table_element

    column_options table_constraint_definition self_referencing_column_specification
             ::= column_options
               | table_constraint_definition
    Referenced by:

    self_referencing_column_specification

    REF IS identifier reference_generation
             ::= 'REF' 'IS' identifier reference_generation?

    reference_generation

    SYSTEM USER GENERATED DERIVED
             ::= ( 'SYSTEM' | 'USER' ) 'GENERATED'
               | 'DERIVED'

    column_options

    identifier WITH OPTIONS column_option_list
             ::= identifier 'WITH' 'OPTIONS' column_option_list
    Referenced by:

    column_option_list

    scope_clause default_clause column_constraint_definition
    Referenced by:

    subtable_clause

    UNDER supertable_clause
             ::= 'UNDER' supertable_clause
    Referenced by:

    supertable_clause

    supertable_name
             ::= supertable_name
    Referenced by:

    supertable_name

    table_name
             ::= table_name
    Referenced by:

    like_clause

    LIKE table_name like_options
             ::= 'LIKE' table_name like_options?
    Referenced by:

    like_options

    like_option
             ::= like_option+
    Referenced by:

    like_option

    identity_option column_default_option generation_option INCLUDING PROPERTIES
             ::= identity_option
               | column_default_option
               | generation_option
               | 'INCLUDING' 'PROPERTIES'
    Referenced by:

    identity_option

    INCLUDING EXCLUDING IDENTITY
             ::= ( 'INCLUDING' | 'EXCLUDING' ) 'IDENTITY'
    Referenced by:

    column_default_option

    INCLUDING EXCLUDING DEFAULTS
             ::= ( 'INCLUDING' | 'EXCLUDING' ) 'DEFAULTS'
    Referenced by:

    generation_option

    INCLUDING EXCLUDING GENERATED
             ::= ( 'INCLUDING' | 'EXCLUDING' ) 'GENERATED'
    Referenced by:

    as_subquery_clause

    ( column_name_list ) WITH table_attributes AS subquery query_expression with_or_without_data
             ::= ( '(' column_name_list ')' )? ( 'WITH' table_attributes )? 'AS' ( subquery | query_expression ) with_or_without_data?
    Referenced by:

    with_or_without_data

    WITH NO DATA
             ::= 'WITH' 'NO'? 'DATA'
    Referenced by:

    column_definition

    identifier data_type_or_schema_qualified_name default_clause identity_column_specification generation_clause system_version_start_column_specification system_version_end_column_specification column_constraint_definition collate_clause column_description

    data_type_or_schema_qualified_name

    data_type schema_qualified_name
             ::= data_type
               | schema_qualified_name
    Referenced by:

    system_version_start_column_specification

    timestamp_generation_rule AS SYSTEM VERSION START
             ::= timestamp_generation_rule 'AS' 'SYSTEM' 'VERSION' 'START'
    Referenced by:

    system_version_end_column_specification

    timestamp_generation_rule AS SYSTEM VERSION END
             ::= timestamp_generation_rule 'AS' 'SYSTEM' 'VERSION' 'END'
    Referenced by:

    timestamp_generation_rule

    GENERATED ALWAYS
             ::= 'GENERATED' 'ALWAYS'

    column_constraint_definition

    constraint_name_definition column_constraint constraint_characteristics

    column_constraint

    NOT NULL unique_specification references_specification check_constraint_definition
             ::= 'NOT' 'NULL'
               | unique_specification
               | references_specification
               | check_constraint_definition

    identity_column_specification

    GENERATED ALWAYS BY DEFAULT AS IDENTITY ( common_sequence_generator_options )
             ::= 'GENERATED' ( 'ALWAYS' | 'BY' 'DEFAULT' ) 'AS' 'IDENTITY' ( '(' common_sequence_generator_options ')' )?
    Referenced by:

    generation_clause

    generation_rule AS generation_expression
             ::= generation_rule 'AS' generation_expression
    Referenced by:

    generation_rule

    GENERATED ALWAYS
             ::= 'GENERATED' 'ALWAYS'
    Referenced by:

    generation_expression

    ( value_expression )
             ::= '(' value_expression ')'
    Referenced by:

    default_clause

    DEFAULT default_option
             ::= 'DEFAULT' default_option

    default_option

    literal datetime_value_function USER CURRENT_USER CURRENT_ROLE SESSION_USER SYSTEM_USER CURRENT_CATALOG CURRENT_SCHEMA CURRENT_PATH implicitly_typed_value_specification
             ::= literal
               | datetime_value_function
               | 'USER'
               | 'CURRENT_USER'
               | 'CURRENT_ROLE'
               | 'SESSION_USER'
               | 'SYSTEM_USER'
               | 'CURRENT_CATALOG'
               | 'CURRENT_SCHEMA'
               | 'CURRENT_PATH'
               | implicitly_typed_value_specification
    Referenced by:

    table_constraint_definition

    constraint_name_definition table_constraint constraint_characteristics

    table_constraint

    unique_constraint_definition referential_constraint_definition check_constraint_definition
             ::= unique_constraint_definition
               | referential_constraint_definition
               | check_constraint_definition

    unique_constraint_definition

    unique_specification ( unique_column_list ) UNIQUE VALUE
             ::= unique_specification '(' unique_column_list ')'
               | 'UNIQUE' 'VALUE'
    Referenced by:

    unique_specification

    UNIQUE PRIMARY KEY
             ::= 'UNIQUE'
               | 'PRIMARY' 'KEY'

    unique_column_list

    column_name_list
             ::= column_name_list

    referential_constraint_definition

    FOREIGN KEY ( referencing_columns ) references_specification
             ::= 'FOREIGN' 'KEY' '(' referencing_columns ')' references_specification
    Referenced by:

    references_specification

    REFERENCES referenced_table_and_columns MATCH match_type referential_triggered_action
             ::= 'REFERENCES' referenced_table_and_columns ( 'MATCH' match_type )? referential_triggered_action?

    match_type

    FULL PARTIAL SIMPLE
             ::= 'FULL'
               | 'PARTIAL'
               | 'SIMPLE'
    Referenced by:

    referencing_columns

    reference_column_list
             ::= reference_column_list

    referenced_table_and_columns

    table_name ( reference_column_list )
             ::= table_name ( '(' reference_column_list ')' )?
    Referenced by:

    reference_column_list

    column_name_list
             ::= column_name_list

    referential_triggered_action

    update_rule delete_rule delete_rule update_rule
             ::= update_rule delete_rule?
               | delete_rule update_rule?
    Referenced by:

    update_rule

    ON UPDATE referential_action
             ::= 'ON' 'UPDATE' referential_action

    delete_rule

    ON DELETE referential_action
             ::= 'ON' 'DELETE' referential_action

    referential_action

    CASCADE SET NULL DEFAULT RESTRICT NO ACTION
             ::= 'CASCADE'
               | 'SET' ( 'NULL' | 'DEFAULT' )
               | 'RESTRICT'
               | 'NO' 'ACTION'
    Referenced by:

    check_constraint_definition

    CHECK ( search_condition )
             ::= 'CHECK' '(' search_condition ')'

    alter_table_statement

    ALTER TABLE table_name alter_table_action
             ::= 'ALTER' 'TABLE' table_name alter_table_action

    alter_table_action

    add_column_definition alter_column_definition drop_column_definition add_table_constraint_definition alter_table_constraint_definition drop_table_constraint_definition add_system_versioning_clause alter_system_versioning_clause drop_system_versioning_clause
             ::= add_column_definition
               | alter_column_definition
               | drop_column_definition
               | add_table_constraint_definition
               | alter_table_constraint_definition
               | drop_table_constraint_definition
               | add_system_versioning_clause
               | alter_system_versioning_clause
               | drop_system_versioning_clause
    Referenced by:

    add_column_definition

    ADD COLUMN column_definition
             ::= 'ADD' 'COLUMN'? column_definition
    Referenced by:

    alter_column_definition

    ALTER COLUMN identifier alter_column_action
             ::= 'ALTER' 'COLUMN'? identifier alter_column_action
    Referenced by:

    alter_column_action

    set_column_default_clause drop_column_default_clause set_column_not_null_clause drop_column_not_null_clause add_column_scope_clause drop_column_scope_clause alter_column_data_type_clause alter_identity_column_specification drop_identity_property_clause drop_column_generation_expression_clause
             ::= set_column_default_clause
               | drop_column_default_clause
               | set_column_not_null_clause
               | drop_column_not_null_clause
               | add_column_scope_clause
               | drop_column_scope_clause
               | alter_column_data_type_clause
               | alter_identity_column_specification
               | drop_identity_property_clause
    Referenced by:

    set_column_default_clause

    SET default_clause
             ::= 'SET' default_clause
    Referenced by:

    drop_column_default_clause

    DROP DEFAULT
             ::= 'DROP' 'DEFAULT'
    Referenced by:

    set_column_not_null_clause

    SET NOT NULL
             ::= 'SET' 'NOT' 'NULL'
    Referenced by:

    drop_column_not_null_clause

    DROP NOT NULL
             ::= 'DROP' 'NOT' 'NULL'
    Referenced by:

    add_column_scope_clause

    ADD scope_clause
             ::= 'ADD' scope_clause
    Referenced by:

    drop_column_scope_clause

    DROP SCOPE drop_behavior
             ::= 'DROP' 'SCOPE' drop_behavior
    Referenced by:

    alter_column_data_type_clause

    SET DATA TYPE data_type
             ::= 'SET' 'DATA' 'TYPE' data_type
    Referenced by:

    alter_identity_column_specification

    set_identity_column_generation_clause alter_identity_column_option alter_identity_column_option
    Referenced by:

    set_identity_column_generation_clause

    SET GENERATED ALWAYS BY DEFAULT
             ::= 'SET' 'GENERATED' ( 'ALWAYS' | 'BY' 'DEFAULT' )

    alter_identity_column_option

    alter_sequence_generator_restart_option SET basic_sequence_generator_option
               | 'SET' basic_sequence_generator_option

    drop_identity_property_clause

    DROP IDENTITY
             ::= 'DROP' 'IDENTITY'
    Referenced by:

    drop_column_generation_expression_clause

    DROP EXPRESSION
             ::= 'DROP' 'EXPRESSION'
    Referenced by:

    drop_column_definition

    DROP COLUMN identifier drop_behavior
             ::= 'DROP' 'COLUMN'? identifier drop_behavior
    Referenced by:

    add_table_constraint_definition

    ADD table_constraint_definition
             ::= 'ADD' table_constraint_definition
    Referenced by:

    alter_table_constraint_definition

    ALTER CONSTRAINT schema_qualified_name constraint_enforcement
             ::= 'ALTER' 'CONSTRAINT' schema_qualified_name constraint_enforcement
    Referenced by:

    drop_table_constraint_definition

    DROP CONSTRAINT schema_qualified_name drop_behavior
             ::= 'DROP' 'CONSTRAINT' schema_qualified_name drop_behavior
    Referenced by:

    add_system_versioning_clause

    ADD system_versioning_clause add_system_version_column_list
    Referenced by:

    add_system_version_column_list

    ADD COLUMN column_definition_1 ADD COLUMN column_definition_2
             ::= 'ADD' 'COLUMN'? column_definition_1 'ADD' 'COLUMN'? column_definition_2

    column_definition_1

    column_definition
             ::= column_definition

    column_definition_2

    column_definition
             ::= column_definition

    alter_system_versioning_clause

    ALTER SYSTEM VERSIONING retention_period_specification
             ::= 'ALTER' 'SYSTEM' 'VERSIONING' retention_period_specification
    Referenced by:

    drop_system_versioning_clause

    DROP SYSTEM VERSIONING drop_behavior
             ::= 'DROP' 'SYSTEM' 'VERSIONING' drop_behavior
    Referenced by:

    drop_table_statement

    DROP TABLE IF EXISTS table_name drop_behavior
             ::= 'DROP' 'TABLE' ( 'IF' 'EXISTS' )? table_name drop_behavior?

    view_definition

    CREATE or_replace RECURSIVE VIEW table_name view_specification AS query_expression WITH levels_clause CHECK OPTION
             ::= 'CREATE' or_replace? 'RECURSIVE'? 'VIEW' table_name view_specification 'AS' query_expression ( 'WITH' levels_clause? 'CHECK' 'OPTION' )?

    view_specification

    regular_view_specification referenceable_view_specification
             ::= regular_view_specification
               | referenceable_view_specification
    Referenced by:

    regular_view_specification

    ( view_column_list )
             ::= ( '(' view_column_list ')' )?
    Referenced by:

    referenceable_view_specification

    OF path_resolved_user_defined_type_name subview_clause view_element_list
    Referenced by:

    subview_clause

    UNDER table_name
             ::= 'UNDER' table_name

    view_element_list

    ( view_element , )
             ::= '(' view_element ( ',' view_element )* ')'

    view_element

    self_referencing_column_specification view_column_option
               | view_column_option
    Referenced by:

    view_column_option

    identifier WITH OPTIONS scope_clause
             ::= identifier 'WITH' 'OPTIONS' scope_clause
    Referenced by:

    levels_clause

    CASCADED LOCAL
             ::= 'CASCADED'
               | 'LOCAL'
    Referenced by:

    view_column_list

    column_name_list
             ::= column_name_list

    drop_view_statement

    DROP VIEW table_name drop_behavior
             ::= 'DROP' 'VIEW' table_name drop_behavior

    domain_definition

    CREATE DOMAIN schema_qualified_name AS predefined_type default_clause domain_constraint collate_clause

    domain_constraint

    constraint_name_definition check_constraint_definition constraint_characteristics

    alter_domain_statement

    ALTER DOMAIN schema_qualified_name alter_domain_action
             ::= 'ALTER' 'DOMAIN' schema_qualified_name alter_domain_action

    alter_domain_action

    set_domain_default_clause drop_domain_default_clause add_domain_constraint_definition drop_domain_constraint_definition
             ::= set_domain_default_clause
               | drop_domain_default_clause
               | add_domain_constraint_definition
               | drop_domain_constraint_definition
    Referenced by:

    set_domain_default_clause

    SET default_clause
             ::= 'SET' default_clause
    Referenced by:

    drop_domain_default_clause

    DROP DEFAULT
             ::= 'DROP' 'DEFAULT'
    Referenced by:

    add_domain_constraint_definition

    ADD domain_constraint
             ::= 'ADD' domain_constraint
    Referenced by:

    drop_domain_constraint_definition

    DROP CONSTRAINT schema_qualified_name
             ::= 'DROP' 'CONSTRAINT' schema_qualified_name
    Referenced by:

    drop_domain_statement

    DROP DOMAIN schema_qualified_name drop_behavior
             ::= 'DROP' 'DOMAIN' schema_qualified_name drop_behavior

    character_set_definition

    CREATE CHARACTER SET character_set_name AS character_set_source collate_clause
             ::= 'CREATE' 'CHARACTER' 'SET' character_set_name 'AS'? character_set_source collate_clause?

    character_set_source

    GET character_set_specification
             ::= 'GET' character_set_specification
    Referenced by:

    drop_character_set_statement

    DROP CHARACTER SET character_set_name
             ::= 'DROP' 'CHARACTER' 'SET' character_set_name

    collation_definition

    CREATE COLLATION schema_qualified_name FOR character_set_specification FROM schema_qualified_name pad_characteristic
             ::= 'CREATE' 'COLLATION' schema_qualified_name 'FOR' character_set_specification 'FROM' schema_qualified_name pad_characteristic?

    pad_characteristic

    NO PAD PAD SPACE
             ::= 'NO' 'PAD'
               | 'PAD' 'SPACE'
    Referenced by:

    drop_collation_statement

    DROP COLLATION schema_qualified_name drop_behavior
             ::= 'DROP' 'COLLATION' schema_qualified_name drop_behavior

    transliteration_definition

    CREATE TRANSLATION schema_qualified_name FOR source_character_set_specification TO target_character_set_specification FROM transliteration_source

    source_character_set_specification

    character_set_specification
             ::= character_set_specification

    target_character_set_specification

    character_set_specification
             ::= character_set_specification

    transliteration_source

    schema_qualified_name transliteration_routine
             ::= schema_qualified_name
               | transliteration_routine

    transliteration_routine

    specific_routine_designator
             ::= specific_routine_designator
    Referenced by:

    drop_transliteration_statement

    DROP TRANSLATION schema_qualified_name
             ::= 'DROP' 'TRANSLATION' schema_qualified_name

    assertion_definition

    CREATE ASSERTION schema_qualified_name CHECK ( search_condition ) constraint_characteristics
             ::= 'CREATE' 'ASSERTION' schema_qualified_name 'CHECK' '(' search_condition ')' constraint_characteristics?

    drop_assertion_statement

    DROP ASSERTION schema_qualified_name drop_behavior
             ::= 'DROP' 'ASSERTION' schema_qualified_name drop_behavior?

    trigger_definition

    CREATE TRIGGER schema_qualified_name trigger_action_time trigger_event ON table_name REFERENCING transition_table_or_variable_list triggered_action

    trigger_action_time

    BEFORE AFTER INSTEAD OF
             ::= 'BEFORE'
               | 'AFTER'
               | 'INSTEAD' 'OF'
    Referenced by:

    trigger_event

    INSERT DELETE UPDATE OF trigger_column_list
             ::= 'INSERT'
               | 'DELETE'
               | 'UPDATE' ( 'OF' trigger_column_list )?
    Referenced by:

    trigger_column_list

    column_name_list
             ::= column_name_list
    Referenced by:

    triggered_action

    FOR EACH ROW STATEMENT triggered_when_clause triggered_SQL_statement
             ::= ( 'FOR' 'EACH' ( 'ROW' | 'STATEMENT' ) )? triggered_when_clause? triggered_SQL_statement
    Referenced by:

    triggered_when_clause

    WHEN ( search_condition )
             ::= 'WHEN' '(' search_condition ')'
    Referenced by:

    triggered_SQL_statement

    SQL_procedure_statement BEGIN ATOMIC SQL_procedure_statement ; END
             ::= SQL_procedure_statement
               | 'BEGIN' 'ATOMIC' ( SQL_procedure_statement ';' )+ 'END'
    Referenced by:

    transition_table_or_variable_list

    transition_table_or_variable
             ::= transition_table_or_variable+
    Referenced by:

    transition_table_or_variable

    OLD NEW ROW TABLE AS identifier
             ::= ( 'OLD' | 'NEW' ) ( 'ROW' | 'TABLE' )? 'AS'? identifier

    drop_trigger_statement

    DROP TRIGGER schema_qualified_name
             ::= 'DROP' 'TRIGGER' schema_qualified_name

    user_defined_type_definition

    CREATE TYPE user_defined_type_body
             ::= 'CREATE' 'TYPE' user_defined_type_body

    user_defined_type_body

    schema_resolved_user_defined_type_name subtype_clause AS representation user_defined_type_option_list method_specification_list

    user_defined_type_option_list

    user_defined_type_option
             ::= user_defined_type_option+
    Referenced by:

    user_defined_type_option

    instantiable_clause finality reference_type_specification cast_to_ref cast_to_type cast_to_distinct cast_to_source
             ::= instantiable_clause
               | finality
               | reference_type_specification
               | cast_to_ref
               | cast_to_type
               | cast_to_distinct
               | cast_to_source

    subtype_clause

    UNDER supertype_name
             ::= 'UNDER' supertype_name
    Referenced by:

    supertype_name

    path_resolved_user_defined_type_name
    Referenced by:

    representation

    predefined_type data_type member_list
             ::= predefined_type
               | data_type
               | member_list
    Referenced by:

    member_list

    ( member , )
             ::= '(' member ( ',' member )* ')'
    Referenced by:

    member

    attribute_definition
    Referenced by:

    instantiable_clause

    NOT INSTANTIABLE
             ::= 'NOT'? 'INSTANTIABLE'
    Referenced by:

    finality

    NOT FINAL
    finality ::= 'NOT'? 'FINAL'
    Referenced by:

    reference_type_specification

    user_defined_representation derived_representation system_generated_representation
             ::= user_defined_representation
               | derived_representation
               | system_generated_representation
    Referenced by:

    user_defined_representation

    REF USING predefined_type
             ::= 'REF' 'USING' predefined_type

    derived_representation

    REF FROM list_of_attributes
             ::= 'REF' 'FROM' list_of_attributes

    system_generated_representation

    REF IS SYSTEM GENERATED
             ::= 'REF' 'IS' 'SYSTEM' 'GENERATED'

    cast_to_ref

    CAST ( SOURCE AS REF ) WITH identifier
             ::= 'CAST' '(' 'SOURCE' 'AS' 'REF' ')' 'WITH' identifier
    Referenced by:

    cast_to_type

    CAST ( REF AS SOURCE ) WITH identifier
             ::= 'CAST' '(' 'REF' 'AS' 'SOURCE' ')' 'WITH' identifier
    Referenced by:

    list_of_attributes

    ( identifier , )
             ::= '(' identifier ( ',' identifier )* ')'
    Referenced by:

    cast_to_distinct

    CAST ( SOURCE AS DISTINCT ) WITH identifier
             ::= 'CAST' '(' 'SOURCE' 'AS' 'DISTINCT' ')' 'WITH' identifier
    Referenced by:

    cast_to_source

    CAST ( DISTINCT AS SOURCE ) WITH identifier
             ::= 'CAST' '(' 'DISTINCT' 'AS' 'SOURCE' ')' 'WITH' identifier
    Referenced by:

    method_specification_list

    method_specification ,
             ::= method_specification ( ',' method_specification )*
    Referenced by:

    method_specification

    original_method_specification overriding_method_specification
             ::= original_method_specification
               | overriding_method_specification

    original_method_specification

    partial_method_specification SELF AS RESULT SELF AS LOCATOR method_characteristics
             ::= partial_method_specification ( 'SELF' 'AS' 'RESULT' )? ( 'SELF' 'AS' 'LOCATOR' )? method_characteristics?

    overriding_method_specification

    OVERRIDING partial_method_specification
             ::= 'OVERRIDING' partial_method_specification

    partial_method_specification

    INSTANCE STATIC CONSTRUCTOR METHOD identifier SQL_parameter_declaration_list returns_clause SPECIFIC specific_identifier
             ::= ( 'INSTANCE' | 'STATIC' | 'CONSTRUCTOR' )? 'METHOD' identifier SQL_parameter_declaration_list returns_clause ( 'SPECIFIC' specific_identifier )?

    specific_identifier

    schema_name . identifier
             ::= ( schema_name '.' )? identifier

    method_characteristics

    method_characteristic
             ::= method_characteristic+

    method_characteristic

    language_clause parameter_style_clause deterministic_characteristic SQL_data_access_indication null_call_clause
             ::= language_clause
               | parameter_style_clause
               | deterministic_characteristic
               | SQL_data_access_indication
               | null_call_clause
    Referenced by:

    attribute_definition

    identifier data_type attribute_default collate_clause

    attribute_default

    default_clause
             ::= default_clause
    Referenced by:

    alter_type_statement

    ALTER TYPE schema_resolved_user_defined_type_name alter_type_action
             ::= 'ALTER' 'TYPE' schema_resolved_user_defined_type_name alter_type_action

    alter_type_action

    add_attribute_definition drop_attribute_definition add_original_method_specification add_overriding_method_specification drop_method_specification
             ::= add_attribute_definition
               | drop_attribute_definition
               | add_original_method_specification
               | add_overriding_method_specification
               | drop_method_specification
    Referenced by:

    add_attribute_definition

    ADD ATTRIBUTE attribute_definition
             ::= 'ADD' 'ATTRIBUTE' attribute_definition
    Referenced by:

    drop_attribute_definition

    DROP ATTRIBUTE identifier RESTRICT
             ::= 'DROP' 'ATTRIBUTE' identifier 'RESTRICT'
    Referenced by:

    add_original_method_specification

    ADD original_method_specification
             ::= 'ADD' original_method_specification
    Referenced by:

    add_overriding_method_specification

    ADD overriding_method_specification
             ::= 'ADD' overriding_method_specification
    Referenced by:

    drop_method_specification

    DROP specific_method_specification_designator RESTRICT
             ::= 'DROP' specific_method_specification_designator 'RESTRICT'
    Referenced by:

    specific_method_specification_designator

    INSTANCE STATIC CONSTRUCTOR METHOD identifier data_type_list
             ::= ( 'INSTANCE' | 'STATIC' | 'CONSTRUCTOR' )? 'METHOD' identifier data_type_list

    drop_data_type_statement

    DROP TYPE schema_resolved_user_defined_type_name drop_behavior
             ::= 'DROP' 'TYPE' schema_resolved_user_defined_type_name drop_behavior

    SQL_invoked_routine

    schema_routine
             ::= schema_routine

    schema_routine

    schema_procedure schema_function
             ::= schema_procedure
               | schema_function

    schema_procedure

    CREATE SQL_invoked_procedure
             ::= 'CREATE' SQL_invoked_procedure
    Referenced by:

    schema_function

    CREATE or_replace SQL_invoked_function
             ::= 'CREATE' or_replace? SQL_invoked_function
    Referenced by:

    SQL_invoked_procedure

    PROCEDURE schema_qualified_name SQL_parameter_declaration_list routine_characteristics routine_body
    Referenced by:

    SQL_invoked_function

    function_specification method_specification_designator routine_body
    Referenced by:

    SQL_parameter_declaration_list

    ( SQL_parameter_declaration , )
             ::= '(' ( SQL_parameter_declaration ( ',' SQL_parameter_declaration )* )? ')'

    SQL_parameter_declaration

    parameter_mode identifier parameter_type RESULT DEFAULT parameter_default
             ::= parameter_mode? identifier? parameter_type 'RESULT'? ( 'DEFAULT' parameter_default )?

    parameter_default

    value_expression contextually_typed_value_specification
             ::= value_expression

    parameter_mode

    IN OUT INOUT
             ::= 'IN'
               | 'OUT'
               | 'INOUT'

    parameter_type

    data_type locator_indication
             ::= data_type locator_indication?

    locator_indication

    AS LOCATOR
             ::= 'AS' 'LOCATOR'

    function_specification

    FUNCTION schema_qualified_name SQL_parameter_declaration_list returns_clause routine_description routine_characteristics dispatch_clause
    Referenced by:

    method_specification_designator

    SPECIFIC METHOD specific_identifier INSTANCE STATIC CONSTRUCTOR METHOD identifier SQL_parameter_declaration_list returns_clause FOR schema_resolved_user_defined_type_name
             ::= 'SPECIFIC' 'METHOD' specific_identifier
               | ( 'INSTANCE' | 'STATIC' | 'CONSTRUCTOR' )? 'METHOD' identifier SQL_parameter_declaration_list returns_clause? 'FOR' schema_resolved_user_defined_type_name
    Referenced by:

    routine_characteristics

    routine_characteristic
             ::= routine_characteristic*

    routine_characteristic

    language_clause parameter_style_clause SPECIFIC schema_qualified_name deterministic_characteristic SQL_data_access_indication null_call_clause returned_result_sets_characteristic savepoint_level_indication
             ::= language_clause
               | parameter_style_clause
               | 'SPECIFIC' schema_qualified_name
               | deterministic_characteristic
               | SQL_data_access_indication
               | null_call_clause
               | returned_result_sets_characteristic
               | savepoint_level_indication
    Referenced by:

    savepoint_level_indication

    NEW OLD SAVEPOINT LEVEL
             ::= ( 'NEW' | 'OLD' ) 'SAVEPOINT' 'LEVEL'
    Referenced by:

    returned_result_sets_characteristic

    DYNAMIC RESULT SETS maximum_returned_result_sets
             ::= 'DYNAMIC' 'RESULT' 'SETS' maximum_returned_result_sets

    parameter_style_clause

    PARAMETER STYLE parameter_style
             ::= 'PARAMETER' 'STYLE' parameter_style

    dispatch_clause

    STATIC DISPATCH
             ::= 'STATIC' 'DISPATCH'
    Referenced by:

    returns_clause

    RETURNS returns_type
             ::= 'RETURNS' returns_type

    returns_type

    returns_data_type result_cast returns_table_type
             ::= returns_data_type result_cast?
               | returns_table_type
    Referenced by:

    returns_table_type

    TABLE table_function_column_list
             ::= 'TABLE' table_function_column_list
    Referenced by:

    table_function_column_list

    ( table_function_column_list_element , )
    Referenced by:

    table_function_column_list_element

    identifier data_type
             ::= identifier data_type

    result_cast

    CAST FROM result_cast_from_type
             ::= 'CAST' 'FROM' result_cast_from_type
    Referenced by:

    result_cast_from_type

    data_type locator_indication
             ::= data_type locator_indication?
    Referenced by:

    returns_data_type

    data_type locator_indication
             ::= data_type locator_indication?
    Referenced by:

    routine_body

    SQL_routine_spec external_body_reference
             ::= SQL_routine_spec
               | external_body_reference

    SQL_routine_spec

    rights_clause SQL_routine_body
             ::= rights_clause? SQL_routine_body
    Referenced by:

    rights_clause

    SQL SECURITY INVOKER DEFINER
             ::= 'SQL' 'SECURITY' ( 'INVOKER' | 'DEFINER' )
    Referenced by:

    SQL_routine_body

    SQL_procedure_statement
             ::= SQL_procedure_statement
    Referenced by:

    external_body_reference

    EXTERNAL NAME external_routine_name parameter_style_clause transform_group_specification external_security_clause
    Referenced by:

    external_security_clause

    EXTERNAL SECURITY DEFINER INVOKER IMPLEMENTATION DEFINED
             ::= 'EXTERNAL' 'SECURITY' ( 'DEFINER' | 'INVOKER' | 'IMPLEMENTATION' 'DEFINED' )
    Referenced by:

    parameter_style

    SQL GENERAL
             ::= 'SQL'
               | 'GENERAL'
    Referenced by:

    deterministic_characteristic

    NOT DETERMINISTIC
             ::= 'NOT'? 'DETERMINISTIC'

    SQL_data_access_indication

    NO CONTAINS SQL READS MODIFIES SQL DATA
             ::= ( 'NO' | 'CONTAINS' ) 'SQL'
               | ( 'READS' | 'MODIFIES' ) 'SQL' 'DATA'

    null_call_clause

    RETURNS NULL CALLED ON NULL INPUT
             ::= ( 'RETURNS' 'NULL' | 'CALLED' ) 'ON' 'NULL' 'INPUT'

    maximum_returned_result_sets

    unsigned_integer
             ::= unsigned_integer

    transform_group_specification

    TRANSFORM GROUP single_group_specification multiple_group_specification
             ::= 'TRANSFORM' 'GROUP' ( single_group_specification | multiple_group_specification )

    single_group_specification

    identifier
             ::= identifier

    multiple_group_specification

    group_specification ,
             ::= group_specification ( ',' group_specification )*

    group_specification

    identifier FOR TYPE path_resolved_user_defined_type_name
             ::= identifier 'FOR' 'TYPE' path_resolved_user_defined_type_name

    alter_routine_statement

    ALTER specific_routine_designator alter_routine_characteristics RESTRICT
             ::= 'ALTER' specific_routine_designator alter_routine_characteristics 'RESTRICT'

    alter_routine_characteristics

    alter_routine_characteristic
             ::= alter_routine_characteristic+
    Referenced by:

    alter_routine_characteristic

    language_clause parameter_style_clause SQL_data_access_indication null_call_clause returned_result_sets_characteristic NAME external_routine_name
             ::= language_clause
               | parameter_style_clause
               | SQL_data_access_indication
               | null_call_clause
               | returned_result_sets_characteristic
               | 'NAME' external_routine_name

    drop_routine_statement

    DROP specific_routine_designator drop_behavior
             ::= 'DROP' specific_routine_designator drop_behavior

    user_defined_cast_definition

    CREATE CAST ( source_data_type AS target_data_type ) WITH cast_function AS ASSIGNMENT
             ::= 'CREATE' 'CAST' '(' source_data_type 'AS' target_data_type ')' 'WITH' cast_function ( 'AS' 'ASSIGNMENT' )?

    cast_function

    specific_routine_designator
             ::= specific_routine_designator

    source_data_type

    data_type
             ::= data_type

    target_data_type

    data_type
             ::= data_type

    drop_user_defined_cast_statement

    DROP CAST ( source_data_type AS target_data_type ) drop_behavior
             ::= 'DROP' 'CAST' '(' source_data_type 'AS' target_data_type ')' drop_behavior

    user_defined_ordering_definition

    CREATE ORDERING FOR schema_resolved_user_defined_type_name ordering_form
             ::= 'CREATE' 'ORDERING' 'FOR' schema_resolved_user_defined_type_name ordering_form

    ordering_form

    equals_ordering_form full_ordering_form
             ::= equals_ordering_form
               | full_ordering_form

    equals_ordering_form

    EQUALS ONLY BY ordering_category
             ::= 'EQUALS' 'ONLY' 'BY' ordering_category
    Referenced by:

    full_ordering_form

    ORDER FULL BY ordering_category
             ::= 'ORDER' 'FULL' 'BY' ordering_category
    Referenced by:

    ordering_category

    relative_category map_category state_category
             ::= relative_category
               | map_category
               | state_category

    relative_category

    RELATIVE WITH relative_function_specification
             ::= 'RELATIVE' 'WITH' relative_function_specification
    Referenced by:

    map_category

    MAP WITH map_function_specification
             ::= 'MAP' 'WITH' map_function_specification
    Referenced by:

    state_category

    STATE schema_qualified_name
             ::= 'STATE' schema_qualified_name?
    Referenced by:

    relative_function_specification

    specific_routine_designator
             ::= specific_routine_designator
    Referenced by:

    map_function_specification

    specific_routine_designator
             ::= specific_routine_designator
    Referenced by:

    drop_user_defined_ordering_statement

    DROP ORDERING FOR schema_resolved_user_defined_type_name drop_behavior
             ::= 'DROP' 'ORDERING' 'FOR' schema_resolved_user_defined_type_name drop_behavior

    transform_definition

    CREATE TRANSFORM TRANSFORMS FOR schema_resolved_user_defined_type_name transform_group
             ::= 'CREATE' ( 'TRANSFORM' | 'TRANSFORMS' ) 'FOR' schema_resolved_user_defined_type_name transform_group+

    transform_group

    identifier ( transform_element_list )
             ::= identifier '(' transform_element_list ')'
    Referenced by:

    transform_element_list

    transform_element , transform_element
             ::= transform_element ( ',' transform_element )?

    transform_element

    to_sql from_sql
             ::= to_sql
               | from_sql
    Referenced by:

    to_sql

    TO SQL WITH to_sql_function
    to_sql   ::= 'TO' 'SQL' 'WITH' to_sql_function
    Referenced by:

    from_sql

    FROM SQL WITH from_sql_function
    from_sql ::= 'FROM' 'SQL' 'WITH' from_sql_function
    Referenced by:

    to_sql_function

    specific_routine_designator
             ::= specific_routine_designator
    Referenced by:

    from_sql_function

    specific_routine_designator
             ::= specific_routine_designator
    Referenced by:

    alter_transform_statement

    ALTER TRANSFORM TRANSFORMS FOR schema_resolved_user_defined_type_name alter_group
             ::= 'ALTER' ( 'TRANSFORM' | 'TRANSFORMS' ) 'FOR' schema_resolved_user_defined_type_name alter_group+

    alter_group

    identifier ( alter_transform_action_list )
             ::= identifier '(' alter_transform_action_list ')'

    alter_transform_action_list

    alter_transform_action ,
             ::= alter_transform_action ( ',' alter_transform_action )*
    Referenced by:

    alter_transform_action

    add_transform_element_list drop_transform_element_list
             ::= add_transform_element_list
               | drop_transform_element_list

    add_transform_element_list

    ADD ( transform_element_list )
             ::= 'ADD' '(' transform_element_list ')'
    Referenced by:

    drop_transform_element_list

    DROP ( transform_kind , transform_kind drop_behavior )
             ::= 'DROP' '(' transform_kind ( ',' transform_kind )? drop_behavior ')'
    Referenced by:

    transform_kind

    TO FROM SQL
             ::= ( 'TO' | 'FROM' ) 'SQL'

    drop_transform_statement

    DROP TRANSFORM TRANSFORMS transforms_to_be_dropped FOR schema_resolved_user_defined_type_name drop_behavior
             ::= 'DROP' ( 'TRANSFORM' | 'TRANSFORMS' ) transforms_to_be_dropped 'FOR' schema_resolved_user_defined_type_name drop_behavior

    transforms_to_be_dropped

    ALL transform_group_element
             ::= 'ALL'
               | transform_group_element
    Referenced by:

    transform_group_element

    identifier
             ::= identifier
    Referenced by:

    sequence_generator_definition

    CREATE SEQUENCE schema_qualified_name sequence_generator_options
             ::= 'CREATE' 'SEQUENCE' schema_qualified_name sequence_generator_options?

    sequence_generator_options

    sequence_generator_option
             ::= sequence_generator_option+

    sequence_generator_option

    sequence_generator_data_type_option common_sequence_generator_options
               | common_sequence_generator_options

    common_sequence_generator_options

    common_sequence_generator_option
             ::= common_sequence_generator_option+

    common_sequence_generator_option

    sequence_generator_start_with_option basic_sequence_generator_option
               | basic_sequence_generator_option

    basic_sequence_generator_option

    sequence_generator_increment_by_option sequence_generator_maxvalue_option sequence_generator_minvalue_option sequence_generator_cycle_option
               | sequence_generator_maxvalue_option
               | sequence_generator_minvalue_option
               | sequence_generator_cycle_option

    sequence_generator_data_type_option

    AS data_type
             ::= 'AS' data_type

    sequence_generator_start_with_option

    START WITH sequence_generator_start_value
             ::= 'START' 'WITH' sequence_generator_start_value

    sequence_generator_start_value

    signed_numeric_literal
             ::= signed_numeric_literal

    sequence_generator_increment_by_option

    INCREMENT BY sequence_generator_increment
             ::= 'INCREMENT' 'BY' sequence_generator_increment

    sequence_generator_increment

    signed_numeric_literal
             ::= signed_numeric_literal

    sequence_generator_maxvalue_option

    MAXVALUE sequence_generator_max_value NO MAXVALUE
             ::= 'MAXVALUE' sequence_generator_max_value
               | 'NO' 'MAXVALUE'

    sequence_generator_max_value

    signed_numeric_literal
             ::= signed_numeric_literal

    sequence_generator_minvalue_option

    MINVALUE sequence_generator_min_value NO MINVALUE
             ::= 'MINVALUE' sequence_generator_min_value
               | 'NO' 'MINVALUE'

    sequence_generator_min_value

    signed_numeric_literal
             ::= signed_numeric_literal

    sequence_generator_cycle_option

    NO CYCLE
             ::= 'NO'? 'CYCLE'

    alter_sequence_generator_statement

    ALTER SEQUENCE schema_qualified_name alter_sequence_generator_options
             ::= 'ALTER' 'SEQUENCE' schema_qualified_name alter_sequence_generator_options

    alter_sequence_generator_options

    alter_sequence_generator_option
             ::= alter_sequence_generator_option+

    alter_sequence_generator_option

    alter_sequence_generator_restart_option basic_sequence_generator_option
               | basic_sequence_generator_option

    alter_sequence_generator_restart_option

    RESTART WITH sequence_generator_restart_value
             ::= 'RESTART' ( 'WITH' sequence_generator_restart_value )?

    sequence_generator_restart_value

    signed_numeric_literal
             ::= signed_numeric_literal

    drop_sequence_generator_statement

    DROP SEQUENCE schema_qualified_name drop_behavior
             ::= 'DROP' 'SEQUENCE' schema_qualified_name drop_behavior

    grant_statement

    grant_privilege_statement grant_role_statement
             ::= grant_privilege_statement
               | grant_role_statement

    grant_privilege_statement

    GRANT privileges TO grantee , WITH HIERARCHY OPTION WITH GRANT OPTION GRANTED BY grantor
             ::= 'GRANT' privileges 'TO' grantee ( ',' grantee )* ( 'WITH' 'HIERARCHY' 'OPTION' )? ( 'WITH' 'GRANT' 'OPTION' )? ( 'GRANTED' 'BY' grantor )?
    Referenced by:

    privileges

    object_privileges ON object_name
             ::= object_privileges 'ON' object_name

    object_name

    TABLE table_name DOMAIN COLLATION TRANSLATION SEQUENCE schema_qualified_name CHARACTER SET character_set_name TYPE schema_resolved_user_defined_type_name specific_routine_designator
             ::= 'TABLE'? table_name
               | ( 'DOMAIN' | 'COLLATION' | 'TRANSLATION' | 'SEQUENCE' ) schema_qualified_name
               | 'CHARACTER' 'SET' character_set_name
               | 'TYPE' schema_resolved_user_defined_type_name
               | specific_routine_designator
    Referenced by:

    object_privileges

    ALL PRIVILEGES action ,
             ::= 'ALL' 'PRIVILEGES'
               | action ( ',' action )*
    Referenced by:

    action

    SELECT ( privilege_column_list privilege_method_list ) DELETE INSERT UPDATE REFERENCES ( privilege_column_list ) USAGE TRIGGER UNDER EXECUTE
    action   ::= 'SELECT' ( '(' ( privilege_column_list | privilege_method_list ) ')' )?
               | 'DELETE'
               | ( 'INSERT' | 'UPDATE' | 'REFERENCES' ) ( '(' privilege_column_list ')' )?
               | 'USAGE'
               | 'TRIGGER'
               | 'UNDER'
               | 'EXECUTE'
    Referenced by:

    privilege_method_list

    specific_routine_designator ,
    Referenced by:

    privilege_column_list

    column_name_list
             ::= column_name_list
    Referenced by:

    grantee

    PUBLIC identifier
    grantee  ::= 'PUBLIC'
               | identifier

    grantor

    CURRENT_USER CURRENT_ROLE
    grantor  ::= 'CURRENT_USER'
               | 'CURRENT_ROLE'

    role_definition

    CREATE ROLE identifier WITH ADMIN grantor
             ::= 'CREATE' 'ROLE' identifier ( 'WITH' 'ADMIN' grantor )?

    grant_role_statement

    GRANT identifier , TO grantee , WITH ADMIN OPTION GRANTED BY grantor
             ::= 'GRANT' identifier ( ',' identifier )* 'TO' grantee ( ',' grantee )* ( 'WITH' 'ADMIN' 'OPTION' )? ( 'GRANTED' 'BY' grantor )?
    Referenced by:

    drop_role_statement

    DROP ROLE identifier
             ::= 'DROP' 'ROLE' identifier

    revoke_statement

    revoke_privilege_statement revoke_role_statement
             ::= revoke_privilege_statement
               | revoke_role_statement

    revoke_privilege_statement

    REVOKE revoke_option_extension privileges FROM grantee , GRANTED BY grantor drop_behavior
             ::= 'REVOKE' revoke_option_extension? privileges 'FROM' grantee ( ',' grantee )* ( 'GRANTED' 'BY' grantor )? drop_behavior
    Referenced by:

    revoke_option_extension

    GRANT HIERARCHY OPTION FOR
             ::= ( 'GRANT' | 'HIERARCHY' ) 'OPTION' 'FOR'

    revoke_role_statement

    REVOKE ADMIN OPTION FOR identifier , FROM grantee , GRANTED BY grantor drop_behavior
             ::= 'REVOKE' ( 'ADMIN' 'OPTION' 'FOR' )? identifier ( ',' identifier )* 'FROM' grantee ( ',' grantee )* ( 'GRANTED' 'BY' grantor )? drop_behavior
    Referenced by:

    SQL_client_module_definition

    module_name_clause language_clause module_authorization_clause module_path_specification module_transform_group_specification module_collations temporary_table_declaration module_contents
    Not referenced by any.

    module_authorization_clause

    SCHEMA schema_name AUTHORIZATION identifier FOR STATIC ONLY AND DYNAMIC AUTHORIZATION identifier FOR STATIC ONLY AND DYNAMIC
             ::= 'SCHEMA' schema_name ( 'AUTHORIZATION' identifier ( 'FOR' 'STATIC' ( 'ONLY' | 'AND' 'DYNAMIC' ) )? )?
               | 'AUTHORIZATION' identifier ( 'FOR' 'STATIC' ( 'ONLY' | 'AND' 'DYNAMIC' ) )?

    module_path_specification

    path_specification
             ::= path_specification

    module_transform_group_specification

    transform_group_specification
             ::= transform_group_specification

    module_collations

    module_collation_specification
             ::= module_collation_specification+

    module_collation_specification

    COLLATION schema_qualified_name FOR character_set_specification_list
             ::= 'COLLATION' schema_qualified_name ( 'FOR' character_set_specification_list )?
    Referenced by:

    character_set_specification_list

    character_set_specification ,

    module_contents

    declare_cursor dynamic_declare_cursor externally_invoked_procedure
             ::= declare_cursor
               | dynamic_declare_cursor
               | externally_invoked_procedure

    module_name_clause

    MODULE identifier module_character_set_specification
             ::= 'MODULE' identifier? module_character_set_specification?

    module_character_set_specification

    NAMES ARE character_set_specification
             ::= 'NAMES' 'ARE' character_set_specification
    Referenced by:

    externally_invoked_procedure

    PROCEDURE identifier host_parameter_declaration_list ; SQL_procedure_statement ;
             ::= 'PROCEDURE' identifier host_parameter_declaration_list ';' SQL_procedure_statement ';'
    Referenced by:

    host_parameter_declaration_list

    ( host_parameter_declaration , )
             ::= '(' host_parameter_declaration ( ',' host_parameter_declaration )* ')'

    host_parameter_declaration

    host_parameter_name host_parameter_data_type SQLSTATE
               | 'SQLSTATE'

    host_parameter_data_type

    data_type locator_indication
             ::= data_type locator_indication?

    SQL_procedure_statement

    SQL_executable_statement
             ::= SQL_executable_statement

    SQL_executable_statement

    SQL_schema_statement SQL_data_statement SQL_control_statement SQL_transaction_statement SQL_connection_statement SQL_session_statement SQL_diagnostics_statement SQL_dynamic_statement
             ::= SQL_schema_statement
               | SQL_data_statement
               | SQL_control_statement
               | SQL_transaction_statement
               | SQL_connection_statement
               | SQL_session_statement
               | SQL_diagnostics_statement
               | SQL_dynamic_statement
    Referenced by:

    SQL_schema_statement

    SQL_schema_definition_statement SQL_schema_manipulation_statement
             ::= SQL_schema_definition_statement
               | SQL_schema_manipulation_statement

    SQL_schema_definition_statement

    schema_definition table_definition view_definition SQL_invoked_routine grant_statement role_definition domain_definition character_set_definition collation_definition transliteration_definition assertion_definition trigger_definition user_defined_type_definition user_defined_cast_definition user_defined_ordering_definition transform_definition sequence_generator_definition
             ::= schema_definition
               | table_definition
               | view_definition
               | SQL_invoked_routine
               | grant_statement
               | role_definition
               | domain_definition
               | character_set_definition
               | collation_definition
               | transliteration_definition
               | assertion_definition
               | trigger_definition
               | user_defined_type_definition
               | user_defined_cast_definition
               | user_defined_ordering_definition
               | transform_definition
               | sequence_generator_definition
    Referenced by:

    SQL_schema_manipulation_statement

    drop_schema_statement alter_table_statement drop_table_statement drop_view_statement alter_routine_statement drop_routine_statement drop_user_defined_cast_statement revoke_statement drop_role_statement alter_domain_statement drop_domain_statement drop_character_set_statement drop_collation_statement drop_transliteration_statement drop_assertion_statement drop_trigger_statement alter_type_statement drop_data_type_statement drop_user_defined_ordering_statement alter_transform_statement drop_transform_statement alter_sequence_generator_statement drop_sequence_generator_statement
             ::= drop_schema_statement
               | alter_table_statement
               | drop_table_statement
               | drop_view_statement
               | alter_routine_statement
               | drop_routine_statement
               | drop_user_defined_cast_statement
               | revoke_statement
               | drop_role_statement
               | alter_domain_statement
               | drop_domain_statement
               | drop_character_set_statement
               | drop_collation_statement
               | drop_transliteration_statement
               | drop_assertion_statement
               | drop_trigger_statement
               | alter_type_statement
               | drop_data_type_statement
               | drop_user_defined_ordering_statement
               | alter_transform_statement
               | drop_transform_statement
               | alter_sequence_generator_statement
               | drop_sequence_generator_statement
    Referenced by:

    SQL_data_statement

    open_statement fetch_statement close_statement select_statement_single_row SQL_data_change_statement
             ::= open_statement
               | fetch_statement
               | close_statement
               | select_statement_single_row
               | SQL_data_change_statement
    Referenced by:

    SQL_data_change_statement

    delete_statement_positioned delete_statement_searched insert_statement update_statement_positioned update_statement_searched truncate_table_statement merge_statement
             ::= delete_statement_positioned
               | delete_statement_searched
               | insert_statement
               | update_statement_positioned
               | update_statement_searched
               | truncate_table_statement
               | merge_statement
    Referenced by:

    SQL_control_statement

    call_statement return_statement
             ::= call_statement
               | return_statement

    SQL_transaction_statement

    start_transaction_statement set_transaction_statement set_constraints_mode_statement savepoint_statement release_savepoint_statement commit_statement rollback_statement
             ::= start_transaction_statement
               | set_transaction_statement
               | set_constraints_mode_statement
               | savepoint_statement
               | release_savepoint_statement
               | commit_statement
               | rollback_statement

    SQL_connection_statement

    connect_statement set_connection_statement disconnect_statement
             ::= connect_statement
               | set_connection_statement
               | disconnect_statement

    SQL_session_statement

    set_session_user_identifier_statement set_role_statement set_local_time_zone_statement set_session_characteristics_statement set_catalog_statement set_schema_statement set_names_statement set_path_statement set_transform_group_statement set_session_collation_statement
               | set_role_statement
               | set_local_time_zone_statement
               | set_catalog_statement
               | set_schema_statement
               | set_names_statement
               | set_path_statement
               | set_transform_group_statement
               | set_session_collation_statement

    SQL_diagnostics_statement

    get_diagnostics_statement
             ::= get_diagnostics_statement
    Referenced by:

    SQL_dynamic_statement

    SQL_descriptor_statement prepare_statement deallocate_prepared_statement describe_statement execute_statement execute_immediate_statement SQL_dynamic_data_statement
             ::= SQL_descriptor_statement
               | prepare_statement
               | deallocate_prepared_statement
               | describe_statement
               | execute_statement
               | execute_immediate_statement
               | SQL_dynamic_data_statement
    Referenced by:

    SQL_dynamic_data_statement

    allocate_cursor_statement dynamic_open_statement dynamic_fetch_statement dynamic_close_statement dynamic_delete_statement_positioned dynamic_update_statement_positioned
             ::= allocate_cursor_statement
               | dynamic_open_statement
               | dynamic_fetch_statement
               | dynamic_close_statement
               | dynamic_delete_statement_positioned
               | dynamic_update_statement_positioned
    Referenced by:

    SQL_descriptor_statement

    allocate_descriptor_statement deallocate_descriptor_statement set_descriptor_statement get_descriptor_statement
             ::= allocate_descriptor_statement
               | deallocate_descriptor_statement
               | set_descriptor_statement
               | get_descriptor_statement
    Referenced by:

    declare_cursor

    DECLARE cursor_name cursor_properties FOR cursor_specification
             ::= 'DECLARE' cursor_name cursor_properties 'FOR' cursor_specification
    Referenced by:

    cursor_properties

    cursor_sensitivity cursor_scrollability CURSOR cursor_holdability cursor_returnability

    cursor_sensitivity

    SENSITIVE INSENSITIVE ASENSITIVE
             ::= 'SENSITIVE'
               | 'INSENSITIVE'
               | 'ASENSITIVE'

    cursor_scrollability

    NO SCROLL
             ::= 'NO'? 'SCROLL'

    cursor_holdability

    WITH WITHOUT HOLD
             ::= ( 'WITH' | 'WITHOUT' ) 'HOLD'

    cursor_returnability

    WITH WITHOUT RETURN
             ::= ( 'WITH' | 'WITHOUT' ) 'RETURN'

    cursor_specification

    query_expression updatability_clause
             ::= query_expression updatability_clause?

    updatability_clause

    FOR READ ONLY UPDATE OF column_name_list
             ::= 'FOR' ( 'READ' 'ONLY' | 'UPDATE' ( 'OF' column_name_list )? )
    Referenced by:

    open_statement

    OPEN cursor_name
             ::= 'OPEN' cursor_name
    Referenced by:

    fetch_statement

    FETCH fetch_orientation FROM cursor_name INTO fetch_target_list
             ::= 'FETCH' ( fetch_orientation? 'FROM' )? cursor_name 'INTO' fetch_target_list
    Referenced by:

    fetch_orientation

    NEXT PRIOR FIRST LAST ABSOLUTE RELATIVE simple_value_specification
             ::= 'NEXT'
               | 'PRIOR'
               | 'FIRST'
               | 'LAST'
               | ( 'ABSOLUTE' | 'RELATIVE' ) simple_value_specification

    fetch_target_list

    target_specification ,
             ::= target_specification ( ',' target_specification )*
    Referenced by:

    close_statement

    CLOSE cursor_name
             ::= 'CLOSE' cursor_name
    Referenced by:

    select_statement_single_row

    SELECT set_quantifier select_list INTO select_target_list table_expression
             ::= 'SELECT' set_quantifier? select_list ( 'INTO' select_target_list )? table_expression?
    Referenced by:

    select_target_list

    target_specification ,
             ::= target_specification ( ',' target_specification )*

    delete_statement_positioned

    DELETE FROM target_table AS identifier WHERE CURRENT OF cursor_name
             ::= 'DELETE' 'FROM' target_table ( 'AS'? identifier )? 'WHERE' 'CURRENT' 'OF' cursor_name

    target_table

    table_name ONLY ( table_name )
             ::= table_name
               | 'ONLY' '(' table_name ')'

    delete_statement_searched

    DELETE FROM target_table AS identifier WHERE search_condition
             ::= 'DELETE' 'FROM' target_table ( 'AS'? identifier )? ( 'WHERE' search_condition )?

    truncate_table_statement

    TRUNCATE TABLE target_table identity_column_restart_option
             ::= 'TRUNCATE' 'TABLE' target_table identity_column_restart_option?

    identity_column_restart_option

    CONTINUE RESTART IDENTITY
             ::= ( 'CONTINUE' | 'RESTART' ) 'IDENTITY'
    Referenced by:

    insert_statement

    INSERT INTO insertion_target insert_columns_and_source
             ::= 'INSERT' 'INTO' insertion_target insert_columns_and_source

    insertion_target

    table_name
             ::= table_name
    Referenced by:

    insert_columns_and_source

    from_subquery from_constructor from_default
             ::= from_subquery
               | from_constructor
               | from_default
    Referenced by:

    from_subquery

    ( insert_column_list ) override_clause query_expression
             ::= ( '(' insert_column_list ')' )? override_clause? query_expression

    from_constructor

    ( insert_column_list ) override_clause contextually_typed_table_value_constructor

    override_clause

    OVERRIDING USER SYSTEM VALUE
             ::= 'OVERRIDING' ( 'USER' | 'SYSTEM' ) 'VALUE'

    from_default

    DEFAULT VALUES
             ::= 'DEFAULT' 'VALUES'

    insert_column_list

    column_name_list
             ::= column_name_list

    merge_statement

    MERGE INTO target_table AS identifier USING table_reference ON search_condition merge_operation_specification
             ::= 'MERGE' 'INTO' target_table ( 'AS'? identifier )? 'USING' table_reference 'ON' search_condition merge_operation_specification

    merge_operation_specification

    merge_when_clause
             ::= merge_when_clause+
    Referenced by:

    merge_when_clause

    merge_when_matched_clause merge_when_not_matched_clause
             ::= merge_when_matched_clause
               | merge_when_not_matched_clause

    merge_when_matched_clause

    WHEN MATCHED AND search_condition THEN merge_update_or_delete_specification
             ::= 'WHEN' 'MATCHED' ( 'AND' search_condition )? 'THEN' merge_update_or_delete_specification
    Referenced by:

    merge_update_or_delete_specification

    merge_update_specification DELETE
             ::= merge_update_specification
               | 'DELETE'

    merge_when_not_matched_clause

    WHEN NOT MATCHED AND search_condition THEN merge_insert_specification
             ::= 'WHEN' 'NOT' 'MATCHED' ( 'AND' search_condition )? 'THEN' merge_insert_specification
    Referenced by:

    merge_update_specification

    UPDATE SET set_clause_list
             ::= 'UPDATE' 'SET' set_clause_list

    merge_insert_specification

    INSERT ( insert_column_list ) override_clause VALUES merge_insert_value_list
             ::= 'INSERT' ( '(' insert_column_list ')' )? override_clause? 'VALUES' merge_insert_value_list

    merge_insert_value_list

    ( merge_insert_value_element , )
             ::= '(' merge_insert_value_element ( ',' merge_insert_value_element )* ')'

    merge_insert_value_element

    value_expression contextually_typed_value_specification
             ::= value_expression
    Referenced by:

    update_statement_positioned

    UPDATE target_table AS identifier SET set_clause_list WHERE CURRENT OF cursor_name
             ::= 'UPDATE' target_table ( 'AS'? identifier )? 'SET' set_clause_list 'WHERE' 'CURRENT' 'OF' cursor_name

    update_statement_searched

    UPDATE target_table AS identifier SET set_clause_list WHERE search_condition
             ::= 'UPDATE' target_table ( 'AS'? identifier )? 'SET' set_clause_list ( 'WHERE' search_condition )?

    set_clause_list

    set_clause ,
             ::= set_clause ( ',' set_clause )*

    set_clause

    multiple_column_assignment set_target = update_source
             ::= multiple_column_assignment
               | set_target '=' update_source
    Referenced by:

    set_target

    update_target mutated_set_clause
             ::= update_target
               | mutated_set_clause

    multiple_column_assignment

    set_target_list = assigned_row
             ::= set_target_list '=' assigned_row
    Referenced by:

    set_target_list

    ( set_target , )
             ::= '(' set_target ( ',' set_target )* ')'

    assigned_row

    contextually_typed_row_value_expression

    update_target

    identifier left_bracket_or_trigraph simple_value_specification right_bracket_or_trigraph
    Referenced by:

    mutated_set_clause

    identifier . identifier
             ::= identifier ( '.' identifier )+
    Referenced by:

    mutated_target

    identifier mutated_set_clause
             ::= identifier
               | mutated_set_clause
    Not referenced by any.

    update_source

    value_expression contextually_typed_value_specification
             ::= value_expression
    Referenced by:

    temporary_table_declaration

    DECLARE LOCAL TEMPORARY TABLE table_name table_element_list ON COMMIT table_commit_action ROWS
             ::= 'DECLARE' 'LOCAL' 'TEMPORARY' 'TABLE' table_name table_element_list ( 'ON' 'COMMIT' table_commit_action 'ROWS' )?

    call_statement

    CALL routine_invocation
             ::= 'CALL' routine_invocation
    Referenced by:

    return_statement

    RETURN return_value
             ::= 'RETURN' return_value
    Referenced by:

    return_value

    value_expression NULL
             ::= value_expression
               | 'NULL'
    Referenced by:

    start_transaction_statement

    START TRANSACTION transaction_characteristics
             ::= 'START' 'TRANSACTION' transaction_characteristics?

    set_transaction_statement

    SET LOCAL TRANSACTION transaction_characteristics
             ::= 'SET' 'LOCAL'? 'TRANSACTION' transaction_characteristics?

    transaction_characteristics

    transaction_mode ,
             ::= transaction_mode ( ',' transaction_mode )*

    transaction_mode

    isolation_level transaction_access_mode diagnostics_size
             ::= isolation_level
               | transaction_access_mode
               | diagnostics_size

    transaction_access_mode

    READ ONLY WRITE
             ::= 'READ' ( 'ONLY' | 'WRITE' )
    Referenced by:

    isolation_level

    ISOLATION LEVEL level_of_isolation
             ::= 'ISOLATION' 'LEVEL' level_of_isolation
    Referenced by:

    level_of_isolation

    READ UNCOMMITTED COMMITTED REPEATABLE READ SERIALIZABLE
             ::= 'READ' ( 'UNCOMMITTED' | 'COMMITTED' )
               | 'REPEATABLE' 'READ'
               | 'SERIALIZABLE'
    Referenced by:

    diagnostics_size

    DIAGNOSTICS SIZE simple_value_specification
             ::= 'DIAGNOSTICS' 'SIZE' simple_value_specification
    Referenced by:

    set_constraints_mode_statement

    SET CONSTRAINTS constraint_name_list DEFERRED IMMEDIATE
             ::= 'SET' 'CONSTRAINTS' constraint_name_list ( 'DEFERRED' | 'IMMEDIATE' )

    constraint_name_list

    ALL schema_qualified_name ,
             ::= 'ALL'
               | schema_qualified_name ( ',' schema_qualified_name )*

    savepoint_statement

    SAVEPOINT savepoint_specifier
             ::= 'SAVEPOINT' savepoint_specifier

    savepoint_specifier

    identifier
             ::= identifier

    release_savepoint_statement

    RELEASE SAVEPOINT savepoint_specifier
             ::= 'RELEASE' 'SAVEPOINT' savepoint_specifier

    commit_statement

    COMMIT WORK AND NO CHAIN
             ::= 'COMMIT' 'WORK'? ( 'AND' 'NO'? 'CHAIN' )?

    rollback_statement

    ROLLBACK WORK AND NO CHAIN savepoint_clause
             ::= 'ROLLBACK' 'WORK'? ( 'AND' 'NO'? 'CHAIN' )? savepoint_clause?

    savepoint_clause

    TO SAVEPOINT savepoint_specifier
             ::= 'TO' 'SAVEPOINT' savepoint_specifier
    Referenced by:

    connect_statement

    CONNECT TO connection_target
             ::= 'CONNECT' 'TO' connection_target
    Referenced by:

    connection_target

    simple_value_specification AS simple_value_specification USER simple_value_specification DEFAULT
               | 'DEFAULT'
    Referenced by:

    set_connection_statement

    SET CONNECTION connection_object
             ::= 'SET' 'CONNECTION' connection_object
    Referenced by:

    connection_object

    DEFAULT simple_value_specification
             ::= 'DEFAULT'
               | simple_value_specification

    disconnect_statement

    DISCONNECT disconnect_object
             ::= 'DISCONNECT' disconnect_object
    Referenced by:

    disconnect_object

    connection_object ALL CURRENT
             ::= connection_object
               | 'ALL'
               | 'CURRENT'
    Referenced by:

    set_session_characteristics_statement

    SET SESSION CHARACTERISTICS AS session_characteristic_list
             ::= 'SET' 'SESSION' 'CHARACTERISTICS' 'AS' session_characteristic_list
    Referenced by:

    session_characteristic_list

    session_characteristic ,
             ::= session_characteristic ( ',' session_characteristic )*

    session_characteristic

    session_transaction_characteristics

    session_transaction_characteristics

    TRANSACTION transaction_mode ,
             ::= 'TRANSACTION' transaction_mode ( ',' transaction_mode )*
    Referenced by:

    set_session_user_identifier_statement

    SET SESSION AUTHORIZATION value_specification
             ::= 'SET' 'SESSION' 'AUTHORIZATION' value_specification
    Referenced by:

    set_role_statement

    SET ROLE role_specification
             ::= 'SET' 'ROLE' role_specification
    Referenced by:

    role_specification

    value_specification NONE
             ::= value_specification
               | 'NONE'
    Referenced by:

    set_local_time_zone_statement

    SET TIME ZONE set_time_zone_value
             ::= 'SET' 'TIME' 'ZONE' set_time_zone_value
    Referenced by:

    set_time_zone_value

    interval_value_expression LOCAL
             ::= interval_value_expression
               | 'LOCAL'

    set_catalog_statement

    SET catalog_name_characteristic
             ::= 'SET' catalog_name_characteristic
    Referenced by:

    catalog_name_characteristic

    CATALOG value_specification
             ::= 'CATALOG' value_specification
    Referenced by:

    set_schema_statement

    SET schema_name_characteristic
             ::= 'SET' schema_name_characteristic
    Referenced by:

    schema_name_characteristic

    SCHEMA value_specification
             ::= 'SCHEMA' value_specification
    Referenced by:

    set_names_statement

    SET character_set_name_characteristic
             ::= 'SET' character_set_name_characteristic
    Referenced by:

    character_set_name_characteristic

    NAMES value_specification
             ::= 'NAMES' value_specification
    Referenced by:

    set_path_statement

    SET SQL_path_characteristic
             ::= 'SET' SQL_path_characteristic
    Referenced by:

    SQL_path_characteristic

    PATH value_specification
             ::= 'PATH' value_specification
    Referenced by:

    set_transform_group_statement

    SET transform_group_characteristic
             ::= 'SET' transform_group_characteristic
    Referenced by:

    transform_group_characteristic

    DEFAULT TRANSFORM GROUP TRANSFORM GROUP FOR TYPE path_resolved_user_defined_type_name value_specification
             ::= ( 'DEFAULT' 'TRANSFORM' 'GROUP' | 'TRANSFORM' 'GROUP' 'FOR' 'TYPE' path_resolved_user_defined_type_name ) value_specification

    set_session_collation_statement

    SET COLLATION collation_specification NO COLLATION FOR character_set_specification_list
             ::= 'SET' ( 'COLLATION' collation_specification | 'NO' 'COLLATION' ) ( 'FOR' character_set_specification_list )?
    Referenced by:

    collation_specification

    value_specification
             ::= value_specification

    allocate_descriptor_statement

    ALLOCATE SQL DESCRIPTOR descriptor_name WITH MAX simple_value_specification
             ::= 'ALLOCATE' 'SQL'? 'DESCRIPTOR' descriptor_name ( 'WITH' 'MAX' simple_value_specification )?
    Referenced by:

    deallocate_descriptor_statement

    DEALLOCATE SQL DESCRIPTOR descriptor_name
             ::= 'DEALLOCATE' 'SQL'? 'DESCRIPTOR' descriptor_name
    Referenced by:

    get_descriptor_statement

    GET SQL DESCRIPTOR descriptor_name get_descriptor_information
             ::= 'GET' 'SQL'? 'DESCRIPTOR' descriptor_name get_descriptor_information
    Referenced by:

    get_descriptor_information

    get_header_information , VALUE simple_value_specification get_item_information ,
             ::= get_header_information ( ',' get_header_information )*
    Referenced by:

    get_header_information

    simple_target_specification_1 = header_item_name

    header_item_name

    COUNT KEY_TYPE DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE TOP_LEVEL_COUNT
             ::= 'COUNT'
               | 'KEY_TYPE'
               | 'DYNAMIC_FUNCTION'
               | 'DYNAMIC_FUNCTION_CODE'
               | 'TOP_LEVEL_COUNT'

    get_item_information

    simple_target_specification_2 = descriptor_item_name

    simple_target_specification_1

    simple_target_specification
             ::= simple_target_specification
    Referenced by:

    simple_target_specification_2

    simple_target_specification
             ::= simple_target_specification
    Referenced by:

    descriptor_item_name

    CARDINALITY CHARACTER_SET_CATALOG CHARACTER_SET_NAME CHARACTER_SET_SCHEMA COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA DATA DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION DEGREE INDICATOR KEY_MEMBER LENGTH LEVEL NAME NULLABLE OCTET_LENGTH PARAMETER_MODE PARAMETER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG PARAMETER_SPECIFIC_NAME PARAMETER_SPECIFIC_SCHEMA PRECISION RETURNED_CARDINALITY RETURNED_LENGTH RETURNED_OCTET_LENGTH SCALE SCOPE_CATALOG SCOPE_NAME SCOPE_SCHEMA TYPE UNNAMED USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_NAME USER_DEFINED_TYPE_SCHEMA USER_DEFINED_TYPE_CODE
             ::= 'CARDINALITY'
               | 'CHARACTER_SET_CATALOG'
               | 'CHARACTER_SET_NAME'
               | 'CHARACTER_SET_SCHEMA'
               | 'COLLATION_CATALOG'
               | 'COLLATION_NAME'
               | 'COLLATION_SCHEMA'
               | 'DATA'
               | 'DATETIME_INTERVAL_CODE'
               | 'DATETIME_INTERVAL_PRECISION'
               | 'DEGREE'
               | 'INDICATOR'
               | 'KEY_MEMBER'
               | 'LENGTH'
               | 'LEVEL'
               | 'NAME'
               | 'NULLABLE'
               | 'OCTET_LENGTH'
               | 'PARAMETER_MODE'
               | 'PARAMETER_ORDINAL_POSITION'
               | 'PARAMETER_SPECIFIC_CATALOG'
               | 'PARAMETER_SPECIFIC_NAME'
               | 'PARAMETER_SPECIFIC_SCHEMA'
               | 'PRECISION'
               | 'RETURNED_CARDINALITY'
               | 'RETURNED_LENGTH'
               | 'RETURNED_OCTET_LENGTH'
               | 'SCALE'
               | 'SCOPE_CATALOG'
               | 'SCOPE_NAME'
               | 'SCOPE_SCHEMA'
               | 'TYPE'
               | 'UNNAMED'
               | 'USER_DEFINED_TYPE_CATALOG'
               | 'USER_DEFINED_TYPE_NAME'
               | 'USER_DEFINED_TYPE_SCHEMA'
               | 'USER_DEFINED_TYPE_CODE'

    set_descriptor_statement

    SET SQL DESCRIPTOR descriptor_name set_descriptor_information
             ::= 'SET' 'SQL'? 'DESCRIPTOR' descriptor_name set_descriptor_information
    Referenced by:

    set_descriptor_information

    set_header_information , VALUE simple_value_specification set_item_information ,
             ::= set_header_information ( ',' set_header_information )*
    Referenced by:

    set_header_information

    header_item_name = simple_value_specification

    set_item_information

    descriptor_item_name = simple_value_specification

    prepare_statement

    PREPARE SQL_identifier attributes_specification FROM simple_value_specification
    Referenced by:

    attributes_specification

    ATTRIBUTES simple_value_specification
             ::= 'ATTRIBUTES' simple_value_specification
    Referenced by:

    preparable_statement

    preparable_SQL_data_statement preparable_SQL_schema_statement preparable_SQL_transaction_statement preparable_SQL_control_statement preparable_SQL_session_statement preparable_implementation_defined_statement
             ::= preparable_SQL_data_statement
               | preparable_SQL_schema_statement
               | preparable_SQL_transaction_statement
               | preparable_SQL_control_statement
               | preparable_SQL_session_statement
    Not referenced by any.

    preparable_SQL_data_statement

    delete_statement_searched dynamic_single_row_select_statement insert_statement dynamic_select_statement update_statement_searched truncate_table_statement merge_statement preparable_dynamic_delete_statement_positioned preparable_dynamic_update_statement_positioned
             ::= delete_statement_searched
               | dynamic_single_row_select_statement
               | insert_statement
               | dynamic_select_statement
               | update_statement_searched
               | truncate_table_statement
               | merge_statement
    Referenced by:

    preparable_SQL_schema_statement

    SQL_schema_statement
             ::= SQL_schema_statement
    Referenced by:

    preparable_SQL_transaction_statement

    SQL_transaction_statement
             ::= SQL_transaction_statement
    Referenced by:

    preparable_SQL_control_statement

    SQL_control_statement
             ::= SQL_control_statement
    Referenced by:

    preparable_SQL_session_statement

    SQL_session_statement
             ::= SQL_session_statement
    Referenced by:

    dynamic_select_statement

    cursor_specification
             ::= cursor_specification

    preparable_implementation_defined_statement

    character_string_literal
             ::= character_string_literal
    Referenced by:

    cursor_attributes

    cursor_attribute
             ::= cursor_attribute+
    Not referenced by any.

    cursor_attribute

    cursor_sensitivity cursor_scrollability cursor_holdability cursor_returnability
             ::= cursor_sensitivity
               | cursor_scrollability
               | cursor_holdability
               | cursor_returnability
    Referenced by:

    deallocate_prepared_statement

    DEALLOCATE PREPARE SQL_identifier
             ::= 'DEALLOCATE' 'PREPARE' SQL_identifier
    Referenced by:

    describe_statement

    describe_input_statement describe_output_statement
             ::= describe_input_statement
               | describe_output_statement
    Referenced by:

    describe_input_statement

    DESCRIBE INPUT SQL_identifier using_descriptor nesting_option
             ::= 'DESCRIBE' 'INPUT' SQL_identifier using_descriptor nesting_option?
    Referenced by:

    describe_output_statement

    DESCRIBE OUTPUT described_object using_descriptor nesting_option
             ::= 'DESCRIBE' 'OUTPUT'? described_object using_descriptor nesting_option?
    Referenced by:

    nesting_option

    WITH WITHOUT NESTING
             ::= ( 'WITH' | 'WITHOUT' ) 'NESTING'

    using_descriptor

    USING SQL DESCRIPTOR descriptor_name
             ::= 'USING' 'SQL'? 'DESCRIPTOR' descriptor_name

    described_object

    SQL_identifier CURSOR extended_cursor_name STRUCTURE
             ::= SQL_identifier
               | 'CURSOR' extended_cursor_name 'STRUCTURE'

    input_using_clause

    using_arguments using_input_descriptor
             ::= using_arguments
               | using_input_descriptor

    using_arguments

    USING using_argument ,
             ::= 'USING' using_argument ( ',' using_argument )*
    Referenced by:

    using_argument

    general_value_specification
             ::= general_value_specification
    Referenced by:

    using_input_descriptor

    using_descriptor
             ::= using_descriptor
    Referenced by:

    output_using_clause

    into_arguments into_descriptor
             ::= into_arguments
               | into_descriptor

    into_arguments

    INTO into_argument ,
             ::= 'INTO' into_argument ( ',' into_argument )*
    Referenced by:

    into_argument

    target_specification
             ::= target_specification
    Referenced by:

    into_descriptor

    INTO SQL DESCRIPTOR descriptor_name
             ::= 'INTO' 'SQL'? 'DESCRIPTOR' descriptor_name
    Referenced by:

    execute_statement

    EXECUTE SQL_identifier result_using_clause parameter_using_clause
    Referenced by:

    result_using_clause

    output_using_clause
             ::= output_using_clause
    Referenced by:

    parameter_using_clause

    input_using_clause
             ::= input_using_clause
    Referenced by:

    execute_immediate_statement

    EXECUTE IMMEDIATE simple_value_specification
             ::= 'EXECUTE' 'IMMEDIATE' simple_value_specification
    Referenced by:

    dynamic_declare_cursor

    DECLARE cursor_name cursor_properties FOR identifier
             ::= 'DECLARE' cursor_name cursor_properties 'FOR' identifier
    Referenced by:

    allocate_cursor_statement

    ALLOCATE extended_cursor_name cursor_intent
             ::= 'ALLOCATE' extended_cursor_name cursor_intent

    cursor_intent

    statement_cursor result_set_cursor
             ::= statement_cursor
               | result_set_cursor

    statement_cursor

    cursor_properties FOR extended_identifier
             ::= cursor_properties 'FOR' extended_identifier
    Referenced by:

    result_set_cursor

    CURSOR FOR PROCEDURE specific_routine_designator
             ::= 'CURSOR'? 'FOR' 'PROCEDURE' specific_routine_designator
    Referenced by:

    dynamic_open_statement

    OPEN dynamic_cursor_name input_using_clause
             ::= 'OPEN' dynamic_cursor_name input_using_clause?

    dynamic_fetch_statement

    FETCH fetch_orientation FROM dynamic_cursor_name output_using_clause
             ::= 'FETCH' ( fetch_orientation? 'FROM' )? dynamic_cursor_name output_using_clause

    dynamic_single_row_select_statement

    query_specification
             ::= query_specification

    dynamic_close_statement

    CLOSE dynamic_cursor_name
             ::= 'CLOSE' dynamic_cursor_name

    dynamic_delete_statement_positioned

    DELETE FROM target_table WHERE CURRENT OF dynamic_cursor_name
             ::= 'DELETE' 'FROM' target_table 'WHERE' 'CURRENT' 'OF' dynamic_cursor_name

    dynamic_update_statement_positioned

    UPDATE target_table SET set_clause_list WHERE CURRENT OF dynamic_cursor_name
             ::= 'UPDATE' target_table 'SET' set_clause_list 'WHERE' 'CURRENT' 'OF' dynamic_cursor_name

    preparable_dynamic_delete_statement_positioned

    DELETE FROM target_table WHERE CURRENT OF preparable_dynamic_cursor_name
             ::= 'DELETE' ( 'FROM' target_table )? 'WHERE' 'CURRENT' 'OF' preparable_dynamic_cursor_name

    preparable_dynamic_cursor_name

    scope_option cursor_name
             ::= scope_option? cursor_name

    preparable_dynamic_update_statement_positioned

    UPDATE target_table SET set_clause_list WHERE CURRENT OF preparable_dynamic_cursor_name
             ::= 'UPDATE' target_table? 'SET' set_clause_list 'WHERE' 'CURRENT' 'OF' preparable_dynamic_cursor_name

    direct_SQL_statement

    directly_executable_statement ;
             ::= directly_executable_statement ';'
    Referenced by:

    directly_executable_statement

    direct_SQL_data_statement SQL_schema_statement SQL_transaction_statement SQL_connection_statement SQL_session_statement direct_implementation_defined_statement use_statement
             ::= direct_SQL_data_statement
               | SQL_schema_statement
               | SQL_transaction_statement
               | SQL_connection_statement
               | SQL_session_statement
               | use_statement
    Referenced by:

    direct_SQL_data_statement

    delete_statement_searched direct_select_statement_multiple_rows insert_statement update_statement_searched truncate_table_statement merge_statement temporary_table_declaration
             ::= delete_statement_searched
               | insert_statement
               | update_statement_searched
               | truncate_table_statement
               | merge_statement
               | temporary_table_declaration

    direct_implementation_defined_statement

    character_string_literal
             ::= character_string_literal

    direct_select_statement_multiple_rows

    cursor_specification
             ::= cursor_specification

    get_diagnostics_statement

    GET DIAGNOSTICS SQL_diagnostics_information
             ::= 'GET' 'DIAGNOSTICS' SQL_diagnostics_information

    SQL_diagnostics_information

    statement_information condition_information all_information
             ::= statement_information
               | condition_information
               | all_information

    statement_information

    statement_information_item ,

    statement_information_item

    simple_target_specification = statement_information_item_name
    Referenced by:

    statement_information_item_name

    NUMBER MORE COMMAND_FUNCTION COMMAND_FUNCTION_CODE DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE ROW_COUNT TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK TRANSACTION_ACTIVE
             ::= 'NUMBER'
               | 'MORE'
               | 'COMMAND_FUNCTION'
               | 'COMMAND_FUNCTION_CODE'
               | 'DYNAMIC_FUNCTION'
               | 'DYNAMIC_FUNCTION_CODE'
               | 'ROW_COUNT'
               | 'TRANSACTIONS_COMMITTED'
               | 'TRANSACTIONS_ROLLED_BACK'
               | 'TRANSACTION_ACTIVE'

    condition_information

    CONDITION simple_value_specification condition_information_item ,

    condition_information_item

    simple_target_specification = condition_information_item_name
    Referenced by:

    condition_information_item_name

    CATALOG_NAME CLASS_ORIGIN COLUMN_NAME CONDITION_NUMBER CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA CURSOR_NAME MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT PARAMETER_MODE PARAMETER_NAME PARAMETER_ORDINAL_POSITION RETURNED_SQLSTATE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA SCHEMA_NAME SERVER_NAME SPECIFIC_NAME SUBCLASS_ORIGIN TABLE_NAME TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA
             ::= 'CATALOG_NAME'
               | 'CLASS_ORIGIN'
               | 'COLUMN_NAME'
               | 'CONDITION_NUMBER'
               | 'CONNECTION_NAME'
               | 'CONSTRAINT_CATALOG'
               | 'CONSTRAINT_NAME'
               | 'CONSTRAINT_SCHEMA'
               | 'CURSOR_NAME'
               | 'MESSAGE_LENGTH'
               | 'MESSAGE_OCTET_LENGTH'
               | 'MESSAGE_TEXT'
               | 'PARAMETER_MODE'
               | 'PARAMETER_NAME'
               | 'PARAMETER_ORDINAL_POSITION'
               | 'RETURNED_SQLSTATE'
               | 'ROUTINE_CATALOG'
               | 'ROUTINE_NAME'
               | 'ROUTINE_SCHEMA'
               | 'SCHEMA_NAME'
               | 'SERVER_NAME'
               | 'SPECIFIC_NAME'
               | 'SUBCLASS_ORIGIN'
               | 'TABLE_NAME'
               | 'TRIGGER_CATALOG'
               | 'TRIGGER_NAME'
               | 'TRIGGER_SCHEMA'

    all_information

    all_info_target = ALL all_qualifier
             ::= all_info_target '=' 'ALL' all_qualifier?

    all_info_target

    simple_target_specification
             ::= simple_target_specification
    Referenced by:

    all_qualifier

    STATEMENT CONDITION simple_value_specification
             ::= 'STATEMENT'
               | 'CONDITION' simple_value_specification?
    Referenced by:

    use_statement

    USE identifier_chain
             ::= 'USE' identifier_chain

    lambda

    lambda_params lambda_body
    Referenced by:

    lambda_body

    -> value_expression
             ::= '->' value_expression

    lambda_params

    actual_identifier ( actual_identifier , )
             ::= actual_identifier
               | '(' ( actual_identifier ( ',' actual_identifier )* )? ')'
    Referenced by:

    if_not_exists

    IF NOT EXISTS
             ::= 'IF' 'NOT' 'EXISTS'

    identifier_suffix_chain

    @ : actual_identifier
             ::= ( ( '@' | ':' ) actual_identifier? )+
    Referenced by:

    limit_clause

    LIMIT unsigned_integer ALL
             ::= 'LIMIT' ( unsigned_integer | 'ALL' )

    presto_generic_type

    presto_array_type presto_map_type regular_identifier ( data_type , )
             ::= presto_array_type
               | presto_map_type
               | regular_identifier '(' data_type ( ',' data_type )* ')'
    Referenced by:

    presto_array_type

    ARRAY < data_type > ( data_type )
             ::= 'ARRAY' ( '<' data_type '>' | '(' data_type ')' )
    Referenced by:

    presto_map_type

    MAP < data_type , data_type > ( data_type , data_type )
             ::= 'MAP' ( '<' data_type ',' data_type '>' | '(' data_type ',' data_type ')' )
    Referenced by:

    grouping_expression

    value_expression
             ::= value_expression

    count

    COUNT ( "COUNT" ( set_quantifier value_expression * )
    count    ::= ( 'COUNT' '(' | '"COUNT"' '(' set_quantifier? ( value_expression | '*' )? ) ')'
    Referenced by:

    table_description

    COMMENT character_string_literal
             ::= 'COMMENT' character_string_literal
    Referenced by:

    routine_description

    COMMENT character_string_literal
             ::= 'COMMENT' character_string_literal
    Referenced by:

    column_description

    COMMENT character_string_literal
             ::= 'COMMENT' character_string_literal
    Referenced by:

    presto_aggregation_function

    NUMERIC_HISTOGRAM HISTOGRAM APPROEX_PERCENTILE MAP_AGG SET_AGG MAP_UNION
             ::= 'NUMERIC_HISTOGRAM'
               | 'HISTOGRAM'
               | 'APPROEX_PERCENTILE'
               | 'MAP_AGG'
               | 'SET_AGG'
               | 'MAP_UNION'
    Referenced by:

    presto_aggregations

    presto_aggregation_function ( set_quantifier value_expression , )
    Referenced by:

    try_cast

    TRY_CAST ( cast_operand AS cast_target )
    try_cast ::= 'TRY_CAST' '(' cast_operand 'AS' cast_target ')'
    Referenced by:

    table_attributes

    ( actual_identifier = value_expression , )
             ::= '(' actual_identifier '=' value_expression ( ',' actual_identifier '=' value_expression )* ')'

    or_replace

    OR REPLACE
             ::= 'OR' 'REPLACE'

    udaf_filter

    filter_clause
             ::= filter_clause
    Referenced by:

    extra_args_to_agg

    , value_expression
             ::= ( ',' value_expression )+
    Referenced by:

    identifier_starting_with_underscore

    _ regular_identifier
             ::= '_'+ regular_identifier?
    Not referenced by any.

    generic_unicode

    U&' [^'] '' '
             ::= "U&'" ( [^'] | "''" )* "'"
    Not referenced by any.

    regular_identifier

    identifier_body
             ::= identifier_body

    identifier_body

    identifier_start identifier_part
             ::= identifier_start identifier_part*
    Referenced by:

    identifier_part

    identifier_start identifier_extend
             ::= identifier_start
               | identifier_extend
    Referenced by:

    identifier_start

    [a-z]
             ::= [a-z]

    identifier_extend

    [0-9] _ [#xB7]
             ::= [0-9_#xB7]
    Referenced by:

    large_object_length_token

    digit multiplier
             ::= digit+ multiplier
    Referenced by:

    multiplier

    K M G T P
             ::= [KMGTP]

    delimited_identifier

    " delimited_identifier_body "
             ::= '"' delimited_identifier_body? '"'
    Referenced by:

    delimited_identifier_body

    delimited_identifier_part
             ::= delimited_identifier_part+
    Referenced by:

    delimited_identifier_part

    nondoublequote_character ""
             ::= nondoublequote_character
               | '""'

    Unicode_delimited_identifier

    U & " Unicode_delimiter_body " Unicode_escape_specifier
             ::= 'U' '&' '"' Unicode_delimiter_body '"' Unicode_escape_specifier?
    Referenced by:

    Unicode_escape_specifier

    UESCAPE ' Unicode_escape_character '
             ::= 'UESCAPE' "'" Unicode_escape_character "'"

    Unicode_delimiter_body

    Unicode_identifier_part
             ::= Unicode_identifier_part+

    Unicode_identifier_part

    delimited_identifier_part Unicode_escape_value
             ::= delimited_identifier_part
               | Unicode_escape_value
    Referenced by:

    Unicode_escape_value

    Unicode_4_digit_escape_value Unicode_6_digit_escape_value Unicode_character_escape_value
             ::= Unicode_4_digit_escape_value
               | Unicode_6_digit_escape_value
               | Unicode_character_escape_value

    Unicode_4_digit_escape_value

    Unicode_escape_character hexit hexit hexit hexit
    Referenced by:

    Unicode_6_digit_escape_value

    Unicode_escape_character + hexit hexit hexit hexit hexit hexit
    Referenced by:

    Unicode_character_escape_value

    Unicode_escape_character Unicode_escape_character
    Referenced by:

    Unicode_escape_character

    [^a-z0-9+'" #xA#x9]
             ::= [^a-z0-9+'" #xA#x9]

    nondoublequote_character

    [^"]
             ::= [^"]

    white_space

    newline [#x9]
             ::= newline
               | [ #x9]
    Referenced by:

    newline

    [#xA] [#xD]
    newline  ::= [#xA#xD]+

    comment

    simple_comment
    Not referenced by any.

    simple_comment

    -- comment_character newline
             ::= '--' comment_character* newline?
    Referenced by:

    comment_character

    [^#xA#xD] '
             ::= [^#xA#xD]
               | "'"
    Referenced by:

    skip_separator

    white_space
             ::= white_space+
    Not referenced by any.

    separator

    white_space
             ::= white_space+

    digit

    [0-9]
    digit    ::= [0-9]

    character_representation

    nonquote_character ''
             ::= nonquote_character
               | "''"

    nonquote_character

    [^']
             ::= [^']
    Referenced by:

    quoted_string

    ' character_representation '
             ::= "'" character_representation* "'"
    Referenced by:

    national_character_string_literal

    N ' character_representation ' separator
             ::= 'N' "'" character_representation* "'" ( separator "'" character_representation* "'" )*
    Referenced by:

    unicode_literal

    U & ' Unicode_representation ' separator Unicode_escape_specifier
             ::= 'U' '&' "'" Unicode_representation* "'" ( separator "'" Unicode_representation* "'" )* Unicode_escape_specifier

    Unicode_representation

    character_representation Unicode_escape_value
             ::= character_representation
               | Unicode_escape_value
    Referenced by:

    binary_string_literal

    X ' hexit hexit ' separator
             ::= 'X' "'" ' '* ( hexit ' '* hexit ' '* )* "'" ( separator "'" ' '* ( hexit ' '* hexit ' '* )* "'" )*
    Referenced by:

    hexit

    [a-f] [0-9]
    hexit    ::= [a-f0-9]

    unsigned_integer

    digit
             ::= digit+

    float_literal

    unsigned_integer . unsigned_integer . unsigned_integer
             ::= unsigned_integer '.' unsigned_integer?
               | '.' unsigned_integer

    approximate_numeric_literal

    mantissa E exponent
             ::= mantissa 'E' exponent
    Referenced by:

    mantissa

    unsigned_integer float_literal
               | float_literal

    exponent

    signed_integer

    signed_integer

    + [#x2D] unsigned_integer
             ::= [+#x2D]? unsigned_integer
    Referenced by:

    SQL_language_identifier

    SQL_language_identifier_start SQL_language_identifier_part
    Referenced by:

    simple_Latin_letter

    [a-z]
             ::= [a-z]

    SQL_language_identifier_start

    simple_Latin_letter
             ::= simple_Latin_letter
    Referenced by:

    SQL_language_identifier_part

    simple_Latin_letter digit _
             ::= simple_Latin_letter
               | digit
               | '_'
    Referenced by:

    illegal_input_char

    .
             ::= .
    Not referenced by any.

    EOF

    $
    EOF      ::= $
    Referenced by: