summaryrefslogtreecommitdiff
path: root/src/backend/executor/execMain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r--src/backend/executor/execMain.c93
1 files changed, 55 insertions, 38 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 8b720c110fd..7f6c8253807 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.209 2003/05/08 18:16:36 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.210 2003/07/21 17:05:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -410,8 +410,8 @@ ExecCheckRTEPerms(RangeTblEntry *rte, CmdType operation)
aclcheck_result = CHECK(ACL_DELETE);
break;
default:
- elog(ERROR, "ExecCheckRTEPerms: bogus operation %d",
- operation);
+ elog(ERROR, "unrecognized operation code: %d",
+ (int) operation);
aclcheck_result = ACLCHECK_OK; /* keep compiler quiet */
break;
}
@@ -455,7 +455,9 @@ ExecCheckXactReadOnly(Query *parsetree, CmdType operation)
return;
fail:
- elog(ERROR, "transaction is read-only");
+ ereport(ERROR,
+ (errcode(ERRCODE_READ_ONLY_SQL_TRANSACTION),
+ errmsg("transaction is read-only")));
}
@@ -833,16 +835,22 @@ initResultRelInfo(ResultRelInfo *resultRelInfo,
switch (resultRelationDesc->rd_rel->relkind)
{
case RELKIND_SEQUENCE:
- elog(ERROR, "You can't change sequence relation %s",
- RelationGetRelationName(resultRelationDesc));
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("cannot change sequence relation \"%s\"",
+ RelationGetRelationName(resultRelationDesc))));
break;
case RELKIND_TOASTVALUE:
- elog(ERROR, "You can't change toast relation %s",
- RelationGetRelationName(resultRelationDesc));
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("cannot change toast relation \"%s\"",
+ RelationGetRelationName(resultRelationDesc))));
break;
case RELKIND_VIEW:
- elog(ERROR, "You can't change view relation %s",
- RelationGetRelationName(resultRelationDesc));
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("cannot change view relation \"%s\"",
+ RelationGetRelationName(resultRelationDesc))));
break;
}
@@ -1056,11 +1064,11 @@ lnext: ;
"ctid",
&datum,
&isNull))
- elog(ERROR, "ExecutePlan: NO (junk) `ctid' was found!");
+ elog(ERROR, "could not find junk ctid column");
/* shouldn't ever get a null result... */
if (isNull)
- elog(ERROR, "ExecutePlan: (junk) `ctid' is NULL!");
+ elog(ERROR, "ctid is NULL");
tupleid = (ItemPointer) DatumGetPointer(datum);
tuple_ctid = *tupleid; /* make sure we don't free the
@@ -1085,13 +1093,12 @@ lnext: ;
erm->resname,
&datum,
&isNull))
- elog(ERROR, "ExecutePlan: NO (junk) `%s' was found!",
+ elog(ERROR, "could not find junk \"%s\" column",
erm->resname);
/* shouldn't ever get a null result... */
if (isNull)
- elog(ERROR, "ExecutePlan: (junk) `%s' is NULL!",
- erm->resname);
+ elog(ERROR, "\"%s\" is NULL", erm->resname);
tuple.t_self = *((ItemPointer) DatumGetPointer(datum));
test = heap_mark4update(erm->relation, &tuple, &buffer,
@@ -1108,7 +1115,9 @@ lnext: ;
case HeapTupleUpdated:
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")));
if (!(ItemPointerEquals(&(tuple.t_self),
(ItemPointer) DatumGetPointer(datum))))
{
@@ -1129,7 +1138,8 @@ lnext: ;
goto lnext;
default:
- elog(ERROR, "Unknown status %u from heap_mark4update", test);
+ elog(ERROR, "unrecognized heap_mark4update status: %u",
+ test);
return (NULL);
}
}
@@ -1178,7 +1188,8 @@ lnext: ;
break;
default:
- elog(LOG, "ExecutePlan: unknown operation in queryDesc");
+ elog(ERROR, "unrecognized operation code: %d",
+ (int) operation);
result = NULL;
break;
}
@@ -1321,7 +1332,7 @@ ExecInsert(TupleTableSlot *slot,
* Check the constraints of the tuple
*/
if (resultRelationDesc->rd_att->constr)
- ExecConstraints("ExecInsert", resultRelInfo, slot, estate);
+ ExecConstraints(resultRelInfo, slot, estate);
/*
* insert the tuple
@@ -1403,7 +1414,9 @@ ldelete:;
case HeapTupleUpdated:
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(tupleid, &ctid)))
{
TupleTableSlot *epqslot = EvalPlanQual(estate,
@@ -1419,7 +1432,7 @@ ldelete:;
return;
default:
- elog(ERROR, "Unknown status %u from heap_delete", result);
+ elog(ERROR, "unrecognized heap_delete status: %u", result);
return;
}
@@ -1466,10 +1479,7 @@ ExecUpdate(TupleTableSlot *slot,
* abort the operation if not running transactions
*/
if (IsBootstrapProcessingMode())
- {
- elog(WARNING, "ExecUpdate: UPDATE can't run without transactions");
- return;
- }
+ elog(ERROR, "cannot UPDATE during bootstrap");
/*
* get the heap tuple out of the tuple table slot
@@ -1519,7 +1529,7 @@ ExecUpdate(TupleTableSlot *slot,
*/
lreplace:;
if (resultRelationDesc->rd_att->constr)
- ExecConstraints("ExecUpdate", resultRelInfo, slot, estate);
+ ExecConstraints(resultRelInfo, slot, estate);
/*
* replace the heap tuple
@@ -1538,7 +1548,9 @@ lreplace:;
case HeapTupleUpdated:
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(tupleid, &ctid)))
{
TupleTableSlot *epqslot = EvalPlanQual(estate,
@@ -1558,7 +1570,7 @@ lreplace:;
return;
default:
- elog(ERROR, "Unknown status %u from heap_update", result);
+ elog(ERROR, "unrecognized heap_update status: %u", result);
return;
}
@@ -1591,7 +1603,7 @@ lreplace:;
ExecARUpdateTriggers(estate, resultRelInfo, tupleid, tuple);
}
-static char *
+static const char *
ExecRelCheck(ResultRelInfo *resultRelInfo,
TupleTableSlot *slot, EState *estate)
{
@@ -1646,11 +1658,11 @@ ExecRelCheck(ResultRelInfo *resultRelInfo,
}
/* NULL result means no error */
- return (char *) NULL;
+ return NULL;
}
void
-ExecConstraints(const char *caller, ResultRelInfo *resultRelInfo,
+ExecConstraints(ResultRelInfo *resultRelInfo,
TupleTableSlot *slot, EState *estate)
{
Relation rel = resultRelInfo->ri_RelationDesc;
@@ -1668,18 +1680,22 @@ ExecConstraints(const char *caller, ResultRelInfo *resultRelInfo,
{
if (rel->rd_att->attrs[attrChk - 1]->attnotnull &&
heap_attisnull(tuple, attrChk))
- elog(ERROR, "%s: Fail to add null value in not null attribute %s",
- caller, NameStr(rel->rd_att->attrs[attrChk - 1]->attname));
+ ereport(ERROR,
+ (errcode(ERRCODE_NOT_NULL_VIOLATION),
+ errmsg("null value for attribute \"%s\" violates NOT NULL constraint",
+ NameStr(rel->rd_att->attrs[attrChk - 1]->attname))));
}
}
if (constr->num_check > 0)
{
- char *failed;
+ const char *failed;
if ((failed = ExecRelCheck(resultRelInfo, slot, estate)) != NULL)
- elog(ERROR, "%s: rejected due to CHECK constraint \"%s\" on \"%s\"",
- caller, failed, RelationGetRelationName(rel));
+ ereport(ERROR,
+ (errcode(ERRCODE_CHECK_VIOLATION),
+ errmsg("new row for relation \"%s\" violates CHECK constraint \"%s\"",
+ RelationGetRelationName(rel), failed)));
}
}
@@ -1721,7 +1737,7 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
}
}
if (relation == NULL)
- elog(ERROR, "EvalPlanQual: can't find RTE %d", (int) rti);
+ elog(ERROR, "cannot find RowMark for RT index %u", rti);
}
/*
@@ -1738,8 +1754,9 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
{
TransactionId xwait = SnapshotDirty->xmax;
+ /* xmin should not be dirty... */
if (TransactionIdIsValid(SnapshotDirty->xmin))
- elog(ERROR, "EvalPlanQual: t_xmin is uncommitted ?!");
+ elog(ERROR, "t_xmin is uncommitted in tuple to be updated");
/*
* If tuple is being updated by other transaction then we have