]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Further coverage improvements for pager.c and another IO error bug fix. (CVS 3001)
authordanielk1977 <danielk1977@noemail.net>
Mon, 23 Jan 2006 15:25:48 +0000 (15:25 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Mon, 23 Jan 2006 15:25:48 +0000 (15:25 +0000)
FossilOrigin-Name: a9ec5ee4724ab993e71ef8b387e2d92f3e74959c

manifest
manifest.uuid
src/pager.c
src/vdbeaux.c
test/ioerr.test
test/pager.test

index 9359c5b2e851dbe23f6f3c8521428148258e2fd5..66ae83a65e5ce81cbc84e150f5d8047da391e168 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sos_common.h\sso\sthat\sthe\scode\sbuilds\swithout\s-DSQLITE_MEMDEBUG.\s(CVS\s3000)
-D 2006-01-23T14:05:18
+C Further\scoverage\simprovements\sfor\spager.c\sand\sanother\sIO\serror\sbug\sfix.\s(CVS\s3001)
+D 2006-01-23T15:25:48
 F Makefile.in ab3ffd8d469cef4477257169b82810030a6bb967
 F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -59,7 +59,7 @@ F src/os_unix.c 38a55e51fb2c6f32c0ce86d274f5787f6c3668ed
 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
 F src/os_win.c 98e4e38db7d4a00647b2bb1c60d28b7ca5034c03
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c 9c0ac7536168f92eef1c4033ef97414d838cd504
+F src/pager.c 86619d2739fe8757a0d5eff72a02a290b1c3fba0
 F src/pager.h e0acb095b3ad0bca48f2ab00c87346665643f64f
 F src/parse.y 4285cd2d0f31a8db4c4d54325f88e500452fa029
 F src/pragma.c 4496cc77dc35824e1c978c3d1413b8a5a4c777d3
@@ -91,7 +91,7 @@ F src/vdbe.c 1b50083eb941eab37ffa220fdc47cf0965a7f176
 F src/vdbe.h 8729a4ee16ff9aeab2af9667df3cf300ff978e13
 F src/vdbeInt.h eb3f86ab08ef11635bc78eb88c3ff13f923c233b
 F src/vdbeapi.c dcb2636f49b4807e34960d52a2fc257b3a751140
-F src/vdbeaux.c 1dce6e5f51d6119220e12ecbceccccf97ca8b8be
+F src/vdbeaux.c 2f12c17b4a27607d92330f4f70100b3435557e0d
 F src/vdbefifo.c 9efb94c8c3f4c979ebd0028219483f88e57584f5
 F src/vdbemem.c 2034e93b32c14bda6e306bb54e3a8e930b963027
 F src/where.c f79bc17f6228f69181da3dfc97986a690bce25ce
@@ -172,7 +172,7 @@ F test/insert2.test 5a20e1ace5fa0800b58d28284212290189b49aed
 F test/insert3.test c67f0240b1c17e71fa2ed8bb6de064928f549f95
 F test/interrupt.test cd24dc5bedd02325be4bfa5d6209fae01c465157
 F test/intpkey.test af4fd826c4784ec5c93b444de07adea0254d0d30
-F test/ioerr.test aca09f9b303e2e69a42b61298e6e659d92e5c532
+F test/ioerr.test 3c9facf13063084fdf4cbe1449b619977b342806
 F test/join.test db3802739fb695bdfa2e88805e3d64ec5ffbebd1
 F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
@@ -204,7 +204,7 @@ F test/misc5.test cff0e9ff3a79c5116d5bce077a0bacf9bb300324
 F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33
 F test/notnull.test 44d600f916b770def8b095a9962dbe3be5a70d82
 F test/null.test 9503e1f63e959544c006d9f01709c5b5eab67d54
-F test/pager.test cc1f516a87440487e83f480de9e942518b3e3fc1
+F test/pager.test 6ee95e90ee8295e376e39a6c6566ef6df993601a
 F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e
 F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
 F test/pagesize.test 05c74ea49f790734ec1e9ab765d9bf1cce79b8f2
@@ -344,7 +344,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 0f6329ef1fe0d5b225b6381fda1e8d800f65ea0f
-R ee5aceed6ef85c38491a964c1b25cb83
-U drh
-Z ac527cb7d8df8581edac16d40fd54c3f
+P 06d6540026568ca69410354ca8d85da78970c94b
+R c456675e3ecb5484a33151ee57d158b9
+U danielk1977
+Z d1bfbd0b2d33163ba712dc25d4306067
index f9b0ec0a27a5f859b448b780ed8392a0e8800f0f..439255412b8566a148d9b9eb829cdc4ebc98167c 100644 (file)
@@ -1 +1 @@
-06d6540026568ca69410354ca8d85da78970c94b
\ No newline at end of file
+a9ec5ee4724ab993e71ef8b387e2d92f3e74959c
\ No newline at end of file
index 291b1ab0929200254f3cb6fb09b331766baeddfe..500fe17aeaef09618af5dd94e07817d853ceefff 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.251 2006/01/23 13:47:47 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.252 2006/01/23 15:25:48 danielk1977 Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -1464,9 +1464,7 @@ static int pager_stmt_playback(Pager *pPager){
   pPager->journalOff = szJ;
   
 end_stmt_playback:
-  if( rc!=SQLITE_OK ){
-    rc = pager_error(pPager, SQLITE_CORRUPT);
-  }else{
+  if( rc==SQLITE_OK) {
     pPager->journalOff = szJ;
     /* pager_reload_cache(pPager); */
   }
index ca3cada8be6b110350321a45022a6c0df1980707..930092fb34e28eed379ee4757c1e89254eb93fe0 100644 (file)
@@ -1294,7 +1294,10 @@ int sqlite3VdbeHalt(Vdbe *p){
       Btree *pBt = db->aDb[i].pBt;
       if( pBt ){
         rc = xFunc(pBt);
-        if( p->rc==SQLITE_OK ) p->rc = rc;
+        if( rc && (p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT) ){
+          p->rc = rc;
+          sqlite3SetString(&p->zErrMsg, 0);
+        }
       }
     }
   
index 9184460697725ccefb9edaecc067dec00b87d059..6764a2919e4afcba4c03728cc65c14b69a2e7bad 100644 (file)
@@ -15,7 +15,7 @@
 # The tests in this file use special facilities that are only
 # available in the SQLite test fixture.
 #
-# $Id: ioerr.test,v 1.22 2006/01/06 14:32:20 drh Exp $
+# $Id: ioerr.test,v 1.23 2006/01/23 15:25:48 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -202,4 +202,56 @@ do_ioerr_test ioerr-8 -tclprep {
   SELECT c FROM t1;
 }
 
+# For test coverage: Cause an IO error whilst reading the master-journal
+# name from a journal file.
+do_ioerr_test ioerr-9 -tclprep {
+  execsql {
+    CREATE TABLE t1(a,b,c);
+    INSERT INTO t1 VALUES(randstr(200,200), randstr(1000,1000), 2);
+    BEGIN;
+    INSERT INTO t1 VALUES(randstr(200,200), randstr(1000,1000), 2);
+  }
+  copy_file test.db-journal test2.db-journal
+  execsql {
+    COMMIT;
+  }
+  copy_file test2.db-journal test.db-journal
+  set f [open test.db-journal a]
+  fconfigure $f -encoding binary
+  puts -nonewline $f "hello"
+  puts -nonewline $f "\x00\x00\x00\x05\x01\x02\x03\x04"
+  puts -nonewline $f "\xd9\xd5\x05\xf9\x20\xa1\x63\xd7"
+  close $f
+} -sqlbody {
+  SELECT a FROM t1;
+}
+
+# For test coverage: Cause an IO error during statement playback (i.e. 
+# a constraint).
+do_ioerr_test ioerr-10 -tclprep {
+  execsql {
+    BEGIN;
+    CREATE TABLE t1(a PRIMARY KEY, b);
+  }
+  for {set i 0} {$i < 500} {incr i} {
+    execsql {INSERT INTO t1 VALUES($i, 'hello world');}
+  }
+  execsql {
+    COMMIT;
+  }
+} -tclbody {
+
+  catch {execsql {
+    BEGIN;
+    INSERT INTO t1 VALUES('abc', 123);
+    INSERT INTO t1 VALUES('def', 123);
+    INSERT INTO t1 VALUES('ghi', 123);
+    INSERT INTO t1 SELECT (a+500)%900, 'good string' FROM t1;
+  }} msg
+
+  if {$msg != "column a is not unique"} {
+    error $msg
+  }
+}
+
 finish_test
index c3a369a120b305d1147e86e154ce33087a430708..2363321185eaad21dd0d1e432fe871cbf21a009d 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script is page cache subsystem.
 #
-# $Id: pager.test,v 1.24 2006/01/23 13:09:47 danielk1977 Exp $
+# $Id: pager.test,v 1.25 2006/01/23 15:25:48 danielk1977 Exp $
 
 
 set testdir [file dirname $argv0]
@@ -536,10 +536,32 @@ do_test pager-6.4.2 {
     SELECT sql FROM sqlite_master;
   } db3;
 } {0 {{CREATE TABLE abc(a, b, c)}}}
+do_test pager-6.4.3 {
+  db3 close
+  execsql {
+    COMMIT;
+  }
+} {}
+
+do_test pager-6.5 {
+  copy_file test2.db test.db
+  copy_file test2.db-journal test.db-journal
+
+  set f [open test.db-journal a]
+  fconfigure $f -encoding binary
+  puts -nonewline $f "hello"
+  puts -nonewline $f "\x00\x00\x00\x05\x01\x02\x03\x04"
+  puts -nonewline $f "\xd9\xd5\x05\xf9\x20\xa1\x63\xd7"
+  close $f
+
+  sqlite3 db test.db
+  execsql {
+    SELECT sql FROM sqlite_master
+  }
+} {{CREATE TABLE abc(a, b, c)}}
 
 do_test pager-6.5 {
   db2 close
-  db3 close
 } {}
 }
 finish_test