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

Commit22b118b

Browse files
committed
TG_table_name and TG_table_schema for pl/tcl, plus regression test and docs.
1 parent4627a8f commit22b118b

File tree

6 files changed

+158
-3
lines changed

6 files changed

+158
-3
lines changed

‎doc/src/sgml/pltcl.sgml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $PostgreSQL: pgsql/doc/src/sgml/pltcl.sgml,v 2.39 2006/03/10 19:10:48 momjian Exp $ -->
1+
<!-- $PostgreSQL: pgsql/doc/src/sgml/pltcl.sgml,v 2.40 2006/05/27 20:24:16 adunstan Exp $ -->
22

33
<chapter id="pltcl">
44
<title>PL/Tcl - Tcl Procedural Language</title>
@@ -527,6 +527,26 @@ SELECT 'doesn''t' AS ret
527527
</listitem>
528528
</varlistentry>
529529

530+
<varlistentry>
531+
<term><varname>$TG_table_name</varname></term>
532+
<listitem>
533+
<para>
534+
The name of the table that caused the trigger procedure
535+
to be invoked.
536+
</para>
537+
</listitem>
538+
</varlistentry>
539+
540+
<varlistentry>
541+
<term><varname>$TG_table_schema</varname></term>
542+
<listitem>
543+
<para>
544+
The schema of the table that caused the trigger procedure
545+
to be invoked.
546+
</para>
547+
</listitem>
548+
</varlistentry>
549+
530550
<varlistentry>
531551
<term><varname>$TG_relatts</varname></term>
532552
<listitem>

‎src/pl/tcl/expected/pltcl_queries.out

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,41 @@ select * from T_pkey2 order by key1 using @<, key2;
183183
2 | KEY2-9 | test key
184184
(4 rows)
185185

186+
-- show dump of trigger data
187+
insert into trigger_test values(1,'insert');
188+
NOTICE: NEW: {i: 1, v: insert}
189+
NOTICE: OLD: {}
190+
NOTICE: TG_level: ROW
191+
NOTICE: TG_name: show_trigger_data_trig
192+
NOTICE: TG_op: INSERT
193+
NOTICE: TG_relatts: {{} i v}
194+
NOTICE: TG_relid: bogus:12345
195+
NOTICE: TG_table_name: trigger_test
196+
NOTICE: TG_table_schema: public
197+
NOTICE: TG_when: BEFORE
198+
NOTICE: args: {23 skidoo}
199+
update trigger_test set v = 'update' where i = 1;
200+
NOTICE: NEW: {i: 1, v: update}
201+
NOTICE: OLD: {i: 1, v: insert}
202+
NOTICE: TG_level: ROW
203+
NOTICE: TG_name: show_trigger_data_trig
204+
NOTICE: TG_op: UPDATE
205+
NOTICE: TG_relatts: {{} i v}
206+
NOTICE: TG_relid: bogus:12345
207+
NOTICE: TG_table_name: trigger_test
208+
NOTICE: TG_table_schema: public
209+
NOTICE: TG_when: BEFORE
210+
NOTICE: args: {23 skidoo}
211+
delete from trigger_test;
212+
NOTICE: NEW: {}
213+
NOTICE: OLD: {i: 1, v: update}
214+
NOTICE: TG_level: ROW
215+
NOTICE: TG_name: show_trigger_data_trig
216+
NOTICE: TG_op: DELETE
217+
NOTICE: TG_relatts: {{} i v}
218+
NOTICE: TG_relid: bogus:12345
219+
NOTICE: TG_table_name: trigger_test
220+
NOTICE: TG_table_schema: public
221+
NOTICE: TG_when: BEFORE
222+
NOTICE: args: {23 skidoo}
223+

‎src/pl/tcl/expected/pltcl_setup.out

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,43 @@ create function check_pkey1_exists(int4, bpchar) returns bool as E'
5353
}
5454
return "f"
5555
' language pltcl;
56+
-- dump trigger data
57+
CREATE TABLE trigger_test
58+
(i int, v text );
59+
CREATE FUNCTION trigger_data() returns trigger language pltcl as $_$
60+
61+
if { [info exists TG_relid] } {
62+
set TG_relid "bogus:12345"
63+
}
64+
65+
set dnames [info locals {[a-zA-Z]*} ]
66+
67+
foreach key [lsort $dnames] {
68+
69+
if { [array exists $key] } {
70+
set str "{"
71+
foreach akey [lsort [ array names $key ] ] {
72+
if {[string length $str] > 1} { set str "$str, " }
73+
set cmd "($akey)"
74+
set cmd "set val \$$key$cmd"
75+
eval $cmd
76+
set str "$str$akey: $val"
77+
}
78+
set str "$str}"
79+
elog NOTICE "$key: $str"
80+
} else {
81+
set val [eval list "\$$key" ]
82+
elog NOTICE "$key: $val"
83+
}
84+
}
85+
86+
87+
return OK
88+
89+
$_$;
90+
CREATE TRIGGER show_trigger_data_trig
91+
BEFORE INSERT OR UPDATE OR DELETE ON trigger_test
92+
FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
5693
--
5794
-- Trigger function on every change to T_pkey1
5895
--

‎src/pl/tcl/pltcl.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* pltcl.c- PostgreSQL support for Tcl as
33
* procedural language (PL)
44
*
5-
* $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.102 2006/04/04 19:35:37 tgl Exp $
5+
* $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.103 2006/05/27 20:24:16 adunstan Exp $
66
*
77
**********************************************************************/
88

@@ -657,6 +657,16 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS)
657657
Tcl_DStringAppendElement(&tcl_cmd,stroid);
658658
pfree(stroid);
659659

660+
/* The name of the table the trigger is acting on: TG_table_name */
661+
stroid=SPI_getrelname(trigdata->tg_relation);
662+
Tcl_DStringAppendElement(&tcl_cmd,stroid);
663+
pfree(stroid);
664+
665+
/* The schema of the table the trigger is acting on: TG_table_schema */
666+
stroid=SPI_getnspname(trigdata->tg_relation);
667+
Tcl_DStringAppendElement(&tcl_cmd,stroid);
668+
pfree(stroid);
669+
660670
/* A list of attribute names for argument TG_relatts */
661671
Tcl_DStringAppendElement(&tcl_trigtup,"");
662672
for (i=0;i<tupdesc->natts;i++)
@@ -1142,7 +1152,7 @@ compile_pltcl_function(Oid fn_oid, Oid tgreloid)
11421152
{
11431153
/* trigger procedure has fixed args */
11441154
strcpy(proc_internal_args,
1145-
"TG_name TG_relid TG_relatts TG_when TG_level TG_op __PLTcl_Tup_NEW __PLTcl_Tup_OLD args");
1155+
"TG_name TG_relidTG_table_name TG_table_schemaTG_relatts TG_when TG_level TG_op __PLTcl_Tup_NEW __PLTcl_Tup_OLD args");
11461156
}
11471157

11481158
/************************************************************

‎src/pl/tcl/sql/pltcl_queries.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,11 @@ select 100 @< 4;
7373
select*from T_pkey1order by key1 using @<, key2;
7474
select*from T_pkey2order by key1 using @<, key2;
7575

76+
77+
-- show dump of trigger data
78+
insert into trigger_testvalues(1,'insert');
79+
update trigger_testset v='update'where i=1;
80+
deletefrom trigger_test;
81+
82+
83+

‎src/pl/tcl/sql/pltcl_setup.sql

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,48 @@ create function check_pkey1_exists(int4, bpchar) returns bool as E'
6161
' language pltcl;
6262

6363

64+
-- dump trigger data
65+
66+
CREATETABLEtrigger_test
67+
(iint, vtext );
68+
69+
CREATEFUNCTIONtrigger_data() returns trigger language pltclas $_$
70+
71+
if { [info exists TG_relid] } {
72+
set TG_relid"bogus:12345"
73+
}
74+
75+
set dnames [info locals {[a-zA-Z]*} ]
76+
77+
foreach key [lsort $dnames] {
78+
79+
if { [array exists $key] } {
80+
set str"{"
81+
foreach akey [lsort [ array names $key ] ] {
82+
if {[string length $str]>1} {set str"$str," }
83+
set cmd"($akey)"
84+
set cmd"set val \$$key$cmd"
85+
eval $cmd
86+
set str"$str$akey: $val"
87+
}
88+
set str"$str}"
89+
elog NOTICE"$key: $str"
90+
} else {
91+
set val [eval list"\$$key" ]
92+
elog NOTICE"$key: $val"
93+
}
94+
}
95+
96+
97+
return OK
98+
99+
$_$;
100+
101+
CREATETRIGGERshow_trigger_data_trig
102+
BEFORE INSERTORUPDATEORDELETEON trigger_test
103+
FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
104+
105+
64106
--
65107
-- Trigger function on every change to T_pkey1
66108
--

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp