1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00
Files
sqlite/test/whereI.test
drh b3f0276b9e Fix test cases so that they work with the new EXPLAIN QUERY PLAN output
format.  Only some of the cases have been fixed.  This is an incremental
check-in.

FossilOrigin-Name: 5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3
2018-05-02 18:00:17 +00:00

94 lines
2.3 KiB
Plaintext

# 2014-03-31
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
# The focus of this file is testing the OR optimization on WITHOUT ROWID
# tables.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set ::testprefix whereI
do_execsql_test 1.0 {
CREATE TABLE t1(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID;
INSERT INTO t1 VALUES(1, 'a', 'z');
INSERT INTO t1 VALUES(2, 'b', 'y');
INSERT INTO t1 VALUES(3, 'c', 'x');
INSERT INTO t1 VALUES(4, 'd', 'w');
CREATE INDEX i1 ON t1(b);
CREATE INDEX i2 ON t1(c);
}
do_eqp_test 1.1 {
SELECT a FROM t1 WHERE b='b' OR c='x'
} {
QUERY PLAN
|--SEARCH TABLE t1 USING INDEX i1 (b=?)
`--SEARCH TABLE t1 USING INDEX i2 (c=?)
}
do_execsql_test 1.2 {
SELECT a FROM t1 WHERE b='b' OR c='x'
} {2 3}
do_execsql_test 1.3 {
SELECT a FROM t1 WHERE b='a' OR c='z'
} {1}
#----------------------------------------------------------------------
# Try that again, this time with non integer PRIMARY KEY values.
#
do_execsql_test 2.0 {
CREATE TABLE t2(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID;
INSERT INTO t2 VALUES('i', 'a', 'z');
INSERT INTO t2 VALUES('ii', 'b', 'y');
INSERT INTO t2 VALUES('iii', 'c', 'x');
INSERT INTO t2 VALUES('iv', 'd', 'w');
CREATE INDEX i3 ON t2(b);
CREATE INDEX i4 ON t2(c);
}
do_eqp_test 2.1 {
SELECT a FROM t2 WHERE b='b' OR c='x'
} {
QUERY PLAN
|--SEARCH TABLE t2 USING INDEX i3 (b=?)
`--SEARCH TABLE t2 USING INDEX i4 (c=?)
}
do_execsql_test 2.2 {
SELECT a FROM t2 WHERE b='b' OR c='x'
} {ii iii}
do_execsql_test 2.3 {
SELECT a FROM t2 WHERE b='a' OR c='z'
} {i}
#----------------------------------------------------------------------
# On a table with a multi-column PK.
#
do_execsql_test 3.0 {
CREATE TABLE t3(a, b, c, d, PRIMARY KEY(c, b)) WITHOUT ROWID;
INSERT INTO t3 VALUES('f', 1, 1, 'o');
INSERT INTO t3 VALUES('o', 2, 1, 't');
INSERT INTO t3 VALUES('t', 1, 2, 't');
INSERT INTO t3 VALUES('t', 2, 2, 'f');
CREATE INDEX t3i1 ON t3(d);
CREATE INDEX t3i2 ON t3(a);
SELECT c||'.'||b FROM t3 WHERE a='t' OR d='t'
} {
2.1 2.2 1.2
}
finish_test