Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Increased test coverage. (CVS 5414) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
7cf91e08c08ce515c24c738c7d079f5b |
User & Date: | drh 2008-07-15 00:27:35.000 |
Context
2008-07-15
| ||
14:47 | Continuing work on improved test coverage. (CVS 5415) (check-in: c942a38e9a user: drh tags: trunk) | |
00:27 | Increased test coverage. (CVS 5414) (check-in: 7cf91e08c0 user: drh tags: trunk) | |
2008-07-14
| ||
20:43 | Delete all fts3 index data the table becomes empty. Previously, deleting all rows from an fts3 table would leave a bunch of index data describing the terms of the original data, plus deletions of those terms, perhaps with some amount of it merged together so the deletions knocked out the originals. Even when all rows were deleted that original data would hang out, though eventually it would mostly be overwritten if new data contained the same set of terms. (CVS 5413) (check-in: 8b872e4260 user: shess tags: trunk) | |
Changes
Changes to src/printf.c.
1 2 3 4 5 6 7 | /* ** The "printf" code that follows dates from the 1980's. It is in ** the public domain. The original comments are included here for ** completeness. They are very out-of-date but might be useful as ** an historical reference. Most of the "enhancements" have been backed ** out so that the functionality is now the same as standard printf(). ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* ** The "printf" code that follows dates from the 1980's. It is in ** the public domain. The original comments are included here for ** completeness. They are very out-of-date but might be useful as ** an historical reference. Most of the "enhancements" have been backed ** out so that the functionality is now the same as standard printf(). ** ** $Id: printf.c,v 1.92 2008/07/15 00:27:35 drh Exp $ ** ************************************************************************** ** ** The following modules is an enhanced replacement for the "printf" subroutines ** found in the standard C library. The following enhancements are ** supported: ** |
︙ | ︙ | |||
888 889 890 891 892 893 894 | va_start(ap,zFormat); sqlite3VXPrintf(&acc, 0, zFormat, ap); va_end(ap); z = sqlite3StrAccumFinish(&acc); return z; } | | | 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 | va_start(ap,zFormat); sqlite3VXPrintf(&acc, 0, zFormat, ap); va_end(ap); z = sqlite3StrAccumFinish(&acc); return z; } #if defined(SQLITE_DEBUG) /* ** A version of printf() that understands %lld. Used for debugging. ** The printf() built into some versions of windows does not understand %lld ** and segfaults if you give it a long long int. */ void sqlite3DebugPrintf(const char *zFormat, ...){ va_list ap; |
︙ | ︙ |
Changes to src/select.c.
︙ | ︙ | |||
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 contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 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 contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.456 2008/07/15 00:27:35 drh Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 | sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1); sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1); sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1); sqlite3ReleaseTempReg(pParse, r1); break; } /* If any row exist in the result set, record that fact and abort. */ case SRT_Exists: { sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm); /* The LIMIT clause will terminate the loop for us */ break; } /* If this is a scalar select that is part of an expression, then ** store the results in the appropriate memory cell and break out ** of the scan loop. */ case SRT_Mem: { assert( pIn->nMem==1 ); | > > | 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 | sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1); sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1); sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1); sqlite3ReleaseTempReg(pParse, r1); break; } #if 0 /* Never occurs on an ORDER BY query */ /* If any row exist in the result set, record that fact and abort. */ case SRT_Exists: { sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm); /* The LIMIT clause will terminate the loop for us */ break; } #endif /* If this is a scalar select that is part of an expression, then ** store the results in the appropriate memory cell and break out ** of the scan loop. */ case SRT_Mem: { assert( pIn->nMem==1 ); |
︙ | ︙ |
Changes to src/test_btree.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the btree.c module in 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 btree.c module in SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test_btree.c,v 1.6 2008/07/15 00:27:35 drh Exp $ */ #include "btreeInt.h" #include <tcl.h> /* ** Usage: sqlite3_shared_cache_report ** |
︙ | ︙ | |||
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 | return TCL_OK; } /* ** Print debugging information about all cursors to standard output. */ void sqlite3BtreeCursorList(Btree *p){ BtCursor *pCur; BtShared *pBt = p->pBt; for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){ MemPage *pPage = pCur->pPage; char *zMode = pCur->wrFlag ? "rw" : "ro"; sqlite3DebugPrintf("CURSOR %p rooted at %4d(%s) currently at %d.%d%s\n", pCur, pCur->pgnoRoot, zMode, pPage ? pPage->pgno : 0, pCur->idx, (pCur->eState==CURSOR_VALID) ? "" : " eof" ); } } /* ** Fill aResult[] with information about the entry and page that the ** cursor is pointing to. ** | > > | 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 | return TCL_OK; } /* ** Print debugging information about all cursors to standard output. */ void sqlite3BtreeCursorList(Btree *p){ #ifdef SQLITE_DEBUG BtCursor *pCur; BtShared *pBt = p->pBt; for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){ MemPage *pPage = pCur->pPage; char *zMode = pCur->wrFlag ? "rw" : "ro"; sqlite3DebugPrintf("CURSOR %p rooted at %4d(%s) currently at %d.%d%s\n", pCur, pCur->pgnoRoot, zMode, pPage ? pPage->pgno : 0, pCur->idx, (pCur->eState==CURSOR_VALID) ? "" : " eof" ); } #endif } /* ** Fill aResult[] with information about the entry and page that the ** cursor is pointing to. ** |
︙ | ︙ |
Changes to test/expr.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 expressions. # | | | 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 expressions. # # $Id: expr.test,v 1.63 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # execsql {CREATE TABLE test1(i1 int, i2 int, r1 real, r2 real, t1 text, t2 text)} |
︙ | ︙ | |||
140 141 142 143 144 145 146 147 148 149 150 151 152 153 | test_expr expr-1.104 {i1=0} {(-9223372036854775808.0 % -1)} 0.0 test_expr expr-1.105 {i1=0} {(-9223372036854775808.0 / -1)>1} 1 test_expr expr-1.106 {i1=0} {(1<<63)/-1} -9223372036854775808 test_expr expr-1.107 {i1=0} {(1<<63)%-1} 0 test_expr expr-1.108 {i1=0} {1%0} {{}} test_expr expr-1.109 {i1=0} {1/0} {{}} test_expr expr-2.1 {r1=1.23, r2=2.34} {r1+r2} 3.57 test_expr expr-2.2 {r1=1.23, r2=2.34} {r1-r2} -1.11 test_expr expr-2.3 {r1=1.23, r2=2.34} {r1*r2} 2.8782 set tcl_precision 15 test_expr expr-2.4 {r1=1.23, r2=2.34} {r1/r2} 0.525641025641026 test_expr expr-2.5 {r1=1.23, r2=2.34} {r2/r1} 1.90243902439024 | > | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | test_expr expr-1.104 {i1=0} {(-9223372036854775808.0 % -1)} 0.0 test_expr expr-1.105 {i1=0} {(-9223372036854775808.0 / -1)>1} 1 test_expr expr-1.106 {i1=0} {(1<<63)/-1} -9223372036854775808 test_expr expr-1.107 {i1=0} {(1<<63)%-1} 0 test_expr expr-1.108 {i1=0} {1%0} {{}} test_expr expr-1.109 {i1=0} {1/0} {{}} test_expr expr-1.110 {i1=0} {-9223372036854775807/-1} 9223372036854775807 test_expr expr-2.1 {r1=1.23, r2=2.34} {r1+r2} 3.57 test_expr expr-2.2 {r1=1.23, r2=2.34} {r1-r2} -1.11 test_expr expr-2.3 {r1=1.23, r2=2.34} {r1*r2} 2.8782 set tcl_precision 15 test_expr expr-2.4 {r1=1.23, r2=2.34} {r1/r2} 0.525641025641026 test_expr expr-2.5 {r1=1.23, r2=2.34} {r2/r1} 1.90243902439024 |
︙ | ︙ |
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.82 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # do_test func-0.0 { |
︙ | ︙ | |||
286 287 288 289 290 291 292 293 294 295 296 297 298 299 | } {z+1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP} } do_test func-8.4 { execsql { SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3; } } {z+67890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP} # How do you test the random() function in a meaningful, deterministic way? # do_test func-9.1 { execsql { SELECT random() is not null; } | > > > > > > > > > > > > | 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 | } {z+1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP} } do_test func-8.4 { execsql { SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3; } } {z+67890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP} do_test func-8.5 { execsql { SELECT sum(x) FROM (SELECT '9223372036' || '854775807' AS x UNION ALL SELECT -9223372036854775807) } } {0} do_test func-8.6 { execsql { SELECT sum(x) FROM (SELECT '9223372036' || '854775808' AS x UNION ALL SELECT -9223372036854775807) } } {1.0} # How do you test the random() function in a meaningful, deterministic way? # do_test func-9.1 { execsql { SELECT random() is not null; } |
︙ | ︙ |
Changes to test/mutex1.test.
1 2 3 4 5 6 7 8 9 10 11 | # 2008 June 17 # # 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. # #*********************************************************************** # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 2008 June 17 # # 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: mutex1.test,v 1.10 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl if {[info exists tester_do_binarylog]} { finish_test return |
︙ | ︙ | |||
134 135 136 137 138 139 140 | } [lsort $mutexes] } } sqlite3_enable_shared_cache $enable_shared_cache # Open and use a connection in "nomutex" mode. Test that no recursive # mutexes are obtained. | > | | | | | | | | | | > | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | } [lsort $mutexes] } } sqlite3_enable_shared_cache $enable_shared_cache # Open and use a connection in "nomutex" mode. Test that no recursive # mutexes are obtained. ifcapable threadsafe { do_test mutex1.3.1 { catch {db close} clear_mutex_counters sqlite3 db test.db -nomutex 1 execsql { SELECT * FROM abc } } {1 2 3 1 2 3 1 2 3} do_test mutex1.3.2 { mutex_counters counters set counters(recursive) } {0} } do_test mutex1-X { catch {db close} sqlite3_shutdown clear_mutex_counters install_mutex_counters 0 sqlite3_initialize } {SQLITE_OK} autoinstall_test_functions finish_test |
Changes to test/select1.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 SELECT 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 SELECT statement. # # $Id: select1.test,v 1.64 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Try to select on a non-existant table. # do_test select1-1.1 { |
︙ | ︙ | |||
401 402 403 404 405 406 407 | # ORDER BY ignored on an aggregate query # do_test select1-5.1 { set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg] lappend v $msg } {0 33} | | | 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | # ORDER BY ignored on an aggregate query # do_test select1-5.1 { set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg] lappend v $msg } {0 33} execsql {CREATE TABLE test2(t1 text, t2 text)} execsql {INSERT INTO test2 VALUES('abc','xyz')} # Check for column naming # do_test select1-6.1 { set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg] lappend v $msg |
︙ | ︙ | |||
548 549 550 551 552 553 554 555 556 557 558 559 560 561 | do_test select1-6.9.8 { set x [execsql2 { SELECT * FROM test1 a, (select 5 AS x, 6 AS y) AS b LIMIT 1 }] regsub -all {subquery_[0-9a-fA-F]+_} $x {subquery} x set x } {a.f1 11 a.f2 22 b.x 5 b.y 6} db eval { PRAGMA short_column_names=ON; PRAGMA full_column_names=OFF; } ifcapable compound { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 | do_test select1-6.9.8 { set x [execsql2 { SELECT * FROM test1 a, (select 5 AS x, 6 AS y) AS b LIMIT 1 }] regsub -all {subquery_[0-9a-fA-F]+_} $x {subquery} x set x } {a.f1 11 a.f2 22 b.x 5 b.y 6} do_test select1-6.9.9 { execsql2 { SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1 } } {test1.f1 11 test1.f2 22} do_test select1-6.9.10 { execsql2 { SELECT f1, t1 FROM test1, test2 LIMIT 1 } } {test1.f1 11 test2.t1 abc} do_test select1-6.9.11 { db eval { PRAGMA short_column_names=ON; PRAGMA full_column_names=ON; } execsql2 { SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1 } } {test1.f1 11 test1.f2 22} do_test select1-6.9.12 { execsql2 { SELECT f1, t1 FROM test1, test2 LIMIT 1 } } {test1.f1 11 test2.t1 abc} do_test select1-6.9.13 { db eval { PRAGMA short_column_names=ON; PRAGMA full_column_names=OFF; } execsql2 { SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1 } } {f1 11 f1 11} do_test select1-6.9.14 { execsql2 { SELECT f1, t1 FROM test1, test2 LIMIT 1 } } {f1 11 t1 abc} do_test select1-6.9.15 { db eval { PRAGMA short_column_names=OFF; PRAGMA full_column_names=ON; } execsql2 { SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1 } } {test1.f1 11 test1.f1 11} do_test select1-6.9.16 { execsql2 { SELECT f1, t1 FROM test1, test2 LIMIT 1 } } {test1.f1 11 test2.t1 abc} db eval { PRAGMA short_column_names=ON; PRAGMA full_column_names=OFF; } ifcapable compound { |
︙ | ︙ |
Changes to test/selectA.test.
︙ | ︙ | |||
13 14 15 16 17 18 19 | # The focus of this file is testing the compound-SELECT merge # optimization. Or, in other words, making sure that all # possible combinations of UNION, UNION ALL, EXCEPT, and # INTERSECT work together with an ORDER BY clause (with or w/o # explicit sort order and explicit collating secquites) and # with and without optional LIMIT and OFFSET clauses. # | | | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # The focus of this file is testing the compound-SELECT merge # optimization. Or, in other words, making sure that all # possible combinations of UNION, UNION ALL, EXCEPT, and # INTERSECT work together with an ORDER BY clause (with or w/o # explicit sort order and explicit collating secquites) and # with and without optional LIMIT and OFFSET clauses. # # $Id: selectA.test,v 1.4 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test selectA-1.0 { execsql { CREATE TABLE t1(a,b,c COLLATE NOCASE); |
︙ | ︙ | |||
626 627 628 629 630 631 632 633 634 635 636 637 638 639 | UNION SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z } } {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} do_test selectA-3.0 { execsql { CREATE UNIQUE INDEX t1a ON t1(a); CREATE UNIQUE INDEX t1b ON t1(b); CREATE UNIQUE INDEX t1c ON t1(c); | > > > > > > > > > > > > > > > > > > > > | 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 | UNION SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z } } {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} do_test selectA-2.93 { execsql { SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1)); } } {A} do_test selectA-2.94 { execsql { SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1)); } } {a} do_test selectA-2.95 { execsql { SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1)); } } {{}} do_test selectA-2.96 { execsql { SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1)); } } {m} do_test selectA-3.0 { execsql { CREATE UNIQUE INDEX t1a ON t1(a); CREATE UNIQUE INDEX t1b ON t1(b); CREATE UNIQUE INDEX t1c ON t1(c); |
︙ | ︙ | |||
1212 1213 1214 1215 1216 1217 1218 | UNION SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z } } {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} | > > > | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 | UNION SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z } } {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} do_test selectA-3.93 { execsql { SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1)); } } {A} do_test selectA-3.94 { execsql { SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1)); } } {a} do_test selectA-3.95 { execsql { SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1)); } } {{}} do_test selectA-3.96 { execsql { SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1)); } } {m} do_test selectA-3.97 { execsql { SELECT upper((SELECT x FROM ( SELECT x,y,z FROM t2 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t3 EXCEPT SELECT c,b,a FROM t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z))) } } {MAD} finish_test |
Changes to test/sqllimits1.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # # This file contains tests to verify that the limits defined in # sqlite source file limits.h are enforced. # | | | 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 contains tests to verify that the limits defined in # sqlite source file limits.h are enforced. # # $Id: sqllimits1.test,v 1.31 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Verify that the default per-connection limits are the same as # the compile-time hard limits. # |
︙ | ︙ | |||
356 357 358 359 360 361 362 | db eval {DROP TABLE t4} sqlite3_limit db SQLITE_LIMIT_SQL_LENGTH 0x7fffffff set strvalue [string repeat A $::SQLITE_LIMIT_LENGTH] do_test sqllimits1-5.16 { catchsql "SELECT '$strvalue'" } [list 0 $strvalue] | | > > > > > > > > | 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 | db eval {DROP TABLE t4} sqlite3_limit db SQLITE_LIMIT_SQL_LENGTH 0x7fffffff set strvalue [string repeat A $::SQLITE_LIMIT_LENGTH] do_test sqllimits1-5.16 { catchsql "SELECT '$strvalue'" } [list 0 $strvalue] do_test sqllimits1-5.17.1 { catchsql "SELECT 'A$strvalue'" } [list 1 {string or blob too big}] do_test sqllimits1-5.17.2 { sqlite3_limit db SQLITE_LIMIT_LENGTH 0x7fffffff catchsql {SELECT 'A' || $::strvalue} } [list 0 A$strvalue] do_test sqllimits1-5.17.3 { sqlite3_limit db SQLITE_LIMIT_LENGTH $SQLITE_LIMIT_LENGTH catchsql {SELECT 'A' || $::strvalue} } [list 1 {string or blob too big}] set blobvalue [string repeat 41 $::SQLITE_LIMIT_LENGTH] do_test sqllimits1-5.18 { catchsql "SELECT x'$blobvalue'" } [list 0 $strvalue] do_test sqllimits1-5.19 { catchsql "SELECT '41$blobvalue'" } [list 1 {string or blob too big}] |
︙ | ︙ |
Changes to test/subselect.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 are part of # expressions. # | | | 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 are part of # expressions. # # $Id: subselect.test,v 1.15 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Omit this whole file if the library is build without subquery support. ifcapable !subquery { finish_test |
︙ | ︙ | |||
49 50 51 52 53 54 55 | } {2} do_test subselect-1.3b { execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=4)} } {4} do_test subselect-1.3c { execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=6)} } {6} | | > > > > > > | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | } {2} do_test subselect-1.3b { execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=4)} } {4} do_test subselect-1.3c { execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=6)} } {6} do_test subselect-1.3d { execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=8)} } {} do_test subselect-1.3e { execsql { SELECT b FROM t1 WHERE a = (SELECT a FROM t1 UNION SELECT b FROM t1 ORDER BY 1); } } {2} # What if the subselect doesn't return any value. We should get # NULL as the result. Check it out. # do_test subselect-1.4 { execsql {SELECT b from t1 where a = coalesce((SELECT a FROM t1 WHERE b=5),1)} } {2} |
︙ | ︙ |
Changes to test/where.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 4 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 | # 4 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.46 2008/07/15 00:27:35 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # do_test where-1.0 { |
︙ | ︙ | |||
340 341 342 343 344 345 346 347 348 349 350 351 352 353 | } } {99} do_test where-4.6 { execsql { SELECT 99 WHERE 0.0 } } {} # Verify that IN operators in a WHERE clause are handled correctly. # Omit these tests if the build is not capable of sub-queries. # ifcapable subquery { do_test where-5.1 { count { | > > > > > | 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | } } {99} do_test where-4.6 { execsql { SELECT 99 WHERE 0.0 } } {} do_test where-4.7 { execsql { SELECT count(*) FROM t1 WHERE t1.w } } {100} # Verify that IN operators in a WHERE clause are handled correctly. # Omit these tests if the build is not capable of sub-queries. # ifcapable subquery { do_test where-5.1 { count { |
︙ | ︙ |