]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Be more agressive about not creating or opening the TEMP database if there
authordrh <drh@noemail.net>
Wed, 18 Aug 2004 15:58:22 +0000 (15:58 +0000)
committerdrh <drh@noemail.net>
Wed, 18 Aug 2004 15:58:22 +0000 (15:58 +0000)
are no TEMP tables. (CVS 1891)

FossilOrigin-Name: 6b2b6b2dbd821070a2781685c4b63a50bc8f5cae

manifest
manifest.uuid
src/build.c
src/pager.c
test/attach.test
test/attach2.test

index 8524e4ad87a3f3b835548c9aae9e5d2de0fd411e..8b2aa35621bed935ce03de554cb9810f1dcee2b0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-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
@@ -29,7 +29,7 @@ F src/attach.c 0bd4f11da6999665da30625665a4096ba7898de6
 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
@@ -51,7 +51,7 @@ F src/os_unix.c 3239a45dbd2f50195bfc97f1ed35cb8fe5a3f60c
 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
@@ -82,8 +82,8 @@ F src/vdbeaux.c 892a49f7bf8c46222108d6a9ba081ac578375744
 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
@@ -242,7 +242,7 @@ F www/tclsqlite.tcl 06a86cba4d7fc88e2bcd633b57702d3d16abebb5
 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
index 598432ccfadfe5bb0f48004c859d03264e7853d9..f203d6742730290d2bb01d9fef40f044502693d0 100644 (file)
@@ -1 +1 @@
-5914a11caa4c6e778cd7ca010427897c8f971552
\ No newline at end of file
+6b2b6b2dbd821070a2781685c4b63a50bc8f5cae
\ No newline at end of file
index b351ac1489055be022ce87b572d6728d03ea4c7a..7f6ac411db484a1ae5d0a2e246cfbd2ca8fd9394 100644 (file)
@@ -23,7 +23,7 @@
 **     ROLLBACK
 **     PRAGMA
 **
-** $Id: build.c,v 1.247 2004/08/18 02:10:15 drh Exp $
+** $Id: build.c,v 1.248 2004/08/18 15:58:23 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -2551,7 +2551,7 @@ void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
   if( setStatement ){
     sqlite3VdbeAddOp(v, OP_Statement, iDb, 0);
   }
-  if( iDb!=1 ){
+  if( iDb!=1 && pParse->db->aDb[1].pBt!=0 ){
     sqlite3BeginWriteOperation(pParse, setStatement, 1);
   }
 }
index 5ba67bc04f10f8480a8d7b4837d1b176beb41954..c9c1fc61fe5f60280a68869b79dbd0bc4c7d0dec 100644 (file)
@@ -18,7 +18,7 @@
 ** 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
 
 
@@ -871,7 +868,7 @@ static int pager_playback_one_page(Pager *pPager, OsFile *jfd, int useCksum){
   */
   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);
@@ -1000,7 +997,7 @@ static int pager_reload_cache(Pager *pPager){
     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{
@@ -1458,7 +1455,7 @@ int sqlite3pager_open(
     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];
@@ -1728,6 +1725,7 @@ int sqlite3pager_close(Pager *pPager){
     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
@@ -1735,7 +1733,6 @@ int sqlite3pager_close(Pager *pPager){
   **   sqlite3OsDelete(pPager->zFilename);
   ** }
   */
-  CLR_PAGER(pPager);
   if( pPager->zFilename!=(char*)&pPager[1] ){
     assert( 0 );  /* Cannot happen */
     sqliteFree(pPager->zFilename);
@@ -1945,7 +1942,7 @@ static int pager_write_pagelist(PgHdr *pList){
     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;
@@ -2222,7 +2219,7 @@ int sqlite3pager_get(Pager *pPager, Pgno pgno, void **ppPage){
       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;
@@ -2516,7 +2513,7 @@ int sqlite3pager_write(void *pData){
       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 ){
@@ -2533,7 +2530,8 @@ int sqlite3pager_write(void *pData){
         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 ){
@@ -2553,7 +2551,8 @@ int sqlite3pager_write(void *pData){
       }
     }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;
@@ -2574,12 +2573,12 @@ int sqlite3pager_write(void *pData){
       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);
@@ -2826,9 +2825,9 @@ int sqlite3pager_rollback(Pager *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;
index acc8a90906673b79a526f1f9bc94cd97f5e00e23..dc511f12b15642461b091b9e5cbfb783d9997a37 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this script is testing the ATTACH and DETACH commands
 # and related functionality.
 #
-# $Id: attach.test,v 1.25 2004/08/01 03:52:18 drh Exp $
+# $Id: attach.test,v 1.26 2004/08/18 15:58:24 drh Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -104,7 +104,7 @@ proc db_list {db} {
 }
 do_test attach-1.11b {
   db_list db
-} {0 main 1 temp 2 db2 3 db3 4 db4 5 db5 6 db6 7 db7 8 db8 9 db9}
+} {0 main 2 db2 3 db3 4 db4 5 db5 6 db6 7 db7 8 db8 9 db9}
 do_test attach-1.12 {
   catchsql {
     ATTACH 'test.db' as db2;
@@ -151,7 +151,7 @@ do_test attach-1.20.1 {
     DETACH db5;
   }
   db_list db
-} {0 main 1 temp 2 db2 3 db3 4 db4 5 db6 6 db7 7 db8 8 db9 9 db10 10 db11}
+} {0 main 2 db2 3 db3 4 db4 5 db6 6 db7 7 db8 8 db9 9 db10 10 db11}
 integrity_check attach-1.20.2
 do_test attach-1.21 {
   catchsql {
index e5dc2cd51be55289122e8bec723fb73dc3d04c92..9582abd95ec643d88adbabea9cadd5e6e3043d18 100644 (file)
@@ -12,7 +12,7 @@
 # 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]
@@ -197,7 +197,7 @@ do_test attach2-4.4 {
 } {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.
@@ -209,7 +209,7 @@ do_test attach2-4.5 {
 } {}
 
 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.
@@ -222,7 +222,7 @@ do_test attach2-4.6.1 {
 } {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.
@@ -231,8 +231,8 @@ do_test attach2-4.6.2 {
   }
 } {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
@@ -242,16 +242,16 @@ do_test attach2-4.7 {
   } 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.
@@ -260,8 +260,8 @@ do_test attach2-4.9 {
   }
 } {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 {
@@ -269,8 +269,8 @@ 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
@@ -279,16 +279,16 @@ do_test attach2-4.11 {
   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}