Test cases to improve coverage of vdbe.c. (CVS 2193)

FossilOrigin-Name: a6b45722071bde543c4ea28a432339d8708a5cac
This commit is contained in:
danielk1977 2005-01-11 13:02:33 +00:00
parent 1400b52838
commit 01427a6214
7 changed files with 103 additions and 34 deletions

View File

@ -1,5 +1,5 @@
C Remove\sa\sC++\sstyle\scomment\sthat\swent\sin\swith\sthe\sprevious\scommit.\s(CVS\s2192)
D 2005-01-11T11:08:23
C Test\scases\sto\simprove\scoverage\sof\svdbe.c.\s(CVS\s2193)
D 2005-01-11T13:02:34
F Makefile.in ecf441ac5ca1ccfc8748a8a9537706e69893dfa4
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@ -36,7 +36,7 @@ F src/cursor.c f883813759742068890b1f699335872bfa8fdf41
F src/date.c 65536e7ea04fdde6e0551264fca15966966e171f
F src/delete.c 32277d2834e36c7538c047f14d643751c256c73b
F src/expr.c d718509e56f58b06bc5f9b46afb295675334d544
F src/func.c b668e5ad043176049454c95a6a780367a0e8f6bb
F src/func.c dc188d862d7276ea897655b248e2cb17022686e3
F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5
F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
F src/insert.c f6b69e40e8938f63a2368cbcb5087a56098cf632
@ -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 f20455da51615ba185ac3c41416e8714ca84509d
F src/vdbe.c 8ef389f567e233768a845e7dffacb21308e4f3e8
F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181
F src/vdbeInt.h 0f74561e629af86172de7cdf0ecaea014c51696c
F src/vdbeapi.c 0cf3bdc1072616bedc8eec7fc22e3f5a169d33fd
@ -129,7 +129,7 @@ F test/enc2.test 6d1a2650e9da43eab499d18ca694a0cb6ec69dee
F test/enc3.test f6a5f0b7b7f3a88f030d3143729b87cd5c86d837
F test/expr.test bf826516ea0ba159eb9680fbcea955148bfe9bc3
F test/fkey1.test 81bb13caaa78f58d7d191d7f535529f7c91d821a
F test/func.test 830d352574c7f5cd15149a9be58a6dcc2b995c05
F test/func.test 810a1a2984ed83d55cc20746b049c7d099bd0408
F test/hook.test f8605cde4c77b2c6a4a73723bf6c507796a64dda
F test/in.test b92a2df9162e1cbd33c6449a29a05e6955b1741a
F test/index.test 1294997b4743007af57f8148c63ba14f07ad31ab
@ -137,7 +137,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 b37837850294c6cbafb0fd5211a4df40b10d46af
F test/ioerr.test 01ac547c4a6fc53fcd9fe7ecc9698ab5d827093a
F test/join.test ea8c77b9fbc377fe553cdb5ce5f1bd72021dca5d
F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8
F test/join3.test 67dc0d7c8dab3fff25796d0f3c3fd9c999aeded3
@ -149,7 +149,7 @@ F test/lock.test 32fe28e5030f25f23bcf6beef440675b0d848413
F test/lock2.test 59c3dd7d9b24d1bf7ec91b2d1541c37e97939d5f
F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
F test/main.test 5f9deae11b93336da1ccc5f91cf8be075c91ddf1
F test/malloc.test c20b7208d8d123e1185b3cbe54c6fdde3c060c55
F test/malloc.test 74b9d6b8e6b388102e2c5dbcda7da4341e00e6b5
F test/memdb.test 532aac7128a3da494cddc4461d76c6e3988f771b
F test/memleak.test f1fa233f8295dd1d955a00d5e5ee857850f27f29
F test/minmax.test e7048476940df0af11d0f2cf687572f557cd0b29
@ -266,7 +266,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746
P a37e0108dea4896d8aaf84cc590b5cecbdefee6c
R a66eec2a6cf2cb95c24e2e822d8c8a29
P ce8e4e885a46cec35b64a81925eb330048ea5cbb
R 44bedd6ab22a6b83aa2c8db7d5317250
U danielk1977
Z b88d13fd6460a9f412a6a1a64f3b0e8a
Z edff517034081f5d7cb31d6aed3503e0

View File

@ -1 +1 @@
ce8e4e885a46cec35b64a81925eb330048ea5cbb
a6b45722071bde543c4ea28a432339d8708a5cac

View File

@ -16,7 +16,7 @@
** sqliteRegisterBuildinFunctions() found at the bottom of the file.
** All other code has file scope.
**
** $Id: func.c,v 1.91 2004/11/19 05:14:55 danielk1977 Exp $
** $Id: func.c,v 1.92 2005/01/11 13:02:34 danielk1977 Exp $
*/
#include <ctype.h>
#include <math.h>
@ -915,6 +915,21 @@ static void test_auxdata(
}
#endif /* SQLITE_TEST */
#ifdef SQLITE_TEST
/*
** A function to test error reporting from user functions. This function
** returns a copy of it's first argument as an error.
*/
static void test_error(
sqlite3_context *pCtx,
int nArg,
sqlite3_value **argv
){
// sqlite3_result_error(pCtx, sqlite3_value_text(argv[0]), 0);
sqlite3_result_error(pCtx, 0, 0);
}
#endif /* SQLITE_TEST */
/*
** An instance of the following structure holds the context of a
** sum() or avg() aggregate computation.
@ -1122,6 +1137,7 @@ void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
{ "test_destructor", 1, 1, SQLITE_UTF8, 0, test_destructor},
{ "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
{ "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata},
{ "test_error", 1, 0, SQLITE_UTF8, 0, test_error},
#endif
};
static const struct {

View File

@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
** $Id: vdbe.c,v 1.439 2005/01/11 11:08:23 danielk1977 Exp $
** $Id: vdbe.c,v 1.440 2005/01/11 13:02:34 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@ -627,11 +627,10 @@ case OP_Halt: {
sqlite3SetString(&p->zErrMsg, pOp->p3, (char*)0);
}
rc = sqlite3VdbeHalt(p);
assert( rc==SQLITE_BUSY || rc==SQLITE_OK );
if( rc==SQLITE_BUSY ){
p->rc = SQLITE_BUSY;
return SQLITE_BUSY;
}else if( rc!=SQLITE_OK ){
p->rc = rc;
}
return p->rc ? SQLITE_ERROR : SQLITE_DONE;
}
@ -1872,9 +1871,7 @@ case OP_Column: {
/* Get the column information.
*/
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
}
assert( rc==SQLITE_OK );
if( zRec ){
zData = &zRec[aOffset[p2]];
}else{
@ -2048,15 +2045,7 @@ case OP_MakeRecord: {
if( addRowid ){
zCsr += sqlite3VdbeSerialPut(zCsr, pRowid);
}
/* If zCsr has not been advanced exactly nByte bytes, then one
** of the sqlite3PutVarint() or sqlite3VdbeSerialPut() calls above
** failed. This indicates a corrupted memory cell or code bug.
*/
if( zCsr!=(zNewRecord+nByte) ){
rc = SQLITE_INTERNAL;
goto abort_due_to_error;
}
assert( zCsr==(zNewRecord+nByte) );
/* Pop entries off the stack if required. Push the new record on. */
if( !leaveOnStack ){
@ -2586,9 +2575,7 @@ case OP_MoveGt: {
if( oc==OP_MoveGe || oc==OP_MoveGt ){
if( res<0 ){
rc = sqlite3BtreeNext(pC->pCursor, &res);
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
}
if( rc!=SQLITE_OK ) goto abort_due_to_error;
pC->recnoIsValid = 0;
}else{
res = 0;
@ -2596,7 +2583,8 @@ case OP_MoveGt: {
}else{
assert( oc==OP_MoveLt || oc==OP_MoveLe );
if( res>=0 ){
sqlite3BtreePrevious(pC->pCursor, &res);
rc = sqlite3BtreePrevious(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;
pC->recnoIsValid = 0;
}else{
/* res might be negative because the table is empty. Check to

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing built-in functions.
#
# $Id: func.test,v 1.29 2004/08/20 18:34:20 drh Exp $
# $Id: func.test,v 1.30 2005/01/11 13:02:34 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -452,4 +452,10 @@ do_test func-14.2 {
}
} {1}
do_test func-15.1 {
catchsql {
select test_error(NULL);
}
} {1 {user function error}}
finish_test

View 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.9 2005/01/11 10:25:07 danielk1977 Exp $
# $Id: ioerr.test,v 1.10 2005/01/11 13:02:34 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -174,4 +174,33 @@ for {set n 1} {$go} {incr n} {
}
set ::sqlite_io_error_pending 0
set ::go 1
for {set n 1} {$go} {incr n} {
do_test ioerr-4.$n.1 {
set ::sqlite_io_error_pending 0
db close
catch {file delete -force test.db}
catch {file delete -force test.db-journal}
sqlite3 db test.db
set sql "CREATE TABLE abc(a1"
for {set i 2} {$i<1300} {incr i} {
append sql ", a$i"
}
append sql ");"
execsql $sql
execsql {INSERT INTO abc (a1) VALUES(NULL)}
} {}
do_test ioerr-4.$n.2 [subst {
set ::sqlite_io_error_pending $n
}] $n
do_test ioerr-4.$n.3 {
set r [catch {db eval {
SELECT * FROM abc;
}} msg]
set ::go [expr {$::sqlite_io_error_pending<=0}]
expr {$::sqlite_io_error_pending>0 || $r!=0}
} {1}
}
set ::sqlite_io_error_pending 0
finish_test

View File

@ -14,7 +14,7 @@
# special feature is used to see what happens in the library if a malloc
# were to really fail due to an out-of-memory situation.
#
# $Id: malloc.test,v 1.12 2005/01/03 01:33:00 drh Exp $
# $Id: malloc.test,v 1.13 2005/01/11 13:02:34 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -304,6 +304,36 @@ for {set go 1; set i 1} {$go} {incr i} {
} {1 1}
}
for {set go 1; set i 1} {$go} {incr i} {
do_test malloc-7.$i {
sqlite_malloc_fail 0
catch {db close}
catch {file delete -force test.db}
catch {file delete -force test.db-journal}
sqlite3 db test.db
execsql {
CREATE TABLE t1(a, b);
INSERT INTO t1 VALUES(1, 2);
INSERT INTO t1 VALUES(3, 4);
INSERT INTO t1 VALUES(5, 6);
}
sqlite_malloc_fail $i
set v [catch {execsql {
SELECT min(a) FROM t1 GROUP BY b;
}} msg]
set leftover [lindex [sqlite_malloc_stat] 2]
if {$leftover>0} {
if {$leftover>1} {puts "\nLeftover: $leftover\nReturn=$v Message=$msg"}
set ::go 0
set v {1 1}
} else {
set v2 [expr {$msg=="" || $msg=="out of memory"}]
if {!$v2} {puts "\nError message returned: $msg"}
lappend v $v2
}
} {1 1}
}
# Ensure that no file descriptors were leaked.
do_test malloc-6.X {
catch {db close}