if_statement

This commit is contained in:
Christian De la Hoz 2021-08-28 13:13:37 +02:00
parent 6303f6c3d8
commit e37e2fdea1
2 changed files with 167 additions and 0 deletions

View file

@ -0,0 +1,156 @@
================================================================================
basic
================================================================================
do $$ begin
if true then select 1; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(true)
(select_statement
(select_item
(number)))))
(dollar_quote))))
================================================================================
many statements
================================================================================
do $$ begin
if true then select 1; select 2; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(true)
(select_statement
(select_item
(number)))
(select_statement
(select_item
(number)))))
(dollar_quote))))
================================================================================
if then else
================================================================================
do $$ begin
if var <> 5 then return 1; else return 2; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))
(return_statement
(number))))
(dollar_quote))))
================================================================================
if then else if
================================================================================
do $$ begin
if var > 5 then return 1; elsif var = 4 then return 2; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))))
(dollar_quote))))
================================================================================
elseif/elsif
================================================================================
do $$ begin
if var > 5 then return 1; elsif var = 4 then return 2; elseif var = 3 then return 3; else return 4; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number))
(return_statement
(number))))
(dollar_quote))))
================================================================================
nested
================================================================================
do $$ begin
if true then return 1; else if var = 4 then return 2; end if; end if;
end $$;
--------------------------------------------------------------------------------
(source_file
(do_block
(block
(dollar_quote)
(body
(if_statement
(true)
(return_statement
(number))
(if_statement
(op_expression
(identifier)
(comparison_op)
(number))
(return_statement
(number)))))
(dollar_quote))))

View file

@ -384,12 +384,23 @@ module.exports = grammar({
$._statement,
$.assign_statement,
$.return_statement,
$.if_statement,
$.execute_statement,
$.perform_statement,
),
";",
),
if_statement: $ => seq(
kw("if"), $._value_expression, kw("then"), repeat1($._plpgsql_statement),
repeat(seq(
choice(kw("elsif"), kw("elseif")),
$._value_expression, kw("then"), repeat1($._plpgsql_statement)
)),
optional(seq(kw("else"), repeat1($._plpgsql_statement))),
kw("end"), kw("if"),
),
execute_statement: $ => seq(
kw("execute"),
$._value_expression,