Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Update tests to work even if some features of the library are disabled. (CVS 2050) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b11fc9b3f3a2711f98e7e45724aa1d30 |
User & Date: | drh 2004-11-03 16:27:01.000 |
Context
2004-11-04
| ||
02:57 | Add support for table allocation (not deallocation) in auto-vacuum databases. (CVS 2051) (check-in: 571de52376 user: danielk1977 tags: trunk) | |
2004-11-03
| ||
16:27 | Update tests to work even if some features of the library are disabled. (CVS 2050) (check-in: b11fc9b3f3 user: drh tags: trunk) | |
13:59 | More work on optionally removing unused features at compile-time. (CVS 2049) (check-in: a82980fd70 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.107 2004/11/03 16:27:01 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 | /* ** Register commands with the TCL interpreter. */ int Sqlitetest1_Init(Tcl_Interp *interp){ extern int sqlite3_search_count; extern int sqlite3_interrupt_count; extern int sqlite3_open_file_count; extern int sqlite3_current_time; static struct { char *zName; Tcl_CmdProc *xProc; } aCmd[] = { { "sqlite3_mprintf_int", (Tcl_CmdProc*)sqlite3_mprintf_int }, { "sqlite3_mprintf_int64", (Tcl_CmdProc*)sqlite3_mprintf_int64 }, | > | 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 | /* ** Register commands with the TCL interpreter. */ int Sqlitetest1_Init(Tcl_Interp *interp){ extern int sqlite3_search_count; extern int sqlite3_interrupt_count; extern int sqlite3_open_file_count; extern int sqlite3_sort_count; extern int sqlite3_current_time; static struct { char *zName; Tcl_CmdProc *xProc; } aCmd[] = { { "sqlite3_mprintf_int", (Tcl_CmdProc*)sqlite3_mprintf_int }, { "sqlite3_mprintf_int64", (Tcl_CmdProc*)sqlite3_mprintf_int64 }, |
︙ | ︙ | |||
2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 | } for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, aObjCmd[i].clientData, 0); } Tcl_LinkVar(interp, "sqlite_search_count", (char*)&sqlite3_search_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_interrupt_count", (char*)&sqlite3_interrupt_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_open_file_count", (char*)&sqlite3_open_file_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_current_time", (char*)&sqlite3_current_time, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_os_trace", | > > | 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 | } for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, aObjCmd[i].clientData, 0); } Tcl_LinkVar(interp, "sqlite_search_count", (char*)&sqlite3_search_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_sort_count", (char*)&sqlite3_sort_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_interrupt_count", (char*)&sqlite3_interrupt_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_open_file_count", (char*)&sqlite3_open_file_count, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_current_time", (char*)&sqlite3_current_time, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_os_trace", |
︙ | ︙ |
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** 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.422 2004/11/03 16:27:01 drh Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> #include "vdbeInt.h" /* |
︙ | ︙ | |||
65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ** of the db.flags field is set in order to simulate and interrupt. ** ** This facility is used for testing purposes only. It does not function ** in an ordinary build. */ int sqlite3_interrupt_count = 0; /* ** Release the memory associated with the given stack level. This ** leaves the Mem.flags field in an inconsistent state. */ #define Release(P) if((P)->flags&MEM_Dyn){ sqlite3VdbeMemRelease(P); } /* | > > > > > > > > > | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | ** of the db.flags field is set in order to simulate and interrupt. ** ** This facility is used for testing purposes only. It does not function ** in an ordinary build. */ int sqlite3_interrupt_count = 0; /* ** The next global variable is incremented each type the OP_Sort opcode ** is executed. The test procedures use this information to make sure that ** sorting is occurring or not occuring at appropriate times. This variable ** has no function other than to help verify the correct operation of the ** library. */ int sqlite3_sort_count = 0; /* ** Release the memory associated with the given stack level. This ** leaves the Mem.flags field in an inconsistent state. */ #define Release(P) if((P)->flags&MEM_Dyn){ sqlite3VdbeMemRelease(P); } /* |
︙ | ︙ | |||
3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 | ** that describes the keys to be sorted. */ case OP_Sort: { int i; KeyInfo *pKeyInfo = (KeyInfo*)pOp->p3; Sorter *pElem; Sorter *apSorter[NSORT]; pKeyInfo->enc = p->db->enc; for(i=0; i<NSORT; i++){ apSorter[i] = 0; } while( p->pSort ){ pElem = p->pSort; p->pSort = pElem->pNext; | > | 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 | ** that describes the keys to be sorted. */ case OP_Sort: { int i; KeyInfo *pKeyInfo = (KeyInfo*)pOp->p3; Sorter *pElem; Sorter *apSorter[NSORT]; sqlite3_sort_count++; pKeyInfo->enc = p->db->enc; for(i=0; i<NSORT; i++){ apSorter[i] = 0; } while( p->pSort ){ pElem = p->pSort; p->pSort = pElem->pNext; |
︙ | ︙ |
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.21 2004/11/03 16:27:02 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl proc sqlite_step {stmt N VALS COLS} { upvar VALS vals |
︙ | ︙ | |||
92 93 94 95 96 97 98 | execsql {SELECT rowid, * FROM t1} } {1 123 abcdefg {} 2 456 abcdefg {}} do_test bind-1.99 { sqlite3_finalize $VM } SQLITE_OK | > > > > | | | | | | | > > > > > > > > > > > > > > > > > | | | | | | | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | execsql {SELECT rowid, * FROM t1} } {1 123 abcdefg {} 2 456 abcdefg {}} do_test bind-1.99 { sqlite3_finalize $VM } SQLITE_OK # Prepare the statement in different ways depending on whether or not # the $var processing is compiled into the library. # ifcapable {tclvar} { do_test bind-2.1 { execsql { DELETE FROM t1; } set VM [sqlite3_prepare $DB {INSERT INTO t1 VALUES($one,$::two,${x})} -1 TX] set TX } {} set v1 {$one} set v2 {$::two} set v3 {${x}} } ifcapable {!tclvar} { do_test bind-2.1 { execsql { DELETE FROM t1; } set VM [sqlite3_prepare $DB {INSERT INTO t1 VALUES(:one,:two,:_)} -1 TX] set TX } {} set v1 {:one} set v2 {:two} set v3 {:_} } do_test bind-2.1.1 { sqlite3_bind_parameter_count $VM } 3 do_test bind-2.1.2 { sqlite3_bind_parameter_name $VM 1 } $v1 do_test bind-2.1.3 { sqlite3_bind_parameter_name $VM 2 } $v2 do_test bind-2.1.4 { sqlite3_bind_parameter_name $VM 3 } $v3 do_test bind-2.1.5 { sqlite3_bind_parameter_index $VM $v1 } 1 do_test bind-2.1.6 { sqlite3_bind_parameter_index $VM $v2 } 2 do_test bind-2.1.7 { sqlite3_bind_parameter_index $VM $v3 } 3 do_test bind-2.1.8 { sqlite3_bind_parameter_index $VM {:hi} } 0 # 32 bit Integers do_test bind-2.2 { |
︙ | ︙ | |||
342 343 344 345 346 347 348 | do_test bind-9.6 { sqlite3_finalize $VM } SQLITE_OK do_test bind-9.7 { execsql {SELECT * FROM t2} } {1 999 1000 1001 {} {}} | > | | | | | | | | | > > > > > > > > > > > > > > > > | | | | | 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 | do_test bind-9.6 { sqlite3_finalize $VM } SQLITE_OK do_test bind-9.7 { execsql {SELECT * FROM t2} } {1 999 1000 1001 {} {}} ifcapable {tclvar} { do_test bind-10.1 { catch {sqlite3_finalize $VM} set VM [ sqlite3_prepare $DB { INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,$abc,:abc,$ab,$abc,:abc) } -1 TAIL ] sqlite3_bind_parameter_count $VM } 3 set v1 {$abc} set v2 {$ab} } ifcapable {!tclvar} { do_test bind-10.1 { catch {sqlite3_finalize $VM} set VM [ sqlite3_prepare $DB { INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,:xyz,:abc,:xy,:xyz,:abc) } -1 TAIL ] sqlite3_bind_parameter_count $VM } 3 set v1 {:xyz} set v2 {:xy} } do_test bind-10.2 { sqlite3_bind_parameter_index $VM :abc } 1 do_test bind-10.3 { sqlite3_bind_parameter_index $VM $v1 } 2 do_test bind-10.4 { sqlite3_bind_parameter_index $VM $v2 } 3 do_test bind-10.5 { sqlite3_bind_parameter_name $VM 1 } :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 { |
︙ | ︙ |
Changes to test/capi2.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2003 January 29 # # 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 callback-free C/C++ API. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2003 January 29 # # 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 callback-free C/C++ API. # # $Id: capi2.test,v 1.20 2004/11/03 16:27:02 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl # Return the text values from the current row pointed at by STMT as a list. proc get_row_values {STMT} { |
︙ | ︙ | |||
590 591 592 593 594 595 596 | do_test capi2-7.11 { sqlite3_changes $DB } {4} do_test capi2-7.11a { execsql {SELECT count(*) FROM t1} } {4} | > | | | | > | 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 | do_test capi2-7.11 { sqlite3_changes $DB } {4} do_test capi2-7.11a { execsql {SELECT count(*) FROM t1} } {4} ifcapable {explain} { do_test capi2-7.12 { set x [stepsql $DB {EXPLAIN SELECT * FROM t1}] lindex $x 0 } {0} } # Ticket #261 - make sure we can finalize before the end of a query. # do_test capi2-8.1 { set VM1 [sqlite3_prepare $DB {SELECT * FROM t2} -1 TAIL] sqlite3_finalize $VM1 } {SQLITE_OK} |
︙ | ︙ |
Changes to test/collate4.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # 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 page cache subsystem. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 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 page cache subsystem. # # $Id: collate4.test,v 1.4 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl db collate TEXT text_collate proc text_collate {a b} { return [string compare $a $b] |
︙ | ︙ | |||
31 32 33 34 35 36 37 38 | # This procedure executes the SQL. Then it checks the generated program # for the SQL and appends a "nosort" to the result if the program contains the # SortCallback opcode. If the program does not contain the SortCallback # opcode it appends "sort" # proc cksort {sql} { set data [execsql $sql] | > < | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # This procedure executes the SQL. Then it checks the generated program # for the SQL and appends a "nosort" to the result if the program contains the # SortCallback opcode. If the program does not contain the SortCallback # opcode it appends "sort" # proc cksort {sql} { set ::sqlite_sort_count 0 set data [execsql $sql] if {$::sqlite_sort_count} {set x sort} {set x nosort} lappend data $x return $data } # # Test cases are organized roughly as follows: # |
︙ | ︙ |
Changes to test/fkey1.test.
︙ | ︙ | |||
11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # This file implements regression tests for SQLite library. # # This file implements tests for foreign keys. # set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table and some data to work with. # do_test fkey1-1.0 { execsql { CREATE TABLE t1( a INTEGER PRIMARY KEY, | > > > > > | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # This file implements regression tests for SQLite library. # # This file implements tests for foreign keys. # set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable {!foreignkey} { finish_test return } # Create a table and some data to work with. # do_test fkey1-1.0 { execsql { CREATE TABLE t1( a INTEGER PRIMARY KEY, |
︙ | ︙ |
Changes to test/index.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 the CREATE INDEX statement. # | | | 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 the CREATE INDEX statement. # # $Id: index.test,v 1.33 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a basic index and verify it is added to sqlite_master # do_test index-1.1 { |
︙ | ︙ | |||
235 236 237 238 239 240 241 | } {1 {no such index: index1}} # Make sure we don't actually create an index when the EXPLAIN keyword # is used. # do_test index-9.1 { execsql {CREATE TABLE tab1(a int)} | > | > | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | } {1 {no such index: index1}} # Make sure we don't actually create an index when the EXPLAIN keyword # is used. # do_test index-9.1 { execsql {CREATE TABLE tab1(a int)} ifcapable {explain} { execsql {EXPLAIN CREATE INDEX idx1 ON tab1(a)} } execsql {SELECT name FROM sqlite_master WHERE tbl_name='tab1'} } {tab1} do_test index-9.2 { execsql {CREATE INDEX idx1 ON tab1(a)} execsql {SELECT name FROM sqlite_master WHERE tbl_name='tab1' ORDER BY name} } {idx1 tab1} integrity_check index-9.3 |
︙ | ︙ |
Changes to test/insert.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 the INSERT statement. # | | | 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 the INSERT statement. # # $Id: insert.test,v 1.19 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Try to insert into a non-existant table. # do_test insert-1.1 { |
︙ | ︙ | |||
218 219 220 221 222 223 224 | } {1} do_test insert-5.2 { execsql { INSERT INTO t4 SELECT x+1 FROM t4; SELECT * FROM t4; } } {1 2} | > | | | | | | | > | 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | } {1} do_test insert-5.2 { execsql { INSERT INTO t4 SELECT x+1 FROM t4; SELECT * FROM t4; } } {1 2} ifcapable {explain} { do_test insert-5.3 { # verify that a temporary table is used to copy t4 to t4 set x [execsql { EXPLAIN INSERT INTO t4 SELECT x+2 FROM t4; }] expr {[lsearch $x OpenTemp]>0} } {1} } do_test insert-5.4 { # Verify that table "test1" begins on page 3. This should be the same # page number used by "t4" above. # # Update for v3 - the first table now begins on page 2 of each file, not 3. execsql { |
︙ | ︙ | |||
250 251 252 253 254 255 256 | do_test insert-5.6 { # This should not use an intermediate temporary table. execsql { INSERT INTO t4 SELECT one FROM test1 WHERE three=7; SELECT * FROM t4 } } {1 2 8} | > | | | | | | | > | 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | do_test insert-5.6 { # This should not use an intermediate temporary table. execsql { INSERT INTO t4 SELECT one FROM test1 WHERE three=7; SELECT * FROM t4 } } {1 2 8} ifcapable {explain} { do_test insert-5.7 { # verify that no temporary table is used to copy test1 to t4 set x [execsql { EXPLAIN INSERT INTO t4 SELECT one FROM test1; }] expr {[lsearch $x OpenTemp]>0} } {0} } # Ticket #334: REPLACE statement corrupting indices. # do_test insert-6.1 { execsql { CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE); INSERT INTO t1 VALUES(1,2); |
︙ | ︙ |
Changes to test/main.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 exercising the code in main.c. # | | | 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 exercising the code in main.c. # # $Id: main.test,v 1.17 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Tests of the sqlite_complete() function. # do_test main-1.1 { |
︙ | ︙ | |||
147 148 149 150 151 152 153 | } {1} do_test main-1.27.2 { db complete { CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {0} | > | | | | | | | > > | | | | | | | > | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | } {1} do_test main-1.27.2 { db complete { CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {0} ifcapable {explain} { do_test main-1.27.3 { db complete { /* */ EXPLAIN -- A comment CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {0} } do_test main-1.27.4 { db complete { BOGUS token CREATE TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {1} ifcapable {explain} { do_test main-1.27.5 { db complete { EXPLAIN CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {0} } do_test main-1.28 { db complete { CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN UPDATE pqr SET a=5; } } {0} do_test main-1.29 { |
︙ | ︙ |
Changes to test/misc3.test.
︙ | ︙ | |||
9 10 11 12 13 14 15 | # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for miscellanous features that were # left out of other test files. # | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for miscellanous features that were # left out of other test files. # # $Id: misc3.test,v 1.13 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Ticket #529. Make sure an ABORT does not damage the in-memory cache # that will be used by subsequent statements in the same transaction. # |
︙ | ︙ | |||
232 233 234 235 236 237 238 | SELECT x2.c AS c, e, b FROM x2 LEFT JOIN (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b) USING(c) ); } } {1 one cat 2 two {} 3 three {} 4 four dog} | > | | | | | | | | | | | | | | > | 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | SELECT x2.c AS c, e, b FROM x2 LEFT JOIN (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b) USING(c) ); } } {1 one cat 2 two {} 3 three {} 4 four dog} ifcapable {explain} { # Ticket #626: make sure EXPLAIN prevents BEGIN and COMMIT from working. # do_test misc3-6.1 { execsql {EXPLAIN BEGIN} catchsql {BEGIN} } {0 {}} do_test misc3-6.2 { execsql {EXPLAIN COMMIT} catchsql {COMMIT} } {0 {}} do_test misc3-6.3 { execsql {BEGIN; EXPLAIN ROLLBACK} catchsql {ROLLBACK} } {0 {}} } # Ticket #640: vdbe stack overflow with a LIMIT clause on a SELECT inside # of a trigger. # do_test misc3-7.1 { execsql { BEGIN; |
︙ | ︙ |
Changes to test/pagesize.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2004 September 2 # # 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. # This file implements tests for the page_size PRAGMA. # | | > | | | > | 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 | # 2004 September 2 # # 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. # This file implements tests for the page_size PRAGMA. # # $Id: pagesize.test,v 1.6 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test pagesize-1.1 { execsql {PRAGMA page_size} } 1024 ifcapable {explain} { do_test pagesize-1.2 { catch {execsql {EXPLAIN PRAGMA page_size}} } 0 } do_test pagesize-1.3 { execsql { CREATE TABLE t1(a); PRAGMA page_size=2048; PRAGMA page_size; } } 1024 |
︙ | ︙ |
Changes to test/pragma.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the PRAGMA command. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the PRAGMA command. # # $Id: pragma.test,v 1.20 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Test organization: # # pragma-1.*: Test cache_size, default_cache_size and synchronous on main db. |
︙ | ︙ | |||
313 314 315 316 317 318 319 | set res } {0 main 1 temp 2 aux} do_test pragma-6.2 { execsql { pragma table_info(t2) } } {0 a numeric 0 {} 0 1 b numeric 0 {} 0 2 c numeric 0 {} 0} | > | | | | | | | | | | | > > > > | 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | set res } {0 main 1 temp 2 aux} do_test pragma-6.2 { execsql { pragma table_info(t2) } } {0 a numeric 0 {} 0 1 b numeric 0 {} 0 2 c numeric 0 {} 0} ifcapable {foreignkey} { do_test pragma-6.3 { execsql { CREATE TABLE t3(a int references t2(b), b UNIQUE); pragma foreign_key_list(t3); } } {0 0 t2 a b} do_test pragma-6.4 { execsql { pragma index_list(t3); } } {0 sqlite_autoindex_t3_1 1} } ifcapable {!foreignkey} { execsql {CREATE TABLE t3(a,b UNIQUE)} } do_test pragma-6.5 { execsql { CREATE INDEX t3i1 ON t3(a,b); pragma index_info(t3i1); } } {0 0 a 1 1 b} |
︙ | ︙ |
Changes to test/select6.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # 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 SELECT statements that contain # subqueries in their FROM clause. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 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 SELECT statements that contain # subqueries in their FROM clause. # # $Id: select6.test,v 1.13 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test select6-1.0 { execsql { BEGIN; |
︙ | ︙ | |||
354 355 356 357 358 359 360 361 362 363 364 365 366 367 | } } {} do_test select6-7.4 { execsql2 { SELECT c,b,a,* FROM (SELECT 1 AS 'a', 2 AS 'b', 'abc' AS 'c' WHERE 1) } } {c abc b 2 a 1 a 1 b 2 c abc} # The following procedure compiles the SQL given as an argument and returns # TRUE if that SQL uses any transient tables and returns FALSE if no # transient tables are used. This is used to make sure that the # sqliteFlattenSubquery() routine in select.c is doing its job. # proc is_flat {sql} { | > > > > > > > > | 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | } } {} do_test select6-7.4 { execsql2 { SELECT c,b,a,* FROM (SELECT 1 AS 'a', 2 AS 'b', 'abc' AS 'c' WHERE 1) } } {c abc b 2 a 1 a 1 b 2 c abc} # The remaining tests in this file depend on the EXPLAIN keyword. # Skip these tests if EXPLAIN is disabled in the current build. # ifcapable {!explain} { finish_test return } # The following procedure compiles the SQL given as an argument and returns # TRUE if that SQL uses any transient tables and returns FALSE if no # transient tables are used. This is used to make sure that the # sqliteFlattenSubquery() routine in select.c is doing its job. # proc is_flat {sql} { |
︙ | ︙ |
Changes to test/table.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 the CREATE TABLE statement. # | | | 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 the CREATE TABLE statement. # # $Id: table.test,v 1.30 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a basic table and verify it is added to sqlite_master # do_test table-1.1 { |
︙ | ︙ | |||
250 251 252 253 254 255 256 | set v [catch {execsql {DROP TABLE sqlite_master}} msg] lappend v $msg } {1 {table sqlite_master may not be dropped}} # Make sure an EXPLAIN does not really create a new table # do_test table-5.3 { | > | > > | > | | | | | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 | set v [catch {execsql {DROP TABLE sqlite_master}} msg] lappend v $msg } {1 {table sqlite_master may not be dropped}} # Make sure an EXPLAIN does not really create a new table # do_test table-5.3 { ifcapable {explain} { execsql {EXPLAIN CREATE TABLE test1(f1 int)} } execsql {SELECT name FROM sqlite_master WHERE type!='meta'} } {} # Make sure an EXPLAIN does not really drop an existing table # do_test table-5.4 { execsql {CREATE TABLE test1(f1 int)} ifcapable {explain} { execsql {EXPLAIN DROP TABLE test1} } execsql {SELECT name FROM sqlite_master WHERE type!='meta'} } {test1} # Create a table with a goofy name # #do_test table-6.1 { # execsql {CREATE TABLE 'Spaces In This Name!'(x int)} # execsql {INSERT INTO 'spaces in this name!' VALUES(1)} # set list [glob -nocomplain testdb/spaces*.tbl] #} {testdb/spaces+in+this+name+.tbl} # Try using keywords as table names or column names. # do_test table-7.1 { set v [catch {execsql { CREATE TABLE weird( desc text, asc text, key int, [14_vac] boolean, fuzzy_dog_12 varchar(10), begin blob, end clob ) }} msg] lappend v $msg } {0 {}} do_test table-7.2 { execsql { INSERT INTO weird VALUES('a','b',9,0,'xyz','hi','y''all'); SELECT * FROM weird; } } {a b 9 0 xyz hi y'all} do_test table-7.3 { execsql2 { SELECT * FROM weird; } } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all} # Try out the CREATE TABLE AS syntax # do_test table-8.1 { breakpoint execsql2 { CREATE TABLE t2 AS SELECT * FROM weird; SELECT * FROM t2; } } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all} do_test table-8.1.1 { execsql { SELECT sql FROM sqlite_master WHERE name='t2'; } } {{CREATE TABLE t2( "desc" text, "asc" text, "key" int, "14_vac" boolean, fuzzy_dog_12 varchar(10), "begin" blob, "end" clob )}} do_test table-8.2 { execsql { |
︙ | ︙ | |||
359 360 361 362 363 364 365 | SELECT * FROM [t4"abc]; } } {cnt 1 max(b+c) 5} do_test table-8.6 { execsql2 { SELECT * FROM t2; } | | | 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | SELECT * FROM [t4"abc]; } } {cnt 1 max(b+c) 5} do_test table-8.6 { execsql2 { SELECT * FROM t2; } } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all} do_test table-8.7 { catchsql { SELECT * FROM t5; } } {1 {no such table: t5}} do_test table-8.8 { catchsql { |
︙ | ︙ | |||
381 382 383 384 385 386 387 388 389 390 391 392 393 394 | catchsql { CREATE TABLE t6(a,b,a); } } {1 {duplicate column name: a}} # Check the foreign key syntax. # do_test table-10.1 { catchsql { CREATE TABLE t6(a REFERENCES t4(a) NOT NULL); INSERT INTO t6 VALUES(NULL); } } {1 {t6.a may not be NULL}} do_test table-10.2 { | > | 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | catchsql { CREATE TABLE t6(a,b,a); } } {1 {duplicate column name: a}} # Check the foreign key syntax. # ifcapable {foreignkey} { do_test table-10.1 { catchsql { CREATE TABLE t6(a REFERENCES t4(a) NOT NULL); INSERT INTO t6 VALUES(NULL); } } {1 {t6.a may not be NULL}} do_test table-10.2 { |
︙ | ︙ | |||
472 473 474 475 476 477 478 | catchsql {DROP TABLE t6} catchsql { CREATE TABLE t6(a,b,c, FOREIGN KEY (x,b) REFERENCES t4(x,y) ); } } {1 {unknown column "x" in foreign key definition}} | | | 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 | catchsql {DROP TABLE t6} catchsql { CREATE TABLE t6(a,b,c, FOREIGN KEY (x,b) REFERENCES t4(x,y) ); } } {1 {unknown column "x" in foreign key definition}} } ;# endif foreignkey # Test for the "typeof" function. More tests for the # typeof() function are found in bind.test and types.test. # do_test table-11.1 { execsql { CREATE TABLE t7( |
︙ | ︙ |
Changes to test/tclsqlite.test.
︙ | ︙ | |||
11 12 13 14 15 16 17 | # This file implements regression tests for TCL interface to the # SQLite library. # # Actually, all tests are based on the TCL interface, so the main # interface is pretty well tested. This file contains some addition # tests for fringe issues that the main test suite does not cover. # | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # This file implements regression tests for TCL interface to the # SQLite library. # # Actually, all tests are based on the TCL interface, so the main # interface is pretty well tested. This file contains some addition # tests for fringe issues that the main test suite does not cover. # # $Id: tclsqlite.test,v 1.33 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Check the error messages generated by tclsqlite # if {[sqlite3 -has-codec]} { |
︙ | ︙ | |||
166 167 168 169 170 171 172 | set rc [catch {db onecolumn} errmsg] lappend rc $errmsg } {1 {wrong # args: should be "db onecolumn SQL"}} do_test tcl-3.4 { set rc [catch {db onecolumn {SELECT bogus}} errmsg] lappend rc $errmsg } {1 {no such column: bogus}} | > | | | | | | | | | | | | | | | | | | > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | set rc [catch {db onecolumn} errmsg] lappend rc $errmsg } {1 {wrong # args: should be "db onecolumn SQL"}} do_test tcl-3.4 { set rc [catch {db onecolumn {SELECT bogus}} errmsg] lappend rc $errmsg } {1 {no such column: bogus}} ifcapable {tclvar} { do_test tcl-3.5 { set b 50 set rc [catch {db one {SELECT * FROM t1 WHERE b>$b}} msg] lappend rc $msg } {0 41} do_test tcl-3.6 { set b 500 set rc [catch {db one {SELECT * FROM t1 WHERE b>$b}} msg] lappend rc $msg } {0 {}} do_test tcl-3.7 { set b 500 set rc [catch {db one { INSERT INTO t1 VALUES(99,510); SELECT * FROM t1 WHERE b>$b }} msg] lappend rc $msg } {0 99} } ifcapable {!tclvar} { execsql {INSERT INTO t1 VALUES(99,510)} } # Turn the busy handler on and off # do_test tcl-4.1 { proc busy_callback {cnt} { break } db busy busy_callback db busy } {busy_callback} do_test tcl-4.2 { db busy {} db busy } {} ifcapable {tclvar} { # Parsing of TCL variable names within SQL into bound parameters. # do_test tcl-5.1 { execsql {CREATE TABLE t3(a,b,c)} catch {unset x} set x(1) 5 set x(2) 7 execsql { INSERT INTO t3 VALUES($::x(1),$::x(2),$::x(3)); SELECT * FROM t3 } } {5 7 {}} do_test tcl-5.2 { execsql { SELECT typeof(a), typeof(b), typeof(c) FROM t3 } } {text text null} do_test tcl-5.3 { catch {unset x} set x [binary format h12 686900686f00] execsql { UPDATE t3 SET a=$::x; } db eval { SELECT a FROM t3 } break binary scan $a h12 adata set adata } {686900686f00} do_test tcl-5.4 { execsql { SELECT typeof(a), typeof(b), typeof(c) FROM t3 } } {blob text null} } # Operation of "break" and "continue" within row scripts # do_test tcl-6.1 { db eval {SELECT * FROM t1} { break } |
︙ | ︙ |
Changes to test/types.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. Specfically # it tests that the different storage classes (integer, real, text etc.) # all work correctly. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. Specfically # it tests that the different storage classes (integer, real, text etc.) # all work correctly. # # $Id: types.test,v 1.13 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Tests in this file are organized roughly as follows: # # types-1.*.*: Test that values are stored using the expected storage |
︙ | ︙ | |||
62 63 64 65 66 67 68 | { '-5.0' integer real text text } { '-5.0' integer real text text } { '5' integer integer text text } { 'abc' text text text text } { NULL null null null null } } ifcapable {bloblit} { | < | < | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | { '-5.0' integer real text text } { '-5.0' integer real text text } { '5' integer integer text text } { 'abc' text text text text } { NULL null null null null } } ifcapable {bloblit} { lappend values { X'00' blob blob blob blob } } # This code tests that the storage classes specified above (in the $values # table) are correctly assigned when values are inserted using a statement # of the form: # # INSERT INTO <table> VALUE(<values>); |
︙ | ︙ |
Changes to test/view.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2002 February 26 # # 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 VIEW statements. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2002 February 26 # # 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 VIEW statements. # # $Id: view.test,v 1.19 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test view-1.0 { execsql { CREATE TABLE t1(a,b,c); INSERT INTO t1 VALUES(1,2,3); |
︙ | ︙ | |||
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | CREATE VIEW v5 AS SELECT t1.x AS v, t2.y AS w FROM t1 JOIN t2 USING(a); SELECT * FROM v5; } } {1 22 4 55} # Verify that the view v5 gets flattened. see sqliteFlattenSubquery(). # Ticket #272 do_test view-5.3 { lsearch [execsql { EXPLAIN SELECT * FROM v5; }] OpenTemp } {-1} do_test view-5.4 { execsql { | > > > | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | CREATE VIEW v5 AS SELECT t1.x AS v, t2.y AS w FROM t1 JOIN t2 USING(a); SELECT * FROM v5; } } {1 22 4 55} # Verify that the view v5 gets flattened. see sqliteFlattenSubquery(). # This will only work if EXPLAIN is enabled. # Ticket #272 # ifcapable {explain} { do_test view-5.3 { lsearch [execsql { EXPLAIN SELECT * FROM v5; }] OpenTemp } {-1} do_test view-5.4 { execsql { |
︙ | ︙ | |||
235 236 237 238 239 240 241 242 243 244 245 246 247 248 | } } {1 2 3 4 1 22 22 2 4 5 6 7 4 55 55 5} do_test view-5.9 { lsearch [execsql { EXPLAIN SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y; }] OpenTemp } {-1} do_test view-6.1 { execsql { SELECT min(x), min(a), min(b), min(c), min(a+b+c) FROM v2; } } {7 8 9 10 27} do_test view-6.2 { | > | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | } } {1 2 3 4 1 22 22 2 4 5 6 7 4 55 55 5} do_test view-5.9 { lsearch [execsql { EXPLAIN SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y; }] OpenTemp } {-1} } ;# endif explain do_test view-6.1 { execsql { SELECT min(x), min(a), min(b), min(c), min(a+b+c) FROM v2; } } {7 8 9 10 27} do_test view-6.2 { |
︙ | ︙ |
Changes to test/where.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 the use of indices in WHERE clases. # | | | 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 the use of indices in WHERE clases. # # $Id: where.test,v 1.23 2004/11/03 16:27:02 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # do_test where-1.0 { |
︙ | ︙ | |||
352 353 354 355 356 357 358 | } {2 1 9 3 1 16 7} do_test where-5.14 { count { SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1; } } {2 1 9 7} | | > | < > > | > < | | 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | } {2 1 9 3 1 16 7} do_test where-5.14 { count { SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1; } } {2 1 9 7} # This procedure executes the SQL. Then it checks to see if the OP_Sort # opcode was executed. If an OP_Sort did occur, then "sort" is appended # to the result. If no OP_Sort happened, then "nosort" is appended. # # This procedure is used to check to make sure sorting is or is not # occurring as expected. # proc cksort {sql} { set ::sqlite_sort_count 0 set data [execsql $sql] if {$::sqlite_sort_count} {set x sort} {set x nosort} lappend data $x return $data } # Check out the logic that attempts to implement the ORDER BY clause # using an index rather than by sorting. # do_test where-6.1 { |
︙ | ︙ | |||
497 498 499 500 501 502 503 | } } {1 0 2 1 3 1 nosort} do_test where-6.16 { cksort { SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t1.x, t3.a LIMIT 3 } } {1 0 2 1 3 1 sort} | < < < < < < < < < < < | 499 500 501 502 503 504 505 506 507 508 509 510 511 512 | } } {1 0 2 1 3 1 nosort} do_test where-6.16 { cksort { SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t1.x, t3.a LIMIT 3 } } {1 0 2 1 3 1 sort} do_test where-6.19 { cksort { SELECT y FROM t1 ORDER BY w LIMIT 3; } } {4 9 16 nosort} # Tests for reverse-order sorting. |
︙ | ︙ |
Changes to tool/mkkeywordhash.c.
︙ | ︙ | |||
119 120 121 122 123 124 125 | { "CREATE", "TK_CREATE", ALWAYS }, { "CROSS", "TK_JOIN_KW", ALWAYS }, { "CURRENT_DATE", "TK_CDATE", ALWAYS }, { "CURRENT_TIME", "TK_CTIME", ALWAYS }, { "CURRENT_TIMESTAMP","TK_CTIMESTAMP", ALWAYS }, { "DATABASE", "TK_DATABASE", ATTACH }, { "DEFAULT", "TK_DEFAULT", ALWAYS }, | | | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | { "CREATE", "TK_CREATE", ALWAYS }, { "CROSS", "TK_JOIN_KW", ALWAYS }, { "CURRENT_DATE", "TK_CDATE", ALWAYS }, { "CURRENT_TIME", "TK_CTIME", ALWAYS }, { "CURRENT_TIMESTAMP","TK_CTIMESTAMP", ALWAYS }, { "DATABASE", "TK_DATABASE", ATTACH }, { "DEFAULT", "TK_DEFAULT", ALWAYS }, { "DEFERRED", "TK_DEFERRED", ALWAYS }, { "DEFERRABLE", "TK_DEFERRABLE", FKEY }, { "DELETE", "TK_DELETE", ALWAYS }, { "DESC", "TK_DESC", ALWAYS }, { "DETACH", "TK_DETACH", ATTACH }, { "DISTINCT", "TK_DISTINCT", ALWAYS }, { "DROP", "TK_DROP", ALWAYS }, { "END", "TK_END", ALWAYS }, |
︙ | ︙ | |||
141 142 143 144 145 146 147 | { "FOREIGN", "TK_FOREIGN", FKEY }, { "FROM", "TK_FROM", ALWAYS }, { "FULL", "TK_JOIN_KW", ALWAYS }, { "GLOB", "TK_GLOB", ALWAYS }, { "GROUP", "TK_GROUP", ALWAYS }, { "HAVING", "TK_HAVING", ALWAYS }, { "IGNORE", "TK_IGNORE", CONFLICT|TRIGGER }, | | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | { "FOREIGN", "TK_FOREIGN", FKEY }, { "FROM", "TK_FROM", ALWAYS }, { "FULL", "TK_JOIN_KW", ALWAYS }, { "GLOB", "TK_GLOB", ALWAYS }, { "GROUP", "TK_GROUP", ALWAYS }, { "HAVING", "TK_HAVING", ALWAYS }, { "IGNORE", "TK_IGNORE", CONFLICT|TRIGGER }, { "IMMEDIATE", "TK_IMMEDIATE", ALWAYS }, { "IN", "TK_IN", ALWAYS }, { "INDEX", "TK_INDEX", ALWAYS }, { "INITIALLY", "TK_INITIALLY", FKEY }, { "INNER", "TK_JOIN_KW", ALWAYS }, { "INSERT", "TK_INSERT", ALWAYS }, { "INSTEAD", "TK_INSTEAD", TRIGGER }, { "INTERSECT", "TK_INTERSECT", COMPOUND }, |
︙ | ︙ |