@ -151,6 +151,24 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
Oid relOid , Oid refRelOid , Oid constraintOid , Oid indexOid ,
Oid relOid , Oid refRelOid , Oid constraintOid , Oid indexOid ,
Oid funcoid , Oid parentTriggerOid , Node * whenClause ,
Oid funcoid , Oid parentTriggerOid , Node * whenClause ,
bool isInternal , bool in_partition )
bool isInternal , bool in_partition )
{
return
CreateTriggerFiringOn ( stmt , queryString , relOid , refRelOid ,
constraintOid , indexOid , funcoid ,
parentTriggerOid , whenClause , isInternal ,
in_partition , TRIGGER_FIRES_ON_ORIGIN ) ;
}
/*
* Like the above ; additionally the firing condition
* ( always / origin / replica / disabled ) can be specified .
*/
ObjectAddress
CreateTriggerFiringOn ( CreateTrigStmt * stmt , const char * queryString ,
Oid relOid , Oid refRelOid , Oid constraintOid ,
Oid indexOid , Oid funcoid , Oid parentTriggerOid ,
Node * whenClause , bool isInternal , bool in_partition ,
char trigger_fires_when )
{
{
int16 tgtype ;
int16 tgtype ;
int ncolumns ;
int ncolumns ;
@ -848,7 +866,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
CStringGetDatum ( trigname ) ) ;
CStringGetDatum ( trigname ) ) ;
values [ Anum_pg_trigger_tgfoid - 1 ] = ObjectIdGetDatum ( funcoid ) ;
values [ Anum_pg_trigger_tgfoid - 1 ] = ObjectIdGetDatum ( funcoid ) ;
values [ Anum_pg_trigger_tgtype - 1 ] = Int16GetDatum ( tgtype ) ;
values [ Anum_pg_trigger_tgtype - 1 ] = Int16GetDatum ( tgtype ) ;
values [ Anum_pg_trigger_tgenabled - 1 ] = CharGetDatum ( TRIGGER_FIRES_ON_ORIGIN ) ;
values [ Anum_pg_trigger_tgenabled - 1 ] = trigger_fires_when ;
values [ Anum_pg_trigger_tgisinternal - 1 ] = BoolGetDatum ( isInternal | | in_partition ) ;
values [ Anum_pg_trigger_tgisinternal - 1 ] = BoolGetDatum ( isInternal | | in_partition ) ;
values [ Anum_pg_trigger_tgconstrrelid - 1 ] = ObjectIdGetDatum ( constrrelid ) ;
values [ Anum_pg_trigger_tgconstrrelid - 1 ] = ObjectIdGetDatum ( constrrelid ) ;
values [ Anum_pg_trigger_tgconstrindid - 1 ] = ObjectIdGetDatum ( indexOid ) ;
values [ Anum_pg_trigger_tgconstrindid - 1 ] = ObjectIdGetDatum ( indexOid ) ;
@ -1195,11 +1213,11 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
map_partition_varattnos ( ( List * ) qual , PRS2_NEW_VARNO ,
map_partition_varattnos ( ( List * ) qual , PRS2_NEW_VARNO ,
childTbl , rel ) ;
childTbl , rel ) ;
CreateTrigger ( childStmt , queryString ,
CreateTriggerFiringOn ( childStmt , queryString ,
partdesc - > oids [ i ] , refRelOid ,
partdesc - > oids [ i ] , refRelOid ,
InvalidOid , indexOnChild ,
InvalidOid , indexOnChild ,
funcoid , trigoid , qual ,
funcoid , trigoid , qual ,
isInternal , true ) ;
isInternal , true , trigger_fires_when ) ;
table_close ( childTbl , NoLock ) ;
table_close ( childTbl , NoLock ) ;