66 * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
77 * Portions Copyright (c) 1994, Regents of the University of California
88 *
9- *$Id: analyze.c,v 1.137 2000/02/15 03:37:47 thomas Exp $
9+ *$Id: analyze.c,v 1.138 2000/02/29 12:28:25 wieck Exp $
1010 *
1111 *-------------------------------------------------------------------------
1212 */
@@ -1061,14 +1061,28 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
10611061fk_trigger = (CreateTrigStmt * )makeNode (CreateTrigStmt );
10621062fk_trigger -> trigname = fkconstraint -> constr_name ;
10631063fk_trigger -> relname = fkconstraint -> pktable_name ;
1064+ fk_trigger -> before = false;
1065+ fk_trigger -> row = true;
1066+ fk_trigger -> actions [0 ]= 'd' ;
1067+ fk_trigger -> actions [1 ]= '\0' ;
1068+ fk_trigger -> lang = NULL ;
1069+ fk_trigger -> text = NULL ;
1070+ fk_trigger -> attr = NIL ;
1071+ fk_trigger -> when = NULL ;
1072+ fk_trigger -> isconstraint = true;
1073+ fk_trigger -> deferrable = fkconstraint -> deferrable ;
1074+ fk_trigger -> initdeferred = fkconstraint -> initdeferred ;
1075+ fk_trigger -> constrrelname = stmt -> relname ;
10641076switch ((fkconstraint -> actions & FKCONSTR_ON_DELETE_MASK )
10651077>>FKCONSTR_ON_DELETE_SHIFT )
10661078{
10671079case FKCONSTR_ON_KEY_NOACTION :
10681080fk_trigger -> funcname = "RI_FKey_noaction_del" ;
10691081break ;
10701082case FKCONSTR_ON_KEY_RESTRICT :
1071- fk_trigger -> funcname = "RI_FKey_restrict_del" ;
1083+ fk_trigger -> deferrable = false;
1084+ fk_trigger -> initdeferred = false;
1085+ fk_trigger -> funcname = "RI_FKey_restrict_del" ;
10721086break ;
10731087case FKCONSTR_ON_KEY_CASCADE :
10741088fk_trigger -> funcname = "RI_FKey_cascade_del" ;
@@ -1083,18 +1097,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
10831097elog (ERROR ,"Only one ON DELETE action can be specified for FOREIGN KEY constraint" );
10841098break ;
10851099}
1086- fk_trigger -> before = false;
1087- fk_trigger -> row = true;
1088- fk_trigger -> actions [0 ]= 'd' ;
1089- fk_trigger -> actions [1 ]= '\0' ;
1090- fk_trigger -> lang = NULL ;
1091- fk_trigger -> text = NULL ;
1092- fk_trigger -> attr = NIL ;
1093- fk_trigger -> when = NULL ;
1094- fk_trigger -> isconstraint = true;
1095- fk_trigger -> deferrable = fkconstraint -> deferrable ;
1096- fk_trigger -> initdeferred = fkconstraint -> initdeferred ;
1097- fk_trigger -> constrrelname = stmt -> relname ;
10981100
10991101fk_trigger -> args = NIL ;
11001102fk_trigger -> args = lappend (fk_trigger -> args ,
@@ -1129,14 +1131,28 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
11291131fk_trigger = (CreateTrigStmt * )makeNode (CreateTrigStmt );
11301132fk_trigger -> trigname = fkconstraint -> constr_name ;
11311133fk_trigger -> relname = fkconstraint -> pktable_name ;
1134+ fk_trigger -> before = false;
1135+ fk_trigger -> row = true;
1136+ fk_trigger -> actions [0 ]= 'u' ;
1137+ fk_trigger -> actions [1 ]= '\0' ;
1138+ fk_trigger -> lang = NULL ;
1139+ fk_trigger -> text = NULL ;
1140+ fk_trigger -> attr = NIL ;
1141+ fk_trigger -> when = NULL ;
1142+ fk_trigger -> isconstraint = true;
1143+ fk_trigger -> deferrable = fkconstraint -> deferrable ;
1144+ fk_trigger -> initdeferred = fkconstraint -> initdeferred ;
1145+ fk_trigger -> constrrelname = stmt -> relname ;
11321146switch ((fkconstraint -> actions & FKCONSTR_ON_UPDATE_MASK )
11331147>>FKCONSTR_ON_UPDATE_SHIFT )
11341148{
11351149case FKCONSTR_ON_KEY_NOACTION :
11361150fk_trigger -> funcname = "RI_FKey_noaction_upd" ;
11371151break ;
11381152case FKCONSTR_ON_KEY_RESTRICT :
1139- fk_trigger -> funcname = "RI_FKey_restrict_upd" ;
1153+ fk_trigger -> deferrable = false;
1154+ fk_trigger -> initdeferred = false;
1155+ fk_trigger -> funcname = "RI_FKey_restrict_upd" ;
11401156break ;
11411157case FKCONSTR_ON_KEY_CASCADE :
11421158fk_trigger -> funcname = "RI_FKey_cascade_upd" ;
@@ -1151,18 +1167,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
11511167elog (ERROR ,"Only one ON UPDATE action can be specified for FOREIGN KEY constraint" );
11521168break ;
11531169}
1154- fk_trigger -> before = false;
1155- fk_trigger -> row = true;
1156- fk_trigger -> actions [0 ]= 'u' ;
1157- fk_trigger -> actions [1 ]= '\0' ;
1158- fk_trigger -> lang = NULL ;
1159- fk_trigger -> text = NULL ;
1160- fk_trigger -> attr = NIL ;
1161- fk_trigger -> when = NULL ;
1162- fk_trigger -> isconstraint = true;
1163- fk_trigger -> deferrable = fkconstraint -> deferrable ;
1164- fk_trigger -> initdeferred = fkconstraint -> initdeferred ;
1165- fk_trigger -> constrrelname = stmt -> relname ;
11661170
11671171fk_trigger -> args = NIL ;
11681172fk_trigger -> args = lappend (fk_trigger -> args ,