Inline function, rename libpq variablees, change lrel to lockrel.

This commit is contained in:
Bruce Momjian 1998-07-13 16:35:04 +00:00
parent 8bac4ca87b
commit 5aea4062d6
14 changed files with 164 additions and 190 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-dumpdata.c,v 1.15 1998/03/30 16:46:29 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-dumpdata.c,v 1.16 1998/07/13 16:34:48 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -194,8 +194,8 @@ be_typeinit(PortalEntry *entry,
for (i = 0; i < natts; ++i) for (i = 0; i < natts; ++i)
{ {
strncpy(group->types[i].name, attrs[i]->attname.data, NAMEDATALEN); strncpy(group->types[i].name, attrs[i]->attname.data, NAMEDATALEN);
group->types[i].adtid = attrs[i]->atttypid; group->types[i].typid = attrs[i]->atttypid;
group->types[i].adtsize = attrs[i]->attlen; group->types[i].typlen = attrs[i]->attlen;
} }
} }
} }

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.14 1998/06/15 19:28:27 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.15 1998/07/13 16:34:48 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -327,7 +327,7 @@ PQftypeGroup(PortalBuffer *portal, int group_index, int field_number)
if ((gbp = pbuf_findGroup(portal, group_index)) && if ((gbp = pbuf_findGroup(portal, group_index)) &&
in_range("PQftypeGroup: field number", field_number, 0, gbp->no_fields)) in_range("PQftypeGroup: field number", field_number, 0, gbp->no_fields))
return (gbp->types[field_number].adtid); return (gbp->types[field_number].typid);
return (-1); return (-1);
} }
@ -348,7 +348,7 @@ PQfsizeGroup(PortalBuffer *portal, int group_index, int field_number)
if ((gbp = pbuf_findGroup(portal, group_index)) && if ((gbp = pbuf_findGroup(portal, group_index)) &&
in_range("PQfsizeGroup: field number", field_number, 0, gbp->no_fields)) in_range("PQfsizeGroup: field number", field_number, 0, gbp->no_fields))
return (gbp->types[field_number].adtsize); return (gbp->types[field_number].typlen);
return (-1); return (-1);
} }
@ -481,8 +481,8 @@ PQftype(PortalBuffer *portal, int tuple_index, int field_number)
return (-1); return (-1);
if ((gbp = PQgroup(portal, tuple_index)) && if ((gbp = PQgroup(portal, tuple_index)) &&
in_range("PQftype: field number", field_number, 0, gbp->no_fields)) in_range("PQftype: field number", field_number, 0, gbp->no_fields))
return (gbp->types[field_number].adtid); return (gbp->types[field_number].typid);
return (-1); return (-1);
} }
@ -502,7 +502,7 @@ PQfsize(PortalBuffer *portal, int tuple_index, int field_number)
if ((gbp = PQgroup(portal, tuple_index)) && if ((gbp = PQgroup(portal, tuple_index)) &&
in_range("PQfsize: field number", field_number, 0, gbp->no_fields)) in_range("PQfsize: field number", field_number, 0, gbp->no_fields))
return (gbp->types[field_number].adtsize); return (gbp->types[field_number].typlen);
return (-1); return (-1);
} }

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.38 1998/06/15 19:29:09 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.39 1998/07/13 16:34:49 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -114,14 +114,14 @@ RelationGetBufferWithBuffer(Relation relation,
Buffer buffer) Buffer buffer)
{ {
BufferDesc *bufHdr; BufferDesc *bufHdr;
LRelId lrelId; LockRelId lrelId;
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
if (!BufferIsLocal(buffer)) if (!BufferIsLocal(buffer))
{ {
bufHdr = &BufferDescriptors[buffer - 1]; bufHdr = &BufferDescriptors[buffer - 1];
lrelId = RelationGetLRelId(relation); lrelId = RelationGetLockRelId(relation);
SpinAcquire(BufMgrLock); SpinAcquire(BufMgrLock);
if (bufHdr->tag.blockNum == blockNumber && if (bufHdr->tag.blockNum == blockNumber &&
bufHdr->tag.relId.relId == lrelId.relId && bufHdr->tag.relId.relId == lrelId.relId &&
@ -1282,7 +1282,7 @@ BufferGetRelation(Buffer buffer)
Assert(!BufferIsLocal(buffer)); /* not supported for local buffers */ Assert(!BufferIsLocal(buffer)); /* not supported for local buffers */
/* XXX should be a critical section */ /* XXX should be a critical section */
relid = LRelIdGetRelationId(BufferDescriptors[buffer - 1].tag.relId); relid = LockRelIdGetRelationId(BufferDescriptors[buffer - 1].tag.relId);
relation = RelationIdGetRelation(relid); relation = RelationIdGetRelation(relid);
RelationDecrementReferenceCount(relation); RelationDecrementReferenceCount(relation);

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.11 1998/06/27 04:53:36 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.12 1998/07/13 16:34:49 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -85,7 +85,7 @@ SISetActiveProcess(SISeg *segInOutP, BackendId backendId)
int int
SIBackendInit(SISeg *segInOutP) SIBackendInit(SISeg *segInOutP)
{ {
LRelId LtCreateRelId(); LockRelId LtCreateRelId();
TransactionId LMITransactionIdCopy(); TransactionId LMITransactionIdCopy();
Assert(MyBackendTag > 0); Assert(MyBackendTag > 0);

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.12 1998/06/15 19:29:19 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.13 1998/07/13 16:34:50 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -47,7 +47,7 @@
#include "storage/bufmgr.h" #include "storage/bufmgr.h"
#include "access/transam.h" /* for AmiTransactionId */ #include "access/transam.h" /* for AmiTransactionId */
static void LRelIdAssign(LRelId *lRelId, Oid dbId, Oid relId); static void LockRelIdAssign(LockRelId *lockRelId, Oid dbId, Oid relId);
/* ---------------- /* ----------------
* *
@ -68,68 +68,17 @@ static void LRelIdAssign(LRelId *lRelId, Oid dbId, Oid relId);
extern Oid MyDatabaseId; extern Oid MyDatabaseId;
static LRelId VariableRelationLRelId = { LockRelId VariableRelationLockRelId = {
RelOid_pg_variable, RelOid_pg_variable,
InvalidOid InvalidOid
}; };
/* ----------------
* RelationGetLRelId
* ----------------
*/
#ifdef LOCKDEBUG
#define LOCKDEBUG_10 \
elog(NOTICE, "RelationGetLRelId(%s) invalid lockInfo", \
RelationGetRelationName(relation));
#else
#define LOCKDEBUG_10
#endif /* LOCKDEBUG */
/* /*
* RelationGetLRelId -- * LockRelIdGetDatabaseId --
* Returns "lock" relation identifier for a relation.
*/
LRelId
RelationGetLRelId(Relation relation)
{
LockInfo linfo;
/* ----------------
* sanity checks
* ----------------
*/
Assert(RelationIsValid(relation));
linfo = (LockInfo) relation->lockInfo;
/* ----------------
* initialize lock info if necessary
* ----------------
*/
if (!LockInfoIsValid(linfo))
{
LOCKDEBUG_10;
RelationInitLockInfo(relation);
linfo = (LockInfo) relation->lockInfo;
}
/* ----------------
* XXX hack to prevent problems during
* VARIABLE relation initialization
* ----------------
*/
if (strcmp(RelationGetRelationName(relation)->data,
VariableRelationName) == 0)
return (VariableRelationLRelId);
return (linfo->lRelId);
}
/*
* LRelIdGetDatabaseId --
* Returns database identifier for a "lock" relation identifier. * Returns database identifier for a "lock" relation identifier.
*/ */
/* ---------------- /* ----------------
* LRelIdGetDatabaseId * LockRelIdGetDatabaseId
* *
* Note: The argument may not be correct, if it is not used soon * Note: The argument may not be correct, if it is not used soon
* after it is created. * after it is created.
@ -137,21 +86,21 @@ RelationGetLRelId(Relation relation)
*/ */
#ifdef NOT_USED #ifdef NOT_USED
Oid Oid
LRelIdGetDatabaseId(LRelId lRelId) LockRelIdGetDatabaseId(LockRelId lockRelId)
{ {
return (lRelId.dbId); return (lockRelId.dbId);
} }
#endif #endif
/* /*
* LRelIdGetRelationId -- * LockRelIdGetRelationId --
* Returns relation identifier for a "lock" relation identifier. * Returns relation identifier for a "lock" relation identifier.
*/ */
Oid Oid
LRelIdGetRelationId(LRelId lRelId) LockRelIdGetRelationId(LockRelId lockRelId)
{ {
return (lRelId.relId); return (lockRelId.relId);
} }
/* /*
@ -169,15 +118,15 @@ DatabaseIdIsMyDatabaseId(Oid databaseId)
#endif #endif
/* /*
* LRelIdContainsMyDatabaseId -- * LockRelIdContainsMyDatabaseId --
* True iff "lock" relation identifier is valid in my present database. * True iff "lock" relation identifier is valid in my present database.
*/ */
#ifdef NOT_USED #ifdef NOT_USED
bool bool
LRelIdContainsMyDatabaseId(LRelId lRelId) LockRelIdContainsMyDatabaseId(LockRelId lockRelId)
{ {
return (bool) return (bool)
(!OidIsValid(lRelId.dbId) || lRelId.dbId == MyDatabaseId); (!OidIsValid(lockRelId.dbId) || lockRelId.dbId == MyDatabaseId);
} }
#endif #endif
@ -255,9 +204,9 @@ RelationInitLockInfo(Relation relation)
* ---------------- * ----------------
*/ */
if (IsSharedSystemRelationName(relname)) if (IsSharedSystemRelationName(relname))
LRelIdAssign(&info->lRelId, InvalidOid, relationid); LockRelIdAssign(&info->lockRelId, InvalidOid, relationid);
else else
LRelIdAssign(&info->lRelId, MyDatabaseId, relationid); LockRelIdAssign(&info->lockRelId, MyDatabaseId, relationid);
/* ---------------- /* ----------------
* store the transaction id in the lockInfo field * store the transaction id in the lockInfo field
@ -319,7 +268,7 @@ RelationDiscardLockInfo(Relation relation)
#ifdef LOCKDEBUGALL #ifdef LOCKDEBUGALL
#define LOCKDEBUGALL_30 \ #define LOCKDEBUGALL_30 \
elog(DEBUG, "RelationSetLockForDescriptorOpen(%s[%d,%d]) called", \ elog(DEBUG, "RelationSetLockForDescriptorOpen(%s[%d,%d]) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId)
#else #else
#define LOCKDEBUGALL_30 #define LOCKDEBUGALL_30
#endif /* LOCKDEBUGALL */ #endif /* LOCKDEBUGALL */
@ -351,7 +300,7 @@ RelationSetLockForDescriptorOpen(Relation relation)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_40 \ #define LOCKDEBUG_40 \
elog(DEBUG, "RelationSetLockForRead(%s[%d,%d]) called", \ elog(DEBUG, "RelationSetLockForRead(%s[%d,%d]) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId)
#else #else
#define LOCKDEBUG_40 #define LOCKDEBUG_40
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -363,7 +312,7 @@ elog(DEBUG, "RelationSetLockForRead(%s[%d,%d]) called", \
void void
RelationSetLockForRead(Relation relation) RelationSetLockForRead(Relation relation)
{ {
LockInfo linfo; LockInfo lockinfo;
/* ---------------- /* ----------------
* sanity checks * sanity checks
@ -383,15 +332,15 @@ RelationSetLockForRead(Relation relation)
if (!LockInfoIsValid(relation->lockInfo)) if (!LockInfoIsValid(relation->lockInfo))
{ {
RelationInitLockInfo(relation); RelationInitLockInfo(relation);
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
linfo->flags |= ReadRelationLock; lockinfo->flags |= ReadRelationLock;
MultiLockReln(linfo, READ_LOCK); MultiLockReln(lockinfo, READ_LOCK);
return; return;
} }
else else
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
MultiLockReln(linfo, READ_LOCK); MultiLockReln(lockinfo, READ_LOCK);
} }
/* ---------------- /* ----------------
@ -401,7 +350,7 @@ RelationSetLockForRead(Relation relation)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_50 \ #define LOCKDEBUG_50 \
elog(DEBUG, "RelationUnsetLockForRead(%s[%d,%d]) called", \ elog(DEBUG, "RelationUnsetLockForRead(%s[%d,%d]) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId)
#else #else
#define LOCKDEBUG_50 #define LOCKDEBUG_50
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -413,7 +362,7 @@ elog(DEBUG, "RelationUnsetLockForRead(%s[%d,%d]) called", \
void void
RelationUnsetLockForRead(Relation relation) RelationUnsetLockForRead(Relation relation)
{ {
LockInfo linfo; LockInfo lockinfo;
/* ---------------- /* ----------------
* sanity check * sanity check
@ -423,21 +372,21 @@ RelationUnsetLockForRead(Relation relation)
if (LockingDisabled()) if (LockingDisabled())
return; return;
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
/* ---------------- /* ----------------
* If we don't have lock info on the reln just go ahead and * If we don't have lock info on the reln just go ahead and
* release it. * release it.
* ---------------- * ----------------
*/ */
if (!LockInfoIsValid(linfo)) if (!LockInfoIsValid(lockinfo))
{ {
elog(ERROR, elog(ERROR,
"Releasing a lock on %s with invalid lock information", "Releasing a lock on %s with invalid lock information",
RelationGetRelationName(relation)); RelationGetRelationName(relation));
} }
MultiReleaseReln(linfo, READ_LOCK); MultiReleaseReln(lockinfo, READ_LOCK);
} }
/* ---------------- /* ----------------
@ -447,7 +396,7 @@ RelationUnsetLockForRead(Relation relation)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_60 \ #define LOCKDEBUG_60 \
elog(DEBUG, "RelationSetLockForWrite(%s[%d,%d]) called", \ elog(DEBUG, "RelationSetLockForWrite(%s[%d,%d]) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId)
#else #else
#define LOCKDEBUG_60 #define LOCKDEBUG_60
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -459,7 +408,7 @@ elog(DEBUG, "RelationSetLockForWrite(%s[%d,%d]) called", \
void void
RelationSetLockForWrite(Relation relation) RelationSetLockForWrite(Relation relation)
{ {
LockInfo linfo; LockInfo lockinfo;
/* ---------------- /* ----------------
* sanity checks * sanity checks
@ -479,15 +428,15 @@ RelationSetLockForWrite(Relation relation)
if (!LockInfoIsValid(relation->lockInfo)) if (!LockInfoIsValid(relation->lockInfo))
{ {
RelationInitLockInfo(relation); RelationInitLockInfo(relation);
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
linfo->flags |= WriteRelationLock; lockinfo->flags |= WriteRelationLock;
MultiLockReln(linfo, WRITE_LOCK); MultiLockReln(lockinfo, WRITE_LOCK);
return; return;
} }
else else
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
MultiLockReln(linfo, WRITE_LOCK); MultiLockReln(lockinfo, WRITE_LOCK);
} }
/* ---------------- /* ----------------
@ -497,7 +446,7 @@ RelationSetLockForWrite(Relation relation)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_70 \ #define LOCKDEBUG_70 \
elog(DEBUG, "RelationUnsetLockForWrite(%s[%d,%d]) called", \ elog(DEBUG, "RelationUnsetLockForWrite(%s[%d,%d]) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId); RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId)
#else #else
#define LOCKDEBUG_70 #define LOCKDEBUG_70
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -509,7 +458,7 @@ elog(DEBUG, "RelationUnsetLockForWrite(%s[%d,%d]) called", \
void void
RelationUnsetLockForWrite(Relation relation) RelationUnsetLockForWrite(Relation relation)
{ {
LockInfo linfo; LockInfo lockinfo;
/* ---------------- /* ----------------
* sanity checks * sanity checks
@ -519,16 +468,16 @@ RelationUnsetLockForWrite(Relation relation)
if (LockingDisabled()) if (LockingDisabled())
return; return;
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
if (!LockInfoIsValid(linfo)) if (!LockInfoIsValid(lockinfo))
{ {
elog(ERROR, elog(ERROR,
"Releasing a lock on %s with invalid lock information", "Releasing a lock on %s with invalid lock information",
RelationGetRelationName(relation)); RelationGetRelationName(relation));
} }
MultiReleaseReln(linfo, WRITE_LOCK); MultiReleaseReln(lockinfo, WRITE_LOCK);
} }
/* ---------------- /* ----------------
@ -538,10 +487,10 @@ RelationUnsetLockForWrite(Relation relation)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_80 \ #define LOCKDEBUG_80 \
elog(DEBUG, "RelationSetLockForTupleRead(%s[%d,%d], 0x%x) called", \ elog(DEBUG, "RelationSetLockForTupleRead(%s[%d,%d], 0x%x) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId, \ RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId, \
itemPointer) itemPointer)
#define LOCKDEBUG_81 \ #define LOCKDEBUG_81 \
elog(DEBUG, "RelationSetLockForTupleRead() escalating"); elog(DEBUG, "RelationSetLockForTupleRead() escalating")
#else #else
#define LOCKDEBUG_80 #define LOCKDEBUG_80
#define LOCKDEBUG_81 #define LOCKDEBUG_81
@ -555,7 +504,7 @@ elog(DEBUG, "RelationSetLockForTupleRead(%s[%d,%d], 0x%x) called", \
void void
RelationSetLockForTupleRead(Relation relation, ItemPointer itemPointer) RelationSetLockForTupleRead(Relation relation, ItemPointer itemPointer)
{ {
LockInfo linfo; LockInfo lockinfo;
TransactionId curXact; TransactionId curXact;
/* ---------------- /* ----------------
@ -576,71 +525,71 @@ RelationSetLockForTupleRead(Relation relation, ItemPointer itemPointer)
if (!LockInfoIsValid(relation->lockInfo)) if (!LockInfoIsValid(relation->lockInfo))
{ {
RelationInitLockInfo(relation); RelationInitLockInfo(relation);
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
linfo->flags |= lockinfo->flags |=
IntentReadRelationLock | IntentReadRelationLock |
IntentReadPageLock | IntentReadPageLock |
ReadTupleLock; ReadTupleLock;
MultiLockTuple(linfo, itemPointer, READ_LOCK); MultiLockTuple(lockinfo, itemPointer, READ_LOCK);
return; return;
} }
else else
linfo = (LockInfo) relation->lockInfo; lockinfo = (LockInfo) relation->lockInfo;
/* ---------------- /* ----------------
* no need to set a lower granularity lock * no need to set a lower granularity lock
* ---------------- * ----------------
*/ */
curXact = GetCurrentTransactionId(); curXact = GetCurrentTransactionId();
if ((linfo->flags & ReadRelationLock) && if ((lockinfo->flags & ReadRelationLock) &&
TransactionIdEquals(curXact, linfo->transactionIdData)) TransactionIdEquals(curXact, lockinfo->transactionIdData))
return; return;
/* ---------------- /* ----------------
* If we don't already have a tuple lock this transaction * If we don't already have a tuple lock this transaction
* ---------------- * ----------------
*/ */
if (!((linfo->flags & ReadTupleLock) && if (!((lockinfo->flags & ReadTupleLock) &&
TransactionIdEquals(curXact, linfo->transactionIdData))) TransactionIdEquals(curXact, lockinfo->transactionIdData)))
{ {
linfo->flags |= lockinfo->flags |=
IntentReadRelationLock | IntentReadRelationLock |
IntentReadPageLock | IntentReadPageLock |
ReadTupleLock; ReadTupleLock;
/* clear count */ /* clear count */
linfo->flags &= ~TupleLevelLockCountMask; lockinfo->flags &= ~TupleLevelLockCountMask;
} }
else else
{ {
if (TupleLevelLockLimit == (TupleLevelLockCountMask & if (TupleLevelLockLimit == (TupleLevelLockCountMask &
linfo->flags)) lockinfo->flags))
{ {
LOCKDEBUG_81; LOCKDEBUG_81;
/* escalate */ /* escalate */
MultiLockReln(linfo, READ_LOCK); MultiLockReln(lockinfo, READ_LOCK);
/* clear count */ /* clear count */
linfo->flags &= ~TupleLevelLockCountMask; lockinfo->flags &= ~TupleLevelLockCountMask;
return; return;
} }
/* increment count */ /* increment count */
linfo->flags = lockinfo->flags =
(linfo->flags & ~TupleLevelLockCountMask) | (lockinfo->flags & ~TupleLevelLockCountMask) |
(1 + (TupleLevelLockCountMask & linfo->flags)); (1 + (TupleLevelLockCountMask & lockinfo->flags));
} }
TransactionIdStore(curXact, &linfo->transactionIdData); TransactionIdStore(curXact, &lockinfo->transactionIdData);
/* ---------------- /* ----------------
* Lock the tuple. * Lock the tuple.
* ---------------- * ----------------
*/ */
MultiLockTuple(linfo, itemPointer, READ_LOCK); MultiLockTuple(lockinfo, itemPointer, READ_LOCK);
} }
#endif #endif
@ -652,7 +601,7 @@ RelationSetLockForTupleRead(Relation relation, ItemPointer itemPointer)
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_90 \ #define LOCKDEBUG_90 \
elog(DEBUG, "RelationSetLockForReadPage(%s[%d,%d], @%d) called", \ elog(DEBUG, "RelationSetLockForReadPage(%s[%d,%d], @%d) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId, page); RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId, page)
#else #else
#define LOCKDEBUG_90 #define LOCKDEBUG_90
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -664,7 +613,7 @@ elog(DEBUG, "RelationSetLockForReadPage(%s[%d,%d], @%d) called", \
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_100 \ #define LOCKDEBUG_100 \
elog(DEBUG, "RelationSetLockForWritePage(%s[%d,%d], @%d) called", \ elog(DEBUG, "RelationSetLockForWritePage(%s[%d,%d], @%d) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId, page); RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId, page)
#else #else
#define LOCKDEBUG_100 #define LOCKDEBUG_100
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -686,7 +635,7 @@ RelationSetLockForWritePage(Relation relation,
return; return;
/* --------------- /* ---------------
* Make sure linfo is initialized * Make sure lockinfo is initialized
* --------------- * ---------------
*/ */
if (!LockInfoIsValid(relation->lockInfo)) if (!LockInfoIsValid(relation->lockInfo))
@ -706,7 +655,7 @@ RelationSetLockForWritePage(Relation relation,
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_110 \ #define LOCKDEBUG_110 \
elog(DEBUG, "RelationUnsetLockForReadPage(%s[%d,%d], @%d) called", \ elog(DEBUG, "RelationUnsetLockForReadPage(%s[%d,%d], @%d) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId, page) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId, page)
#else #else
#define LOCKDEBUG_110 #define LOCKDEBUG_110
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -718,7 +667,7 @@ elog(DEBUG, "RelationUnsetLockForReadPage(%s[%d,%d], @%d) called", \
#ifdef LOCKDEBUG #ifdef LOCKDEBUG
#define LOCKDEBUG_120 \ #define LOCKDEBUG_120 \
elog(DEBUG, "RelationUnsetLockForWritePage(%s[%d,%d], @%d) called", \ elog(DEBUG, "RelationUnsetLockForWritePage(%s[%d,%d], @%d) called", \
RelationGetRelationName(relation), lRelId.dbId, lRelId.relId, page) RelationGetRelationName(relation), lockRelId.dbId, lockRelId.relId, page)
#else #else
#define LOCKDEBUG_120 #define LOCKDEBUG_120
#endif /* LOCKDEBUG */ #endif /* LOCKDEBUG */
@ -950,11 +899,11 @@ RelationUnsetLockForExtend(Relation relation)
#endif #endif
/* /*
* Create an LRelid --- Why not just pass in a pointer to the storage? * Create an LockRelid --- Why not just pass in a pointer to the storage?
*/ */
static void static void
LRelIdAssign(LRelId *lRelId, Oid dbId, Oid relId) LockRelIdAssign(LockRelId *lockRelId, Oid dbId, Oid relId)
{ {
lRelId->dbId = dbId; lockRelId->dbId = dbId;
lRelId->relId = relId; lockRelId->relId = relId;
} }

View File

@ -12,7 +12,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.19 1998/06/30 02:33:31 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.20 1998/07/13 16:34:51 momjian Exp $
* *
* NOTES: * NOTES:
* (1) The lock.c module assumes that the caller here is doing * (1) The lock.c module assumes that the caller here is doing
@ -113,7 +113,7 @@ InitMultiLevelLocks()
* Returns: TRUE if the lock can be set, FALSE otherwise. * Returns: TRUE if the lock can be set, FALSE otherwise.
*/ */
bool bool
MultiLockReln(LockInfo linfo, LOCKMODE lockmode) MultiLockReln(LockInfo lockinfo, LOCKMODE lockmode)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -122,8 +122,8 @@ MultiLockReln(LockInfo linfo, LOCKMODE lockmode)
* will return miss if the padding bytes aren't zero'd. * will return miss if the padding bytes aren't zero'd.
*/ */
MemSet(&tag, 0, sizeof(tag)); MemSet(&tag, 0, sizeof(tag));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
return (MultiAcquire(MultiTableId, &tag, lockmode, RELN_LEVEL)); return (MultiAcquire(MultiTableId, &tag, lockmode, RELN_LEVEL));
} }
@ -136,7 +136,7 @@ MultiLockReln(LockInfo linfo, LOCKMODE lockmode)
* at the page and relation level. * at the page and relation level.
*/ */
bool bool
MultiLockTuple(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode) MultiLockTuple(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -146,8 +146,8 @@ MultiLockTuple(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode)
*/ */
MemSet(&tag, 0, sizeof(tag)); MemSet(&tag, 0, sizeof(tag));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
/* not locking any valid Tuple, just the page */ /* not locking any valid Tuple, just the page */
tag.tupleId = *tidPtr; tag.tupleId = *tidPtr;
@ -158,7 +158,7 @@ MultiLockTuple(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode)
* same as above at page level * same as above at page level
*/ */
bool bool
MultiLockPage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode) MultiLockPage(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -178,8 +178,8 @@ MultiLockPage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode)
* when we say lock the page we mean the 8k block. -Jeff 16 July 1991 * when we say lock the page we mean the 8k block. -Jeff 16 July 1991
* ---------------------------- * ----------------------------
*/ */
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid)); BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid));
return (MultiAcquire(MultiTableId, &tag, lockmode, PAGE_LEVEL)); return (MultiAcquire(MultiTableId, &tag, lockmode, PAGE_LEVEL));
} }
@ -302,7 +302,7 @@ MultiAcquire(LOCKMETHOD lockmethod,
*/ */
#ifdef NOT_USED #ifdef NOT_USED
bool bool
MultiReleasePage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode) MultiReleasePage(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -314,8 +314,8 @@ MultiReleasePage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode)
*/ */
MemSet(&tag, 0, sizeof(LOCKTAG)); MemSet(&tag, 0, sizeof(LOCKTAG));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid)); BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid));
return (MultiRelease(MultiTableId, &tag, lockmode, PAGE_LEVEL)); return (MultiRelease(MultiTableId, &tag, lockmode, PAGE_LEVEL));
@ -328,7 +328,7 @@ MultiReleasePage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode)
* ------------------ * ------------------
*/ */
bool bool
MultiReleaseReln(LockInfo linfo, LOCKMODE lockmode) MultiReleaseReln(LockInfo lockinfo, LOCKMODE lockmode)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -339,8 +339,8 @@ MultiReleaseReln(LockInfo linfo, LOCKMODE lockmode)
* ------------------ * ------------------
*/ */
MemSet(&tag, 0, sizeof(LOCKTAG)); MemSet(&tag, 0, sizeof(LOCKTAG));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
return (MultiRelease(MultiTableId, &tag, lockmode, RELN_LEVEL)); return (MultiRelease(MultiTableId, &tag, lockmode, RELN_LEVEL));
} }

View File

@ -13,7 +13,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/single.c,v 1.7 1998/06/30 02:33:32 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/single.c,v 1.8 1998/07/13 16:34:52 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -32,7 +32,7 @@
* Returns: TRUE if the lock can be set, FALSE otherwise. * Returns: TRUE if the lock can be set, FALSE otherwise.
*/ */
bool bool
SingleLockReln(LockInfo linfo, LOCKMODE lockmode, int action) SingleLockReln(LockInfo lockinfo, LOCKMODE lockmode, int action)
{ {
LOCKTAG tag; LOCKTAG tag;
@ -41,8 +41,8 @@ SingleLockReln(LockInfo linfo, LOCKMODE lockmode, int action)
* will return miss if the padding bytes aren't zero'd. * will return miss if the padding bytes aren't zero'd.
*/ */
MemSet(&tag, 0, sizeof(tag)); MemSet(&tag, 0, sizeof(tag));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
BlockIdSet(&(tag.tupleId.ip_blkid), InvalidBlockNumber); BlockIdSet(&(tag.tupleId.ip_blkid), InvalidBlockNumber);
tag.tupleId.ip_posid = InvalidOffsetNumber; tag.tupleId.ip_posid = InvalidOffsetNumber;
@ -61,7 +61,7 @@ SingleLockReln(LockInfo linfo, LOCKMODE lockmode, int action)
* *
*/ */
bool bool
SingleLockPage(LockInfo linfo, SingleLockPage(LockInfo lockinfo,
ItemPointer tidPtr, ItemPointer tidPtr,
LOCKMODE lockmode, LOCKMODE lockmode,
int action) int action)
@ -73,8 +73,8 @@ SingleLockPage(LockInfo linfo,
* will return miss if the padding bytes aren't zero'd. * will return miss if the padding bytes aren't zero'd.
*/ */
MemSet(&tag, 0, sizeof(tag)); MemSet(&tag, 0, sizeof(tag));
tag.relId = linfo->lRelId.relId; tag.relId = lockinfo->lockRelId.relId;
tag.dbId = linfo->lRelId.dbId; tag.dbId = lockinfo->lockRelId.dbId;
BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid)); BlockIdCopy(&(tag.tupleId.ip_blkid), &(tidPtr->ip_blkid));
tag.tupleId.ip_posid = InvalidOffsetNumber; tag.tupleId.ip_posid = InvalidOffsetNumber;

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: libpq.h,v 1.17 1998/07/09 03:29:01 scrappy Exp $ * $Id: libpq.h,v 1.18 1998/07/13 16:34:53 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -49,8 +49,8 @@ typedef struct
typedef struct TypeBlock typedef struct TypeBlock
{ {
char name[NAMEDATALEN]; /* name of the attribute */ char name[NAMEDATALEN]; /* name of the attribute */
int adtid; /* adtid of the type */ int typid; /* typid of the type */
int adtsize; /* adtsize of the type */ int typlen; /* typlen of the type */
} TypeBlock; } TypeBlock;
/* ---------------- /* ----------------

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: buf_internals.h,v 1.22 1998/06/15 18:40:01 momjian Exp $ * $Id: buf_internals.h,v 1.23 1998/07/13 16:34:55 momjian Exp $
* *
* NOTE * NOTE
* If BUFFERPAGE0 is defined, then 0 will be used as a * If BUFFERPAGE0 is defined, then 0 will be used as a
@ -51,7 +51,7 @@ typedef long **BufferBlock;
struct buftag struct buftag
{ {
LRelId relId; LockRelId relId;
BlockNumber blockNum; /* blknum relative to begin of reln */ BlockNumber blockNum; /* blknum relative to begin of reln */
}; };
@ -65,14 +65,14 @@ struct buftag
#define INIT_BUFFERTAG(a,xx_reln,xx_blockNum) \ #define INIT_BUFFERTAG(a,xx_reln,xx_blockNum) \
( \ ( \
(a)->blockNum = xx_blockNum, \ (a)->blockNum = xx_blockNum, \
(a)->relId = RelationGetLRelId(xx_reln) \ (a)->relId = RelationGetLockRelId(xx_reln) \
) )
#ifdef NOT_USED #ifdef NOT_USED
#define COPY_BUFFERTAG(a,b) \ #define COPY_BUFFERTAG(a,b) \
( \ ( \
(a)->blockNum = (b)->blockNum, \ (a)->blockNum = (b)->blockNum, \
LRelIdAssign(*(a),*(b)) \ LockRelIdAssign(*(a),*(b)) \
) )
#define EQUAL_BUFFERTAG(a,b) \ #define EQUAL_BUFFERTAG(a,b) \

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: lmgr.h,v 1.12 1998/06/30 02:33:32 momjian Exp $ * $Id: lmgr.h,v 1.13 1998/07/13 16:34:56 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -15,32 +15,57 @@
#include <storage/lock.h> #include <storage/lock.h>
#include <utils/rel.h> #include <utils/rel.h>
#include <catalog/catname.h>
/* /*
* This was moved from pladt.h for the new lock manager. Want to obsolete * This was moved from pladt.h for the new lock manager. Want to obsolete
* all of the old code. * all of the old code.
*/ */
typedef struct LRelId typedef struct LockRelId
{ {
Oid relId; /* a relation identifier */ Oid relId; /* a relation identifier */
Oid dbId; /* a database identifier */ Oid dbId; /* a database identifier */
} LRelId; } LockRelId;
typedef struct LockInfoData typedef struct LockInfoData
{ {
bool initialized; bool initialized;
LRelId lRelId; LockRelId lockRelId;
TransactionId transactionIdData; TransactionId transactionIdData;
uint16 flags; uint16 flags;
} LockInfoData; } LockInfoData;
typedef LockInfoData *LockInfo; typedef LockInfoData *LockInfo;
#define LockInfoIsValid(linfo) \ #define LockInfoIsValid(lockinfo) \
((PointerIsValid(linfo)) && ((LockInfo) linfo)->initialized) ((PointerIsValid(lockinfo)) && ((LockInfo) lockinfo)->initialized)
extern LockRelId VariableRelationLockRelId;
/*
* RelationGetLockRelId --
* Returns "lock" relation identifier for a relation.
*/
/* ----------------
* final condition is a hack to prevent problems during
* VARIABLE relation initialization
* ----------------
*/
#define RelationGetLockRelId(relation) \
( \
AssertMacro(RelationIsValid(relation)), \
(!LockInfoIsValid((LockInfo)(relation)->lockInfo)) ? \
RelationInitLockInfo(relation) \
: \
(void)NULL, \
(strcmp(RelationGetRelationName(relation)->data, \
VariableRelationName) == 0) ? \
VariableRelationLockRelId \
: \
((LockInfo)(relation)->lockInfo)->lockRelId \
)
extern LRelId RelationGetLRelId(Relation relation); extern Oid LockRelIdGetRelationId(LockRelId lockRelId);
extern Oid LRelIdGetRelationId(LRelId lRelId);
extern void RelationInitLockInfo(Relation relation); extern void RelationInitLockInfo(Relation relation);
extern void RelationSetLockForDescriptorOpen(Relation relation); extern void RelationSetLockForDescriptorOpen(Relation relation);
extern void RelationSetLockForRead(Relation relation); extern void RelationSetLockForRead(Relation relation);
@ -72,9 +97,9 @@ extern void RelationSetWIntentLock(Relation relation);
extern void RelationUnsetWIntentLock(Relation relation); extern void RelationUnsetWIntentLock(Relation relation);
/* single.c */ /* single.c */
extern bool SingleLockReln(LockInfo linfo, LOCKMODE lockmode, int action); extern bool SingleLockReln(LockInfo lockinfo, LOCKMODE lockmode, int action);
extern bool extern bool
SingleLockPage(LockInfo linfo, ItemPointer tidPtr, SingleLockPage(LockInfo lockinfo, ItemPointer tidPtr,
LOCKMODE lockmode, int action); LOCKMODE lockmode, int action);
/* proc.c */ /* proc.c */

View File

@ -7,7 +7,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: multilev.h,v 1.10 1998/06/30 02:33:33 momjian Exp $ * $Id: multilev.h,v 1.11 1998/07/13 16:34:58 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -52,9 +52,9 @@ extern LOCKMETHOD ShortTermTableId;
* function prototypes * function prototypes
*/ */
extern LOCKMETHOD InitMultiLevelLocks(void); extern LOCKMETHOD InitMultiLevelLocks(void);
extern bool MultiLockReln(LockInfo linfo, LOCKMODE lockmode); extern bool MultiLockReln(LockInfo lockinfo, LOCKMODE lockmode);
extern bool MultiLockTuple(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode); extern bool MultiLockTuple(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode);
extern bool MultiLockPage(LockInfo linfo, ItemPointer tidPtr, LOCKMODE lockmode); extern bool MultiLockPage(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode);
extern bool MultiReleaseReln(LockInfo linfo, LOCKMODE lockmode); extern bool MultiReleaseReln(LockInfo lockinfo, LOCKMODE lockmode);
#endif /* MULTILEV_H */ #endif /* MULTILEV_H */

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.58 1998/07/13 02:41:58 momjian Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.59 1998/07/13 16:35:00 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -497,12 +497,12 @@ getRowDescriptions(PGconn *conn)
for (i = 0; i < nfields; i++) for (i = 0; i < nfields; i++)
{ {
char typName[MAX_MESSAGE_LEN]; char typName[MAX_MESSAGE_LEN];
int adtid; int typid;
int typlen; int typlen;
int atttypmod = -1; int atttypmod = -1;
if (pqGets(typName, MAX_MESSAGE_LEN, conn) || if (pqGets(typName, MAX_MESSAGE_LEN, conn) ||
pqGetInt(&adtid, 4, conn) || pqGetInt(&typid, 4, conn) ||
pqGetInt(&typlen, 2, conn) || pqGetInt(&typlen, 2, conn) ||
pqGetInt(&atttypmod, 4, conn)) pqGetInt(&atttypmod, 4, conn))
{ {
@ -510,7 +510,7 @@ getRowDescriptions(PGconn *conn)
return EOF; return EOF;
} }
result->attDescs[i].name = strdup(typName); result->attDescs[i].name = strdup(typName);
result->attDescs[i].adtid = adtid; result->attDescs[i].typid = typid;
result->attDescs[i].typlen = (short) typlen; result->attDescs[i].typlen = (short) typlen;
result->attDescs[i].atttypmod = atttypmod; result->attDescs[i].atttypmod = atttypmod;
} }
@ -1272,7 +1272,7 @@ PQftype(PGresult *res, int field_num)
return InvalidOid; return InvalidOid;
} }
if (res->attDescs) if (res->attDescs)
return res->attDescs[field_num].adtid; return res->attDescs[field_num].typid;
else else
return InvalidOid; return InvalidOid;
} }

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: libpq-fe.h,v 1.33 1998/07/13 02:41:59 momjian Exp $ * $Id: libpq-fe.h,v 1.34 1998/07/13 16:35:02 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -76,8 +76,8 @@ extern "C"
typedef struct pgresAttDesc typedef struct pgresAttDesc
{ {
char *name; /* type name */ char *name; /* type name */
Oid adtid; /* type id */ Oid typid; /* type id */
short adtsize; /* type size */ short typlen; /* type size */
int atttypmod; /* type-specific modifier info */ int atttypmod; /* type-specific modifier info */
} PGresAttDesc; } PGresAttDesc;

View File

@ -223,7 +223,7 @@ mylog("getCharPrecision: type=%d, col=%d, unknown = %d\n", type,col,handle_unkno
if (stmt->manual_result) { if (stmt->manual_result) {
flds = result->fields; flds = result->fields;
if (flds) if (flds)
return flds->adtsize[col]; return flds->typlen[col];
else else
return maxsize; return maxsize;
} }