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

Commite627dd2

Browse files
committed
Fix pltcl and plpython to support STATEMENT triggers.
Joe Conway
1 parente8e1d45 commite627dd2

File tree

2 files changed

+125
-86
lines changed

2 files changed

+125
-86
lines changed

‎src/pl/plpython/plpython.c

Lines changed: 74 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
3030
*
3131
* IDENTIFICATION
32-
*$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.38 2003/08/0401:57:58 tgl Exp $
32+
*$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.39 2003/08/0418:40:50 tgl Exp $
3333
*
3434
*********************************************************************
3535
*/
@@ -651,68 +651,96 @@ PLy_trigger_build_args(FunctionCallInfo fcinfo, PLyProcedure * proc, HeapTuple *
651651
Py_DECREF(pltrelid);
652652
pfree(stroid);
653653

654-
655-
656654
if (TRIGGER_FIRED_BEFORE(tdata->tg_event))
657655
pltwhen=PyString_FromString("BEFORE");
658656
elseif (TRIGGER_FIRED_AFTER(tdata->tg_event))
659657
pltwhen=PyString_FromString("AFTER");
660658
else
661-
pltwhen=PyString_FromString("UNKNOWN");
659+
{
660+
elog(ERROR,"unrecognized WHEN tg_event: %u",tdata->tg_event);
661+
pltwhen=NULL;/* keep compiler quiet */
662+
}
662663
PyDict_SetItemString(pltdata,"when",pltwhen);
663664
Py_DECREF(pltwhen);
664665

665666
if (TRIGGER_FIRED_FOR_ROW(tdata->tg_event))
667+
{
666668
pltlevel=PyString_FromString("ROW");
669+
PyDict_SetItemString(pltdata,"level",pltlevel);
670+
Py_DECREF(pltlevel);
671+
672+
if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event))
673+
{
674+
pltevent=PyString_FromString("INSERT");
675+
676+
PyDict_SetItemString(pltdata,"old",Py_None);
677+
pytnew=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
678+
tdata->tg_relation->rd_att);
679+
PyDict_SetItemString(pltdata,"new",pytnew);
680+
Py_DECREF(pytnew);
681+
*rv=tdata->tg_trigtuple;
682+
}
683+
elseif (TRIGGER_FIRED_BY_DELETE(tdata->tg_event))
684+
{
685+
pltevent=PyString_FromString("DELETE");
686+
687+
PyDict_SetItemString(pltdata,"new",Py_None);
688+
pytold=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
689+
tdata->tg_relation->rd_att);
690+
PyDict_SetItemString(pltdata,"old",pytold);
691+
Py_DECREF(pytold);
692+
*rv=tdata->tg_trigtuple;
693+
}
694+
elseif (TRIGGER_FIRED_BY_UPDATE(tdata->tg_event))
695+
{
696+
pltevent=PyString_FromString("UPDATE");
697+
698+
pytnew=PLyDict_FromTuple(&(proc->result),tdata->tg_newtuple,
699+
tdata->tg_relation->rd_att);
700+
PyDict_SetItemString(pltdata,"new",pytnew);
701+
Py_DECREF(pytnew);
702+
pytold=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
703+
tdata->tg_relation->rd_att);
704+
PyDict_SetItemString(pltdata,"old",pytold);
705+
Py_DECREF(pytold);
706+
*rv=tdata->tg_newtuple;
707+
}
708+
else
709+
{
710+
elog(ERROR,"unrecognized OP tg_event: %u",tdata->tg_event);
711+
pltevent=NULL;/* keep compiler quiet */
712+
}
713+
714+
PyDict_SetItemString(pltdata,"event",pltevent);
715+
Py_DECREF(pltevent);
716+
}
667717
elseif (TRIGGER_FIRED_FOR_STATEMENT(tdata->tg_event))
718+
{
668719
pltlevel=PyString_FromString("STATEMENT");
669-
else
670-
pltlevel=PyString_FromString("UNKNOWN");
671-
PyDict_SetItemString(pltdata,"level",pltlevel);
672-
Py_DECREF(pltlevel);
720+
PyDict_SetItemString(pltdata,"level",pltlevel);
721+
Py_DECREF(pltlevel);
673722

674-
if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event))
675-
{
676-
pltevent=PyString_FromString("INSERT");
677723
PyDict_SetItemString(pltdata,"old",Py_None);
678-
pytnew=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
679-
tdata->tg_relation->rd_att);
680-
PyDict_SetItemString(pltdata,"new",pytnew);
681-
Py_DECREF(pytnew);
682-
*rv=tdata->tg_trigtuple;
683-
}
684-
elseif (TRIGGER_FIRED_BY_DELETE(tdata->tg_event))
685-
{
686-
pltevent=PyString_FromString("DELETE");
687724
PyDict_SetItemString(pltdata,"new",Py_None);
688-
pytold=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
689-
tdata->tg_relation->rd_att);
690-
PyDict_SetItemString(pltdata,"old",pytold);
691-
Py_DECREF(pytold);
692-
*rv=tdata->tg_trigtuple;
693-
}
694-
elseif (TRIGGER_FIRED_BY_UPDATE(tdata->tg_event))
695-
{
696-
pltevent=PyString_FromString("UPDATE");
697-
pytnew=PLyDict_FromTuple(&(proc->result),tdata->tg_newtuple,
698-
tdata->tg_relation->rd_att);
699-
PyDict_SetItemString(pltdata,"new",pytnew);
700-
Py_DECREF(pytnew);
701-
pytold=PLyDict_FromTuple(&(proc->result),tdata->tg_trigtuple,
702-
tdata->tg_relation->rd_att);
703-
PyDict_SetItemString(pltdata,"old",pytold);
704-
Py_DECREF(pytold);
705-
*rv=tdata->tg_newtuple;
725+
*rv= (HeapTuple)NULL;
726+
727+
if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event))
728+
pltevent=PyString_FromString("INSERT");
729+
elseif (TRIGGER_FIRED_BY_DELETE(tdata->tg_event))
730+
pltevent=PyString_FromString("DELETE");
731+
elseif (TRIGGER_FIRED_BY_UPDATE(tdata->tg_event))
732+
pltevent=PyString_FromString("UPDATE");
733+
else
734+
{
735+
elog(ERROR,"unrecognized OP tg_event: %u",tdata->tg_event);
736+
pltevent=NULL;/* keep compiler quiet */
737+
}
738+
739+
PyDict_SetItemString(pltdata,"event",pltevent);
740+
Py_DECREF(pltevent);
706741
}
707742
else
708-
{
709-
pltevent=PyString_FromString("UNKNOWN");
710-
PyDict_SetItemString(pltdata,"old",Py_None);
711-
PyDict_SetItemString(pltdata,"new",Py_None);
712-
*rv=tdata->tg_trigtuple;
713-
}
714-
PyDict_SetItemString(pltdata,"event",pltevent);
715-
Py_DECREF(pltevent);
743+
elog(ERROR,"unrecognized LEVEL tg_event: %u",tdata->tg_event);
716744

717745
if (tdata->tg_trigger->tgnargs)
718746
{

‎src/pl/tcl/pltcl.c

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* ENHANCEMENTS, OR MODIFICATIONS.
3232
*
3333
* IDENTIFICATION
34-
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.74 2003/08/0400:43:33 momjian Exp $
34+
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.75 2003/08/0418:40:50 tgl Exp $
3535
*
3636
**********************************************************************/
3737

@@ -708,63 +708,74 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS)
708708
elseif (TRIGGER_FIRED_AFTER(trigdata->tg_event))
709709
Tcl_DStringAppendElement(&tcl_cmd,"AFTER");
710710
else
711-
Tcl_DStringAppendElement(&tcl_cmd,"UNKNOWN");
711+
elog(ERROR,"unrecognized WHEN tg_event: %u",trigdata->tg_event);
712712

713713
/* The level part of the event for TG_level */
714714
if (TRIGGER_FIRED_FOR_ROW(trigdata->tg_event))
715+
{
715716
Tcl_DStringAppendElement(&tcl_cmd,"ROW");
716-
elseif (TRIGGER_FIRED_FOR_STATEMENT(trigdata->tg_event))
717-
Tcl_DStringAppendElement(&tcl_cmd,"STATEMENT");
718-
else
719-
Tcl_DStringAppendElement(&tcl_cmd,"UNKNOWN");
720717

721-
/* Build the data list for the trigtuple */
722-
pltcl_build_tuple_argument(trigdata->tg_trigtuple,
723-
tupdesc,&tcl_trigtup);
718+
/* Build the data list for the trigtuple */
719+
pltcl_build_tuple_argument(trigdata->tg_trigtuple,
720+
tupdesc,&tcl_trigtup);
724721

725-
/*
726-
* Now the command part of the event for TG_op and data for NEW and
727-
* OLD
728-
*/
729-
if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event))
730-
{
731-
Tcl_DStringAppendElement(&tcl_cmd,"INSERT");
722+
/*
723+
* Now the command part of the event for TG_op and data for NEW and
724+
* OLD
725+
*/
726+
if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event))
727+
{
728+
Tcl_DStringAppendElement(&tcl_cmd,"INSERT");
732729

733-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
734-
Tcl_DStringAppendElement(&tcl_cmd,"");
730+
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
731+
Tcl_DStringAppendElement(&tcl_cmd,"");
735732

736-
rettup=trigdata->tg_trigtuple;
737-
}
738-
elseif (TRIGGER_FIRED_BY_DELETE(trigdata->tg_event))
739-
{
740-
Tcl_DStringAppendElement(&tcl_cmd,"DELETE");
733+
rettup=trigdata->tg_trigtuple;
734+
}
735+
elseif (TRIGGER_FIRED_BY_DELETE(trigdata->tg_event))
736+
{
737+
Tcl_DStringAppendElement(&tcl_cmd,"DELETE");
741738

742-
Tcl_DStringAppendElement(&tcl_cmd,"");
743-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
739+
Tcl_DStringAppendElement(&tcl_cmd,"");
740+
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
744741

745-
rettup=trigdata->tg_trigtuple;
746-
}
747-
elseif (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
748-
{
749-
Tcl_DStringAppendElement(&tcl_cmd,"UPDATE");
742+
rettup=trigdata->tg_trigtuple;
743+
}
744+
elseif (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
745+
{
746+
Tcl_DStringAppendElement(&tcl_cmd,"UPDATE");
750747

751-
pltcl_build_tuple_argument(trigdata->tg_newtuple,
752-
tupdesc,&tcl_newtup);
748+
pltcl_build_tuple_argument(trigdata->tg_newtuple,
749+
tupdesc,&tcl_newtup);
753750

754-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_newtup));
755-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
751+
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_newtup));
752+
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
756753

757-
rettup=trigdata->tg_newtuple;
754+
rettup=trigdata->tg_newtuple;
755+
}
756+
else
757+
elog(ERROR,"unrecognized OP tg_event: %u",trigdata->tg_event);
758758
}
759-
else
759+
elseif (TRIGGER_FIRED_FOR_STATEMENT(trigdata->tg_event))
760760
{
761-
Tcl_DStringAppendElement(&tcl_cmd,"UNKNOWN");
761+
Tcl_DStringAppendElement(&tcl_cmd,"STATEMENT");
762+
763+
if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event))
764+
Tcl_DStringAppendElement(&tcl_cmd,"INSERT");
765+
elseif (TRIGGER_FIRED_BY_DELETE(trigdata->tg_event))
766+
Tcl_DStringAppendElement(&tcl_cmd,"DELETE");
767+
elseif (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
768+
Tcl_DStringAppendElement(&tcl_cmd,"UPDATE");
769+
else
770+
elog(ERROR,"unrecognized OP tg_event: %u",trigdata->tg_event);
762771

763-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
764-
Tcl_DStringAppendElement(&tcl_cmd,Tcl_DStringValue(&tcl_trigtup));
772+
Tcl_DStringAppendElement(&tcl_cmd,"");
773+
Tcl_DStringAppendElement(&tcl_cmd,"");
765774

766-
rettup=trigdata->tg_trigtuple;
775+
rettup=(HeapTuple)NULL;
767776
}
777+
else
778+
elog(ERROR,"unrecognized LEVEL tg_event: %u",trigdata->tg_event);
768779

769780
memcpy(&Warn_restart,&save_restart,sizeof(Warn_restart));
770781
Tcl_DStringFree(&tcl_trigtup);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp