MCPcopy Create free account
hub / github.com/apache/cloudberry / createForeignKeyActionTriggers

Function createForeignKeyActionTriggers

src/backend/commands/tablecmds.c:13320–13446  ·  view source on GitHub ↗

* createForeignKeyActionTriggers * Create the referenced-side "action" triggers that implement a foreign * key. */

Source from the content-addressed store, hash-verified

13318 * key.
13319 */
13320static void
13321createForeignKeyActionTriggers(Relation rel, Oid refRelOid, Constraint *fkconstraint,
13322 Oid constraintOid, Oid indexOid)
13323{
13324 CreateTrigStmt *fk_trigger;
13325
13326 /*
13327 * Special for Apache Cloudberry: Ignore foreign keys for now, with warning
13328 */
13329 if (Gp_role == GP_ROLE_DISPATCH || Gp_role == GP_ROLE_UTILITY)
13330 {
13331 ereport(WARNING,
13332 (errcode(ERRCODE_INVALID_TABLE_DEFINITION),
13333 errmsg("referential integrity (FOREIGN KEY) constraints are not supported in Apache Cloudberry, will not be enforced")));
13334 }
13335
13336 /*
13337 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the ON
13338 * DELETE action on the referenced table.
13339 */
13340 fk_trigger = makeNode(CreateTrigStmt);
13341 fk_trigger->replace = false;
13342 fk_trigger->isconstraint = true;
13343 fk_trigger->trigname = "RI_ConstraintTrigger_a";
13344 fk_trigger->relation = NULL;
13345 fk_trigger->args = NIL;
13346 fk_trigger->row = true;
13347 fk_trigger->timing = TRIGGER_TYPE_AFTER;
13348 fk_trigger->events = TRIGGER_TYPE_DELETE;
13349 fk_trigger->columns = NIL;
13350 fk_trigger->whenClause = NULL;
13351 fk_trigger->transitionRels = NIL;
13352 fk_trigger->constrrel = NULL;
13353 switch (fkconstraint->fk_del_action)
13354 {
13355 case FKCONSTR_ACTION_NOACTION:
13356 fk_trigger->deferrable = fkconstraint->deferrable;
13357 fk_trigger->initdeferred = fkconstraint->initdeferred;
13358 fk_trigger->funcname = SystemFuncName("RI_FKey_noaction_del");
13359 break;
13360 case FKCONSTR_ACTION_RESTRICT:
13361 fk_trigger->deferrable = false;
13362 fk_trigger->initdeferred = false;
13363 fk_trigger->funcname = SystemFuncName("RI_FKey_restrict_del");
13364 break;
13365 case FKCONSTR_ACTION_CASCADE:
13366 fk_trigger->deferrable = false;
13367 fk_trigger->initdeferred = false;
13368 fk_trigger->funcname = SystemFuncName("RI_FKey_cascade_del");
13369 break;
13370 case FKCONSTR_ACTION_SETNULL:
13371 fk_trigger->deferrable = false;
13372 fk_trigger->initdeferred = false;
13373 fk_trigger->funcname = SystemFuncName("RI_FKey_setnull_del");
13374 break;
13375 case FKCONSTR_ACTION_SETDEFAULT:
13376 fk_trigger->deferrable = false;
13377 fk_trigger->initdeferred = false;

Callers 2

addFkRecurseReferencedFunction · 0.85
DetachPartitionFinalizeFunction · 0.85

Calls 4

CreateTriggerFunction · 0.85
CommandCounterIncrementFunction · 0.85
errcodeFunction · 0.50
errmsgFunction · 0.50

Tested by

no test coverage detected