From 7701e817ba5a0cbbe64a133d433818caf6400201 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Mon, 10 Jan 2005 12:59:51 +0000 Subject: [PATCH] Extra test cases to improve coverage of btree.c (CVS 2189) FossilOrigin-Name: a461988661368bce799ef3d498a18e88559e14c7 --- manifest | 20 ++++++++++---------- manifest.uuid | 2 +- src/btree.c | 30 ++++++++++++++++++++++-------- src/test3.c | 12 ++++++++---- src/vdbe.c | 7 +++++-- test/btree.test | 27 ++++++++++++++++++++++++++- test/ioerr.test | 8 ++++++-- 7 files changed, 78 insertions(+), 28 deletions(-) diff --git a/manifest b/manifest index e60995f68d..6a0c78dbcd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\ssome\sdocumentation\sfor\sversion\s3.1.\s(CVS\s2188) -D 2005-01-10T06:39:57 +C Extra\stest\scases\sto\simprove\scoverage\sof\sbtree.c\s(CVS\s2189) +D 2005-01-10T12:59:52 F Makefile.in ecf441ac5ca1ccfc8748a8a9537706e69893dfa4 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 @@ -29,7 +29,7 @@ F sqlite3.def dbaeb20c153e1d366e8f421b55a573f5dfc00863 F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a F src/attach.c e49d09dad9f5f9fb10b4b0c1be5a70ae4c45e689 F src/auth.c 3b81f2a42f48a62c2c9c9b0eda31a157c681edea -F src/btree.c 5483bf070f1f9db540d526e70397f42c857c07e5 +F src/btree.c 241e27b4640519a45ab55d35ee3ae300a478eb23 F src/btree.h 861e40b759a195ba63819740e484390012cf81ab F src/build.c af1296e8a21a406b4f4c4f1e1365e075071219f3 F src/cursor.c f883813759742068890b1f699335872bfa8fdf41 @@ -67,7 +67,7 @@ F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9 F src/tclsqlite.c 354d3e4525c7b29c8f50b1a0125d55c63c916fbc F src/test1.c b7d94c54e58f95452387a5cabdf98b2be8059f29 F src/test2.c b11fa244fff02190707dd0879987c37c75e61fc8 -F src/test3.c 11082b094eb42b3f9a9d5f4e77b6d98aeb2f00b1 +F src/test3.c a72f20066cccd5a7b9f20b7b78fa9b05b47b3020 F src/test4.c 7c6b9fc33dd1f3f93c7f1ee6e5e6d016afa6c1df F src/test5.c 64f08b2a50ef371a1bd68ff206829e7b1b9997f5 F src/tokenize.c 2ad3d1ae1a0a70746db0b31a0a74f58050a3c39a @@ -76,7 +76,7 @@ F src/update.c 0979397c41ac29c54fe0cc687a356d8629a633af F src/utf.c e45ce11be6922408cd381561721f6cca7d3b992a F src/util.c 29f43c4a7b9ff29302f7899f793be6836b6cd7f9 F src/vacuum.c 1a9db113a027461daaf44724c71dd1ebbd064203 -F src/vdbe.c 789e3c986ff311ca371adaad24baa65e42e0b029 +F src/vdbe.c 53520958a7d63eaf138fa78f69efe225d502a9bf F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181 F src/vdbeInt.h 0f74561e629af86172de7cdf0ecaea014c51696c F src/vdbeapi.c 0cf3bdc1072616bedc8eec7fc22e3f5a169d33fd @@ -97,7 +97,7 @@ F test/bigfile.test d3744a8821ce9abb8697f2826a3e3d22b719e89f F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747 F test/bind.test 3635ddfe0fb15ecfd158708feff6ef707e15c0a9 F test/blob.test fc41fe95bdc10da51f0dee73ce86e75ce1d6eb9d -F test/btree.test 7ae2c9dde6c9fffd61b96efe28f9e28b396ddd78 +F test/btree.test ff754a2e68af75396fbbf8dfda009b4b93f086a6 F test/btree2.test aa4a6d05b1ea90b1acaf83ba89039dd302a88635 F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4 F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2 @@ -134,7 +134,7 @@ F test/insert.test 56f9c20c9adc8d707490c4ffa5d4daa94826ea03 F test/insert2.test 0bb50ff999e35a21549d8ee5dc44db8ac24d31a7 F test/interrupt.test 0aa230f8aedec0ad7caaf5edaced337e4cfb3820 F test/intpkey.test b57cf5236fde1bd8cbc1388fa0c91908f6fd9194 -F test/ioerr.test 90ccd62d50fbbaa990ccd544720a7b9dd10becd3 +F test/ioerr.test fd283e768301b26bc148012ea6ebea4c2295aa20 F test/join.test ea8c77b9fbc377fe553cdb5ce5f1bd72021dca5d F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8 F test/join3.test 67dc0d7c8dab3fff25796d0f3c3fd9c999aeded3 @@ -263,7 +263,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746 -P 6c7bec1b3aee0287e30f43c1d6a7b67b1c47e774 -R 7068bc64df143e31a5d1b0a4a0ebbc69 +P 5b7a5a4d69be425163135698d889797d15f56492 +R 8f87d57733bba8a8bebba0892812901d U danielk1977 -Z 5c1fa24d0389e66faa5fc6c7963ab21a +Z 23146f967500dcd597b4ae335d7f01e0 diff --git a/manifest.uuid b/manifest.uuid index 6996d4c1bf..bbc8e6ad96 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5b7a5a4d69be425163135698d889797d15f56492 \ No newline at end of file +a461988661368bce799ef3d498a18e88559e14c7 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 51c208f936..7fed5ee6fa 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9,7 +9,7 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** $Id: btree.c,v 1.228 2005/01/08 15:43:19 drh Exp $ +** $Id: btree.c,v 1.229 2005/01/10 12:59:52 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** For a detailed discussion of BTrees, refer to @@ -1661,12 +1661,16 @@ static void modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ } +/* +** Move the open database page pDbPage to location iFreePage in the +** database. The pDbPage reference remains valid. +*/ static int relocatePage( - Btree *pBt, - MemPage *pDbPage, - u8 eType, - Pgno iPtrPage, - Pgno iFreePage + Btree *pBt, /* Btree */ + MemPage *pDbPage, /* Open page to move */ + u8 eType, /* Pointer map 'type' entry for pDbPage */ + Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */ + Pgno iFreePage /* The location to move pDbPage to */ ){ MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */ Pgno iDbPage = pDbPage->pgno; @@ -5231,13 +5235,23 @@ static int checkTreePage( int pc = get2byte(&data[cellStart+i*2]); int size = cellSizePtr(pPage, &data[pc]); int j; - for(j=pc+size-1; j>=pc; j--) hit[j]++; + if( (pc+size-1)>=usableSize || pc<0 ){ + checkAppendMsg(pCheck, 0, + "Corruption detected in cell %d on page %d",i,iPage,0); + }else{ + for(j=pc+size-1; j>=pc; j--) hit[j]++; + } } for(cnt=0, i=get2byte(&data[hdr+1]); i>0 && i=i; j--) hit[j]++; + if( (i+size-1)>=usableSize || i<0 ){ + checkAppendMsg(pCheck, 0, + "Corruption detected in cell %d on page %d",i,iPage,0); + }else{ + for(j=i+size-1; j>=i; j--) hit[j]++; + } i = get2byte(&data[i]); } for(i=cnt=0; ikeyAsData, &sMem); + rc = sqlite3VdbeMemFromBtree(pCrsr, aOffset[p2], len, pC->keyAsData, &sMem); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } zData = sMem.z; } sqlite3VdbeSerialGet(zData, aType[p2], pTos); diff --git a/test/btree.test b/test/btree.test index 53aa4d418b..ed719b687f 100644 --- a/test/btree.test +++ b/test/btree.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is btree database backend # -# $Id: btree.test,v 1.33 2004/11/10 15:27:38 danielk1977 Exp $ +# $Id: btree.test,v 1.34 2005/01/10 12:59:53 danielk1977 Exp $ set testdir [file dirname $argv0] @@ -1033,6 +1033,31 @@ do_test btree-15.99 { } {0} btree_pager_ref_dump $::b1 +# Miscellaneous tests. +# +# btree-16.1 - Check that a statement cannot be started if a transaction is not +# active. +do_test btree-16.1 { + catch {btree_begin_statement $::b1} msg + set msg +} SQLITE_ERROR + +do_test btree-16.2 { + btree_begin_transaction $::b1 + set ::c1 [btree_cursor $::b1 2 1] + btree_insert $::c1 1 helloworld + btree_close_cursor $::c1 + btree_commit $::b1 +} {} +do_test btree-16.3 { + set ::c1 [btree_cursor $::b1 2 1] + btree_first $::c1 +} 0 +do_test btree-16.4 { + catch {btree_data $::c1 [expr [btree_payload_size $::c1] + 10]} msg + set msg +} SQLITE_ERROR + do_test btree-99.1 { btree_close $::b1 } {} diff --git a/test/ioerr.test b/test/ioerr.test index fe486bcfb8..21e7ac4b59 100644 --- a/test/ioerr.test +++ b/test/ioerr.test @@ -15,11 +15,13 @@ # The tests in this file use special facilities that are only # available in the SQLite test fixture. # -# $Id: ioerr.test,v 1.7 2005/01/08 02:35:44 danielk1977 Exp $ +# $Id: ioerr.test,v 1.8 2005/01/10 12:59:53 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl +set ::AV [execsql {pragma auto_vacuum}] + set ::go 1 for {set n 1} {$go} {incr n} { @@ -30,7 +32,7 @@ for {set n 1} {$go} {incr n} { # file when the file on disk is only 1 page. The pager layer detects that # this has happened and suppresses the error returned by the OS layer. # - ifcapable default_autovacuum { + if {$::AV} { if {$n==8} continue } @@ -87,6 +89,7 @@ proc cksum {{db db}} { set ::go 1 for {set n 1} {$go} {incr n} { + if {$n==24} breakpoint do_test ioerr-2.$n.1 { set ::sqlite_io_error_pending 0 db close @@ -104,6 +107,7 @@ for {set n 1} {$go} {incr n} { INSERT INTO t1 SELECT a+32, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+64, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+128, b||'-'||rowid, c||'-'||rowid FROM t1; + INSERT INTO t1 VALUES(1, randstr(600,600), randstr(600,600)); CREATE TABLE t2 AS SELECT * FROM t1; CREATE TABLE t3 AS SELECT * FROM t1; COMMIT;