mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Comment cleanup in btree.c.
FossilOrigin-Name: 32966ba4796e70d0afcff6abdda9bdcba08b098a
This commit is contained in:
24
manifest
24
manifest
@@ -1,5 +1,8 @@
|
|||||||
C Experimental\sfix\sfor\s[f777251dc7].\sThis\smay\sbe\schanged\syet.
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
D 2009-10-16T14:55:03
|
Hash: SHA1
|
||||||
|
|
||||||
|
C Comment\scleanup\sin\sbtree.c.
|
||||||
|
D 2009-10-16T15:05:19
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
|
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@@ -106,7 +109,7 @@ F src/auth.c a5471a6951a18f79d783da34be22cd94dfbe603a
|
|||||||
F src/backup.c 6f1c2d9862c8a3feb7739dfcca02c1f5352e37f3
|
F src/backup.c 6f1c2d9862c8a3feb7739dfcca02c1f5352e37f3
|
||||||
F src/bitvec.c ed215b95734045e58358c3b3e16448f8fe6a235a
|
F src/bitvec.c ed215b95734045e58358c3b3e16448f8fe6a235a
|
||||||
F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7
|
F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7
|
||||||
F src/btree.c 953ad6635e39df97bcd5ff6983128622c634e9f6
|
F src/btree.c b2d060e41b4318fb5e52d80b75e19bcef1b1f2db
|
||||||
F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe
|
F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe
|
||||||
F src/btreeInt.h cce1c3360cd5549ffa79f981951dfae93118ad79
|
F src/btreeInt.h cce1c3360cd5549ffa79f981951dfae93118ad79
|
||||||
F src/build.c 3c5762687d0554ebe8844dfaddb828fcc15fe16d
|
F src/build.c 3c5762687d0554ebe8844dfaddb828fcc15fe16d
|
||||||
@@ -758,7 +761,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 550566a75fc79e3662431ba493af853b522d8850
|
P 174477bca05d019e663fd2b7cd031189ab2e010a
|
||||||
R 778bb64a8b1c35d3d0457babdafdb276
|
R 86490e3083ac0bc0fd081f22ec541c2a
|
||||||
U dan
|
U drh
|
||||||
Z b88fc6ff2b43f8e3419b27ff47f04190
|
Z b17767b2b8f9c8009e027786b6c3af45
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
|
iD8DBQFK2IuyoxKgR168RlERAtgCAJ98+WY1Pr2TifLYL6T7GXUUzCZi6wCfVaBD
|
||||||
|
oWFTM8wlOhaD8eBE8rtZdkU=
|
||||||
|
=6Cef
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
|
@@ -1 +1 @@
|
|||||||
174477bca05d019e663fd2b7cd031189ab2e010a
|
32966ba4796e70d0afcff6abdda9bdcba08b098a
|
101
src/btree.c
101
src/btree.c
@@ -90,22 +90,24 @@ int sqlite3_enable_shared_cache(int enable){
|
|||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
/*
|
/*
|
||||||
** This function is only used as part of an assert() statement. It checks
|
**** This function is only used as part of an assert() statement. ***
|
||||||
** that connection p holds the required locks to read or write to the
|
**
|
||||||
** b-tree with root page iRoot. If so, true is returned. Otherwise, false.
|
** Check to see if pBtree holds the required locks to read or write to the
|
||||||
** For example, when writing to a table b-tree with root-page iRoot via
|
** table with root page iRoot. Return 1 if it does and 0 if not.
|
||||||
|
**
|
||||||
|
** For example, when writing to a table with root-page iRoot via
|
||||||
** Btree connection pBtree:
|
** Btree connection pBtree:
|
||||||
**
|
**
|
||||||
** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
|
** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
|
||||||
**
|
**
|
||||||
** When writing to an index b-tree that resides in a sharable database, the
|
** When writing to an index that resides in a sharable database, the
|
||||||
** caller should have first obtained a lock specifying the root page of
|
** caller should have first obtained a lock specifying the root page of
|
||||||
** the corresponding table b-tree. This makes things a bit more complicated,
|
** the corresponding table. This makes things a bit more complicated,
|
||||||
** as this module treats each b-tree as a separate structure. To determine
|
** as this module treats each table as a separate structure. To determine
|
||||||
** the table b-tree corresponding to the index b-tree being written, this
|
** the table corresponding to the index being written, this
|
||||||
** function has to search through the database schema.
|
** function has to search through the database schema.
|
||||||
**
|
**
|
||||||
** Instead of a lock on the b-tree rooted at page iRoot, the caller may
|
** Instead of a lock on the table/index rooted at page iRoot, the caller may
|
||||||
** hold a write-lock on the schema table (root page 1). This is also
|
** hold a write-lock on the schema table (root page 1). This is also
|
||||||
** acceptable.
|
** acceptable.
|
||||||
*/
|
*/
|
||||||
@@ -119,20 +121,25 @@ static int hasSharedCacheTableLock(
|
|||||||
Pgno iTab = 0;
|
Pgno iTab = 0;
|
||||||
BtLock *pLock;
|
BtLock *pLock;
|
||||||
|
|
||||||
/* If this b-tree database is not shareable, or if the client is reading
|
/* If this database is not shareable, or if the client is reading
|
||||||
** and has the read-uncommitted flag set, then no lock is required.
|
** and has the read-uncommitted flag set, then no lock is required.
|
||||||
** In these cases return true immediately. If the client is reading
|
** Return true immediately.
|
||||||
** or writing an index b-tree, but the schema is not loaded, then return
|
*/
|
||||||
** true also. In this case the lock is required, but it is too difficult
|
|
||||||
** to check if the client actually holds it. This doesn't happen very
|
|
||||||
** often. */
|
|
||||||
if( (pBtree->sharable==0)
|
if( (pBtree->sharable==0)
|
||||||
|| (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
|
|| (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
|
||||||
|| (isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0 ))
|
|
||||||
){
|
){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the client is reading or writing an index and the schema is
|
||||||
|
** not loaded, then it is too difficult to actually check to see if
|
||||||
|
** the correct locks are held. So do not bother - just return true.
|
||||||
|
** This case does not come up very often anyhow.
|
||||||
|
*/
|
||||||
|
if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Figure out the root-page that the lock should be held on. For table
|
/* Figure out the root-page that the lock should be held on. For table
|
||||||
** b-trees, this is just the root page of the b-tree being read or
|
** b-trees, this is just the root page of the b-tree being read or
|
||||||
** written. For index b-trees, it is the root page of the associated
|
** written. For index b-trees, it is the root page of the associated
|
||||||
@@ -164,14 +171,24 @@ static int hasSharedCacheTableLock(
|
|||||||
/* Failed to find the required lock. */
|
/* Failed to find the required lock. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* SQLITE_DEBUG */
|
||||||
|
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
/*
|
/*
|
||||||
** This function is also used as part of assert() statements only. It
|
**** This function may be used as part of assert() statements only. ****
|
||||||
** returns true if there exist one or more cursors open on the table
|
|
||||||
** with root page iRoot that do not belong to either connection pBtree
|
|
||||||
** or some other connection that has the read-uncommitted flag set.
|
|
||||||
**
|
**
|
||||||
** For example, before writing to page iRoot:
|
** Return true if it would be illegal for pBtree to write into the
|
||||||
|
** table or index rooted at iRoot because other shared connections are
|
||||||
|
** simultaneously reading that same table or index.
|
||||||
|
**
|
||||||
|
** It is illegal for pBtree to write if some other Btree object that
|
||||||
|
** shares the same BtShared object is currently reading or writing
|
||||||
|
** the iRoot table. Except, if the other Btree object has the
|
||||||
|
** read-uncommitted flag set, then it is OK for the other object to
|
||||||
|
** have a read cursor.
|
||||||
|
**
|
||||||
|
** For example, before writing to any part of the table or index
|
||||||
|
** rooted at page iRoot, one should call:
|
||||||
**
|
**
|
||||||
** assert( !hasReadConflicts(pBtree, iRoot) );
|
** assert( !hasReadConflicts(pBtree, iRoot) );
|
||||||
*/
|
*/
|
||||||
@@ -190,7 +207,7 @@ static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
|
|||||||
#endif /* #ifdef SQLITE_DEBUG */
|
#endif /* #ifdef SQLITE_DEBUG */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Query to see if btree handle p may obtain a lock of type eLock
|
** Query to see if Btree handle p may obtain a lock of type eLock
|
||||||
** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
|
** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
|
||||||
** SQLITE_OK if the lock may be obtained (by calling
|
** SQLITE_OK if the lock may be obtained (by calling
|
||||||
** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
|
** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
|
||||||
@@ -211,7 +228,7 @@ static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
|
|||||||
assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
|
assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
|
||||||
assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
|
assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
|
||||||
|
|
||||||
/* This is a no-op if the shared-cache is not enabled */
|
/* This routine is a no-op if the shared-cache is not enabled */
|
||||||
if( !p->sharable ){
|
if( !p->sharable ){
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
@@ -257,10 +274,10 @@ static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
|
|||||||
**
|
**
|
||||||
** This function assumes the following:
|
** This function assumes the following:
|
||||||
**
|
**
|
||||||
** (a) The specified b-tree connection handle is connected to a sharable
|
** (a) The specified Btree object p is connected to a sharable
|
||||||
** b-tree database (one with the BtShared.sharable) flag set, and
|
** database (one with the BtShared.sharable flag set), and
|
||||||
**
|
**
|
||||||
** (b) No other b-tree connection handle holds a lock that conflicts
|
** (b) No other Btree objects hold a lock that conflicts
|
||||||
** with the requested lock (i.e. querySharedCacheTableLock() has
|
** with the requested lock (i.e. querySharedCacheTableLock() has
|
||||||
** already been called and returned SQLITE_OK).
|
** already been called and returned SQLITE_OK).
|
||||||
**
|
**
|
||||||
@@ -325,9 +342,9 @@ static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
|
|||||||
#ifndef SQLITE_OMIT_SHARED_CACHE
|
#ifndef SQLITE_OMIT_SHARED_CACHE
|
||||||
/*
|
/*
|
||||||
** Release all the table locks (locks obtained via calls to
|
** Release all the table locks (locks obtained via calls to
|
||||||
** the setSharedCacheTableLock() procedure) held by Btree handle p.
|
** the setSharedCacheTableLock() procedure) held by Btree object p.
|
||||||
**
|
**
|
||||||
** This function assumes that handle p has an open read or write
|
** This function assumes that Btree p has an open read or write
|
||||||
** transaction. If it does not, then the BtShared.isPending variable
|
** transaction. If it does not, then the BtShared.isPending variable
|
||||||
** may be incorrectly cleared.
|
** may be incorrectly cleared.
|
||||||
*/
|
*/
|
||||||
@@ -360,7 +377,7 @@ static void clearAllSharedCacheTableLocks(Btree *p){
|
|||||||
pBt->isExclusive = 0;
|
pBt->isExclusive = 0;
|
||||||
pBt->isPending = 0;
|
pBt->isPending = 0;
|
||||||
}else if( pBt->nTransaction==2 ){
|
}else if( pBt->nTransaction==2 ){
|
||||||
/* This function is called when connection p is concluding its
|
/* This function is called when Btree p is concluding its
|
||||||
** transaction. If there currently exists a writer, and p is not
|
** transaction. If there currently exists a writer, and p is not
|
||||||
** that writer, then the number of locks held by connections other
|
** that writer, then the number of locks held by connections other
|
||||||
** than the writer must be about to drop to zero. In this case
|
** than the writer must be about to drop to zero. In this case
|
||||||
@@ -374,7 +391,7 @@ static void clearAllSharedCacheTableLocks(Btree *p){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This function changes all write-locks held by connection p to read-locks.
|
** This function changes all write-locks held by Btree p into read-locks.
|
||||||
*/
|
*/
|
||||||
static void downgradeAllSharedCacheTableLocks(Btree *p){
|
static void downgradeAllSharedCacheTableLocks(Btree *p){
|
||||||
BtShared *pBt = p->pBt;
|
BtShared *pBt = p->pBt;
|
||||||
@@ -395,9 +412,11 @@ static void downgradeAllSharedCacheTableLocks(Btree *p){
|
|||||||
static void releasePage(MemPage *pPage); /* Forward reference */
|
static void releasePage(MemPage *pPage); /* Forward reference */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Verify that the cursor holds a mutex on the BtShared
|
***** This routine is used inside of assert() only ****
|
||||||
|
**
|
||||||
|
** Verify that the cursor holds the mutex on its BtShared
|
||||||
*/
|
*/
|
||||||
#ifndef NDEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
static int cursorHoldsMutex(BtCursor *p){
|
static int cursorHoldsMutex(BtCursor *p){
|
||||||
return sqlite3_mutex_held(p->pBt->mutex);
|
return sqlite3_mutex_held(p->pBt->mutex);
|
||||||
}
|
}
|
||||||
@@ -428,7 +447,7 @@ static void invalidateAllOverflowCache(BtShared *pBt){
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** This function is called before modifying the contents of a table
|
** This function is called before modifying the contents of a table
|
||||||
** b-tree to invalidate any incrblob cursors that are open on the
|
** to invalidate any incrblob cursors that are open on the
|
||||||
** row or one of the rows being modified.
|
** row or one of the rows being modified.
|
||||||
**
|
**
|
||||||
** If argument isClearTable is true, then the entire contents of the
|
** If argument isClearTable is true, then the entire contents of the
|
||||||
@@ -437,7 +456,7 @@ static void invalidateAllOverflowCache(BtShared *pBt){
|
|||||||
**
|
**
|
||||||
** Otherwise, if argument isClearTable is false, then the row with
|
** Otherwise, if argument isClearTable is false, then the row with
|
||||||
** rowid iRow is being replaced or deleted. In this case invalidate
|
** rowid iRow is being replaced or deleted. In this case invalidate
|
||||||
** only those incrblob cursors open on this specific row.
|
** only those incrblob cursors open on that specific row.
|
||||||
*/
|
*/
|
||||||
static void invalidateIncrblobCursors(
|
static void invalidateIncrblobCursors(
|
||||||
Btree *pBtree, /* The database file to check */
|
Btree *pBtree, /* The database file to check */
|
||||||
@@ -455,10 +474,11 @@ static void invalidateIncrblobCursors(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
/* Stub functions when INCRBLOB is omitted */
|
||||||
#define invalidateOverflowCache(x)
|
#define invalidateOverflowCache(x)
|
||||||
#define invalidateAllOverflowCache(x)
|
#define invalidateAllOverflowCache(x)
|
||||||
#define invalidateIncrblobCursors(x,y,z)
|
#define invalidateIncrblobCursors(x,y,z)
|
||||||
#endif
|
#endif /* SQLITE_OMIT_INCRBLOB */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Set bit pgno of the BtShared.pHasContent bitvec. This is called
|
** Set bit pgno of the BtShared.pHasContent bitvec. This is called
|
||||||
@@ -491,7 +511,7 @@ static void invalidateIncrblobCursors(
|
|||||||
** The solution is the BtShared.pHasContent bitvec. Whenever a page is
|
** The solution is the BtShared.pHasContent bitvec. Whenever a page is
|
||||||
** moved to become a free-list leaf page, the corresponding bit is
|
** moved to become a free-list leaf page, the corresponding bit is
|
||||||
** set in the bitvec. Whenever a leaf page is extracted from the free-list,
|
** set in the bitvec. Whenever a leaf page is extracted from the free-list,
|
||||||
** optimization 2 above is ommitted if the corresponding bit is already
|
** optimization 2 above is omitted if the corresponding bit is already
|
||||||
** set in BtShared.pHasContent. The contents of the bitvec are cleared
|
** set in BtShared.pHasContent. The contents of the bitvec are cleared
|
||||||
** at the end of every transaction.
|
** at the end of every transaction.
|
||||||
*/
|
*/
|
||||||
@@ -587,8 +607,8 @@ static int saveCursorPosition(BtCursor *pCur){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Save the positions of all cursors except pExcept open on the table
|
** Save the positions of all cursors (except pExcept) that are open on
|
||||||
** with root-page iRoot. Usually, this is called just before cursor
|
** the table with root-page iRoot. Usually, this is called just before cursor
|
||||||
** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
|
** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
|
||||||
*/
|
*/
|
||||||
static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
|
static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
|
||||||
@@ -993,7 +1013,10 @@ static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
|
|||||||
assert( nSize==debuginfo.nSize );
|
assert( nSize==debuginfo.nSize );
|
||||||
return (u16)nSize;
|
return (u16)nSize;
|
||||||
}
|
}
|
||||||
#ifndef NDEBUG
|
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
|
/* This variation on cellSizePtr() is used inside of assert() statements
|
||||||
|
** only. */
|
||||||
static u16 cellSize(MemPage *pPage, int iCell){
|
static u16 cellSize(MemPage *pPage, int iCell){
|
||||||
return cellSizePtr(pPage, findCell(pPage, iCell));
|
return cellSizePtr(pPage, findCell(pPage, iCell));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user