Inline function, rename libpq variablees, change lrel to lockrel.
This commit is contained in:
parent
8bac4ca87b
commit
5aea4062d6
src
backend
include
interfaces
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ PQftype(PortalBuffer *portal, int tuple_index, int field_number)
|
|||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
|
@ -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) \
|
||||||
|
@ -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 */
|
||||||
|
@ -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 */
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user