Annotation of embedaddon/sqlite3/test/in4.test, revision 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>