diff options
Diffstat (limited to 'src/backend/access/heap/heapam.c')
-rw-r--r-- | src/backend/access/heap/heapam.c | 142 |
1 files changed, 72 insertions, 70 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 7ef0bf2d558..a0d191f8a9d 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.151 2003/02/23 20:32:11 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.152 2003/07/21 20:29:38 tgl Exp $ * * * INTERFACE ROUTINES @@ -134,19 +134,16 @@ heapgettup(Relation relation, */ #ifdef HEAPDEBUGALL if (ItemPointerIsValid(tid)) - { - elog(LOG, "heapgettup(%s, tid=0x%x[%d,%d], dir=%d, ...)", + elog(DEBUG2, "heapgettup(%s, tid=0x%x[%d,%d], dir=%d, ...)", RelationGetRelationName(relation), tid, tid->ip_blkid, tid->ip_posid, dir); - } else - { - elog(LOG, "heapgettup(%s, tid=0x%x, dir=%d, ...)", + elog(DEBUG2, "heapgettup(%s, tid=0x%x, dir=%d, ...)", RelationGetRelationName(relation), tid, dir); - } - elog(LOG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", buffer, nkeys, key); - elog(LOG, "heapgettup: relation(%c)=`%s', %p", + elog(DEBUG2, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", buffer, nkeys, key); + + elog(DEBUG2, "heapgettup: relation(%c)=`%s', %p", relation->rd_rel->relkind, RelationGetRelationName(relation), snapshot); #endif /* !defined(HEAPLOGALL) */ @@ -194,7 +191,7 @@ heapgettup(Relation relation, relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(*buffer)) - elog(ERROR, "heapgettup: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(*buffer, BUFFER_LOCK_SHARE); @@ -229,7 +226,7 @@ heapgettup(Relation relation, relation, page); if (!BufferIsValid(*buffer)) - elog(ERROR, "heapgettup: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(*buffer, BUFFER_LOCK_SHARE); @@ -269,7 +266,7 @@ heapgettup(Relation relation, relation, page); if (!BufferIsValid(*buffer)) - elog(ERROR, "heapgettup: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(*buffer, BUFFER_LOCK_SHARE); @@ -363,7 +360,7 @@ heapgettup(Relation relation, relation, page); if (!BufferIsValid(*buffer)) - elog(ERROR, "heapgettup: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(*buffer, BUFFER_LOCK_SHARE); dp = (Page) BufferGetPage(*buffer); @@ -459,7 +456,7 @@ relation_open(Oid relationId, LOCKMODE lockmode) r = RelationIdGetRelation(relationId); if (!RelationIsValid(r)) - elog(ERROR, "Relation %u does not exist", relationId); + elog(ERROR, "could not open relation with OID %u", relationId); if (lockmode != NoLock) LockRelation(r, lockmode); @@ -532,7 +529,7 @@ relation_openr(const char *sysRelationName, LOCKMODE lockmode) r = RelationSysNameGetRelation(sysRelationName); if (!RelationIsValid(r)) - elog(ERROR, "Relation \"%s\" does not exist", sysRelationName); + elog(ERROR, "could not open relation \"%s\"", sysRelationName); if (lockmode != NoLock) LockRelation(r, lockmode); @@ -578,14 +575,20 @@ heap_open(Oid relationId, LOCKMODE lockmode) r = relation_open(relationId, lockmode); if (r->rd_rel->relkind == RELKIND_INDEX) - elog(ERROR, "%s is an index relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is an index relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_SPECIAL) - elog(ERROR, "%s is a special relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a special relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - elog(ERROR, "%s is a composite type", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a composite type", + RelationGetRelationName(r)))); pgstat_initstats(&r->pgstat_info, r); @@ -607,14 +610,20 @@ heap_openrv(const RangeVar *relation, LOCKMODE lockmode) r = relation_openrv(relation, lockmode); if (r->rd_rel->relkind == RELKIND_INDEX) - elog(ERROR, "%s is an index relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is an index relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_SPECIAL) - elog(ERROR, "%s is a special relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a special relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - elog(ERROR, "%s is a composite type", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a composite type", + RelationGetRelationName(r)))); pgstat_initstats(&r->pgstat_info, r); @@ -636,14 +645,20 @@ heap_openr(const char *sysRelationName, LOCKMODE lockmode) r = relation_openr(sysRelationName, lockmode); if (r->rd_rel->relkind == RELKIND_INDEX) - elog(ERROR, "%s is an index relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is an index relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_SPECIAL) - elog(ERROR, "%s is a special relation", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a special relation", + RelationGetRelationName(r)))); else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - elog(ERROR, "%s is a composite type", - RelationGetRelationName(r)); + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a composite type", + RelationGetRelationName(r)))); pgstat_initstats(&r->pgstat_info, r); @@ -662,12 +677,6 @@ heap_beginscan(Relation relation, Snapshot snapshot, HeapScanDesc scan; /* - * sanity checks - */ - if (!RelationIsValid(relation)) - elog(ERROR, "heap_beginscan: !RelationIsValid(relation)"); - - /* * increment relation ref count while scanning relation * * This is just to make really sure the relcache entry won't go away @@ -767,14 +776,12 @@ heap_endscan(HeapScanDesc scan) #ifdef HEAPDEBUGALL #define HEAPDEBUG_1 \ - elog(LOG, "heap_getnext([%s,nkeys=%d],dir=%d) called", \ + elog(DEBUG2, "heap_getnext([%s,nkeys=%d],dir=%d) called", \ RelationGetRelationName(scan->rs_rd), scan->rs_nkeys, (int) direction) - #define HEAPDEBUG_2 \ - elog(LOG, "heap_getnext returning EOS") - + elog(DEBUG2, "heap_getnext returning EOS") #define HEAPDEBUG_3 \ - elog(LOG, "heap_getnext returning tuple") + elog(DEBUG2, "heap_getnext returning tuple") #else #define HEAPDEBUG_1 #define HEAPDEBUG_2 @@ -787,12 +794,6 @@ heap_getnext(HeapScanDesc scan, ScanDirection direction) { /* Note: no locking manipulations needed */ - /* - * argument checks - */ - if (scan == NULL) - elog(ERROR, "heap_getnext: NULL relscan"); - HEAPDEBUG_1; /* heap_getnext( info ) */ /* @@ -847,7 +848,7 @@ heap_getnext(HeapScanDesc scan, ScanDirection direction) * the tuple); when keep_buf = false, the pin is released and *userbuf is set * to InvalidBuffer. * - * It is somewhat inconsistent that we elog() on invalid block number but + * It is somewhat inconsistent that we ereport() on invalid block number but * return false on invalid item number. This is historical. The only * justification I can see is that the caller can relatively easily check the * block number for validity, but cannot check the item number without reading @@ -875,7 +876,7 @@ heap_fetch(Relation relation, buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(buffer)) - elog(ERROR, "heap_fetch: ReadBuffer(%s, %lu) failed", + elog(ERROR, "ReadBuffer(\"%s\", %lu) failed", RelationGetRelationName(relation), (unsigned long) ItemPointerGetBlockNumber(tid)); @@ -985,8 +986,9 @@ heap_get_latest_tid(Relation relation, buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(buffer)) - elog(ERROR, "heap_get_latest_tid: %s relation: ReadBuffer(%lx) failed", - RelationGetRelationName(relation), (long) tid); + elog(ERROR, "ReadBuffer(\"%s\", %lu) failed", + RelationGetRelationName(relation), + (unsigned long) ItemPointerGetBlockNumber(tid)); LockBuffer(buffer, BUFFER_LOCK_SHARE); @@ -1103,7 +1105,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid) /* Find buffer to insert this tuple into */ buffer = RelationGetBufferForTuple(relation, tup->t_len, InvalidBuffer); - /* NO ELOG(ERROR) from here till changes are logged */ + /* NO EREPORT(ERROR) from here till changes are logged */ START_CRIT_SECTION(); RelationPutHeapTuple(relation, buffer, tup); @@ -1219,7 +1221,7 @@ heap_delete(Relation relation, ItemPointer tid, buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(buffer)) - elog(ERROR, "heap_delete: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); @@ -1238,7 +1240,7 @@ l1: { LockBuffer(buffer, BUFFER_LOCK_UNLOCK); ReleaseBuffer(buffer); - elog(ERROR, "heap_delete: (am)invalid tid"); + elog(ERROR, "attempted to delete invisible tuple"); } else if (result == HeapTupleBeingUpdated) { @@ -1358,7 +1360,7 @@ l1: * This routine may be used to delete a tuple when concurrent updates of * the target tuple are not expected (for example, because we have a lock * on the relation associated with the tuple). Any failure is reported - * via elog(). + * via ereport(). */ void simple_heap_delete(Relation relation, ItemPointer tid) @@ -1371,7 +1373,7 @@ simple_heap_delete(Relation relation, ItemPointer tid) { case HeapTupleSelfUpdated: /* Tuple was already updated in current command? */ - elog(ERROR, "simple_heap_delete: tuple already updated by self"); + elog(ERROR, "tuple already updated by self"); break; case HeapTupleMayBeUpdated: @@ -1379,11 +1381,11 @@ simple_heap_delete(Relation relation, ItemPointer tid) break; case HeapTupleUpdated: - elog(ERROR, "simple_heap_delete: tuple concurrently updated"); + elog(ERROR, "tuple concurrently updated"); break; default: - elog(ERROR, "Unknown status %u from heap_delete", result); + elog(ERROR, "unrecognized heap_delete status: %u", result); break; } } @@ -1413,7 +1415,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(otid)); if (!BufferIsValid(buffer)) - elog(ERROR, "heap_update: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); dp = (PageHeader) BufferGetPage(buffer); @@ -1438,7 +1440,7 @@ l2: { LockBuffer(buffer, BUFFER_LOCK_UNLOCK); ReleaseBuffer(buffer); - elog(ERROR, "heap_update: (am)invalid tid"); + elog(ERROR, "attempted to update invisible tuple"); } else if (result == HeapTupleBeingUpdated) { @@ -1611,7 +1613,7 @@ l2: * buffer, only one pin is held. */ - /* NO ELOG(ERROR) from here till changes are logged */ + /* NO EREPORT(ERROR) from here till changes are logged */ START_CRIT_SECTION(); RelationPutHeapTuple(relation, newbuf, newtup); /* insert new tuple */ @@ -1688,7 +1690,7 @@ l2: * This routine may be used to update a tuple when concurrent updates of * the target tuple are not expected (for example, because we have a lock * on the relation associated with the tuple). Any failure is reported - * via elog(). + * via ereport(). */ void simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup) @@ -1701,7 +1703,7 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup) { case HeapTupleSelfUpdated: /* Tuple was already updated in current command? */ - elog(ERROR, "simple_heap_update: tuple already updated by self"); + elog(ERROR, "tuple already updated by self"); break; case HeapTupleMayBeUpdated: @@ -1709,11 +1711,11 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup) break; case HeapTupleUpdated: - elog(ERROR, "simple_heap_update: tuple concurrently updated"); + elog(ERROR, "tuple concurrently updated"); break; default: - elog(ERROR, "Unknown status %u from heap_update", result); + elog(ERROR, "unrecognized heap_update status: %u", result); break; } } @@ -1733,7 +1735,7 @@ heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer, *buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); if (!BufferIsValid(*buffer)) - elog(ERROR, "heap_mark4update: failed ReadBuffer"); + elog(ERROR, "ReadBuffer failed"); LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); @@ -1750,7 +1752,7 @@ l3: { LockBuffer(*buffer, BUFFER_LOCK_UNLOCK); ReleaseBuffer(*buffer); - elog(ERROR, "heap_mark4update: (am)invalid tid"); + elog(ERROR, "attempted to mark4update invisible tuple"); } else if (result == HeapTupleBeingUpdated) { |