Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
e627dd2d
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e627dd2d
编写于
8月 04, 2003
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix pltcl and plpython to support STATEMENT triggers.
Joe Conway
上级
e8e1d455
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
125 addition
and
86 deletion
+125
-86
src/pl/plpython/plpython.c
src/pl/plpython/plpython.c
+74
-46
src/pl/tcl/pltcl.c
src/pl/tcl/pltcl.c
+51
-40
未找到文件。
src/pl/plpython/plpython.c
浏览文件 @
e627dd2d
...
...
@@ -29,7 +29,7 @@
* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.3
8 2003/08/04 01:57:58
tgl Exp $
* $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.3
9 2003/08/04 18:40:50
tgl Exp $
*
*********************************************************************
*/
...
...
@@ -651,68 +651,96 @@ PLy_trigger_build_args(FunctionCallInfo fcinfo, PLyProcedure * proc, HeapTuple *
Py_DECREF
(
pltrelid
);
pfree
(
stroid
);
if
(
TRIGGER_FIRED_BEFORE
(
tdata
->
tg_event
))
pltwhen
=
PyString_FromString
(
"BEFORE"
);
else
if
(
TRIGGER_FIRED_AFTER
(
tdata
->
tg_event
))
pltwhen
=
PyString_FromString
(
"AFTER"
);
else
pltwhen
=
PyString_FromString
(
"UNKNOWN"
);
{
elog
(
ERROR
,
"unrecognized WHEN tg_event: %u"
,
tdata
->
tg_event
);
pltwhen
=
NULL
;
/* keep compiler quiet */
}
PyDict_SetItemString
(
pltdata
,
"when"
,
pltwhen
);
Py_DECREF
(
pltwhen
);
if
(
TRIGGER_FIRED_FOR_ROW
(
tdata
->
tg_event
))
{
pltlevel
=
PyString_FromString
(
"ROW"
);
PyDict_SetItemString
(
pltdata
,
"level"
,
pltlevel
);
Py_DECREF
(
pltlevel
);
if
(
TRIGGER_FIRED_BY_INSERT
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"INSERT"
);
PyDict_SetItemString
(
pltdata
,
"old"
,
Py_None
);
pytnew
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"new"
,
pytnew
);
Py_DECREF
(
pytnew
);
*
rv
=
tdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_DELETE
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"DELETE"
);
PyDict_SetItemString
(
pltdata
,
"new"
,
Py_None
);
pytold
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"old"
,
pytold
);
Py_DECREF
(
pytold
);
*
rv
=
tdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"UPDATE"
);
pytnew
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_newtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"new"
,
pytnew
);
Py_DECREF
(
pytnew
);
pytold
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"old"
,
pytold
);
Py_DECREF
(
pytold
);
*
rv
=
tdata
->
tg_newtuple
;
}
else
{
elog
(
ERROR
,
"unrecognized OP tg_event: %u"
,
tdata
->
tg_event
);
pltevent
=
NULL
;
/* keep compiler quiet */
}
PyDict_SetItemString
(
pltdata
,
"event"
,
pltevent
);
Py_DECREF
(
pltevent
);
}
else
if
(
TRIGGER_FIRED_FOR_STATEMENT
(
tdata
->
tg_event
))
{
pltlevel
=
PyString_FromString
(
"STATEMENT"
);
else
pltlevel
=
PyString_FromString
(
"UNKNOWN"
);
PyDict_SetItemString
(
pltdata
,
"level"
,
pltlevel
);
Py_DECREF
(
pltlevel
);
PyDict_SetItemString
(
pltdata
,
"level"
,
pltlevel
);
Py_DECREF
(
pltlevel
);
if
(
TRIGGER_FIRED_BY_INSERT
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"INSERT"
);
PyDict_SetItemString
(
pltdata
,
"old"
,
Py_None
);
pytnew
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"new"
,
pytnew
);
Py_DECREF
(
pytnew
);
*
rv
=
tdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_DELETE
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"DELETE"
);
PyDict_SetItemString
(
pltdata
,
"new"
,
Py_None
);
pytold
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"old"
,
pytold
);
Py_DECREF
(
pytold
);
*
rv
=
tdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
tdata
->
tg_event
))
{
pltevent
=
PyString_FromString
(
"UPDATE"
);
pytnew
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_newtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"new"
,
pytnew
);
Py_DECREF
(
pytnew
);
pytold
=
PLyDict_FromTuple
(
&
(
proc
->
result
),
tdata
->
tg_trigtuple
,
tdata
->
tg_relation
->
rd_att
);
PyDict_SetItemString
(
pltdata
,
"old"
,
pytold
);
Py_DECREF
(
pytold
);
*
rv
=
tdata
->
tg_newtuple
;
*
rv
=
(
HeapTuple
)
NULL
;
if
(
TRIGGER_FIRED_BY_INSERT
(
tdata
->
tg_event
))
pltevent
=
PyString_FromString
(
"INSERT"
);
else
if
(
TRIGGER_FIRED_BY_DELETE
(
tdata
->
tg_event
))
pltevent
=
PyString_FromString
(
"DELETE"
);
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
tdata
->
tg_event
))
pltevent
=
PyString_FromString
(
"UPDATE"
);
else
{
elog
(
ERROR
,
"unrecognized OP tg_event: %u"
,
tdata
->
tg_event
);
pltevent
=
NULL
;
/* keep compiler quiet */
}
PyDict_SetItemString
(
pltdata
,
"event"
,
pltevent
);
Py_DECREF
(
pltevent
);
}
else
{
pltevent
=
PyString_FromString
(
"UNKNOWN"
);
PyDict_SetItemString
(
pltdata
,
"old"
,
Py_None
);
PyDict_SetItemString
(
pltdata
,
"new"
,
Py_None
);
*
rv
=
tdata
->
tg_trigtuple
;
}
PyDict_SetItemString
(
pltdata
,
"event"
,
pltevent
);
Py_DECREF
(
pltevent
);
elog
(
ERROR
,
"unrecognized LEVEL tg_event: %u"
,
tdata
->
tg_event
);
if
(
tdata
->
tg_trigger
->
tgnargs
)
{
...
...
src/pl/tcl/pltcl.c
浏览文件 @
e627dd2d
...
...
@@ -31,7 +31,7 @@
* ENHANCEMENTS, OR MODIFICATIONS.
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.7
4 2003/08/04 00:43:33 momjian
Exp $
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.7
5 2003/08/04 18:40:50 tgl
Exp $
*
**********************************************************************/
...
...
@@ -708,63 +708,74 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS)
else
if
(
TRIGGER_FIRED_AFTER
(
trigdata
->
tg_event
))
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"AFTER"
);
else
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UNKNOWN"
);
elog
(
ERROR
,
"unrecognized WHEN tg_event: %u"
,
trigdata
->
tg_event
);
/* The level part of the event for TG_level */
if
(
TRIGGER_FIRED_FOR_ROW
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"ROW"
);
else
if
(
TRIGGER_FIRED_FOR_STATEMENT
(
trigdata
->
tg_event
))
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"STATEMENT"
);
else
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UNKNOWN"
);
/* Build the data list for the trigtuple */
pltcl_build_tuple_argument
(
trigdata
->
tg_trigtuple
,
tupdesc
,
&
tcl_trigtup
);
/* Build the data list for the trigtuple */
pltcl_build_tuple_argument
(
trigdata
->
tg_trigtuple
,
tupdesc
,
&
tcl_trigtup
);
/*
* Now the command part of the event for TG_op and data for NEW and
* OLD
*/
if
(
TRIGGER_FIRED_BY_INSERT
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"INSERT"
);
/*
* Now the command part of the event for TG_op and data for NEW and
* OLD
*/
if
(
TRIGGER_FIRED_BY_INSERT
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"INSERT"
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
rettup
=
trigdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_DELETE
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"DELETE"
);
rettup
=
trigdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_DELETE
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"DELETE"
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
rettup
=
trigdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UPDATE"
);
rettup
=
trigdata
->
tg_trigtuple
;
}
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UPDATE"
);
pltcl_build_tuple_argument
(
trigdata
->
tg_newtuple
,
tupdesc
,
&
tcl_newtup
);
pltcl_build_tuple_argument
(
trigdata
->
tg_newtuple
,
tupdesc
,
&
tcl_newtup
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_newtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_newtup
));
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
));
rettup
=
trigdata
->
tg_newtuple
;
rettup
=
trigdata
->
tg_newtuple
;
}
else
elog
(
ERROR
,
"unrecognized OP tg_event: %u"
,
trigdata
->
tg_event
);
}
else
else
if
(
TRIGGER_FIRED_FOR_STATEMENT
(
trigdata
->
tg_event
))
{
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UNKNOWN"
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"STATEMENT"
);
if
(
TRIGGER_FIRED_BY_INSERT
(
trigdata
->
tg_event
))
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"INSERT"
);
else
if
(
TRIGGER_FIRED_BY_DELETE
(
trigdata
->
tg_event
))
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"DELETE"
);
else
if
(
TRIGGER_FIRED_BY_UPDATE
(
trigdata
->
tg_event
))
Tcl_DStringAppendElement
(
&
tcl_cmd
,
"UPDATE"
);
else
elog
(
ERROR
,
"unrecognized OP tg_event: %u"
,
trigdata
->
tg_event
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
)
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
Tcl_DStringValue
(
&
tcl_trigtup
)
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
Tcl_DStringAppendElement
(
&
tcl_cmd
,
""
);
rettup
=
trigdata
->
tg_trigtuple
;
rettup
=
(
HeapTuple
)
NULL
;
}
else
elog
(
ERROR
,
"unrecognized LEVEL tg_event: %u"
,
trigdata
->
tg_event
);
memcpy
(
&
Warn_restart
,
&
save_restart
,
sizeof
(
Warn_restart
));
Tcl_DStringFree
(
&
tcl_trigtup
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录