]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a bug where accessPayload() was calling PagerWrite() on the wrong page handle...
authordanielk1977 <danielk1977@noemail.net>
Thu, 3 May 2007 13:11:32 +0000 (13:11 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 3 May 2007 13:11:32 +0000 (13:11 +0000)
FossilOrigin-Name: cf9eeba7be64ad29cddd320832db10c799fb6e8e

manifest
manifest.uuid
src/btree.c
test/incrblob.test
test/tkt2332.test [new file with mode: 0644]

index e53f064f7bc163dd22ac6493fdf5dc9537567f8a..85f064ef3237e98742a273b849dcc21296a8eb29 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Use\smemmove()\sinstead\sof\smemcpy()\swhen\smoving\sbetween\smemory\sregions\sthat\nmight\soverlap.\s\sTicket\s#2334.\s(CVS\s3905)
-D 2007-05-03T13:02:27
+C Fix\sa\sbug\swhere\saccessPayload()\swas\scalling\sPagerWrite()\son\sthe\swrong\spage\shandle.\sTicket\s#2332.\s(CVS\s3906)
+D 2007-05-03T13:11:32
 F Makefile.in 8cab54f7c9f5af8f22fd97ddf1ecfd1e1860de62
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -59,7 +59,7 @@ F src/alter.c 2c79ec40f65e33deaf90ca493422c74586e481a3
 F src/analyze.c 4bbf5ddf9680587c6d4917e02e378b6037be3651
 F src/attach.c a16ada4a4654a0d126b8223ec9494ebb81bc5c3c
 F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f
-F src/btree.c ae37926682a6e6da49dacad25a8da50b49abbc31
+F src/btree.c 1f75491c8d5348998ce53decc6fde671d4cfd36d
 F src/btree.h 2c187d60cf76d74c2b4767294d6b5fa267037ff0
 F src/build.c 02e01ec7907c7d947ab3041fda0e81eaed05db42
 F src/callback.c 6414ed32d55859d0f65067aa5b88d2da27b3af9e
@@ -242,7 +242,7 @@ F test/fts2n.test a70357e72742681eaebfdbe9007b87ff3b771638
 F test/func.test 6727c7729472ae52b5acd86e802f89aa350ba50f
 F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a
 F test/in.test 369cb2aa1eab02296b4ec470732fe8c131260b1d
-F test/incrblob.test e86fbd7187109a322acb756df64802247ac05ae6
+F test/incrblob.test cca13ec6c3a163c86821dd49a81bb5b519850e79
 F test/incrvacuum.test 2173bc075c7b3b96ccf228d737dd4f5c29500dc4
 F test/incrvacuum_ioerr.test 0ebc382bcc2036ec58cf49cc5ffada45f75d907b
 F test/index.test e65df12bed94b2903ee89987115e1578687e9266
@@ -360,6 +360,7 @@ F test/tkt2192.test 480d0e017ddb01a46ee20809427370f343bb3c03
 F test/tkt2213.test 8cf7c446e1fcd0627fffe7fc19046eb24ac7333b
 F test/tkt2251.test 3f0549213386ed911715665a908ff2bb7a871002
 F test/tkt2285.test c618085f0c13ec3347e607f83c34ada0721b4bfa
+F test/tkt2332.test a7d678dc146ca7d2dae7bcc19f4659a389225b36
 F test/trace.test 75ffc1b992c780d054748a656e3e7fd674f18567
 F test/trans.test 3fe1b9e03b523482eee2b869858c5c1eca7b218b
 F test/trigger1.test b361161cf20614024cc1e52ea0bdec250776b2ae
@@ -472,7 +473,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P b84d597c902d60341607bc405440603868ac52c8
-R 12d14d4fb14068f61aa4421e14587d06
-U drh
-Z db885090be703cd83c0833d00fbb5cc8
+P 678d672b73cc7b7f563c15daee3831cb5bbd890e
+R 3fe50c067312d08e6c011ae37b9a3ab6
+U danielk1977
+Z 99cbb46fec6c9867e749c0e87c86be78
index 0332c9d223f4c2b5ce9965736fccb8097c1050ec..5335083151471c25a419019080f46864574b20c3 100644 (file)
@@ -1 +1 @@
-678d672b73cc7b7f563c15daee3831cb5bbd890e
\ No newline at end of file
+cf9eeba7be64ad29cddd320832db10c799fb6e8e
\ No newline at end of file
index 4c433a085ec5bf8a63be6415f10a3d7f0bd46262..6fd0cc50e8ad16dd347176c99c92bea098aa3387 100644 (file)
@@ -9,7 +9,7 @@
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: btree.c,v 1.369 2007/05/03 11:43:33 danielk1977 Exp $
+** $Id: btree.c,v 1.370 2007/05/03 13:11:32 danielk1977 Exp $
 **
 ** This file implements a external (disk-based) database using BTrees.
 ** For a detailed discussion of BTrees, refer to
@@ -3266,7 +3266,7 @@ static int accessPayload(
         }
         if( eOp ){
           /* A write operation. */
-          rc = sqlite3PagerWrite(pPage->pDbPage);
+          rc = sqlite3PagerWrite(pDbPage);
           if( rc!=SQLITE_OK ){
             sqlite3PagerUnref(pDbPage);
             return rc;
index a5b244b13f32ad33af74950f9826ba920d98591b..e482f233339fe1917428d1d28c7fef9e1f01adcc 100644 (file)
@@ -9,7 +9,7 @@
 #
 #***********************************************************************
 #
-# $Id: incrblob.test,v 1.3 2007/05/03 11:43:35 danielk1977 Exp $
+# $Id: incrblob.test,v 1.4 2007/05/03 13:11:32 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -79,7 +79,12 @@ do_test incrblob-1.3.10 {
 
 
 #------------------------------------------------------------------------
-# incrblob-2.*: Test seeking in an incremental blob can use ptrmap pages.
+# incrblob-2.*: Test that the following operations use ptrmap pages:
+#
+#     * Reading near the end of a blob,
+#     * Writing near the end of a blob (TODO),
+#     * SELECT a column value that is located on an overflow page (TODO).
+#
 #
 proc nRead {db} {
   set bt [btree_from_db $db]
@@ -131,7 +136,7 @@ foreach AutoVacuumMode [list 0 1] {
     nRead db
   } [expr $AutoVacuumMode ? 4 : 30]
 
-  do_test incrblob-2.3 {
+  do_test incrblob-2.$AutoVacuumMode.3 {
     string range [db one {SELECT v FROM blobs}] end-19 end
   } $::fragment
 }
diff --git a/test/tkt2332.test b/test/tkt2332.test
new file mode 100644 (file)
index 0000000..5da3e7b
--- /dev/null
@@ -0,0 +1,59 @@
+# 2007 May 3
+#
+# 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.
+#
+#***********************************************************************
+#
+# $Id: tkt2332.test,v 1.1 2007/05/03 13:11:32 danielk1977 Exp $
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_test tkt2332.1 {
+  execsql {
+    CREATE TABLE blobs (k INTEGER PRIMARY KEY, v BLOB);
+    PRAGMA cache_size = 100;
+  }
+} {}
+
+set ::iKey 1
+foreach Len [list 10000 100000 1000000] {
+  do_test tkt2332.$Len.1 {
+    set val "[expr rand()][expr rand()][expr rand()][expr rand()][expr rand()]"
+    set ::blobstr [string range \
+      [string repeat $val [expr ($Len/[string length $val])+1]] 0 [expr $Len-1]
+    ]
+
+    db eval { INSERT INTO blobs VALUES($::iKey, zeroblob($Len)) }
+  } {}
+
+  do_test tkt2332.$Len.2 {
+    execsql {
+      SELECT length(v) FROM blobs WHERE k = $::iKey;
+    }
+  } $Len
+
+  do_test tkt2332.$Len.3 {
+    set ::fd [db incrblob blobs v $::iKey]
+    puts -nonewline $::fd $::blobstr
+    close $::fd
+  } {}
+
+  do_test tkt2332.$Len.4 {
+    execsql { SELECT length(v) FROM blobs WHERE k = $::iKey; }
+  } $Len
+
+  do_test tkt2332.$Len.5 {
+    lindex [execsql {SELECT v FROM blobs WHERE k = $::iKey}] 0
+  } $::blobstr
+
+  incr ::iKey
+}
+
+finish_test