| OLD | NEW | 
 | (Empty) | 
|    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 |  | 
| OLD | NEW |