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

1.1       misho       1: # 2008 September 1
                      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: #
                     12: # $Id: in4.test,v 1.4 2009/06/05 17:09:12 drh Exp $
                     13: 
                     14: set testdir [file dirname $argv0]
                     15: source $testdir/tester.tcl
                     16: 
                     17: do_test in4-1.1 {
                     18:   execsql {
                     19:     CREATE TABLE t1(a, b);
                     20:     CREATE INDEX i1 ON t1(a);
                     21:   }
                     22: } {}
                     23: do_test in4-1.2 {
                     24:   execsql {
                     25:     SELECT * FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc');
                     26:   }
                     27: } {}
                     28: do_test in4-1.3 {
                     29:   execsql {
                     30:     INSERT INTO t1 VALUES('aaa', 1);
                     31:     INSERT INTO t1 VALUES('ddd', 2);
                     32:     INSERT INTO t1 VALUES('ccc', 3);
                     33:     INSERT INTO t1 VALUES('eee', 4);
                     34:     SELECT b FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc');
                     35:   }
                     36: } {1 3}
                     37: do_test in4-1.4 {
                     38:   execsql {
                     39:     SELECT a FROM t1 WHERE rowid IN (1, 3);
                     40:   }
                     41: } {aaa ccc}
                     42: do_test in4-1.5 {
                     43:   execsql {
                     44:     SELECT a FROM t1 WHERE rowid IN ();
                     45:   }
                     46: } {}
                     47: do_test in4-1.6 {
                     48:   execsql {
                     49:     SELECT a FROM t1 WHERE a IN ('ddd');
                     50:   }
                     51: } {ddd}
                     52: 
                     53: do_test in4-2.1 {
                     54:   execsql {
                     55:     CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT);
                     56:     INSERT INTO t2 VALUES(-1, '-one');
                     57:     INSERT INTO t2 VALUES(0, 'zero');
                     58:     INSERT INTO t2 VALUES(1, 'one');
                     59:     INSERT INTO t2 VALUES(2, 'two');
                     60:     INSERT INTO t2 VALUES(3, 'three');
                     61:   }
                     62: } {}
                     63: 
                     64: do_test in4-2.2 {
                     65:   execsql { SELECT b FROM t2 WHERE a IN (0, 2) }
                     66: } {zero two}
                     67: 
                     68: do_test in4-2.3 {
                     69:   execsql { SELECT b FROM t2 WHERE a IN (2, 0) }
                     70: } {zero two}
                     71: 
                     72: do_test in4-2.4 {
                     73:   execsql { SELECT b FROM t2 WHERE a IN (2, -1) }
                     74: } {-one two}
                     75: 
                     76: do_test in4-2.5 {
                     77:   execsql { SELECT b FROM t2 WHERE a IN (NULL, 3) }
                     78: } {three}
                     79: 
                     80: do_test in4-2.6 {
                     81:   execsql { SELECT b FROM t2 WHERE a IN (1.0, 2.1) }
                     82: } {one}
                     83: 
                     84: do_test in4-2.7 {
                     85:   execsql { SELECT b FROM t2 WHERE a IN ('1', '2') }
                     86: } {one two}
                     87: 
                     88: do_test in4-2.8 {
                     89:   execsql { SELECT b FROM t2 WHERE a IN ('', '0.0.0', '2') }
                     90: } {two}
                     91: 
                     92: # The following block of tests test expressions of the form:
                     93: #
                     94: #    <expr> IN ()
                     95: #
                     96: # i.e. IN expressions with a literal empty set. 
                     97: # 
                     98: # This has led to crashes on more than one occasion. Test case in4-3.2 
                     99: # was added in reponse to a bug reported on the mailing list on 11/7/2008.
                    100: # See also tickets #3602 and #185.
                    101: #
                    102: do_test in4-3.1 {
                    103:   execsql {
                    104:     DROP TABLE IF EXISTS t1;
                    105:     DROP TABLE IF EXISTS t2;
                    106:     CREATE TABLE t1(x, id);
                    107:     CREATE TABLE t2(x, id);
                    108:     INSERT INTO t1 VALUES(NULL, NULL);
                    109:     INSERT INTO t1 VALUES(0, NULL);
                    110:     INSERT INTO t1 VALUES(1, 3);
                    111:     INSERT INTO t1 VALUES(2, 4);
                    112:     INSERT INTO t1 VALUES(3, 5);
                    113:     INSERT INTO t1 VALUES(4, 6);
                    114:     INSERT INTO t2 VALUES(0, NULL);
                    115:     INSERT INTO t2 VALUES(4, 1);
                    116:     INSERT INTO t2 VALUES(NULL, 1);
                    117:     INSERT INTO t2 VALUES(NULL, NULL);
                    118:   }
                    119: } {}
                    120: do_test in4-3.2 {
                    121:   execsql {
                    122:     SELECT x FROM t1 WHERE id IN () AND x IN (SELECT x FROM t2 WHERE id=1)
                    123:   }
                    124: } {}
                    125: do_test in4-3.3 {
                    126:   execsql {
                    127:     CREATE TABLE t3(x, y, z);
                    128:     CREATE INDEX t3i1 ON t3(x, y);
                    129:     INSERT INTO t3 VALUES(1, 1, 1);
                    130:     INSERT INTO t3 VALUES(10, 10, 10);
                    131:   }
                    132:   execsql { SELECT * FROM t3 WHERE x IN () }
                    133: } {}
                    134: do_test in4-3.4 {
                    135:   execsql { SELECT * FROM t3 WHERE x = 10 AND y IN () }
                    136: } {}
                    137: do_test in4-3.5 {
                    138:   execsql { SELECT * FROM t3 WHERE x IN () AND y = 10 }
                    139: } {}
                    140: do_test in4-3.6 {
                    141:   execsql { SELECT * FROM t3 WHERE x IN () OR x = 10 }
                    142: } {10 10 10}
                    143: do_test in4-3.7 {
                    144:   execsql { SELECT * FROM t3 WHERE y IN () }
                    145: } {}
                    146: do_test in4-3.8 {
                    147:   execsql { SELECT x IN() AS a FROM t3 WHERE a }
                    148: } {}
                    149: do_test in4-3.9 {
                    150:   execsql { SELECT x IN() AS a FROM t3 WHERE NOT a }
                    151: } {0 0}
                    152: do_test in4-3.10 {
                    153:   execsql { SELECT * FROM t3 WHERE oid IN () }
                    154: } {}
                    155: do_test in4-3.11 {
                    156:   execsql { SELECT * FROM t3 WHERE x IN (1, 2) OR y IN ()}
                    157: } {1 1 1}
                    158: do_test in4-3.12 {
                    159:   execsql { SELECT * FROM t3 WHERE x IN (1, 2) AND y IN ()}
                    160: } {}
                    161: 
                    162: finish_test

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