Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd426662

Browse files
Jan WieckJan Wieck
Jan Wieck
authored and
Jan Wieck
committed
Added EXECUTE command to PL/pgSQL for execution of
dynamic SQL and utility statements.Jan
1 parent16dc9ba commitd426662

File tree

6 files changed

+368
-9
lines changed

6 files changed

+368
-9
lines changed

‎src/pl/plpgsql/src/gram.y

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* procedural language
55
*
66
* IDENTIFICATION
7-
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.10 2000/06/05 07:29:14 tgl Exp $
7+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.11 2000/08/31 13:26:15 wieck Exp $
88
*
99
* This software is copyrighted by Jan Wieck - Hamburg.
1010
*
@@ -113,6 +113,7 @@ staticPLpgSQL_expr*make_tupret_expr(PLpgSQL_row *row);
113113
%type<stmt>stmt_assign,stmt_if,stmt_loop,stmt_while,stmt_exit
114114
%type<stmt>stmt_return,stmt_raise,stmt_execsql,stmt_fori
115115
%type<stmt>stmt_fors,stmt_select,stmt_perform
116+
%type<stmt>stmt_dynexecute,stmt_dynfors
116117

117118
%type<dtlist>raise_params
118119
%type<ival>raise_level,raise_param
@@ -134,6 +135,7 @@ staticPLpgSQL_expr*make_tupret_expr(PLpgSQL_row *row);
134135
%tokenK_ELSE
135136
%tokenK_END
136137
%tokenK_EXCEPTION
138+
%tokenK_EXECUTE
137139
%tokenK_EXIT
138140
%tokenK_FOR
139141
%tokenK_FROM
@@ -568,6 +570,10 @@ proc_stmt: pl_block
568570
{$$ =$1; }
569571
|stmt_execsql
570572
{$$ =$1; }
573+
|stmt_dynexecute
574+
{$$ =$1; }
575+
|stmt_dynfors
576+
{$$ =$1; }
571577
|stmt_perform
572578
{$$ =$1; }
573579
;
@@ -844,6 +850,35 @@ stmt_fors: opt_label K_FOR lno fors_target K_IN K_SELECT expr_until_loop loop_b
844850
$$ = (PLpgSQL_stmt *)new;
845851
}
846852

853+
stmt_dynfors :opt_labelK_FORlnofors_targetK_INK_EXECUTEexpr_until_looploop_body
854+
{
855+
PLpgSQL_stmt_dynfors*new;
856+
857+
new = malloc(sizeof(PLpgSQL_stmt_dynfors));
858+
memset(new,0,sizeof(PLpgSQL_stmt_dynfors));
859+
860+
new->cmd_type = PLPGSQL_STMT_DYNFORS;
861+
new->lineno =$3;
862+
new->label =$1;
863+
switch ($4->dtype) {
864+
case PLPGSQL_DTYPE_REC:
865+
new->rec =$4;
866+
break;
867+
case PLPGSQL_DTYPE_ROW:
868+
new->row = (PLpgSQL_row *)$4;
869+
break;
870+
default:
871+
plpgsql_comperrinfo();
872+
elog(ERROR,"unknown dtype %d in stmt_dynfors", $4->dtype);
873+
}
874+
new->query =$7;
875+
new->body =$8;
876+
877+
plpgsql_ns_pop();
878+
879+
$$ = (PLpgSQL_stmt *)new;
880+
}
881+
847882
fors_target:T_RECORD
848883
{
849884
$$ = yylval.rec;
@@ -1028,6 +1063,19 @@ stmt_execsql: execsql_start lno
10281063
}
10291064
;
10301065

1066+
stmt_dynexecute:K_EXECUTElnoexpr_until_semi
1067+
{
1068+
PLpgSQL_stmt_dynexecute*new;
1069+
1070+
new = malloc(sizeof(PLpgSQL_stmt_dynexecute));
1071+
new->cmd_type = PLPGSQL_STMT_DYNEXECUTE;
1072+
new->lineno =$2;
1073+
new->query =$3;
1074+
1075+
$$ = (PLpgSQL_stmt *)new;
1076+
}
1077+
;
1078+
10311079
execsql_start:T_WORD
10321080
{$$ = strdup(yytext); }
10331081
|T_ERROR

‎src/pl/plpgsql/src/pl_comp.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* procedural language
44
*
55
* IDENTIFICATION
6-
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.22 2000/08/03 16:34:57 tgl Exp $
6+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.23 2000/08/31 13:26:16 wieck Exp $
77
*
88
* This software is copyrighted by Jan Wieck - Hamburg.
99
*
@@ -159,8 +159,8 @@ plpgsql_compile(Oid fn_oid, int functype)
159159

160160
function->fn_functype=functype;
161161
function->fn_oid=fn_oid;
162-
function->fn_name=DatumGetCString(DirectFunctionCall1(nameout,
163-
NameGetDatum(&(procStruct->proname))));
162+
function->fn_name=strdup(DatumGetCString(DirectFunctionCall1(nameout,
163+
NameGetDatum(&(procStruct->proname)))));
164164

165165
switch (functype)
166166
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp