-C Avoid\screating\sa\sTEMP\sdatabase\sunless\sit\sis\sabsolutely\snecessary.\s(CVS\s1890)
-D 2004-08-18T02:10:15
+C Be\smore\sagressive\sabout\snot\screating\sor\sopening\sthe\sTEMP\sdatabase\sif\sthere\nare\sno\sTEMP\stables.\s(CVS\s1891)
+D 2004-08-18T15:58:23
F Makefile.in 4a5e570a9e2d35b09c31b3cf01b78cea764ade4b
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F src/auth.c 60db23b98bb94c8b0178180faaf49dc116674217
F src/btree.c 14c20dfb320473a1fd4e37d43eba5e2afd606757
F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029
-F src/build.c 2c608a4825160f4a723e1bc68f875853bf289913
+F src/build.c bad6652b33a447a06fca79a257f74932412fc110
F src/date.c edff4aa851eeca8abbc737dc3933a2f0671156ce
F src/delete.c e81545e546f6bc87d7508a93a09ca70695265af3
F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
F src/os_unix.h f3097815e041e82e24d92505e1ff61ba24172d13
F src/os_win.c 54181eb73cb4783c4241feca9eaa490768b39008
F src/os_win.h babd4e912967c6b09088cfe38a45e8005a07ba44
-F src/pager.c 4e3bbc44aeda16cebf7e502e82e211285e5b6f92
+F src/pager.c 4581ffaf7d6a293d731937bc2b019089aebf7507
F src/pager.h 67739fe649f33be55dba522ca8a9cc4e42d14f71
F src/parse.y 589b1a39b23092888adfa9ec1f3ded8a35e8e006
F src/pragma.c 5cf335adfdac453a2d03ab0c82f93847c43bea81
F src/vdbemem.c 68fefaf83adb48fe44135da01502c9327f6172b0
F src/where.c cf8a54641eea01f1af5d09529ad69166db92f658
F test/all.test 3b692eb43583b52c99c344b2fa8934512d179016
-F test/attach.test 8fd75d2939528e1ae2a5030dfe738cd7fa8520eb
-F test/attach2.test 07d509619d6f39a3b76c167d891d3c4f44f1bb15
+F test/attach.test feb2ce54e78688df4c84553416d5aec3b2a0112e
+F test/attach2.test 2c8d19ebc4adcfe57e81f09d7db725b3225dd0db
F test/attach3.test 6d060986ff004ebb89e1876a331d96c6bb62269e
F test/auth.test e74b015545f608c06d5b84d17acdf7146eb818af
F test/bigfile.test 62722ac4b420dfbcdceb137b8634e2cf2865fe27
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P 9af1d4d1456d32c2e15f73f79928572f3bfba6ae
-R a62b70c2e591452c368e3b544bb10c66
+P 5914a11caa4c6e778cd7ca010427897c8f971552
+R 8a254f0aacfe54a496a1247e0e7c2d22
U drh
-Z 4e553b9cd37331bb88d3fd47639da9eb
+Z b7fbfb8a44478969990732752926ee73
** file simultaneously, or one process from reading the database while
** another is writing.
**
-** @(#) $Id: pager.c,v 1.155 2004/08/18 02:10:15 drh Exp $
+** @(#) $Id: pager.c,v 1.156 2004/08/18 15:58:23 drh Exp $
*/
#include "os.h" /* Must be first to enable large file support */
#include "sqliteInt.h"
** Macros for troubleshooting. Normally turned off
*/
#if 0
-static Pager *mainPager = 0;
-#define SET_PAGER(X) if( mainPager==0 ) mainPager = (X)
-#define CLR_PAGER(X) if( mainPager==(X) ) mainPager = 0
-#define TRACE1(X) if( pPager==mainPager ) sqlite3DebugPrintf(X)
-#define TRACE2(X,Y) if( pPager==mainPager ) sqlite3DebugPrintf(X,Y)
-#define TRACE3(X,Y,Z) if( pPager==mainPager ) sqlite3DebugPrintf(X,Y,Z)
+#define TRACE1(X) sqlite3DebugPrintf(X)
+#define TRACE2(X,Y) sqlite3DebugPrintf(X,Y)
+#define TRACE3(X,Y,Z) sqlite3DebugPrintf(X,Y,Z)
+#define TRACE4(X,Y,Z,W) sqlite3DebugPrintf(X,Y,Z,W)
#else
-#define SET_PAGER(X)
-#define CLR_PAGER(X)
#define TRACE1(X)
#define TRACE2(X,Y)
#define TRACE3(X,Y,Z)
+#define TRACE4(X,Y,Z,W)
#endif
*/
pPg = pager_lookup(pPager, pgno);
assert( pPager->state>=PAGER_EXCLUSIVE || pPg );
- TRACE2("PLAYBACK page %d\n", pgno);
+ TRACE3("PLAYBACK %d page %d\n", pPager->fd.h, pgno);
if( pPager->state>=PAGER_EXCLUSIVE ){
sqlite3OsSeek(&pPager->fd, (pgno-1)*(off_t)pPager->pageSize);
rc = sqlite3OsWrite(&pPager->fd, aData, pPager->pageSize);
if( (int)pPg->pgno <= pPager->origDbSize ){
sqlite3OsSeek(&pPager->fd, pPager->pageSize*(off_t)(pPg->pgno-1));
rc = sqlite3OsRead(&pPager->fd, zBuf, pPager->pageSize);
- TRACE2("REFETCH page %d\n", pPg->pgno);
+ TRACE3("REFETCH %d page %d\n", pPager->fd.h, pPg->pgno);
if( rc ) break;
CODEC(pPager, zBuf, pPg->pgno, 2);
}else{
sqliteFree(zFullPathname);
return SQLITE_NOMEM;
}
- SET_PAGER(pPager);
+ TRACE3("OPEN %d %s\n", fd.h, zFullPathname);
pPager->zFilename = (char*)&pPager[1];
pPager->zDirectory = &pPager->zFilename[nameLen+1];
pPager->zJournal = &pPager->zDirectory[nameLen+1];
pNext = pPg->pNextAll;
sqliteFree(pPg);
}
+ TRACE2("CLOSE %d\n", pPager->fd.h);
sqlite3OsClose(&pPager->fd);
assert( pPager->journalOpen==0 );
/* Temp files are automatically deleted by the OS
** sqlite3OsDelete(pPager->zFilename);
** }
*/
- CLR_PAGER(pPager);
if( pPager->zFilename!=(char*)&pPager[1] ){
assert( 0 ); /* Cannot happen */
sqliteFree(pPager->zFilename);
assert( pList->dirty );
sqlite3OsSeek(&pPager->fd, (pList->pgno-1)*(off_t)pPager->pageSize);
CODEC(pPager, PGHDR_TO_DATA(pList), pList->pgno, 6);
- TRACE2("STORE page %d\n", pList->pgno);
+ TRACE3("STORE %d page %d\n", pPager->fd.h, pList->pgno);
rc = sqlite3OsWrite(&pPager->fd, PGHDR_TO_DATA(pList), pPager->pageSize);
CODEC(pPager, PGHDR_TO_DATA(pList), pList->pgno, 0);
if( rc ) return rc;
assert( pPager->memDb==0 );
sqlite3OsSeek(&pPager->fd, (pgno-1)*(off_t)pPager->pageSize);
rc = sqlite3OsRead(&pPager->fd, PGHDR_TO_DATA(pPg), pPager->pageSize);
- TRACE2("FETCH page %d\n", pPg->pgno);
+ TRACE3("FETCH %d page %d\n", pPager->fd.h, pPg->pgno);
CODEC(pPager, PGHDR_TO_DATA(pPg), pPg->pgno, 3);
if( rc!=SQLITE_OK ){
off_t fileSize;
u32 saved;
if( pPager->memDb ){
PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager);
- TRACE2("JOURNAL page %d\n", pPg->pgno);
+ TRACE3("JOURNAL %d page %d\n", pPager->fd.h, pPg->pgno);
assert( pHist->pOrig==0 );
pHist->pOrig = sqliteMallocRaw( pPager->pageSize );
if( pHist->pOrig ){
store32bits(pPg->pgno, pPg, -4);
rc = sqlite3OsWrite(&pPager->jfd, &((char*)pData)[-4], szPg);
pPager->journalOff += szPg;
- TRACE3("JOURNAL page %d needSync=%d\n", pPg->pgno, pPg->needSync);
+ TRACE4("JOURNAL %d page %d needSync=%d\n",
+ pPager->fd.h, pPg->pgno, pPg->needSync);
CODEC(pPager, pData, pPg->pgno, 0);
*(u32*)PGHDR_TO_EXTRA(pPg, pPager) = saved;
if( rc!=SQLITE_OK ){
}
}else{
pPg->needSync = !pPager->journalStarted && !pPager->noSync;
- TRACE3("APPEND page %d needSync=%d\n", pPg->pgno, pPg->needSync);
+ TRACE4("APPEND %d page %d needSync=%d\n",
+ pPager->fd.h, pPg->pgno, pPg->needSync);
}
if( pPg->needSync ){
pPager->needSync = 1;
if( pHist->pStmt ){
memcpy(pHist->pStmt, PGHDR_TO_DATA(pPg), pPager->pageSize);
}
- TRACE2("STMT-JOURNAL page %d\n", pPg->pgno);
+ TRACE3("STMT-JOURNAL %d page %d\n", pPager->fd.h, pPg->pgno);
}else{
store32bits(pPg->pgno, pPg, -4);
CODEC(pPager, pData, pPg->pgno, 7);
rc = sqlite3OsWrite(&pPager->stfd, ((char*)pData)-4, pPager->pageSize+4);
- TRACE2("STMT-JOURNAL page %d\n", pPg->pgno);
+ TRACE3("STMT-JOURNAL %d page %d\n", pPager->fd.h, pPg->pgno);
CODEC(pPager, pData, pPg->pgno, 0);
if( rc!=SQLITE_OK ){
sqlite3pager_rollback(pPager);
pHist = PGHDR_TO_HIST(p, pPager);
if( pHist->pOrig ){
memcpy(PGHDR_TO_DATA(p), pHist->pOrig, pPager->pageSize);
- TRACE2("ROLLBACK-PAGE %d\n", p->pgno);
+ TRACE3("ROLLBACK-PAGE %d of %d\n", p->pgno, pPager->fd.h);
}else{
- TRACE2("PAGE %d is clean\n", p->pgno);
+ TRACE3("PAGE %d is clean on %d\n", p->pgno, pPager->fd.h);
}
clearHistory(pHist);
p->dirty = 0;
# focus of this script is testing the ATTACH and DETACH commands
# and related functionality.
#
-# $Id: attach2.test,v 1.23 2004/08/18 02:10:15 drh Exp $
+# $Id: attach2.test,v 1.24 2004/08/18 15:58:24 drh Exp $
#
set testdir [file dirname $argv0]
} {1 {database is locked}}
lock_status 4.4.1 db {main shared temp closed file2 unlocked}
-lock_status 4.4.2 db2 {main unlocked temp unlocked file2 unlocked}
+lock_status 4.4.2 db2 {main unlocked temp closed file2 unlocked}
do_test attach2-4.5 {
# Handle 'db2' reserves file2.
} {}
lock_status 4.5.1 db {main shared temp closed file2 unlocked}
-lock_status 4.5.2 db2 {main unlocked temp reserved file2 reserved}
+lock_status 4.5.2 db2 {main unlocked temp closed file2 reserved}
do_test attach2-4.6.1 {
# Reads are allowed against a reserved database.
} {0 {}}
lock_status 4.6.1.1 db {main shared temp closed file2 shared}
-lock_status 4.6.1.2 db2 {main unlocked temp reserved file2 reserved}
+lock_status 4.6.1.2 db2 {main unlocked temp closed file2 reserved}
do_test attach2-4.6.2 {
# Writes against a reserved database are not allowed.
}
} {1 {database is locked}}
-lock_status 4.6.2.1 db {main shared temp reserved file2 shared}
-lock_status 4.6.2.2 db2 {main unlocked temp reserved file2 reserved}
+lock_status 4.6.2.1 db {main shared temp closed file2 shared}
+lock_status 4.6.2.2 db2 {main unlocked temp closed file2 reserved}
do_test attach2-4.7 {
# Ensure handle 'db' retains the lock on the main file after
} db2
} {0 {}}
-lock_status 4.7.1 db {main shared temp reserved file2 shared}
-lock_status 4.7.2 db2 {main reserved temp reserved file2 reserved}
+lock_status 4.7.1 db {main shared temp closed file2 shared}
+lock_status 4.7.2 db2 {main reserved temp closed file2 reserved}
do_test attach2-4.8 {
# We should still be able to read test.db from db2
execsql {SELECT * FROM t1} db2
} {1 2}
-lock_status 4.8.1 db {main shared temp reserved file2 shared}
-lock_status 4.8.2 db2 {main reserved temp reserved file2 reserved}
+lock_status 4.8.1 db {main shared temp closed file2 shared}
+lock_status 4.8.2 db2 {main reserved temp closed file2 reserved}
do_test attach2-4.9 {
# Try to upgrade the handle 'db' lock.
}
} {1 {database is locked}}
-lock_status 4.9.1 db {main shared temp reserved file2 shared}
-lock_status 4.9.2 db2 {main reserved temp reserved file2 reserved}
+lock_status 4.9.1 db {main shared temp closed file2 shared}
+lock_status 4.9.2 db2 {main reserved temp closed file2 reserved}
btree_breakpoint
do_test attach2-4.10 {
catchsql {COMMIT} db2
} {1 {database is locked}}
-lock_status 4.10.1 db {main shared temp reserved file2 shared}
-lock_status 4.10.2 db2 {main pending temp reserved file2 reserved}
+lock_status 4.10.1 db {main shared temp closed file2 shared}
+lock_status 4.10.2 db2 {main pending temp closed file2 reserved}
set sqlite_os_trace 0
btree_breakpoint
catchsql {COMMIT}
} {0 {}}
-lock_status 4.11.1 db {main unlocked temp unlocked file2 unlocked}
-lock_status 4.11.2 db2 {main pending temp reserved file2 reserved}
+lock_status 4.11.1 db {main unlocked temp closed file2 unlocked}
+lock_status 4.11.2 db2 {main pending temp closed file2 reserved}
do_test attach2-4.12 {
# Now we can commit db2
catchsql {COMMIT} db2
} {0 {}}
-lock_status 4.12.1 db {main unlocked temp unlocked file2 unlocked}
-lock_status 4.12.2 db2 {main unlocked temp unlocked file2 unlocked}
+lock_status 4.12.1 db {main unlocked temp closed file2 unlocked}
+lock_status 4.12.2 db2 {main unlocked temp closed file2 unlocked}
do_test attach2-4.13 {
execsql {SELECT * FROM file2.t1}