]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Try to use mmap() to speed access to the database file on windows, linux,
authordrh <drh@noemail.net>
Thu, 4 Apr 2013 00:40:17 +0000 (00:40 +0000)
committerdrh <drh@noemail.net>
Thu, 4 Apr 2013 00:40:17 +0000 (00:40 +0000)
and mac.

FossilOrigin-Name: fff2be60779571c8fb89158db976ec3755e9a223

1  2 
manifest
manifest.uuid
src/btree.c
src/os_win.c
test/mmap2.test

diff --cc manifest
index dce40a05fc139279ad23ffe0433305609fcdf50c,1dc8e386cc3144c09784b1efdb456293bec601ec..ebd18074c8aa755214152b1474c314c8cfe281ba
+++ b/manifest
@@@ -1,12 -1,12 +1,12 @@@
- C If\sthe\sSQLITE_TRACE_SIZE_LIMIT\scompile-time\sparameter\sis\sset\sto\sa\spositive\ninteger\sthen\slimit\sthe\sexpansion\sof\sstrings\sand\sblobs\sin\strace\soutput\sto\napproximately\sthat\smany\sbytes.
- D 2013-04-02T13:56:53.795
 -C Release\sresources\sprior\sto\sbailing\sout\sof\sthe\sbtreeCreateTable()\sroutine\nfollowing\san\sOOM\serror.
 -D 2013-04-03T21:23:28.794
++C Try\sto\suse\smmap()\sto\sspeed\saccess\sto\sthe\sdatabase\sfile\son\swindows,\slinux,\nand\smac.
++D 2013-04-04T00:40:17.148
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 -F Makefile.in df3e48659d80e1b7765785d8d66c86b320f72cc7
 +F Makefile.in aafa71d66bab7e87fb2f348152340645f79f0244
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
 -F Makefile.msc 0c1abc21c8deefc88e8a32ad6a07e5f96e158761
 -F Makefile.vxworks b18ad88e9a8c6a001f5cf4a389116a4f1a7ab45f
 +F Makefile.msc 9ab787d472c9cb8bad29c2c4aeba15b06fba7bc4
 +F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
  F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
 -F VERSION 6d4f66eaebabc42ef8c2a4d2d0caf4ce7ee81137
 +F VERSION 05604ccde96fe1b37f922eddbdcb5654308261db
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
@@@ -118,11 -118,11 +118,11 @@@ F src/alter.c f8db986c03eb0bfb221523fc9
  F src/analyze.c d5f895810e8ff9737c9ec7b76abc3dcff5860335
  F src/attach.c 1816f5a9eea8d2010fc2b22b44f0f63eb3a62704
  F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
- F src/backup.c b2cac9f7993f3f9588827b824b1501d0c820fa68
+ F src/backup.c b266767351ae2d847716c56fcb2a1fea7c761c03
  F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
  F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
- F src/btree.c 62ba5954765efc711c873a20a53f60d9fc2843ba
- F src/btree.h 3ad7964d6c5b1c7bff569aab6adfa075f8bf06cd
 -F src/btree.c 58c4d68415ca7b13a501b682a9c0ad1e287bcacb
++F src/btree.c 5f2c4fe72f663bba837c5d01a732799c1d1c93f8
+ F src/btree.h d9490cd37aaeb530a41b07f06e1262950b1be916
  F src/btreeInt.h eecc84f02375b2bb7a44abbcbbe3747dde73edb2
  F src/build.c 083da8466fd7e481cb8bd5264398f537507f6176
  F src/callback.c d7e46f40c3cf53c43550b7da7a1d0479910b62cc
@@@ -157,18 -157,18 +157,18 @@@ F src/mutex_noop.c 7682796b7d8d39bf1c13
  F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc
  F src/mutex_w32.c 32a9b3841e2d757355f0012b860b1bc5e01eafa0
  F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30
- F src/os.c e1acdc09ff3ac2412945cca9766e2dcf4675f31c
- F src/os.h 027491c77d2404c0a678bb3fb06286f331eb9b57
+ F src/os.c 809d0707cec693e1b9b376ab229271ad74c3d35d
+ F src/os.h ae08bcc5f6ec6b339f4a2adf3931bb88cc14c3e4
  F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
- F src/os_unix.c 21a36fa0b3753609b6606b30d9338d4bb6b24696
- F src/os_win.c 9fe5356f943425ab8431237bd3a4297044928b70
- F src/pager.c 3e9a15939684b0af441325f05335331b15979c9d
- F src/pager.h 1109a06578ec5574dc2c74cf8d9f69daf36fe3e0
+ F src/os_unix.c f0ecce40d92469d5cc737ae883e776eb3e5c0af5
 -F src/os_win.c 1d0ccc1880b626ac2b6868284f6338c90687e8d8
++F src/os_win.c 3265df8c762e0b8caf8d02b3352fa8c22e91ae6b
+ F src/pager.c 2e68df46d4086027cb6b527d47a6dedbf1a6b7ec
+ F src/pager.h 5cb78b8e1adfd5451e600be7719f5a99d87ac3b1
  F src/parse.y 5d5e12772845805fdfeb889163516b84fbb9ae95
  F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
- F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c
+ F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
  F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9
- F src/pragma.c 9f0ee3d74a7f33eeeff40a4b014fc3abf8182ce2
+ F src/pragma.c 682e97f3e3b77fd6c9b569eabfbf4a14c987aca3
  F src/prepare.c 310eaff1ee5f3c700b3545afb095cfe9346efc3a
  F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
  F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
@@@ -247,12 -247,12 +247,12 @@@ F src/vdbeaux.c ecb43014bcd3019e5aa2b55
  F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
  F src/vdbemem.c 833005f1cbbf447289f1973dba2a0c2228c7b8ab
  F src/vdbesort.c 4fad64071ae120c25f39dcac572d716b9cadeb7f
 -F src/vdbetrace.c 8bd5da325fc90f28464335e4cc4ad1407fe30835
 +F src/vdbetrace.c a22263ab47f6ba4fcd176515cec1e732866b25f0
  F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
- F src/wal.c f5c7b5027d0ed0e9bc9afeb4a3a8dfea762ec7d2
- F src/wal.h 29c197540b19044e6cd73487017e5e47a1d3dac6
+ F src/wal.c 94b5fed2df988fb12f5bf17256e2840e56957a85
+ F src/wal.h a4d3da523d55a226a0b28e9058ef88d0a8051887
  F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b
 -F src/where.c 9a16c0b84bbeb054d11fda96e9e037ae310bd54e
 +F src/where.c 4ad2329c439a30ddb915a780f6f80bdffafe3a64
  F test/8_3_names.test 631ea964a3edb091cf73c3b540f6bcfdb36ce823
  F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
  F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
@@@ -630,6 -631,8 +631,8 @@@ F test/misc5.test 528468b26d03303b1f047
  F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
  F test/misc7.test dd82ec9250b89178b96cd28b2aca70639d21e5b3
  F test/misuse.test ba4fb5d1a6101d1c171ea38b3c613d0661c83054
 -F test/mmap2.test c0cbb978eda8d06d755ba8d9e59ec06ebf60c5cb
+ F test/mmap1.test df5105f08e6000e57b4de7e748f8c2ae3fed75da
++F test/mmap2.test 62dbb5d718e66d654d232116c5a2d96e26a071a5
  F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256
  F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
  F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
@@@ -1041,7 -1042,7 +1044,7 @@@ F tool/vdbe-compress.tcl f12c884766bd14
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
  F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
- P 5687e5ee7bafa00d2b353c3eda1e5dfb219cb185
- R b688b887865b3d8981922c40426941a0
 -P f97d7274f48e3bb98ed17eae11abb55064134874
 -R 133fe42d87ba7d3deff6d35af20e1f64
++P e5b710849dd66673ba0e0d935b103cb29abfcc4b b2a72be9bab77f050bef75477a278a6294d3e854
++R 60af9b4d9e73e7757090b3abb77cbb41
  U drh
- Z 66f86621cb15eccea274cb5b5e71ec26
 -Z 8d00d860d2c818ad1f98631f4c1a926a
++Z d05e425b384f57133414b300483bca27
diff --cc manifest.uuid
index ec266fb546b7d6c4d3aa05ccd2fc8e2b8d53ba3e,a6f66ce7d474071e476c6ec0d700ec3db26b68e3..4f646cb565134b8a66b757c74d32c6c0a71fc556
@@@ -1,1 -1,1 +1,1 @@@
- e5b710849dd66673ba0e0d935b103cb29abfcc4b
 -b2a72be9bab77f050bef75477a278a6294d3e854
++fff2be60779571c8fb89158db976ec3755e9a223
diff --cc src/btree.c
Simple merge
diff --cc src/os_win.c
index 58ba25f302e98e49b4da3798c455254dca4b5daf,dc69b47ae21b24304596c89f2ae0cf173284670d..a7966171b5e2e720085fba3c144b795270d78628
@@@ -2781,6 -2836,12 +2836,12 @@@ static int winFileControl(sqlite3_file 
        }
        return SQLITE_OK;
      }
 -      *(i64*) = pFile->mmapLimit;
+     case SQLITE_FCNTL_MMAP_LIMIT: {
+       i64 newLimit = *(i64*)pArg;
++      *(i64*)pArg = pFile->mmapLimit;
+       if( newLimit>=0 ) pFile->mmapLimit = newLimit;
+       return SQLITE_OK;
+     }
    }
    return SQLITE_NOTFOUND;
  }
diff --cc test/mmap2.test
index 0000000000000000000000000000000000000000,fb36507efd203052b768f37ed162e3a424f44285..33830a6943813f44563bbdd236247a9b6caeee41
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,83 +1,82 @@@
 -if {[test_syscall defaultvfs] != "unix"} {
+ # 2013 March 20
+ #
+ # The author disclaims copyright to this source code.  In place of
+ # a legal notice, here is a blessing:
+ #
+ #    May you do good and not evil.
+ #    May you find forgiveness for yourself and forgive others.
+ #    May you share freely, never taking more than you give.
+ #
+ #***********************************************************************
+ #
+ # This file tests the effect of the mmap() or mremap() system calls 
+ # returning an error on the library. 
+ #
+ # If either mmap() or mremap() fails, SQLite should log an error 
+ # message, then continue accessing the database using read() and 
+ # write() exclusively.
+ #
+ set testdir [file dirname $argv0]
+ source $testdir/tester.tcl
+ set testprefix mmap2
 -
++if {$::tcl_platform(platform)!="unix" || [test_syscall defaultvfs] != "unix"} {
+   finish_test
+   return
+ }
+ db close
+ sqlite3_shutdown
+ test_sqlite3_log xLog
+ proc xLog {error_code msg} {
+   if {[string match os_unix.c* $msg]} {
+     lappend ::log $msg 
+   }
+ }
+ foreach syscall {mmap mremap} {
+   test_syscall uninstall 
+   if {[catch {test_syscall install $syscall}]} continue
+   for {set i 1} {$i < 20} {incr i} {
+     reset_db
+     test_syscall fault $i 1
+     test_syscall errno $syscall ENOMEM
+     set ::log ""
+     do_execsql_test 1.$syscall.$i.1 {
+       CREATE TABLE t1(a, b, UNIQUE(a, b));
+       INSERT INTO t1 VALUES(randomblob(1000), randomblob(1000));
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+       INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;
+     }
+     set nFail [test_syscall fault 0 0]
+     do_execsql_test 1.$syscall.$i.2 {
+       SELECT count(*) FROM t1;
+       PRAGMA integrity_check;
+     } {64 ok}
+     do_test 1.$syscall.$i.3 {
+       expr {$nFail==0 || $nFail==1}
+     } {1}
+     do_test 1.$syscall.$i.4.nFail=$nFail {
+       regexp ".*${syscall}.*" $::log
+     } [expr $nFail>0]
+   }
+ }
+ db close
+ test_syscall uninstall 
+ sqlite3_shutdown
+ test_sqlite3_log 
+ sqlite3_initialize
+ finish_test