sql-formatter-org / sql-formatter

A whitespace formatter for different query languages
https://sql-formatter-org.github.io/sql-formatter/
MIT License
2.36k stars 405 forks source link

[FORMATTING] Oracle pl/sql, assignment in case block #741

Open hmmftg opened 6 months ago

hmmftg commented 6 months ago

Input data

Which SQL and options did you provide as input? defaults

DECLARE
    v_id1       varchar2(5) := '01';
    v_id2       varchar2(5) := '02';
BEGIN
    CASE v_id1
        WHEN '01'
        THEN
            v_id1 :=
                v_id2;
        ELSE
            log_error('INVALID id ' || p_id);
    END CASE;
END;

Expected Output

DECLARE
    v_id1       varchar2(5) := '01';
    v_id2       varchar2(5) := '02';
BEGIN
    CASE v_id1
        WHEN '01' THEN
            v_id1 := v_id2;
        ELSE
            log_error('INVALID id ' || p_id);
    END CASE;
END;

Actual Output

An Unexpected Error Occurred

Parse error at token: ; at line 9 column 22 Unexpected DELIMITER token: {"type":"DELIMITER","raw":";","text":";","start":176}. Instead, I was expecting to see one of the following: A PROPERTY_ACCESS_OPERATOR token based on: property_access → atomic_expression _ ● %PROPERTY_ACCESS_OPERATOR _ property_access$subexpression$1 atomic_expression$subexpression$1 → ● property_access atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A LINE_COMMENT token based on: comment → ● %LINE_COMMENT _$ebnf$1 → _$ebnf$1 ● comment _ → ● _$ebnf$1 property_access → atomic_expression ● _ %PROPERTY_ACCESS_OPERATOR _ property_access$subexpression$1 atomic_expression$subexpression$1 → ● property_access atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A BLOCK_COMMENT token based on: comment → ● %BLOCK_COMMENT _$ebnf$1 → _$ebnf$1 ● comment _ → ● _$ebnf$1 property_access → atomic_expression ● _ %PROPERTY_ACCESS_OPERATOR _ property_access$subexpression$1 atomic_expression$subexpression$1 → ● property_access atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A DISABLE_COMMENT token based on: comment → ● %DISABLE_COMMENT _$ebnf$1 → _$ebnf$1 ● comment _ → ● _$ebnf$1 property_access → atomic_expression ● _ %PROPERTY_ACCESS_OPERATOR _ property_access$subexpression$1 atomic_expression$subexpression$1 → ● property_access atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A END token based on: case_expression → %CASE _ case_expression$ebnf$1 case_expression$ebnf$2 ● %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A WHEN token based on: case_clause → ● %WHEN _ expression_chain_ %THEN _ expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A ELSE token based on: case_clause → ● %ELSE _ expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A AND token based on: logic_operator$subexpression$1 → ● %AND logic_operator → ● logic_operator$subexpression$1 expression$subexpression$1 → ● logic_operator expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A OR token based on: logic_operator$subexpression$1 → ● %OR logic_operator → ● logic_operator$subexpression$1 expression$subexpression$1 → ● logic_operator expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A XOR token based on: logic_operator$subexpression$1 → ● %XOR logic_operator → ● logic_operator$subexpression$1 expression$subexpression$1 → ● logic_operator expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A ASTERISK token based on: asterisk$subexpression$1 → ● %ASTERISK asterisk → ● asterisk$subexpression$1 andless_expression$subexpression$1 → ● asterisk andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A BETWEEN token based on: between_predicate → ● %BETWEEN _ andless_expression_chain _ %AND _ andless_expression asteriskless_andless_expression$subexpression$1 → ● between_predicate asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A CASE token based on: case_expression → ● %CASE _ case_expression$ebnf$1 case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A ARRAY_IDENTIFIER token based on: array_subscript → ● %ARRAY_IDENTIFIER _ square_brackets atomic_expression$subexpression$1 → ● array_subscript atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A ARRAY_KEYWORD token based on: array_subscript → ● %ARRAY_KEYWORD _ square_brackets atomic_expression$subexpression$1 → ● array_subscript atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_FUNCTION_NAME token based on: function_call → ● %RESERVED_FUNCTION_NAME _ parenthesis atomic_expression$subexpression$1 → ● function_call atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A "(" based on: parenthesis → ● "(" expressions_or_clauses ")" atomic_expression$subexpression$1 → ● parenthesis atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A "{" based on: curly_braces → ● "{" curly_braces$ebnf$1 "}" atomic_expression$subexpression$1 → ● curly_braces atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A "[" based on: square_brackets → ● "[" square_brackets$ebnf$1 "]" atomic_expression$subexpression$1 → ● square_brackets atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_PARAMETERIZED_DATA_TYPE token based on: data_type → ● %RESERVED_PARAMETERIZED_DATA_TYPE _ parenthesis atomic_expression$subexpression$1 → ● data_type atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A OPERATOR token based on: operator$subexpression$1 → ● %OPERATOR operator → ● operator$subexpression$1 atomic_expression$subexpression$1 → ● operator atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A IDENTIFIER token based on: identifier$subexpression$1 → ● %IDENTIFIER identifier → ● identifier$subexpression$1 atomic_expression$subexpression$1 → ● identifier atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A QUOTED_IDENTIFIER token based on: identifier$subexpression$1 → ● %QUOTED_IDENTIFIER identifier → ● identifier$subexpression$1 atomic_expression$subexpression$1 → ● identifier atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A VARIABLE token based on: identifier$subexpression$1 → ● %VARIABLE identifier → ● identifier$subexpression$1 atomic_expression$subexpression$1 → ● identifier atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A NAMED_PARAMETER token based on: parameter$subexpression$1 → ● %NAMED_PARAMETER parameter → ● parameter$subexpression$1 atomic_expression$subexpression$1 → ● parameter atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A QUOTED_PARAMETER token based on: parameter$subexpression$1 → ● %QUOTED_PARAMETER parameter → ● parameter$subexpression$1 atomic_expression$subexpression$1 → ● parameter atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A NUMBERED_PARAMETER token based on: parameter$subexpression$1 → ● %NUMBERED_PARAMETER parameter → ● parameter$subexpression$1 atomic_expression$subexpression$1 → ● parameter atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A POSITIONAL_PARAMETER token based on: parameter$subexpression$1 → ● %POSITIONAL_PARAMETER parameter → ● parameter$subexpression$1 atomic_expression$subexpression$1 → ● parameter atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A CUSTOM_PARAMETER token based on: parameter$subexpression$1 → ● %CUSTOM_PARAMETER parameter → ● parameter$subexpression$1 atomic_expression$subexpression$1 → ● parameter atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A NUMBER token based on: literal$subexpression$1 → ● %NUMBER literal → ● literal$subexpression$1 atomic_expression$subexpression$1 → ● literal atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A STRING token based on: literal$subexpression$1 → ● %STRING literal → ● literal$subexpression$1 atomic_expression$subexpression$1 → ● literal atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_DATA_TYPE token based on: data_type$subexpression$1 → ● %RESERVED_DATA_TYPE data_type → ● data_type$subexpression$1 atomic_expression$subexpression$1 → ● data_type atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_KEYWORD token based on: keyword$subexpression$1 → ● %RESERVED_KEYWORD keyword → ● keyword$subexpression$1 atomic_expression$subexpression$1 → ● keyword atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_PHRASE token based on: keyword$subexpression$1 → ● %RESERVED_PHRASE keyword → ● keyword$subexpression$1 atomic_expression$subexpression$1 → ● keyword atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1 A RESERVED_JOIN token based on: keyword$subexpression$1 → ● %RESERVED_JOIN keyword → ● keyword$subexpression$1 atomic_expression$subexpression$1 → ● keyword atomic_expression → ● atomic_expression$subexpression$1 asteriskless_andless_expression$subexpression$1 → ● atomic_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 andless_expression$subexpression$1 → ● asteriskless_andless_expression andless_expression → ● andless_expression$subexpression$1 expression$subexpression$1 → ● andless_expression expression → ● expression$subexpression$1 expression_with_comments_ → ● expression _ expression_chain_$ebnf$1 → expression_chain_$ebnf$1 ● expression_with_comments_ expression_chain_ → ● expression_chain_$ebnf$1 case_clause → %WHEN _ expression_chain_ %THEN _ ● expression_chain_ case_expression$ebnf$2 → case_expression$ebnf$2 ● case_clause case_expression → %CASE _ case_expression$ebnf$1 ● case_expression$ebnf$2 %END asteriskless_andless_expression$subexpression$1 → ● case_expression asteriskless_andless_expression → ● asteriskless_andless_expression$subexpression$1 asteriskless_free_form_sql$subexpression$1 → ● asteriskless_andless_expression asteriskless_free_form_sql → ● asteriskless_free_form_sql$subexpression$1 free_form_sql$subexpression$1 → ● asteriskless_free_form_sql free_form_sql → ● free_form_sql$subexpression$1 other_clause$ebnf$1 → other_clause$ebnf$1 ● free_form_sql other_clause → %RESERVED_CLAUSE ● other_clause$ebnf$1 clause$subexpression$1 → ● other_clause clause → ● clause$subexpression$1 expressions_or_clauses$ebnf$2 → expressions_or_clauses$ebnf$2 ● clause expressions_or_clauses → expressions_or_clauses$ebnf$1 ● expressions_or_clauses$ebnf$2 statement → ● expressions_or_clauses statement$subexpression$1 main$ebnf$1 → main$ebnf$1 ● statement main → ● main$ebnf$1

Usage

nene commented 6 months ago

Thanks for reporting.

I should point out that the formatter doesn't really support procedural SQL. Even when I do fix the crash, the formatted output will likely be pretty ugly.