diff options
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/between.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/between.test | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/between.test b/libraries/sqlite/unix/sqlite-3.5.1/test/between.test new file mode 100644 index 0000000..4543675 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/between.test | |||
@@ -0,0 +1,113 @@ | |||
1 | # 2005 July 28 | ||
2 | # | ||
3 | # The author disclaims copyright to this source code. In place of | ||
4 | # a legal notice, here is a blessing: | ||
5 | # | ||
6 | # May you do good and not evil. | ||
7 | # May you find forgiveness for yourself and forgive others. | ||
8 | # May you share freely, never taking more than you give. | ||
9 | # | ||
10 | #*********************************************************************** | ||
11 | # This file implements regression tests for SQLite library. The | ||
12 | # focus of this file is testing the use of indices in WHERE clauses | ||
13 | # when the WHERE clause contains the BETWEEN operator. | ||
14 | # | ||
15 | # $Id: between.test,v 1.2 2006/01/17 09:35:02 danielk1977 Exp $ | ||
16 | |||
17 | set testdir [file dirname $argv0] | ||
18 | source $testdir/tester.tcl | ||
19 | |||
20 | # Build some test data | ||
21 | # | ||
22 | do_test between-1.0 { | ||
23 | execsql { | ||
24 | BEGIN; | ||
25 | CREATE TABLE t1(w int, x int, y int, z int); | ||
26 | } | ||
27 | for {set i 1} {$i<=100} {incr i} { | ||
28 | set w $i | ||
29 | set x [expr {int(log($i)/log(2))}] | ||
30 | set y [expr {$i*$i + 2*$i + 1}] | ||
31 | set z [expr {$x+$y}] | ||
32 | ifcapable tclvar { | ||
33 | # Random unplanned test of the $varname variable syntax. | ||
34 | execsql {INSERT INTO t1 VALUES($::w,$::x,$::y,$::z)} | ||
35 | } else { | ||
36 | # If the $varname syntax is not available, use the regular variable | ||
37 | # declaration syntax. | ||
38 | execsql {INSERT INTO t1 VALUES(:w,:x,:y,:z)} | ||
39 | } | ||
40 | } | ||
41 | execsql { | ||
42 | CREATE UNIQUE INDEX i1w ON t1(w); | ||
43 | CREATE INDEX i1xy ON t1(x,y); | ||
44 | CREATE INDEX i1zyx ON t1(z,y,x); | ||
45 | COMMIT; | ||
46 | } | ||
47 | } {} | ||
48 | |||
49 | # This procedure executes the SQL. Then it appends to the result the | ||
50 | # "sort" or "nosort" keyword depending on whether or not any sorting | ||
51 | # is done. Then it appends the ::sqlite_query_plan variable. | ||
52 | # | ||
53 | proc queryplan {sql} { | ||
54 | set ::sqlite_sort_count 0 | ||
55 | set data [execsql $sql] | ||
56 | if {$::sqlite_sort_count} {set x sort} {set x nosort} | ||
57 | lappend data $x | ||
58 | return [concat $data $::sqlite_query_plan] | ||
59 | } | ||
60 | |||
61 | do_test between-1.1.1 { | ||
62 | queryplan { | ||
63 | SELECT * FROM t1 WHERE w BETWEEN 5 AND 6 ORDER BY +w | ||
64 | } | ||
65 | } {5 2 36 38 6 2 49 51 sort t1 i1w} | ||
66 | do_test between-1.1.2 { | ||
67 | queryplan { | ||
68 | SELECT * FROM t1 WHERE +w BETWEEN 5 AND 6 ORDER BY +w | ||
69 | } | ||
70 | } {5 2 36 38 6 2 49 51 sort t1 {}} | ||
71 | do_test between-1.2.1 { | ||
72 | queryplan { | ||
73 | SELECT * FROM t1 WHERE w BETWEEN 5 AND 65-y ORDER BY +w | ||
74 | } | ||
75 | } {5 2 36 38 6 2 49 51 sort t1 i1w} | ||
76 | do_test between-1.2.2 { | ||
77 | queryplan { | ||
78 | SELECT * FROM t1 WHERE +w BETWEEN 5 AND 65-y ORDER BY +w | ||
79 | } | ||
80 | } {5 2 36 38 6 2 49 51 sort t1 {}} | ||
81 | do_test between-1.3.1 { | ||
82 | queryplan { | ||
83 | SELECT * FROM t1 WHERE w BETWEEN 41-y AND 6 ORDER BY +w | ||
84 | } | ||
85 | } {5 2 36 38 6 2 49 51 sort t1 i1w} | ||
86 | do_test between-1.3.2 { | ||
87 | queryplan { | ||
88 | SELECT * FROM t1 WHERE +w BETWEEN 41-y AND 6 ORDER BY +w | ||
89 | } | ||
90 | } {5 2 36 38 6 2 49 51 sort t1 {}} | ||
91 | do_test between-1.4 { | ||
92 | queryplan { | ||
93 | SELECT * FROM t1 WHERE w BETWEEN 41-y AND 65-y ORDER BY +w | ||
94 | } | ||
95 | } {5 2 36 38 6 2 49 51 sort t1 {}} | ||
96 | do_test between-1.5.1 { | ||
97 | queryplan { | ||
98 | SELECT * FROM t1 WHERE 26 BETWEEN y AND z ORDER BY +w | ||
99 | } | ||
100 | } {4 2 25 27 sort t1 i1zyx} | ||
101 | do_test between-1.5.2 { | ||
102 | queryplan { | ||
103 | SELECT * FROM t1 WHERE 26 BETWEEN +y AND z ORDER BY +w | ||
104 | } | ||
105 | } {4 2 25 27 sort t1 i1zyx} | ||
106 | do_test between-1.5.3 { | ||
107 | queryplan { | ||
108 | SELECT * FROM t1 WHERE 26 BETWEEN y AND +z ORDER BY +w | ||
109 | } | ||
110 | } {4 2 25 27 sort t1 {}} | ||
111 | |||
112 | |||
113 | finish_test | ||