diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 6ecc586af69ff4002b9c5ff39c3cfae15f057bed..e251bc60d3d6e3e81fdc32a860dd432511f46a42 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -18,7 +18,7 @@ * Portions Copyright (c) 2000-2001, PostgreSQL Global Development Group * Copyright 1999 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.33 2002/03/19 02:57:15 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.34 2002/04/01 02:02:34 tgl Exp $ * * ---------- */ @@ -36,6 +36,7 @@ #include "catalog/pg_operator.h" #include "commands/trigger.h" #include "executor/spi_priv.h" +#include "nodes/makefuncs.h" #include "miscadmin.h" @@ -137,6 +138,18 @@ static void *ri_FetchPreparedPlan(RI_QueryKey *key); static void ri_HashPreparedPlan(RI_QueryKey *key, void *plan); +/* + * very ugly, very temporary hack to allow RI triggers to find tables + * anywhere in the current search path. This is just so that the regression + * tests don't break with new search path code; we MUST find a more bullet + * proof solution before release. + */ +static Relation +kluge_openr(char *relationName, LOCKMODE lockmode) +{ + return heap_openrv(makeRangeVar(NULL, relationName), lockmode); +} + /* ---------- * RI_FKey_check - @@ -196,7 +209,7 @@ RI_FKey_check(PG_FUNCTION_ARGS) * tuple. */ fk_rel = trigdata->tg_relation; - pk_rel = heap_openr(tgargs[RI_PK_RELNAME_ARGNO], NoLock); + pk_rel = kluge_openr(tgargs[RI_PK_RELNAME_ARGNO], NoLock); if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) { old_row = trigdata->tg_trigtuple; @@ -563,7 +576,7 @@ RI_FKey_noaction_del(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); pk_rel = trigdata->tg_relation; old_row = trigdata->tg_trigtuple; @@ -769,7 +782,7 @@ RI_FKey_noaction_upd(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the new * and old tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; old_row = trigdata->tg_trigtuple; @@ -979,7 +992,7 @@ RI_FKey_cascade_del(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; old_row = trigdata->tg_trigtuple; @@ -1174,7 +1187,7 @@ RI_FKey_cascade_upd(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the new * and old tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; @@ -1403,7 +1416,7 @@ RI_FKey_restrict_del(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; old_row = trigdata->tg_trigtuple; @@ -1615,7 +1628,7 @@ RI_FKey_restrict_upd(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the new * and old tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; @@ -1829,7 +1842,7 @@ RI_FKey_setnull_del(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; old_row = trigdata->tg_trigtuple; @@ -2036,7 +2049,7 @@ RI_FKey_setnull_upd(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; @@ -2286,7 +2299,7 @@ RI_FKey_setdefault_del(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; old_row = trigdata->tg_trigtuple; @@ -2537,7 +2550,7 @@ RI_FKey_setdefault_upd(PG_FUNCTION_ARGS) * Get the relation descriptors of the FK and PK tables and the old * tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); fk_owner = RelationGetForm(fk_rel)->relowner; pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; @@ -2793,7 +2806,7 @@ RI_FKey_keyequal_upd(TriggerData *trigdata) * Get the relation descriptors of the FK and PK tables and the new * and old tuple. */ - fk_rel = heap_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); + fk_rel = kluge_openr(tgargs[RI_FK_RELNAME_ARGNO], NoLock); pk_rel = trigdata->tg_relation; new_row = trigdata->tg_newtuple; old_row = trigdata->tg_trigtuple;