Commit 27b0e8c0 authored by Jan Wieck's avatar Jan Wieck

Adding ELSIF support contributed by Klaus Reger.

Jan
parent a9da3fed
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* procedural language * procedural language
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.17 2001/04/18 20:42:56 tgl Exp $ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.18 2001/05/18 21:16:59 wieck Exp $
* *
* This software is copyrighted by Jan Wieck - Hamburg. * This software is copyrighted by Jan Wieck - Hamburg.
* *
...@@ -147,6 +147,7 @@ static PLpgSQL_expr *make_tupret_expr(PLpgSQL_row *row); ...@@ -147,6 +147,7 @@ static PLpgSQL_expr *make_tupret_expr(PLpgSQL_row *row);
%token K_DIAGNOSTICS %token K_DIAGNOSTICS
%token K_DOTDOT %token K_DOTDOT
%token K_ELSE %token K_ELSE
%token K_ELSIF
%token K_END %token K_END
%token K_EXCEPTION %token K_EXCEPTION
%token K_EXECUTE %token K_EXECUTE
...@@ -544,6 +545,7 @@ proc_stmts : proc_stmts proc_stmt ...@@ -544,6 +545,7 @@ proc_stmts : proc_stmts proc_stmt
new->stmts[0] = (struct PLpgSQL_stmt *)$1; new->stmts[0] = (struct PLpgSQL_stmt *)$1;
$$ = new; $$ = new;
} }
; ;
...@@ -721,8 +723,53 @@ stmt_else : ...@@ -721,8 +723,53 @@ stmt_else :
memset(new, 0, sizeof(PLpgSQL_stmts)); memset(new, 0, sizeof(PLpgSQL_stmts));
$$ = new; $$ = new;
} }
| K_ELSIF lno expr_until_then proc_sect stmt_else
{
/*
* Translate the structure: into:
*
* IF c1 THEN IF c1 THEN
* ... ...
* ELSIF c2 THEN ELSE
* IF c2 THEN
* ... ...
* ELSE ELSE
* ... ...
* END IF END IF
* END IF
*
*/
PLpgSQL_stmts *new;
PLpgSQL_stmt_if *new_if;
/* first create a new if-statement */
new_if = malloc(sizeof(PLpgSQL_stmt_if));
memset(new_if, 0, sizeof(PLpgSQL_stmt_if));
new_if->cmd_type = PLPGSQL_STMT_IF;
new_if->lineno = $2;
new_if->cond = $3;
new_if->true_body = $4;
new_if->false_body = $5;
/* this is a 'container' for the if-statement */
new = malloc(sizeof(PLpgSQL_stmts));
memset(new, 0, sizeof(PLpgSQL_stmts));
new->stmts_alloc = 64;
new->stmts_used = 1;
new->stmts = malloc(sizeof(PLpgSQL_stmt *) * new->stmts_alloc);
new->stmts[0] = (struct PLpgSQL_stmt *)new_if;
$$ = new;
}
| K_ELSE proc_sect | K_ELSE proc_sect
{ $$ = $2; } {
$$ = $2;
}
; ;
stmt_loop : opt_label K_LOOP lno loop_body stmt_loop : opt_label K_LOOP lno loop_body
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* procedural language * procedural language
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.10 2001/04/18 20:42:56 tgl Exp $ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.11 2001/05/18 21:16:59 wieck Exp $
* *
* This software is copyrighted by Jan Wieck - Hamburg. * This software is copyrighted by Jan Wieck - Hamburg.
* *
...@@ -99,6 +99,7 @@ declare { return K_DECLARE; } ...@@ -99,6 +99,7 @@ declare { return K_DECLARE; }
default { return K_DEFAULT; } default { return K_DEFAULT; }
diagnostics { return K_DIAGNOSTICS; } diagnostics { return K_DIAGNOSTICS; }
else { return K_ELSE; } else { return K_ELSE; }
elsif { return K_ELSIF; }
end { return K_END; } end { return K_END; }
exception { return K_EXCEPTION; } exception { return K_EXCEPTION; }
execute { return K_EXECUTE; } execute { return K_EXECUTE; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment