Home | History | Annotate | Download | only in test
      1 # 2008 December 23
      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 focus
     12 # is testing of where.c. More specifically, the focus is the optimization
     13 # of WHERE clauses that feature the OR operator.
     14 #
     15 # $Id: where8m.test,v 1.3 2009/06/05 17:09:12 drh Exp $
     16 
     17 set testdir [file dirname $argv0]
     18 source $testdir/tester.tcl
     19 
     20 source $testdir/malloc_common.tcl
     21 
     22 do_malloc_test where8m-1 -sqlprep {
     23   CREATE TABLE t1(a, b, c);
     24   CREATE INDEX i1 ON t1(a);
     25   CREATE INDEX i2 ON t1(b);
     26 } -sqlbody {
     27   SELECT c FROM t1
     28   WHERE 
     29     a = 2 OR b = 'three' OR a = 4 OR b = 'five' OR a = 6 OR
     30     b = 'seven' OR a = 8 OR b = 'nine' OR a = 10
     31   ORDER BY rowid;
     32 
     33   SELECT c FROM t1 WHERE
     34     a = 1 OR a = 2 OR a = 3 OR a = 4 OR a = 5 OR a = 6;
     35 
     36   SELECT c FROM t1 WHERE
     37     a BETWEEN 1 AND 3  AND b < 5 AND b > 2 AND c = 4;
     38 }
     39 
     40 do_malloc_test where8m-2 -tclprep {
     41   db eval {
     42     BEGIN;
     43     CREATE TABLE t1(a, b, c);
     44     CREATE INDEX i1 ON t1(a);
     45     CREATE INDEX i2 ON t1(b);
     46   }
     47   for {set i 0} {$i < 1000} {incr i} {
     48     set ii [expr $i*$i]
     49     set iii [expr $i*$i]
     50     db eval { INSERT INTO t1 VALUES($i, $ii, $iii) }
     51   }
     52   db eval COMMIT
     53 } -sqlbody {
     54   SELECT count(*) FROM t1 WHERE a BETWEEN 5 AND 995 OR b BETWEEN 5 AND 900000;
     55 }
     56 
     57 finish_test
     58