Commit ccecf1fa authored by Jan Wieck's avatar Jan Wieck

Added utils/adt/ri_triggers with empty shells for the

FOREIGN KEY triggers.

Added pg_proc entries for all the new functions.

Jan
parent daaeafd9
...@@ -155,7 +155,8 @@ CreateTrigger(CreateTrigStmt *stmt) ...@@ -155,7 +155,8 @@ CreateTrigger(CreateTrigStmt *stmt)
if (((Form_pg_proc) GETSTRUCT(tuple))->prorettype != 0) if (((Form_pg_proc) GETSTRUCT(tuple))->prorettype != 0)
elog(ERROR, "CreateTrigger: function %s() must return OPAQUE", elog(ERROR, "CreateTrigger: function %s() must return OPAQUE",
stmt->funcname); stmt->funcname);
if (((Form_pg_proc) GETSTRUCT(tuple))->prolang != ClanguageId) if (((Form_pg_proc) GETSTRUCT(tuple))->prolang != ClanguageId &&
((Form_pg_proc) GETSTRUCT(tuple))->prolang != INTERNALlanguageId)
{ {
HeapTuple langTup; HeapTuple langTup;
...@@ -166,7 +167,7 @@ CreateTrigger(CreateTrigStmt *stmt) ...@@ -166,7 +167,7 @@ CreateTrigger(CreateTrigStmt *stmt)
elog(ERROR, "CreateTrigger: cache lookup for PL failed"); elog(ERROR, "CreateTrigger: cache lookup for PL failed");
if (((Form_pg_language) GETSTRUCT(langTup))->lanispl == false) if (((Form_pg_language) GETSTRUCT(langTup))->lanispl == false)
elog(ERROR, "CreateTrigger: only C and PL functions are supported"); elog(ERROR, "CreateTrigger: only builtin, C and PL functions are supported");
} }
MemSet(nulls, ' ', Natts_pg_trigger * sizeof(char)); MemSet(nulls, ' ', Natts_pg_trigger * sizeof(char));
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Makefile for utils/adt # Makefile for utils/adt
# #
# IDENTIFICATION # IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.25 1999/07/22 18:30:08 momjian Exp $ # $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.26 1999/09/30 14:54:22 wieck Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -34,7 +34,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \ ...@@ -34,7 +34,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \
oid.o oracle_compat.o \ oid.o oracle_compat.o \
regexp.o regproc.o ruleutils.o selfuncs.o sets.o \ regexp.o regproc.o ruleutils.o selfuncs.o sets.o \
tid.o timestamp.o varchar.o varlena.o version.o \ tid.o timestamp.o varchar.o varlena.o version.o \
network.o mac.o inet_net_ntop.o inet_net_pton.o network.o mac.o inet_net_ntop.o inet_net_pton.o \
ri_triggers.o
all: SUBSYS.o all: SUBSYS.o
......
/* ----------
* ri_triggers.c
*
* Generic trigger procedures for referential integrity constraint
* checks.
*
* 1999 Jan Wieck
*
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.1 1999/09/30 14:54:22 wieck Exp $
*
* ----------
*/
#include "postgres.h"
#include "fmgr.h"
#include "access/heapam.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
#include "commands/trigger.h"
#include "executor/spi.h"
#include "utils/builtins.h"
#include "utils/syscache.h"
/* ----------
* RI_FKey_check_ins -
*
* Check foreign key existance at insert event on FK table.
* ----------
*/
HeapTuple
RI_FKey_check_ins (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_check_ins() called\n");
return NULL;
}
/* ----------
* RI_FKey_check_upd -
*
* Check foreign key existance at update event on FK table.
* ----------
*/
HeapTuple
RI_FKey_check_upd (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_check_upd() called\n");
return NULL;
}
/* ----------
* RI_FKey_cascade_del -
*
* Cascaded delete foreign key references at delete event on PK table.
* ----------
*/
HeapTuple
RI_FKey_cascade_del (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_cascade_del() called\n");
return NULL;
}
/* ----------
* RI_FKey_cascade_upd -
*
* Cascaded update/delete foreign key references at update event on PK table.
* ----------
*/
HeapTuple
RI_FKey_cascade_upd (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_cascade_upd() called\n");
return NULL;
}
/* ----------
* RI_FKey_restrict_del -
*
* Restrict delete from PK table to rows unreferenced by foreign key.
* ----------
*/
HeapTuple
RI_FKey_restrict_del (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_restrict_del() called\n");
return NULL;
}
/* ----------
* RI_FKey_restrict_upd -
*
* Restrict update of PK to rows unreferenced by foreign key.
* ----------
*/
HeapTuple
RI_FKey_restrict_upd (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_restrict_upd() called\n");
return NULL;
}
/* ----------
* RI_FKey_setnull_del -
*
* Set foreign key references to NULL values at delete event on PK table.
* ----------
*/
HeapTuple
RI_FKey_setnull_del (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_setnull_del() called\n");
return NULL;
}
/* ----------
* RI_FKey_setnull_upd -
*
* Set foreign key references to NULL at update event on PK table.
* ----------
*/
HeapTuple
RI_FKey_setnull_upd (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_setnull_upd() called\n");
return NULL;
}
/* ----------
* RI_FKey_setdefault_del -
*
* Set foreign key references to defaults at delete event on PK table.
* ----------
*/
HeapTuple
RI_FKey_setdefault_del (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_setdefault_del() called\n");
return NULL;
}
/* ----------
* RI_FKey_setdefault_upd -
*
* Set foreign key references to defaults at update event on PK table.
* ----------
*/
HeapTuple
RI_FKey_setdefault_upd (FmgrInfo *proinfo)
{
CurrentTriggerData = NULL;
elog(NOTICE, "RI_FKey_setdefault_upd() called\n");
return NULL;
}
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_proc.h,v 1.103 1999/09/29 21:13:30 wieck Exp $ * $Id: pg_proc.h,v 1.104 1999/09/30 14:54:23 wieck Exp $
* *
* NOTES * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
...@@ -2112,6 +2112,28 @@ DESCR("user name by UID (with fallback)"); ...@@ -2112,6 +2112,28 @@ DESCR("user name by UID (with fallback)");
DATA(insert OID = 1643 ( pg_get_indexdef PGUID 11 f t f 1 f 25 "26" 100 0 0 100 pg_get_indexdef - )); DATA(insert OID = 1643 ( pg_get_indexdef PGUID 11 f t f 1 f 25 "26" 100 0 0 100 pg_get_indexdef - ));
DESCR("index description"); DESCR("index description");
/* Generic referential integrity constraint triggers */
DATA(insert OID = 1644 ( RI_FKey_check_ins PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_check_ins - ));
DESCR("referential integrity FOREIGN KEY ... REFERENCES");
DATA(insert OID = 1645 ( RI_FKey_check_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_check_upd - ));
DESCR("referential integrity FOREIGN KEY ... REFERENCES");
DATA(insert OID = 1646 ( RI_FKey_cascade_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_cascade_del - ));
DESCR("referential integrity ON DELETE CASCADE");
DATA(insert OID = 1647 ( RI_FKey_cascade_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_cascade_upd - ));
DESCR("referential integrity ON UPDATE CASCADE");
DATA(insert OID = 1648 ( RI_FKey_restrict_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_restrict_del - ));
DESCR("referential integrity ON DELETE RESTRICT");
DATA(insert OID = 1649 ( RI_FKey_restrict_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_restrict_upd - ));
DESCR("referential integrity ON UPDATE RESTRICT");
DATA(insert OID = 1650 ( RI_FKey_setnull_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setnull_del - ));
DESCR("referential integrity ON DELETE SET NULL");
DATA(insert OID = 1651 ( RI_FKey_setnull_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setnull_upd - ));
DESCR("referential integrity ON UPDATE SET NULL");
DATA(insert OID = 1652 ( RI_FKey_setdefault_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_del - ));
DESCR("referential integrity ON DELETE SET DEFAULT");
DATA(insert OID = 1653 ( RI_FKey_setdefault_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_upd - ));
DESCR("referential integrity ON UPDATE SET DEFAULT");
/* for mac type support */ /* for mac type support */
DATA(insert OID = 436 ( macaddr_in PGUID 11 f t t 1 f 829 "0" 100 0 0 100 macaddr_in - )); DATA(insert OID = 436 ( macaddr_in PGUID 11 f t t 1 f 829 "0" 100 0 0 100 macaddr_in - ));
DESCR("(internal)"); DESCR("(internal)");
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: builtins.h,v 1.86 1999/09/29 21:13:31 wieck Exp $ * $Id: builtins.h,v 1.87 1999/09/30 14:54:24 wieck Exp $
* *
* NOTES * NOTES
* This should normally only be included by fmgr.h. * This should normally only be included by fmgr.h.
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "utils/int8.h" #include "utils/int8.h"
#include "utils/nabstime.h" #include "utils/nabstime.h"
#include "utils/numeric.h" #include "utils/numeric.h"
#include "access/heapam.h" /* for HeapTuple */
/* /*
* Defined in adt/ * Defined in adt/
...@@ -600,5 +601,16 @@ float32 numeric_float4(Numeric num); ...@@ -600,5 +601,16 @@ float32 numeric_float4(Numeric num);
Numeric float8_numeric(float64 val); Numeric float8_numeric(float64 val);
float64 numeric_float8(Numeric num); float64 numeric_float8(Numeric num);
/* ri_triggers.c */
HeapTuple RI_FKey_check_ins(FmgrInfo *proinfo);
HeapTuple RI_FKey_check_upd(FmgrInfo *proinfo);
HeapTuple RI_FKey_cascade_del(FmgrInfo *proinfo);
HeapTuple RI_FKey_cascade_upd(FmgrInfo *proinfo);
HeapTuple RI_FKey_restrict_del(FmgrInfo *proinfo);
HeapTuple RI_FKey_restrict_upd(FmgrInfo *proinfo);
HeapTuple RI_FKey_setnull_del(FmgrInfo *proinfo);
HeapTuple RI_FKey_setnull_upd(FmgrInfo *proinfo);
HeapTuple RI_FKey_setdefault_del(FmgrInfo *proinfo);
HeapTuple RI_FKey_setdefault_upd(FmgrInfo *proinfo);
#endif /* BUILTINS_H */ #endif /* BUILTINS_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment