# 2024 June 14 # # 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. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/lock_common.tcl set testprefix existsexpr2 do_execsql_test 1.0 { CREATE TABLE x1(a, b, PRIMARY KEY(a)) WITHOUT ROWID; INSERT INTO x1 VALUES(1, 2), (3, 4), (5, 6); CREATE INDEX x1b ON x1(b); CREATE TABLE x2(x, y); INSERT INTO x2 VALUES(1, 2), (3, 4), (5, 6); } do_execsql_test 1.1 { SELECT * FROM x1 WHERE EXISTS (SELECT 1 FROM x2 WHERE a!=123) } {1 2 3 4 5 6} do_execsql_test 1.2 { CREATE TABLE x3(u, v); CREATE INDEX x3u ON x3(u); INSERT INTO x3 VALUES (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3); } do_execsql_test 1.3 { SELECT * FROM x1 WHERE EXISTS ( SELECT 1 FROM x3 WHERE u IN (1, 2, 3, 4) AND v=b ); } { 1 2 } #------------------------------------------------------------------------- # reset_db do_execsql_test 2.0 { CREATE TABLE t1(a, b, c); CREATE INDEX t1ab ON t1(a,b); INSERT INTO t1 VALUES ('abc', 1, 1), ('abc', 2, 2), ('abc', 2, 3), ('def', 1, 1), ('def', 2, 2), ('def', 2, 3); CREATE TABLE t2(x, y); INSERT INTO t2 VALUES(1, 1), (2, 2), (3, 3); ANALYZE; DELETE FROM sqlite_stat1; INSERT INTO sqlite_stat1 VALUES('t1','t1ab','10000 5000 2'); ANALYZE sqlite_master; } do_execsql_test 2.1 { SELECT a,b,c FROM t1 WHERE b=2 ORDER BY a } { abc 2 2 abc 2 3 def 2 2 def 2 3 } do_execsql_test 2.2 { SELECT x, y FROM t2 WHERE EXISTS ( SELECT 1 FROM t1 WHERE b=x ) } { 1 1 2 2 } finish_test