mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Optimize queries that contain "WHERE rowid IN (x, y, z...)" by using an intkey btree to store the (x, y, z...) set instead of an index btree. (CVS 5760)
FossilOrigin-Name: 803a1736d56b3c07b8ad38715fe0e39196ecc507
This commit is contained in:
93
test/in4.test
Normal file
93
test/in4.test
Normal file
@ -0,0 +1,93 @@
|
||||
# 2008 September 1
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#***********************************************************************
|
||||
#
|
||||
# $Id: in4.test,v 1.1 2008/10/02 13:50:56 danielk1977 Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
|
||||
do_test in4-1.1 {
|
||||
execsql {
|
||||
CREATE TABLE t1(a, b);
|
||||
CREATE INDEX i1 ON t1(a);
|
||||
}
|
||||
} {}
|
||||
do_test in4-1.2 {
|
||||
execsql {
|
||||
SELECT * FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc');
|
||||
}
|
||||
} {}
|
||||
do_test in4-1.3 {
|
||||
execsql {
|
||||
INSERT INTO t1 VALUES('aaa', 1);
|
||||
INSERT INTO t1 VALUES('ddd', 2);
|
||||
INSERT INTO t1 VALUES('ccc', 3);
|
||||
INSERT INTO t1 VALUES('eee', 4);
|
||||
SELECT b FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc');
|
||||
}
|
||||
} {1 3}
|
||||
do_test in4-1.4 {
|
||||
execsql {
|
||||
SELECT a FROM t1 WHERE rowid IN (1, 3);
|
||||
}
|
||||
} {aaa ccc}
|
||||
do_test in4-1.5 {
|
||||
execsql {
|
||||
SELECT a FROM t1 WHERE rowid IN ();
|
||||
}
|
||||
} {}
|
||||
do_test in4-1.6 {
|
||||
execsql {
|
||||
SELECT a FROM t1 WHERE a IN ('ddd');
|
||||
}
|
||||
} {ddd}
|
||||
|
||||
do_test in4-2.1 {
|
||||
execsql {
|
||||
CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT);
|
||||
INSERT INTO t2 VALUES(-1, '-one');
|
||||
INSERT INTO t2 VALUES(0, 'zero');
|
||||
INSERT INTO t2 VALUES(1, 'one');
|
||||
INSERT INTO t2 VALUES(2, 'two');
|
||||
INSERT INTO t2 VALUES(3, 'three');
|
||||
}
|
||||
} {}
|
||||
|
||||
do_test in4-2.2 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN (0, 2) }
|
||||
} {zero two}
|
||||
|
||||
do_test in4-2.3 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN (2, 0) }
|
||||
} {zero two}
|
||||
|
||||
do_test in4-2.4 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN (2, -1) }
|
||||
} {-one two}
|
||||
|
||||
do_test in4-2.5 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN (NULL, 3) }
|
||||
} {three}
|
||||
|
||||
do_test in4-2.6 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN (1.0, 2.1) }
|
||||
} {one}
|
||||
|
||||
do_test in4-2.7 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN ('1', '2') }
|
||||
} {one two}
|
||||
|
||||
do_test in4-2.8 {
|
||||
execsql { SELECT b FROM t2 WHERE a IN ('', '0.0.0', '2') }
|
||||
} {two}
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user