Annotation of embedaddon/sqlite3/test/between.test, revision 1.1.1.1

1.1       misho       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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>