Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression to be
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 20 Nov 2009 20:38:12 +0000 (20:38 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 20 Nov 2009 20:38:12 +0000 (20:38 +0000)
commit7fc0f06221d22632daa3ff8b70919b43e8a242ca
treea2ec73a6256c30ba9cb2d4723868978c5136ba5e
parent201a45c4fa23c485cf2e14ac9db8064b2c559fdc
Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression to be
checked to determine whether the trigger should be fired.

For BEFORE triggers this is mostly a matter of spec compliance; but for AFTER
triggers it can provide a noticeable performance improvement, since queuing of
a deferred trigger event and re-fetching of the row(s) at end of statement can
be short-circuited if the trigger does not need to be fired.

Takahiro Itagaki, reviewed by KaiGai Kohei.
27 files changed:
doc/src/sgml/catalogs.sgml
doc/src/sgml/ref/create_constraint.sgml
doc/src/sgml/ref/create_trigger.sgml
doc/src/sgml/trigger.sgml
src/backend/catalog/index.c
src/backend/commands/copy.c
src/backend/commands/tablecmds.c
src/backend/commands/trigger.c
src/backend/executor/execMain.c
src/backend/executor/execQual.c
src/backend/executor/execUtils.c
src/backend/executor/nodeModifyTable.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/parser/gram.y
src/backend/tcop/utility.c
src/backend/utils/adt/ruleutils.c
src/bin/pg_dump/pg_dump.c
src/include/catalog/catversion.h
src/include/catalog/pg_trigger.h
src/include/catalog/toasting.h
src/include/commands/trigger.h
src/include/nodes/execnodes.h
src/include/nodes/parsenodes.h
src/include/utils/rel.h
src/test/regress/expected/triggers.out
src/test/regress/sql/triggers.sql