diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-20 21:56:35 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-20 21:56:35 +0000 |
commit | da4ed8bfdd79759f5a1fccc4bb0940929bdc4ff2 (patch) | |
tree | ed72b114797c44d92818e166fefeedb779f9f5f8 /src/backend/commands/trigger.c | |
parent | 46bc5870079e829db82d352d05444c95ce62050a (diff) | |
download | postgresql-da4ed8bfdd79759f5a1fccc4bb0940929bdc4ff2.tar.gz postgresql-da4ed8bfdd79759f5a1fccc4bb0940929bdc4ff2.zip |
Another round of error message editing, covering backend/commands/.
Diffstat (limited to 'src/backend/commands/trigger.c')
-rw-r--r-- | src/backend/commands/trigger.c | 158 |
1 files changed, 100 insertions, 58 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 8e8d61d77b8..ca594f63570 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.150 2003/07/04 02:51:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.151 2003/07/20 21:56:32 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -131,17 +131,23 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) constrrelid = RangeVarGetRelid(rel, true); } if (needconstrrelid && constrrelid == InvalidOid) - elog(NOTICE, "Unable to find table for constraint \"%s\"", - stmt->trigname); + ereport(NOTICE, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("unable to determine referenced table for constraint \"%s\"", + stmt->trigname))); } if (rel->rd_rel->relkind != RELKIND_RELATION) - elog(ERROR, "CreateTrigger: relation \"%s\" is not a table", - stmt->relation->relname); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is not a table", + RelationGetRelationName(rel)))); if (!allowSystemTableMods && IsSystemRelation(rel)) - elog(ERROR, "CreateTrigger: can't create trigger for system relation %s", - stmt->relation->relname); + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("\"%s\" is a system catalog", + RelationGetRelationName(rel)))); /* permission checks */ @@ -207,21 +213,28 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) { case 'i': if (TRIGGER_FOR_INSERT(tgtype)) - elog(ERROR, "CreateTrigger: double INSERT event specified"); + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("double INSERT event specified"))); TRIGGER_SETT_INSERT(tgtype); break; case 'd': if (TRIGGER_FOR_DELETE(tgtype)) - elog(ERROR, "CreateTrigger: double DELETE event specified"); + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("double DELETE event specified"))); TRIGGER_SETT_DELETE(tgtype); break; case 'u': if (TRIGGER_FOR_UPDATE(tgtype)) - elog(ERROR, "CreateTrigger: double UPDATE event specified"); + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("double UPDATE event specified"))); TRIGGER_SETT_UPDATE(tgtype); break; default: - elog(ERROR, "CreateTrigger: unknown event specified"); + elog(ERROR, "unknown trigger event: %d", + (int) stmt->actions[i]); break; } } @@ -247,8 +260,10 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple); if (namestrcmp(&(pg_trigger->tgname), trigname) == 0) - elog(ERROR, "CreateTrigger: trigger %s already defined on relation %s", - trigname, stmt->relation->relname); + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("trigger \"%s\" for relation \"%s\" already exists", + trigname, stmt->relation->relname))); found++; } systable_endscan(tgscan); @@ -267,13 +282,16 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) */ if (funcrettype == OPAQUEOID) { - elog(NOTICE, "CreateTrigger: changing return type of function %s() from OPAQUE to TRIGGER", - NameListToString(stmt->funcname)); + ereport(NOTICE, + (errmsg("changing return type of function %s() from OPAQUE to TRIGGER", + NameListToString(stmt->funcname)))); SetFunctionReturnType(funcoid, TRIGGEROID); } else - elog(ERROR, "CreateTrigger: function %s() must return TRIGGER", - NameListToString(stmt->funcname)); + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("function %s() must return TRIGGER", + NameListToString(stmt->funcname)))); } /* @@ -372,8 +390,8 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) ObjectIdGetDatum(RelationGetRelid(rel)), 0, 0, 0); if (!HeapTupleIsValid(tuple)) - elog(ERROR, "CreateTrigger: relation %s not found in pg_class", - stmt->relation->relname); + elog(ERROR, "cache lookup failed for relation %u", + RelationGetRelid(rel)); ((Form_pg_class) GETSTRUCT(tuple))->reltriggers = found + 1; @@ -457,8 +475,10 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior) tup = systable_getnext(tgscan); if (!HeapTupleIsValid(tup)) - elog(ERROR, "DropTrigger: there is no trigger %s on relation %s", - trigname, get_rel_name(relid)); + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("trigger \"%s\" on relation \"%s\" does not exist", + trigname, get_rel_name(relid)))); if (!pg_class_ownercheck(relid, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, get_rel_name(relid)); @@ -506,8 +526,7 @@ RemoveTriggerById(Oid trigOid) tup = systable_getnext(tgscan); if (!HeapTupleIsValid(tup)) - elog(ERROR, "RemoveTriggerById: Trigger %u does not exist", - trigOid); + elog(ERROR, "could not find tuple for trigger %u", trigOid); /* * Open and exclusive-lock the relation the trigger belongs to. @@ -517,12 +536,16 @@ RemoveTriggerById(Oid trigOid) rel = heap_open(relid, AccessExclusiveLock); if (rel->rd_rel->relkind != RELKIND_RELATION) - elog(ERROR, "DropTrigger: relation \"%s\" is not a table", - RelationGetRelationName(rel)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is not a table", + RelationGetRelationName(rel)))); if (!allowSystemTableMods && IsSystemRelation(rel)) - elog(ERROR, "DropTrigger: can't drop trigger for system relation %s", - RelationGetRelationName(rel)); + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("\"%s\" is a system catalog", + RelationGetRelationName(rel)))); /* * Delete the pg_trigger tuple. @@ -546,12 +569,11 @@ RemoveTriggerById(Oid trigOid) ObjectIdGetDatum(relid), 0, 0, 0); if (!HeapTupleIsValid(tuple)) - elog(ERROR, "DropTrigger: relation %s not found in pg_class", - RelationGetRelationName(rel)); + elog(ERROR, "cache lookup failed for relation %u", relid); classForm = (Form_pg_class) GETSTRUCT(tuple); - if (classForm->reltriggers == 0) - elog(ERROR, "DropTrigger: relation %s has reltriggers = 0", + if (classForm->reltriggers == 0) /* should not happen */ + elog(ERROR, "relation \"%s\" has reltriggers = 0", RelationGetRelationName(rel)); classForm->reltriggers--; @@ -622,8 +644,10 @@ renametrig(Oid relid, tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, SnapshotNow, 2, key); if (HeapTupleIsValid(tuple = systable_getnext(tgscan))) - elog(ERROR, "renametrig: trigger %s already defined on relation %s", - newname, RelationGetRelationName(targetrel)); + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("trigger \"%s\" for relation \"%s\" already exists", + newname, RelationGetRelationName(targetrel)))); systable_endscan(tgscan); /* @@ -663,8 +687,10 @@ renametrig(Oid relid, } else { - elog(ERROR, "renametrig: trigger %s not defined on relation %s", - oldname, RelationGetRelationName(targetrel)); + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("trigger \"%s\" for relation \"%s\" does not exist", + oldname, RelationGetRelationName(targetrel)))); } systable_endscan(tgscan); @@ -726,7 +752,7 @@ RelationBuildTriggers(Relation relation) Trigger *build; if (found >= ntrigs) - elog(ERROR, "RelationBuildTriggers: unexpected record found for rel %s", + elog(ERROR, "too many trigger records found for relation \"%s\"", RelationGetRelationName(relation)); build = &(triggers[found]); @@ -754,7 +780,7 @@ RelationBuildTriggers(Relation relation) Anum_pg_trigger_tgargs, tgrel->rd_att, &isnull); if (isnull) - elog(ERROR, "RelationBuildTriggers: tgargs IS NULL for rel %s", + elog(ERROR, "tgargs is null in trigger for relation \"%s\"", RelationGetRelationName(relation)); p = (char *) VARDATA(val); build->tgargs = (char **) palloc(build->tgnargs * sizeof(char *)); @@ -774,7 +800,7 @@ RelationBuildTriggers(Relation relation) heap_close(tgrel, AccessShareLock); if (found != ntrigs) - elog(ERROR, "RelationBuildTriggers: %d record(s) not found for rel %s", + elog(ERROR, "%d trigger record(s) not found for relation \"%s\"", ntrigs - found, RelationGetRelationName(relation)); @@ -1125,8 +1151,10 @@ ExecCallTriggerFunc(TriggerData *trigdata, * to set the isnull result flag. */ if (fcinfo.isnull) - elog(ERROR, "ExecCallTriggerFunc: function %u returned NULL", - fcinfo.flinfo->fn_oid); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("trigger function %u returned NULL", + fcinfo.flinfo->fn_oid))); return (HeapTuple) DatumGetPointer(result); } @@ -1175,7 +1203,9 @@ ExecBSInsertTriggers(EState *estate, ResultRelInfo *relinfo) GetPerTupleMemoryContext(estate)); if (newtuple) - elog(ERROR, "BEFORE STATEMENT trigger cannot return a value."); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("BEFORE STATEMENT trigger cannot return a value"))); } } @@ -1286,7 +1316,9 @@ ExecBSDeleteTriggers(EState *estate, ResultRelInfo *relinfo) GetPerTupleMemoryContext(estate)); if (newtuple) - elog(ERROR, "BEFORE STATEMENT trigger cannot return a value."); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("BEFORE STATEMENT trigger cannot return a value"))); } } @@ -1413,7 +1445,9 @@ ExecBSUpdateTriggers(EState *estate, ResultRelInfo *relinfo) GetPerTupleMemoryContext(estate)); if (newtuple) - elog(ERROR, "BEFORE STATEMENT trigger cannot return a value."); + ereport(ERROR, + (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED), + errmsg("BEFORE STATEMENT trigger cannot return a value"))); } } @@ -1538,7 +1572,9 @@ ltrmark:; case HeapTupleUpdated: ReleaseBuffer(buffer); if (XactIsoLevel == XACT_SERIALIZABLE) - elog(ERROR, "Can't serialize access due to concurrent update"); + ereport(ERROR, + (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), + errmsg("cannot serialize access due to concurrent update"))); else if (!(ItemPointerEquals(&(tuple.t_self), tid))) { TupleTableSlot *epqslot = EvalPlanQual(estate, @@ -1561,8 +1597,9 @@ ltrmark:; default: ReleaseBuffer(buffer); - elog(ERROR, "Unknown status %u from heap_mark4update", test); - return NULL; + elog(ERROR, "unrecognized status %u from heap_mark4update", + test); + return NULL; /* keep compiler quiet */ } } else @@ -1573,7 +1610,7 @@ ltrmark:; buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(buffer)) - elog(ERROR, "GetTupleForTrigger: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); dp = (PageHeader) BufferGetPage(buffer); lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid)); @@ -1761,14 +1798,14 @@ DeferredTriggerExecute(DeferredTriggerEvent event, int itemno, { ItemPointerCopy(&(event->dte_oldctid), &(oldtuple.t_self)); if (!heap_fetch(rel, SnapshotAny, &oldtuple, &oldbuffer, false, NULL)) - elog(ERROR, "DeferredTriggerExecute: failed to fetch old tuple"); + elog(ERROR, "failed to fetch old tuple for deferred trigger"); } if (ItemPointerIsValid(&(event->dte_newctid))) { ItemPointerCopy(&(event->dte_newctid), &(newtuple.t_self)); if (!heap_fetch(rel, SnapshotAny, &newtuple, &newbuffer, false, NULL)) - elog(ERROR, "DeferredTriggerExecute: failed to fetch new tuple"); + elog(ERROR, "failed to fetch new tuple for deferred trigger"); } /* @@ -1789,7 +1826,7 @@ DeferredTriggerExecute(DeferredTriggerEvent event, int itemno, } } if (LocTriggerData.tg_trigger == NULL) - elog(ERROR, "DeferredTriggerExecute: can't find trigger %u", tgoid); + elog(ERROR, "could not find trigger %u", tgoid); switch (event->dte_event & TRIGGER_EVENT_OPMASK) { @@ -1948,8 +1985,8 @@ deferredTriggerInvokeEvents(bool immediate_only) */ trigdesc = CopyTriggerDesc(rel->trigdesc); - if (trigdesc == NULL) - elog(ERROR, "deferredTriggerInvokeEvents: relation %u has no triggers", + if (trigdesc == NULL) /* should not happen */ + elog(ERROR, "relation %u has no triggers", event->dte_relid); /* @@ -2212,7 +2249,9 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt) * Check that only named constraints are set explicitly */ if (strlen(cname) == 0) - elog(ERROR, "unnamed constraints cannot be set explicitly"); + ereport(ERROR, + (errcode(ERRCODE_INVALID_NAME), + errmsg("unnamed constraints cannot be set explicitly"))); /* * Setup to scan pg_trigger by tgconstrname ... @@ -2243,8 +2282,10 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt) if (stmt->deferred && !pg_trigger->tgdeferrable && pg_trigger->tgfoid != F_RI_FKEY_RESTRICT_UPD && pg_trigger->tgfoid != F_RI_FKEY_RESTRICT_DEL) - elog(ERROR, "Constraint '%s' is not deferrable", - cname); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("constraint \"%s\" is not deferrable", + cname))); constr_oid = HeapTupleGetOid(htup); loid = lappendo(loid, constr_oid); @@ -2257,7 +2298,9 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt) * Not found ? */ if (!found) - elog(ERROR, "Constraint '%s' does not exist", cname); + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("constraint \"%s\" does not exist", cname))); } heap_close(tgrel, AccessShareLock); @@ -2336,8 +2379,7 @@ DeferredTriggerSaveEvent(ResultRelInfo *relinfo, int event, bool row_trigger, ItemPointerData newctid; if (deferredTriggers == NULL) - elog(ERROR, - "DeferredTriggerSaveEvent() called outside of transaction"); + elog(ERROR, "DeferredTriggerSaveEvent() called outside of transaction"); /* * Get the CTID's of OLD and NEW |