Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Improved test coverage for vdbeaux.c. (CVS 2195) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3f46cd7767cf7c48dd1de7ae1c4104d6 |
User & Date: | drh 2005-01-11 16:54:15.000 |
Context
2005-01-11
| ||
17:46 | Test coverage improvements on tokenize.c. (CVS 2196) (check-in: 5767850cca user: drh tags: trunk) | |
16:54 | Improved test coverage for vdbeaux.c. (CVS 2195) (check-in: 3f46cd7767 user: drh tags: trunk) | |
15:28 | Improved test coverage for util.c. (CVS 2194) (check-in: ad451a2ddc user: drh tags: trunk) | |
Changes
Changes to src/test1.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test1.c,v 1.119 2005/01/11 16:54:15 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 | }else if( strcmp(argv[2], "SQLITE_MAGIC_ERROR")==0 ){ db->magic = SQLITE_MAGIC_ERROR; }else if( Tcl_GetInt(interp, argv[2], &db->magic) ){ return TCL_ERROR; } return TCL_OK; } /* ** Usage: tcl_variable_type VARIABLENAME ** ** Return the name of the internal representation for the ** value of the given variable. */ | > > > > > > > > > > > > > > > > > > > > > | 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 | }else if( strcmp(argv[2], "SQLITE_MAGIC_ERROR")==0 ){ db->magic = SQLITE_MAGIC_ERROR; }else if( Tcl_GetInt(interp, argv[2], &db->magic) ){ return TCL_ERROR; } return TCL_OK; } /* ** Usage: sqlite3_interrupt DB ** ** Trigger an interrupt on DB */ static int test_interrupt( void * clientData, Tcl_Interp *interp, int argc, char **argv ){ sqlite3 *db; if( argc!=2 ){ Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " DB", 0); return TCL_ERROR; } if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR; sqlite3_interrupt(db); return TCL_OK; } /* ** Usage: tcl_variable_type VARIABLENAME ** ** Return the name of the internal representation for the ** value of the given variable. */ |
︙ | ︙ | |||
2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 | { "sqlite_malloc_stat", (Tcl_CmdProc*)sqlite_malloc_stat }, #endif { "sqlite_bind", (Tcl_CmdProc*)test_bind }, { "breakpoint", (Tcl_CmdProc*)test_breakpoint }, { "sqlite3_key", (Tcl_CmdProc*)test_key }, { "sqlite3_rekey", (Tcl_CmdProc*)test_rekey }, { "sqlite_set_magic", (Tcl_CmdProc*)sqlite_set_magic }, }; static struct { char *zName; Tcl_ObjCmdProc *xProc; void *clientData; } aObjCmd[] = { { "sqlite3_bind_int", test_bind_int, 0 }, | > | 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 | { "sqlite_malloc_stat", (Tcl_CmdProc*)sqlite_malloc_stat }, #endif { "sqlite_bind", (Tcl_CmdProc*)test_bind }, { "breakpoint", (Tcl_CmdProc*)test_breakpoint }, { "sqlite3_key", (Tcl_CmdProc*)test_key }, { "sqlite3_rekey", (Tcl_CmdProc*)test_rekey }, { "sqlite_set_magic", (Tcl_CmdProc*)sqlite_set_magic }, { "sqlite3_interrupt", (Tcl_CmdProc*)test_interrupt }, }; static struct { char *zName; Tcl_ObjCmdProc *xProc; void *clientData; } aObjCmd[] = { { "sqlite3_bind_int", test_bind_int, 0 }, |
︙ | ︙ |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 | Vdbe *p /* The VDBE */ ){ sqlite3 *db = p->db; int i; int rc = SQLITE_OK; assert( p->explain ); /* Even though this opcode does not put dynamic strings onto the ** the stack, they may become dynamic if the user calls ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. */ if( p->pTos==&p->aStack[4] ){ releaseMemArray(p->aStack, 5); } p->resOnStack = 0; i = p->pc++; if( i>=p->nOp ){ p->rc = SQLITE_OK; rc = SQLITE_DONE; }else if( db->flags & SQLITE_Interrupt ){ db->flags &= ~SQLITE_Interrupt; | > > > > < < < | < | 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 | Vdbe *p /* The VDBE */ ){ sqlite3 *db = p->db; int i; int rc = SQLITE_OK; assert( p->explain ); if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE; assert( db->magic==SQLITE_MAGIC_BUSY ); assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY ); /* Even though this opcode does not put dynamic strings onto the ** the stack, they may become dynamic if the user calls ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. */ if( p->pTos==&p->aStack[4] ){ releaseMemArray(p->aStack, 5); } p->resOnStack = 0; i = p->pc++; if( i>=p->nOp ){ p->rc = SQLITE_OK; rc = SQLITE_DONE; }else if( db->flags & SQLITE_Interrupt ){ db->flags &= ~SQLITE_Interrupt; p->rc = SQLITE_INTERRUPT; rc = SQLITE_ERROR; sqlite3SetString(&p->zErrMsg, sqlite3ErrStr(p->rc), (char*)0); }else{ Op *pOp = &p->aOp[i]; Mem *pMem = p->aStack; pMem->flags = MEM_Int; pMem->type = SQLITE_INTEGER; |
︙ | ︙ |
Changes to test/bind.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2003 September 6 # # 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 implements regression tests for SQLite library. The # focus of this script testing the sqlite_bind API. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2003 September 6 # # 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 implements regression tests for SQLite library. The # focus of this script testing the sqlite_bind API. # # $Id: bind.test,v 1.24 2005/01/11 16:54:15 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl proc sqlite_step {stmt N VALS COLS} { upvar VALS vals |
︙ | ︙ | |||
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 | } :abc do_test bind-10.6 { sqlite3_bind_parameter_name $VM 2 } $v1 do_test bind-10.7 { sqlite3_bind_parameter_name $VM 3 } $v2 do_test bind-10.8 { sqlite3_bind_int $VM 1 1 sqlite3_bind_int $VM 2 2 sqlite3_bind_int $VM 3 3 sqlite3_step $VM } SQLITE_DONE do_test bind-10.9 { sqlite3_finalize $VM } SQLITE_OK do_test bind-10.10 { execsql {SELECT * FROM t2} } {1 999 1000 1001 {} {} 1 2 1 3 2 1} # Ticket #918 # do_test bind-10.11 { catch {sqlite3_finalize $VM} set VM [ sqlite3_prepare $DB { INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,?,?4,:pqr,:abc,?4) } -1 TAIL ] sqlite3_bind_parameter_count $VM } 5 do_test bind-10.12 { sqlite3_bind_parameter_index $VM :xyz } 0 do_test bind-10.13 { sqlite3_bind_parameter_index $VM {} } 0 do_test bind-10.14 { | > > > > > > > > > > > > > > > > > > > | 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | } :abc do_test bind-10.6 { sqlite3_bind_parameter_name $VM 2 } $v1 do_test bind-10.7 { sqlite3_bind_parameter_name $VM 3 } $v2 do_test bind-10.7.1 { sqlite3_bind_parameter_name 0 1 ;# Ignore if VM is NULL } {} do_test bind-10.7.2 { sqlite3_bind_parameter_name $VM 0 ;# Ignore if index too small } {} do_test bind-10.7.3 { sqlite3_bind_parameter_name $VM 4 ;# Ignore if index is too big } {} do_test bind-10.8 { sqlite3_bind_int $VM 1 1 sqlite3_bind_int $VM 2 2 sqlite3_bind_int $VM 3 3 sqlite3_step $VM } SQLITE_DONE do_test bind-10.8.1 { # Binding attempts after program start should fail set rc [catch { sqlite3_bind_int $VM 1 1 } msg] lappend rc $msg } {1 {}} do_test bind-10.9 { sqlite3_finalize $VM } SQLITE_OK do_test bind-10.10 { execsql {SELECT * FROM t2} } {1 999 1000 1001 {} {} 1 2 1 3 2 1} # Ticket #918 # do_test bind-10.11 { catch {sqlite3_finalize $VM} set VM [ sqlite3_prepare $DB { INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,?,?4,:pqr,:abc,?4) } -1 TAIL ] sqlite3_bind_parameter_count $VM } 5 do_test bind-10.11.1 { sqlite3_bind_parameter_index 0 :xyz ;# ignore NULL VM arguments } 0 do_test bind-10.12 { sqlite3_bind_parameter_index $VM :xyz } 0 do_test bind-10.13 { sqlite3_bind_parameter_index $VM {} } 0 do_test bind-10.14 { |
︙ | ︙ |
Changes to test/func.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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 implements regression tests for SQLite library. The # focus of this file is testing built-in functions. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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 implements regression tests for SQLite library. The # focus of this file is testing built-in functions. # # $Id: func.test,v 1.31 2005/01/11 16:54:15 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # do_test func-0.0 { |
︙ | ︙ | |||
244 245 246 247 248 249 250 251 252 253 254 255 256 257 | do_test func-7.1 { execsql {SELECT last_insert_rowid()} } [db last_insert_rowid] # Tests for aggregate functions and how they handle NULLs. # do_test func-8.1 { execsql { SELECT sum(a), count(a), round(avg(a),2), min(a), max(a), count(*) FROM t2; } } {68236.0 3 22745.33 1 67890 5} do_test func-8.2 { execsql { SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t2; | > | 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | do_test func-7.1 { execsql {SELECT last_insert_rowid()} } [db last_insert_rowid] # Tests for aggregate functions and how they handle NULLs. # do_test func-8.1 { execsql {EXPLAIN SELECT sum(a) FROM t2;} execsql { SELECT sum(a), count(a), round(avg(a),2), min(a), max(a), count(*) FROM t2; } } {68236.0 3 22745.33 1 67890 5} do_test func-8.2 { execsql { SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t2; |
︙ | ︙ |
Added test/index2.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | # 2005 January 11 # # 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 implements regression tests for SQLite library. The # focus of this file is testing the CREATE INDEX statement. # # $Id: index2.test,v 1.1 2005/01/11 16:54:15 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table with a large number of columns # do_test index2-1.1 { set sql {CREATE TABLE t1(} for {set i 1} {$i<1000} {incr i} { append sql "c$i," } append sql "c1000);" execsql $sql } {} do_test index2-1.2 { set sql {INSERT INTO t1 VALUES(} for {set i 1} {$i<1000} {incr i} { append sql $i, } append sql {1000);} execsql $sql } {} do_test index2-1.3 { execsql {SELECT c123 FROM t1} } 123 do_test index2-1.4 { execsql BEGIN for {set j 1} {$j<=100} {incr j} { set sql {INSERT INTO t1 VALUES(} for {set i 1} {$i<1000} {incr i} { append sql [expr {$j*10000+$i}], } append sql "[expr {$j*10000+1000}]);" execsql $sql } execsql COMMIT execsql {SELECT count(*) FROM t1} } 101 do_test index2-1.5 { execsql {SELECT round(sum(c1000)) FROM t1} } {50601000} # Create indices with many columns # do_test index2-2.1 { set sql "CREATE INDEX t1i1 ON t1(" for {set i 1} {$i<1000} {incr i} { append sql c$i, } append sql c1000) execsql $sql } {} do_test index2-2.2 { execsql {EXPLAIN SELECT c9 FROM t1 ORDER BY c1, c2, c3, c4, c5} execsql {SELECT c9 FROM t1 ORDER BY c1, c2, c3, c4, c5, c6 LIMIT 5} } {9 10009 20009 30009 40009} finish_test |
Changes to test/interrupt.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2004 Feb 8 # # 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 implements regression tests for SQLite library. The # focus of this script is the sqlite_interrupt() API. # | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # 2004 Feb 8 # # 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 implements regression tests for SQLite library. The # focus of this script is the sqlite_interrupt() API. # # $Id: interrupt.test,v 1.9 2005/01/11 16:54:15 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl db close set DB [sqlite3 db test.db] # Compute a checksum on the entire database. # proc cksum {{db db}} { set txt [$db eval {SELECT name, type, sql FROM sqlite_master}]\n foreach tbl [$db eval {SELECT name FROM sqlite_master WHERE type='table'}] { append txt [$db eval "SELECT * FROM $tbl"]\n |
︙ | ︙ | |||
103 104 105 106 107 108 109 | } } $cksum ifcapable {vacuum && !default_autovacuum} { do_test interrupt-2.4 { expr {$::origsize>[file size test.db]} } 1 } | > > > > > > > > | | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | } } $cksum ifcapable {vacuum && !default_autovacuum} { do_test interrupt-2.4 { expr {$::origsize>[file size test.db]} } 1 } ifcapable {explain} { do_test interrupt-2.5 { set sql {EXPLAIN SELECT max(a,b), a, b FROM t1} execsql $sql set rc [catch {db eval $sql {sqlite3_interrupt $DB}} msg] lappend rc $msg } {1 interrupted} } integrity_check interrupt-2.6 # Ticket #594. If an interrupt occurs in the middle of a transaction # and that transaction is later rolled back, the internal schema tables do # not reset. # for {set i 1} {$i<50} {incr i 5} { do_test interrupt-3.$i.1 { |
︙ | ︙ |