1b19a2bc6Sdrh# 2001 September 15 24794b980Sdrh# 3b19a2bc6Sdrh# The author disclaims copyright to this source code. In place of 4b19a2bc6Sdrh# a legal notice, here is a blessing: 54794b980Sdrh# 6b19a2bc6Sdrh# May you do good and not evil. 7b19a2bc6Sdrh# May you find forgiveness for yourself and forgive others. 8b19a2bc6Sdrh# May you share freely, never taking more than you give. 94794b980Sdrh# 104794b980Sdrh#*********************************************************************** 114794b980Sdrh# This file implements regression tests for SQLite library. The 124794b980Sdrh# focus of this file is testing the IN and BETWEEN operator. 134794b980Sdrh# 14de3e41e3Sdanielk1977# $Id: in.test,v 1.22 2008/08/04 03:51:24 danielk1977 Exp $ 154794b980Sdrh 164794b980Sdrhset testdir [file dirname $argv0] 174794b980Sdrhsource $testdir/tester.tcl 184794b980Sdrh 194794b980Sdrh# Generate the test data we will need for the first squences of tests. 204794b980Sdrh# 214794b980Sdrhdo_test in-1.0 { 224794b980Sdrh execsql { 235f3b4ab5Sdrh BEGIN; 244794b980Sdrh CREATE TABLE t1(a int, b int); 254794b980Sdrh } 265f3b4ab5Sdrh for {set i 1} {$i<=10} {incr i} { 2724acd8f9Sdanielk1977 execsql "INSERT INTO t1 VALUES($i,[expr {1<<$i}])" 285f3b4ab5Sdrh } 295f3b4ab5Sdrh execsql { 305f3b4ab5Sdrh COMMIT; 315f3b4ab5Sdrh SELECT count(*) FROM t1; 325f3b4ab5Sdrh } 334794b980Sdrh} {10} 344794b980Sdrh 354794b980Sdrh# Do basic testing of BETWEEN. 364794b980Sdrh# 374794b980Sdrhdo_test in-1.1 { 384794b980Sdrh execsql {SELECT a FROM t1 WHERE b BETWEEN 10 AND 50 ORDER BY a} 394794b980Sdrh} {4 5} 404794b980Sdrhdo_test in-1.2 { 414794b980Sdrh execsql {SELECT a FROM t1 WHERE b NOT BETWEEN 10 AND 50 ORDER BY a} 424794b980Sdrh} {1 2 3 6 7 8 9 10} 434794b980Sdrhdo_test in-1.3 { 444794b980Sdrh execsql {SELECT a FROM t1 WHERE b BETWEEN a AND a*5 ORDER BY a} 454794b980Sdrh} {1 2 3 4} 464794b980Sdrhdo_test in-1.4 { 474794b980Sdrh execsql {SELECT a FROM t1 WHERE b NOT BETWEEN a AND a*5 ORDER BY a} 484794b980Sdrh} {5 6 7 8 9 10} 494794b980Sdrhdo_test in-1.6 { 504794b980Sdrh execsql {SELECT a FROM t1 WHERE b BETWEEN a AND a*5 OR b=512 ORDER BY a} 514794b980Sdrh} {1 2 3 4 9} 524794b980Sdrhdo_test in-1.7 { 534794b980Sdrh execsql {SELECT a+ 100*(a BETWEEN 1 and 3) FROM t1 ORDER BY b} 544794b980Sdrh} {101 102 103 4 5 6 7 8 9 10} 554794b980Sdrh 563e8c37e7Sdanielk1977# The rest of this file concentrates on testing the IN operator. 573e8c37e7Sdanielk1977# Skip this if the library is compiled with SQLITE_OMIT_SUBQUERY 583e8c37e7Sdanielk1977# (because the IN operator is unavailable). 593e8c37e7Sdanielk1977# 603e8c37e7Sdanielk1977ifcapable !subquery { 613e8c37e7Sdanielk1977 finish_test 623e8c37e7Sdanielk1977 return 633e8c37e7Sdanielk1977} 644794b980Sdrh 654794b980Sdrh# Testing of the IN operator using static lists on the right-hand side. 664794b980Sdrh# 674794b980Sdrhdo_test in-2.1 { 684794b980Sdrh execsql {SELECT a FROM t1 WHERE b IN (8,12,16,24,32) ORDER BY a} 694794b980Sdrh} {3 4 5} 704794b980Sdrhdo_test in-2.2 { 714794b980Sdrh execsql {SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) ORDER BY a} 724794b980Sdrh} {1 2 6 7 8 9 10} 734794b980Sdrhdo_test in-2.3 { 744794b980Sdrh execsql {SELECT a FROM t1 WHERE b IN (8,12,16,24,32) OR b=512 ORDER BY a} 754794b980Sdrh} {3 4 5 9} 764794b980Sdrhdo_test in-2.4 { 774794b980Sdrh execsql {SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) OR b=512 ORDER BY a} 784794b980Sdrh} {1 2 6 7 8 9 10} 794794b980Sdrhdo_test in-2.5 { 804794b980Sdrh execsql {SELECT a+100*(b IN (8,16,24)) FROM t1 ORDER BY b} 814794b980Sdrh} {1 2 103 104 5 6 7 8 9 10} 824794b980Sdrh 834794b980Sdrhdo_test in-2.6 { 8457dbd7b3Sdrh execsql {SELECT a FROM t1 WHERE b IN (b+8,64)} 8557dbd7b3Sdrh} {6} 864794b980Sdrhdo_test in-2.7 { 8757dbd7b3Sdrh execsql {SELECT a FROM t1 WHERE b IN (max(5,10,b),20)} 8857dbd7b3Sdrh} {4 5 6 7 8 9 10} 894794b980Sdrhdo_test in-2.8 { 904794b980Sdrh execsql {SELECT a FROM t1 WHERE b IN (8*2,64/2) ORDER BY b} 914794b980Sdrh} {4 5} 924794b980Sdrhdo_test in-2.9 { 9357dbd7b3Sdrh execsql {SELECT a FROM t1 WHERE b IN (max(5,10),20)} 9457dbd7b3Sdrh} {} 954794b980Sdrhdo_test in-2.10 { 9657dbd7b3Sdrh execsql {SELECT a FROM t1 WHERE min(0,b IN (a,30))} 9757dbd7b3Sdrh} {} 984794b980Sdrhdo_test in-2.11 { 994794b980Sdrh set v [catch {execsql {SELECT a FROM t1 WHERE c IN (10,20)}} msg] 1004794b980Sdrh lappend v $msg 101967e8b73Sdrh} {1 {no such column: c}} 1024794b980Sdrh 1034794b980Sdrh# Testing the IN operator where the right-hand side is a SELECT 1044794b980Sdrh# 1054794b980Sdrhdo_test in-3.1 { 1064794b980Sdrh execsql { 1074794b980Sdrh SELECT a FROM t1 1084794b980Sdrh WHERE b IN (SELECT b FROM t1 WHERE a<5) 1094794b980Sdrh ORDER BY a 1104794b980Sdrh } 1114794b980Sdrh} {1 2 3 4} 1124794b980Sdrhdo_test in-3.2 { 1134794b980Sdrh execsql { 1144794b980Sdrh SELECT a FROM t1 1154794b980Sdrh WHERE b IN (SELECT b FROM t1 WHERE a<5) OR b==512 1164794b980Sdrh ORDER BY a 1174794b980Sdrh } 1184794b980Sdrh} {1 2 3 4 9} 1194794b980Sdrhdo_test in-3.3 { 1204794b980Sdrh execsql { 1214794b980Sdrh SELECT a + 100*(b IN (SELECT b FROM t1 WHERE a<5)) FROM t1 ORDER BY b 1224794b980Sdrh } 1234794b980Sdrh} {101 102 103 104 5 6 7 8 9 10} 1244794b980Sdrh 1254794b980Sdrh# Make sure the UPDATE and DELETE commands work with IN-SELECT 1264794b980Sdrh# 1274794b980Sdrhdo_test in-4.1 { 1284794b980Sdrh execsql { 1294794b980Sdrh UPDATE t1 SET b=b*2 1304794b980Sdrh WHERE b IN (SELECT b FROM t1 WHERE a>8) 1314794b980Sdrh } 1324794b980Sdrh execsql {SELECT b FROM t1 ORDER BY b} 1334794b980Sdrh} {2 4 8 16 32 64 128 256 1024 2048} 1344794b980Sdrhdo_test in-4.2 { 1354794b980Sdrh execsql { 1364794b980Sdrh DELETE FROM t1 WHERE b IN (SELECT b FROM t1 WHERE a>8) 1374794b980Sdrh } 1384794b980Sdrh execsql {SELECT a FROM t1 ORDER BY a} 1394794b980Sdrh} {1 2 3 4 5 6 7 8} 140c4a3c779Sdrhdo_test in-4.3 { 141c4a3c779Sdrh execsql { 142c4a3c779Sdrh DELETE FROM t1 WHERE b NOT IN (SELECT b FROM t1 WHERE a>4) 143c4a3c779Sdrh } 144c4a3c779Sdrh execsql {SELECT a FROM t1 ORDER BY a} 145c4a3c779Sdrh} {5 6 7 8} 1464794b980Sdrh 147d8bc7086Sdrh# Do an IN with a constant RHS but where the RHS has many, many 148d8bc7086Sdrh# elements. We need to test that collisions in the hash table 149d8bc7086Sdrh# are resolved properly. 150d8bc7086Sdrh# 151d8bc7086Sdrhdo_test in-5.1 { 152d8bc7086Sdrh execsql { 153d8bc7086Sdrh INSERT INTO t1 VALUES('hello', 'world'); 154d8bc7086Sdrh SELECT * FROM t1 155d8bc7086Sdrh WHERE a IN ( 156d8bc7086Sdrh 'Do','an','IN','with','a','constant','RHS','but','where','the', 157d8bc7086Sdrh 'has','many','elements','We','need','to','test','that', 158d8bc7086Sdrh 'collisions','hash','table','are','resolved','properly', 159d8bc7086Sdrh 'This','in-set','contains','thirty','one','entries','hello'); 160d8bc7086Sdrh } 161d8bc7086Sdrh} {hello world} 1624794b980Sdrh 1636b12545fSdrh# Make sure the IN operator works with INTEGER PRIMARY KEY fields. 1646b12545fSdrh# 1656b12545fSdrhdo_test in-6.1 { 1666b12545fSdrh execsql { 1676b12545fSdrh CREATE TABLE ta(a INTEGER PRIMARY KEY, b); 1686b12545fSdrh INSERT INTO ta VALUES(1,1); 1696b12545fSdrh INSERT INTO ta VALUES(2,2); 1706b12545fSdrh INSERT INTO ta VALUES(3,3); 1716b12545fSdrh INSERT INTO ta VALUES(4,4); 1726b12545fSdrh INSERT INTO ta VALUES(6,6); 1736b12545fSdrh INSERT INTO ta VALUES(8,8); 1746cbe1f1bSdrh INSERT INTO ta VALUES(10, 1756cbe1f1bSdrh 'This is a key that is long enough to require a malloc in the VDBE'); 1766cbe1f1bSdrh SELECT * FROM ta WHERE a<10; 1776b12545fSdrh } 1786b12545fSdrh} {1 1 2 2 3 3 4 4 6 6 8 8} 1796b12545fSdrhdo_test in-6.2 { 1806b12545fSdrh execsql { 1816b12545fSdrh CREATE TABLE tb(a INTEGER PRIMARY KEY, b); 1826b12545fSdrh INSERT INTO tb VALUES(1,1); 1836b12545fSdrh INSERT INTO tb VALUES(2,2); 1846b12545fSdrh INSERT INTO tb VALUES(3,3); 1856b12545fSdrh INSERT INTO tb VALUES(5,5); 1866b12545fSdrh INSERT INTO tb VALUES(7,7); 1876b12545fSdrh INSERT INTO tb VALUES(9,9); 1886cbe1f1bSdrh INSERT INTO tb VALUES(11, 1896cbe1f1bSdrh 'This is a key that is long enough to require a malloc in the VDBE'); 1906cbe1f1bSdrh SELECT * FROM tb WHERE a<10; 1916b12545fSdrh } 1926b12545fSdrh} {1 1 2 2 3 3 5 5 7 7 9 9} 1936b12545fSdrhdo_test in-6.3 { 1946b12545fSdrh execsql { 1956b12545fSdrh SELECT a FROM ta WHERE b IN (SELECT a FROM tb); 1966b12545fSdrh } 1976b12545fSdrh} {1 2 3} 1986b12545fSdrhdo_test in-6.4 { 1996b12545fSdrh execsql { 2006b12545fSdrh SELECT a FROM ta WHERE b NOT IN (SELECT a FROM tb); 2016b12545fSdrh } 2026cbe1f1bSdrh} {4 6 8 10} 2036b12545fSdrhdo_test in-6.5 { 2046b12545fSdrh execsql { 2056b12545fSdrh SELECT a FROM ta WHERE b IN (SELECT b FROM tb); 2066b12545fSdrh } 2076cbe1f1bSdrh} {1 2 3 10} 2086b12545fSdrhdo_test in-6.6 { 2096b12545fSdrh execsql { 2106b12545fSdrh SELECT a FROM ta WHERE b NOT IN (SELECT b FROM tb); 2116b12545fSdrh } 2126b12545fSdrh} {4 6 8} 2136b12545fSdrhdo_test in-6.7 { 2146b12545fSdrh execsql { 2156b12545fSdrh SELECT a FROM ta WHERE a IN (SELECT a FROM tb); 2166b12545fSdrh } 2176b12545fSdrh} {1 2 3} 2186b12545fSdrhdo_test in-6.8 { 2196b12545fSdrh execsql { 2206b12545fSdrh SELECT a FROM ta WHERE a NOT IN (SELECT a FROM tb); 2216b12545fSdrh } 2226cbe1f1bSdrh} {4 6 8 10} 2236b12545fSdrhdo_test in-6.9 { 2246b12545fSdrh execsql { 2256b12545fSdrh SELECT a FROM ta WHERE a IN (SELECT b FROM tb); 2266b12545fSdrh } 2276b12545fSdrh} {1 2 3} 2286b12545fSdrhdo_test in-6.10 { 2296b12545fSdrh execsql { 2306b12545fSdrh SELECT a FROM ta WHERE a NOT IN (SELECT b FROM tb); 2316b12545fSdrh } 2326cbe1f1bSdrh} {4 6 8 10} 2336b12545fSdrh 23438dd0b4fSdrh# Tests of IN operator against empty sets. (Ticket #185) 23538dd0b4fSdrh# 23638dd0b4fSdrhdo_test in-7.1 { 23738dd0b4fSdrh execsql { 23838dd0b4fSdrh SELECT a FROM t1 WHERE a IN (); 23938dd0b4fSdrh } 24038dd0b4fSdrh} {} 24138dd0b4fSdrhdo_test in-7.2 { 24238dd0b4fSdrh execsql { 24338dd0b4fSdrh SELECT a FROM t1 WHERE a IN (5); 24438dd0b4fSdrh } 24538dd0b4fSdrh} {5} 24638dd0b4fSdrhdo_test in-7.3 { 24738dd0b4fSdrh execsql { 24838dd0b4fSdrh SELECT a FROM t1 WHERE a NOT IN () ORDER BY a; 24938dd0b4fSdrh } 25038dd0b4fSdrh} {5 6 7 8 hello} 25138dd0b4fSdrhdo_test in-7.4 { 25238dd0b4fSdrh execsql { 25338dd0b4fSdrh SELECT a FROM t1 WHERE a IN (5) AND b IN (); 25438dd0b4fSdrh } 25538dd0b4fSdrh} {} 25638dd0b4fSdrhdo_test in-7.5 { 25738dd0b4fSdrh execsql { 25838dd0b4fSdrh SELECT a FROM t1 WHERE a IN (5) AND b NOT IN (); 25938dd0b4fSdrh } 26038dd0b4fSdrh} {5} 2615fb52caaSdrhdo_test in-7.6.1 { 26238dd0b4fSdrh execsql { 26338dd0b4fSdrh SELECT a FROM ta WHERE a IN (); 26438dd0b4fSdrh } 26538dd0b4fSdrh} {} 2665fb52caaSdrhdo_test in-7.6.2 { 2675fb52caaSdrh db status step 2685fb52caaSdrh} {0} 26938dd0b4fSdrhdo_test in-7.7 { 27038dd0b4fSdrh execsql { 27138dd0b4fSdrh SELECT a FROM ta WHERE a NOT IN (); 27238dd0b4fSdrh } 27338dd0b4fSdrh} {1 2 3 4 6 8 10} 27438dd0b4fSdrh 2755fb52caaSdrhdo_test in-7.8.1 { 2765fb52caaSdrh execsql { 2775fb52caaSdrh SELECT * FROM ta LEFT JOIN tb ON (ta.b=tb.b) WHERE ta.a IN (); 2785fb52caaSdrh } 2795fb52caaSdrh} {} 2805fb52caaSdrhdo_test in-7.8.2 { 2815fb52caaSdrh db status step 2825fb52caaSdrh} {0} 2835fb52caaSdrh 2847d44b22dSdrhdo_test in-8.3 { 28588eee38aSdrh execsql { 28688eee38aSdrh SELECT b FROM t1 WHERE a IN ('hello','there') 28788eee38aSdrh } 28888eee38aSdrh} {world} 2897d44b22dSdrhdo_test in-8.4 { 2907d44b22dSdrh sqlite3_db_config db SQLITE_DBCONFIG_DQS_DML 1 29188eee38aSdrh execsql { 29288eee38aSdrh SELECT b FROM t1 WHERE a IN ("hello",'there') 29388eee38aSdrh } 29488eee38aSdrh} {world} 29588eee38aSdrh 29623b2db23Sdrh# Test constructs of the form: expr IN tablename 29723b2db23Sdrh# 29823b2db23Sdrhdo_test in-9.1 { 29923b2db23Sdrh execsql { 30023b2db23Sdrh CREATE TABLE t4 AS SELECT a FROM tb; 30123b2db23Sdrh SELECT * FROM t4; 30223b2db23Sdrh } 30323b2db23Sdrh} {1 2 3 5 7 9 11} 30423b2db23Sdrhdo_test in-9.2 { 30523b2db23Sdrh execsql { 30623b2db23Sdrh SELECT b FROM t1 WHERE a IN t4; 30723b2db23Sdrh } 30823b2db23Sdrh} {32 128} 30923b2db23Sdrhdo_test in-9.3 { 31023b2db23Sdrh execsql { 31123b2db23Sdrh SELECT b FROM t1 WHERE a NOT IN t4; 31223b2db23Sdrh } 31323b2db23Sdrh} {64 256 world} 31423b2db23Sdrhdo_test in-9.4 { 31523b2db23Sdrh catchsql { 31623b2db23Sdrh SELECT b FROM t1 WHERE a NOT IN tb; 31723b2db23Sdrh } 3188da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 31938dd0b4fSdrh 320afa5f680Sdrh# IN clauses in CHECK constraints. Ticket #1645 321afa5f680Sdrh# 322afa5f680Sdrhdo_test in-10.1 { 323afa5f680Sdrh execsql { 324afa5f680Sdrh CREATE TABLE t5( 325afa5f680Sdrh a INTEGER, 326afa5f680Sdrh CHECK( a IN (111,222,333) ) 327afa5f680Sdrh ); 328afa5f680Sdrh INSERT INTO t5 VALUES(111); 329afa5f680Sdrh SELECT * FROM t5; 330afa5f680Sdrh } 331afa5f680Sdrh} {111} 332afa5f680Sdrhdo_test in-10.2 { 333afa5f680Sdrh catchsql { 334afa5f680Sdrh INSERT INTO t5 VALUES(4); 335afa5f680Sdrh } 33692e21ef0Sdrh} {1 {CHECK constraint failed: a IN (111,222,333)}} 337afa5f680Sdrh 3388159a35fSdrh# Ticket #1821 3398159a35fSdrh# 3408159a35fSdrh# Type affinity applied to the right-hand side of an IN operator. 3418159a35fSdrh# 3428159a35fSdrhdo_test in-11.1 { 3438159a35fSdrh execsql { 3448159a35fSdrh CREATE TABLE t6(a,b NUMERIC); 3458159a35fSdrh INSERT INTO t6 VALUES(1,2); 3468159a35fSdrh INSERT INTO t6 VALUES(2,3); 3478159a35fSdrh SELECT * FROM t6 WHERE b IN (2); 3488159a35fSdrh } 3498159a35fSdrh} {1 2} 3508159a35fSdrhdo_test in-11.2 { 3518159a35fSdrh # The '2' should be coerced into 2 because t6.b is NUMERIC 3528159a35fSdrh execsql { 3538159a35fSdrh SELECT * FROM t6 WHERE b IN ('2'); 3548159a35fSdrh } 3558159a35fSdrh} {1 2} 3568159a35fSdrhdo_test in-11.3 { 3578159a35fSdrh # No coercion should occur here because of the unary + before b. 3588159a35fSdrh execsql { 3598159a35fSdrh SELECT * FROM t6 WHERE +b IN ('2'); 3608159a35fSdrh } 3618159a35fSdrh} {} 3629c0cb0e8Sdrhdo_test in-11.4 { 3639c0cb0e8Sdrh # No coercion because column a as affinity NONE 3649c0cb0e8Sdrh execsql { 3659c0cb0e8Sdrh SELECT * FROM t6 WHERE a IN ('2'); 3669c0cb0e8Sdrh } 3679c0cb0e8Sdrh} {} 3689c0cb0e8Sdrhdo_test in-11.5 { 3699c0cb0e8Sdrh execsql { 3709c0cb0e8Sdrh SELECT * FROM t6 WHERE a IN (2); 3719c0cb0e8Sdrh } 3729c0cb0e8Sdrh} {2 3} 3739c0cb0e8Sdrhdo_test in-11.6 { 3749c0cb0e8Sdrh # No coercion because column a as affinity NONE 3759c0cb0e8Sdrh execsql { 3769c0cb0e8Sdrh SELECT * FROM t6 WHERE +a IN ('2'); 3779c0cb0e8Sdrh } 3789c0cb0e8Sdrh} {} 379afa5f680Sdrh 380b9fdb2c2Sdanielk1977# Test error conditions with expressions of the form IN(<compound select>). 381b9fdb2c2Sdanielk1977# 382de3e41e3Sdanielk1977ifcapable compound { 383b9fdb2c2Sdanielk1977do_test in-12.1 { 384b9fdb2c2Sdanielk1977 execsql { 385b9fdb2c2Sdanielk1977 CREATE TABLE t2(a, b, c); 386b9fdb2c2Sdanielk1977 CREATE TABLE t3(a, b, c); 387b9fdb2c2Sdanielk1977 } 388b9fdb2c2Sdanielk1977} {} 389b9fdb2c2Sdanielk1977do_test in-12.2 { 390b9fdb2c2Sdanielk1977 catchsql { 391b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 392b9fdb2c2Sdanielk1977 SELECT a, b FROM t3 UNION ALL SELECT a, b FROM t2 393b9fdb2c2Sdanielk1977 ); 394b9fdb2c2Sdanielk1977 } 3958da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 396b9fdb2c2Sdanielk1977do_test in-12.3 { 397b9fdb2c2Sdanielk1977 catchsql { 398b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 399b9fdb2c2Sdanielk1977 SELECT a, b FROM t3 UNION SELECT a, b FROM t2 400b9fdb2c2Sdanielk1977 ); 401b9fdb2c2Sdanielk1977 } 4028da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 403b9fdb2c2Sdanielk1977do_test in-12.4 { 404b9fdb2c2Sdanielk1977 catchsql { 405b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 406b9fdb2c2Sdanielk1977 SELECT a, b FROM t3 EXCEPT SELECT a, b FROM t2 407b9fdb2c2Sdanielk1977 ); 408b9fdb2c2Sdanielk1977 } 4098da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 410b9fdb2c2Sdanielk1977do_test in-12.5 { 411b9fdb2c2Sdanielk1977 catchsql { 412b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 413b9fdb2c2Sdanielk1977 SELECT a, b FROM t3 INTERSECT SELECT a, b FROM t2 414b9fdb2c2Sdanielk1977 ); 415b9fdb2c2Sdanielk1977 } 4168da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 417b9fdb2c2Sdanielk1977do_test in-12.6 { 418b9fdb2c2Sdanielk1977 catchsql { 419b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 42074b617b2Sdan SELECT a, b FROM t3 UNION ALL SELECT a FROM t2 421b9fdb2c2Sdanielk1977 ); 422b9fdb2c2Sdanielk1977 } 423f6e369a1Sdrh} {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 424b9fdb2c2Sdanielk1977do_test in-12.7 { 425b9fdb2c2Sdanielk1977 catchsql { 426b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 42774b617b2Sdan SELECT a, b FROM t3 UNION SELECT a FROM t2 428b9fdb2c2Sdanielk1977 ); 429b9fdb2c2Sdanielk1977 } 430b9fdb2c2Sdanielk1977} {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 431b9fdb2c2Sdanielk1977do_test in-12.8 { 432b9fdb2c2Sdanielk1977 catchsql { 433b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 43474b617b2Sdan SELECT a, b FROM t3 EXCEPT SELECT a FROM t2 435b9fdb2c2Sdanielk1977 ); 436b9fdb2c2Sdanielk1977 } 437b9fdb2c2Sdanielk1977} {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}} 438b9fdb2c2Sdanielk1977do_test in-12.9 { 439b9fdb2c2Sdanielk1977 catchsql { 440b9fdb2c2Sdanielk1977 SELECT * FROM t2 WHERE a IN ( 44174b617b2Sdan SELECT a, b FROM t3 INTERSECT SELECT a FROM t2 442b9fdb2c2Sdanielk1977 ); 443b9fdb2c2Sdanielk1977 } 444b9fdb2c2Sdanielk1977} {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}} 445de3e41e3Sdanielk1977} 446b9fdb2c2Sdanielk1977 4472f56da3fSdanifcapable compound { 44874b617b2Sdando_test in-12.10 { 44974b617b2Sdan catchsql { 45074b617b2Sdan SELECT * FROM t2 WHERE a IN ( 45174b617b2Sdan SELECT a FROM t3 UNION ALL SELECT a, b FROM t2 45274b617b2Sdan ); 45374b617b2Sdan } 454923cadb1Sdan} {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 45574b617b2Sdando_test in-12.11 { 45674b617b2Sdan catchsql { 45774b617b2Sdan SELECT * FROM t2 WHERE a IN ( 45874b617b2Sdan SELECT a FROM t3 UNION SELECT a, b FROM t2 45974b617b2Sdan ); 46074b617b2Sdan } 461923cadb1Sdan} {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 46274b617b2Sdando_test in-12.12 { 46374b617b2Sdan catchsql { 46474b617b2Sdan SELECT * FROM t2 WHERE a IN ( 46574b617b2Sdan SELECT a FROM t3 EXCEPT SELECT a, b FROM t2 46674b617b2Sdan ); 46774b617b2Sdan } 468923cadb1Sdan} {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}} 46974b617b2Sdando_test in-12.13 { 47074b617b2Sdan catchsql { 47174b617b2Sdan SELECT * FROM t2 WHERE a IN ( 47274b617b2Sdan SELECT a FROM t3 INTERSECT SELECT a, b FROM t2 47374b617b2Sdan ); 47474b617b2Sdan } 475923cadb1Sdan} {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}} 476923cadb1Sdando_test in-12.14 { 477923cadb1Sdan catchsql { 478923cadb1Sdan SELECT * FROM t2 WHERE a IN ( 479923cadb1Sdan SELECT a, b FROM t3 UNION ALL SELECT a, b FROM t2 480923cadb1Sdan ); 481923cadb1Sdan } 4828da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 483923cadb1Sdando_test in-12.15 { 484923cadb1Sdan catchsql { 485923cadb1Sdan SELECT * FROM t2 WHERE a IN ( 486923cadb1Sdan SELECT a, b FROM t3 UNION ALL SELECT a FROM t2 487923cadb1Sdan ); 488923cadb1Sdan } 489923cadb1Sdan} {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 4902f56da3fSdan}; #ifcapable compound 49174b617b2Sdan 4920cdc022eSdanielk1977 4930cdc022eSdanielk1977#------------------------------------------------------------------------ 4940cdc022eSdanielk1977# The following tests check that NULL is handled correctly when it 4950cdc022eSdanielk1977# appears as part of a set of values on the right-hand side of an 4960cdc022eSdanielk1977# IN or NOT IN operator. 4970cdc022eSdanielk1977# 4980cdc022eSdanielk1977# When it appears in such a set, NULL is handled as an "unknown value". 4990cdc022eSdanielk1977# If, because of the unknown value in the set, the result of the expression 5000cdc022eSdanielk1977# cannot be determined, then it itself evaluates to NULL. 5010cdc022eSdanielk1977# 5020cdc022eSdanielk1977 5030cdc022eSdanielk1977# Warm body test to demonstrate the principles being tested: 5040cdc022eSdanielk1977# 5050cdc022eSdanielk1977do_test in-13.1 { 5060cdc022eSdanielk1977 db nullvalue "null" 5070cdc022eSdanielk1977 execsql { SELECT 5080cdc022eSdanielk1977 1 IN (NULL, 1, 2), -- The value 1 is a member of the set, return true. 5090cdc022eSdanielk1977 3 IN (NULL, 1, 2), -- Ambiguous, return NULL. 5100cdc022eSdanielk1977 1 NOT IN (NULL, 1, 2), -- The value 1 is a member of the set, return false. 5110cdc022eSdanielk1977 3 NOT IN (NULL, 1, 2) -- Ambiguous, return NULL. 5120cdc022eSdanielk1977 } 5130cdc022eSdanielk1977} {1 null 0 null} 5140cdc022eSdanielk1977 5150cdc022eSdanielk1977do_test in-13.2 { 5160cdc022eSdanielk1977 execsql { 5170cdc022eSdanielk1977 CREATE TABLE t7(a, b, c NOT NULL); 5180cdc022eSdanielk1977 INSERT INTO t7 VALUES(1, 1, 1); 5190cdc022eSdanielk1977 INSERT INTO t7 VALUES(2, 2, 2); 5200cdc022eSdanielk1977 INSERT INTO t7 VALUES(3, 3, 3); 5210cdc022eSdanielk1977 INSERT INTO t7 VALUES(NULL, 4, 4); 5220cdc022eSdanielk1977 INSERT INTO t7 VALUES(NULL, 5, 5); 5230cdc022eSdanielk1977 } 5240cdc022eSdanielk1977} {} 5250cdc022eSdanielk1977 5260cdc022eSdanielk1977do_test in-13.3 { 5270cdc022eSdanielk1977 execsql { SELECT 2 IN (SELECT a FROM t7) } 5280cdc022eSdanielk1977} {1} 5290cdc022eSdanielk1977do_test in-13.4 { 5300cdc022eSdanielk1977 execsql { SELECT 6 IN (SELECT a FROM t7) } 5310cdc022eSdanielk1977} {null} 5320cdc022eSdanielk1977 5330cdc022eSdanielk1977do_test in-13.5 { 5340cdc022eSdanielk1977 execsql { SELECT 2 IN (SELECT b FROM t7) } 5350cdc022eSdanielk1977} {1} 5360cdc022eSdanielk1977do_test in-13.6 { 5370cdc022eSdanielk1977 execsql { SELECT 6 IN (SELECT b FROM t7) } 5380cdc022eSdanielk1977} {0} 5390cdc022eSdanielk1977 5400cdc022eSdanielk1977do_test in-13.7 { 5410cdc022eSdanielk1977 execsql { SELECT 2 IN (SELECT c FROM t7) } 5420cdc022eSdanielk1977} {1} 5430cdc022eSdanielk1977do_test in-13.8 { 5440cdc022eSdanielk1977 execsql { SELECT 6 IN (SELECT c FROM t7) } 5450cdc022eSdanielk1977} {0} 5460cdc022eSdanielk1977 5470cdc022eSdanielk1977do_test in-13.9 { 5480cdc022eSdanielk1977 execsql { 5490cdc022eSdanielk1977 SELECT 5500cdc022eSdanielk1977 2 NOT IN (SELECT a FROM t7), 5510cdc022eSdanielk1977 6 NOT IN (SELECT a FROM t7), 5520cdc022eSdanielk1977 2 NOT IN (SELECT b FROM t7), 5530cdc022eSdanielk1977 6 NOT IN (SELECT b FROM t7), 5540cdc022eSdanielk1977 2 NOT IN (SELECT c FROM t7), 5550cdc022eSdanielk1977 6 NOT IN (SELECT c FROM t7) 5560cdc022eSdanielk1977 } 5570cdc022eSdanielk1977} {0 null 0 1 0 1} 5580cdc022eSdanielk1977 5590cdc022eSdanielk1977do_test in-13.10 { 5600cdc022eSdanielk1977 execsql { 5610cdc022eSdanielk1977 SELECT b IN ( 5620cdc022eSdanielk1977 SELECT inside.a 5630cdc022eSdanielk1977 FROM t7 AS inside 5640cdc022eSdanielk1977 WHERE inside.b BETWEEN outside.b+1 AND outside.b+2 5650cdc022eSdanielk1977 ) 5660cdc022eSdanielk1977 FROM t7 AS outside ORDER BY b; 5670cdc022eSdanielk1977 } 5680cdc022eSdanielk1977} {0 null null null 0} 5690cdc022eSdanielk1977 5700cdc022eSdanielk1977do_test in-13.11 { 5710cdc022eSdanielk1977 execsql { 5720cdc022eSdanielk1977 SELECT b NOT IN ( 5730cdc022eSdanielk1977 SELECT inside.a 5740cdc022eSdanielk1977 FROM t7 AS inside 5750cdc022eSdanielk1977 WHERE inside.b BETWEEN outside.b+1 AND outside.b+2 5760cdc022eSdanielk1977 ) 5770cdc022eSdanielk1977 FROM t7 AS outside ORDER BY b; 5780cdc022eSdanielk1977 } 5790cdc022eSdanielk1977} {1 null null null 1} 5800cdc022eSdanielk1977 5810cdc022eSdanielk1977do_test in-13.12 { 5820cdc022eSdanielk1977 execsql { 5830cdc022eSdanielk1977 CREATE INDEX i1 ON t7(a); 5840cdc022eSdanielk1977 CREATE INDEX i2 ON t7(b); 5850cdc022eSdanielk1977 CREATE INDEX i3 ON t7(c); 5860cdc022eSdanielk1977 } 5870cdc022eSdanielk1977 execsql { 5880cdc022eSdanielk1977 SELECT 5890cdc022eSdanielk1977 2 IN (SELECT a FROM t7), 5900cdc022eSdanielk1977 6 IN (SELECT a FROM t7), 5910cdc022eSdanielk1977 2 IN (SELECT b FROM t7), 5920cdc022eSdanielk1977 6 IN (SELECT b FROM t7), 5930cdc022eSdanielk1977 2 IN (SELECT c FROM t7), 5940cdc022eSdanielk1977 6 IN (SELECT c FROM t7) 5950cdc022eSdanielk1977 } 5960cdc022eSdanielk1977} {1 null 1 0 1 0} 5970cdc022eSdanielk1977 5980cdc022eSdanielk1977do_test in-13.13 { 5990cdc022eSdanielk1977 execsql { 6000cdc022eSdanielk1977 SELECT 6010cdc022eSdanielk1977 2 NOT IN (SELECT a FROM t7), 6020cdc022eSdanielk1977 6 NOT IN (SELECT a FROM t7), 6030cdc022eSdanielk1977 2 NOT IN (SELECT b FROM t7), 6040cdc022eSdanielk1977 6 NOT IN (SELECT b FROM t7), 6050cdc022eSdanielk1977 2 NOT IN (SELECT c FROM t7), 6060cdc022eSdanielk1977 6 NOT IN (SELECT c FROM t7) 6070cdc022eSdanielk1977 } 6080cdc022eSdanielk1977} {0 null 0 1 0 1} 6090cdc022eSdanielk1977 6100cdc022eSdanielk1977do_test in-13.14 { 6110cdc022eSdanielk1977 execsql { 6120cdc022eSdanielk1977 BEGIN TRANSACTION; 6130cdc022eSdanielk1977 CREATE TABLE a(id INTEGER); 6140cdc022eSdanielk1977 INSERT INTO a VALUES(1); 6150cdc022eSdanielk1977 INSERT INTO a VALUES(2); 6160cdc022eSdanielk1977 INSERT INTO a VALUES(3); 6170cdc022eSdanielk1977 CREATE TABLE b(id INTEGER); 6180cdc022eSdanielk1977 INSERT INTO b VALUES(NULL); 6190cdc022eSdanielk1977 INSERT INTO b VALUES(3); 6200cdc022eSdanielk1977 INSERT INTO b VALUES(4); 6210cdc022eSdanielk1977 INSERT INTO b VALUES(5); 6220cdc022eSdanielk1977 COMMIT; 6230cdc022eSdanielk1977 SELECT * FROM a WHERE id NOT IN (SELECT id FROM b); 6240cdc022eSdanielk1977 } 6250cdc022eSdanielk1977} {} 6260cdc022eSdanielk1977do_test in-13.14 { 6270cdc022eSdanielk1977 execsql { 6280cdc022eSdanielk1977 CREATE INDEX i5 ON b(id); 6290cdc022eSdanielk1977 SELECT * FROM a WHERE id NOT IN (SELECT id FROM b); 6300cdc022eSdanielk1977 } 6310cdc022eSdanielk1977} {} 6320cdc022eSdanielk1977 633311efc70Sdrhdo_test in-13.15 { 634311efc70Sdrh catchsql { 635311efc70Sdrh SELECT 0 WHERE (SELECT 0,0) OR (0 IN (1,2)); 636311efc70Sdrh } 6378da209b1Sdan} {1 {sub-select returns 2 columns - expected 1}} 638311efc70Sdrh 6390cdc022eSdanielk1977 6400cdc022eSdanielk1977do_test in-13.X { 6410cdc022eSdanielk1977 db nullvalue "" 6420cdc022eSdanielk1977} {} 6430cdc022eSdanielk1977 644d93ba627Sdan# At one point the following was causing valgrind to report a "jump 645d93ba627Sdan# depends on unitialized location" problem. 646d93ba627Sdan# 647d93ba627Sdando_execsql_test in-14.0 { 648d93ba627Sdan CREATE TABLE c1(a); 649d93ba627Sdan INSERT INTO c1 VALUES(1), (2), (4), (3); 650d93ba627Sdan} 651d93ba627Sdando_execsql_test in-14.1 { 652d93ba627Sdan SELECT * FROM c1 WHERE a IN (SELECT a FROM c1) ORDER BY 1 653d93ba627Sdan} {1 2 3 4} 654d93ba627Sdan 655042666e4Sdrh# 2019-02-20 Ticket https://www.sqlite.org/src/tktview/df46dfb631f75694fbb97033b69 656042666e4Sdrh# 657042666e4Sdrhdo_execsql_test in-15.0 { 658042666e4Sdrh DROP TABLE IF EXISTS t1; 659042666e4Sdrh CREATE TABLE IF NOT EXISTS t1(id INTEGER PRIMARY KEY); 660042666e4Sdrh INSERT INTO t1 VALUES(1); 661042666e4Sdrh SELECT a.id FROM t1 AS a JOIN t1 AS b ON a.id=b.id WHERE a.id IN (1,2,3); 662042666e4Sdrh} {1} 663042666e4Sdrhdo_execsql_test in-15.1 { 664042666e4Sdrh DROP TABLE IF EXISTS t2; 665042666e4Sdrh CREATE TABLE t2(a INTEGER PRIMARY KEY,b); 666042666e4Sdrh INSERT INTO t2 VALUES(1,11); 667042666e4Sdrh INSERT INTO t2 VALUES(2,22); 668042666e4Sdrh INSERT INTO t2 VALUES(3,33); 669042666e4Sdrh SELECT b, a IN (3,4,5) FROM t2 ORDER BY b; 670042666e4Sdrh} {11 0 22 0 33 1} 671042666e4Sdrhdo_execsql_test in-15.2 { 672042666e4Sdrh DROP TABLE IF EXISTS t3; 673042666e4Sdrh CREATE TABLE t3(x INTEGER PRIMARY KEY); 674042666e4Sdrh INSERT INTO t3 VALUES(8); 675042666e4Sdrh SELECT CASE WHEN x NOT IN (5,6,7) THEN 'yes' ELSE 'no' END FROM t3; 676042666e4Sdrh SELECT CASE WHEN x NOT IN (NULL,6,7) THEN 'yes' ELSE 'no' END FROM t3; 677042666e4Sdrh} {yes no} 678042666e4Sdrhdo_execsql_test in-15.3 { 679042666e4Sdrh SELECT CASE WHEN x NOT IN (5,6,7) OR x=0 THEN 'yes' ELSE 'no' END FROM t3; 680042666e4Sdrh SELECT CASE WHEN x NOT IN (NULL,6,7) OR x=0 THEN 'yes' ELSE 'no' END FROM t3; 681042666e4Sdrh} {yes no} 682042666e4Sdrhdo_execsql_test in-15.4 { 683042666e4Sdrh DROP TABLE IF EXISTS t4; 684042666e4Sdrh CREATE TABLE t4(a INTEGER PRIMARY KEY, b INT); 685042666e4Sdrh WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) 686042666e4Sdrh INSERT INTO t4(a,b) SELECT x, x+100 FROM c; 687042666e4Sdrh SELECT b FROM t4 WHERE a IN (3,null,8) ORDER BY +b; 688042666e4Sdrh} {103 108} 689042666e4Sdrhdo_execsql_test in-15.5 { 690042666e4Sdrh SELECT b FROM t4 WHERE a NOT IN (3,null,8); 691042666e4Sdrh} {} 692042666e4Sdrhdo_execsql_test in-15.6 { 693042666e4Sdrh DROP TABLE IF EXISTS t5; 694042666e4Sdrh DROP TABLE IF EXISTS t6; 695042666e4Sdrh CREATE TABLE t5(id INTEGER PRIMARY KEY, name TEXT); 696042666e4Sdrh CREATE TABLE t6(id INTEGER PRIMARY KEY, name TEXT, t5_id INT); 697042666e4Sdrh INSERT INTO t5 VALUES(1,'Alice'),(2,'Emma'); 698042666e4Sdrh INSERT INTO t6 VALUES(1,'Bob',1),(2,'Cindy',1),(3,'Dave',2); 699042666e4Sdrh SELECT a.* 700042666e4Sdrh FROM t5 AS 'a' JOIN t5 AS 'b' ON b.id=a.id 701042666e4Sdrh WHERE b.id IN ( 702042666e4Sdrh SELECT t6.t5_id 703042666e4Sdrh FROM t6 704042666e4Sdrh WHERE name='Bob' 705042666e4Sdrh AND t6.t5_id IS NOT NULL 706042666e4Sdrh AND t6.id IN ( 707042666e4Sdrh SELECT id 708042666e4Sdrh FROM (SELECT t6.id, count(*) AS x 709042666e4Sdrh FROM t6 710042666e4Sdrh WHERE name='Bob' 711042666e4Sdrh ) AS 't' 712042666e4Sdrh WHERE x=1 713042666e4Sdrh ) 714042666e4Sdrh AND t6.id IN (1,id) 715042666e4Sdrh ); 716042666e4Sdrh} {1 Alice} 717042666e4Sdrh 718d1f9932eSdan#------------------------------------------------------------------------- 719d1f9932eSdanreset_db 720d1f9932eSdando_execsql_test in-16.0 { 721d1f9932eSdan CREATE TABLE x1(a, b); 722d1f9932eSdan INSERT INTO x1(a) VALUES(1), (2), (3), (4), (5), (6); 723d1f9932eSdan CREATE INDEX x1i ON x1(a, b); 724d1f9932eSdan} 725d1f9932eSdan 726d1f9932eSdando_execsql_test in-16.1 { 727d1f9932eSdan SELECT * FROM x1 728d1f9932eSdan WHERE a IN (SELECT a FROM x1 WHERE (a%2)==0) 729d1f9932eSdan ORDER BY a DESC, b; 730d1f9932eSdan} {6 {} 4 {} 2 {}} 731d1f9932eSdan 732d1f9932eSdando_execsql_test in-16.2 { 733d1f9932eSdan SELECT * FROM x1 734d1f9932eSdan WHERE a IN (SELECT a FROM x1 WHERE (a%7)==0) 735d1f9932eSdan ORDER BY a DESC, b; 736d1f9932eSdan} {} 737d1f9932eSdan 73842be2ad3Sdrh# 2019-06-11 73942be2ad3Sdrh# https://www.sqlite.org/src/info/57353f8243c637c0 74042be2ad3Sdrh# 74142be2ad3Sdrhdo_execsql_test in-17.1 { 74242be2ad3Sdrh SELECT 1 IN ('1'); 74342be2ad3Sdrh} 0 74442be2ad3Sdrhdo_execsql_test in-17.2 { 74542be2ad3Sdrh SELECT 1 IN ('1' COLLATE nocase); 74642be2ad3Sdrh} 0 74742be2ad3Sdrhdo_execsql_test in-17.3 { 74842be2ad3Sdrh SELECT 1 IN (CAST('1' AS text)); 74942be2ad3Sdrh} 0 75042be2ad3Sdrhdo_execsql_test in-17.4 { 75142be2ad3Sdrh SELECT 1 IN (CAST('1' AS text) COLLATE nocase); 75242be2ad3Sdrh} 0 753042666e4Sdrh 7547ec796d0Sdrh# 2019-08-27 ticket https://sqlite.org/src/info/dbaf8a6820be1ece 7557ec796d0Sdrh# 7567ec796d0Sdrhdo_execsql_test in-18.1 { 7577ec796d0Sdrh DROP TABLE IF EXISTS t0; 7587ec796d0Sdrh CREATE TABLE t0(c0 INT UNIQUE); 7597ec796d0Sdrh INSERT INTO t0(c0) VALUES (1); 7607ec796d0Sdrh SELECT * FROM t0 WHERE '1' IN (t0.c0); 7617ec796d0Sdrh} {} 7627ec796d0Sdrh 763dd668c26Sdrh# 2019-09-02 ticket https://www.sqlite.org/src/info/2841e99d104c6436 764dd668c26Sdrh# For the IN_INDEX_NOOP optimization, apply REAL affinity to the LHS 765dd668c26Sdrh# values prior to comparison if the RHS has REAL affinity. 766dd668c26Sdrh# 7674fc83654Sdrh# Also ticket https://sqlite.org/src/info/29f635e0af71234b 7684fc83654Sdrh# 769fbfd1133Sdrhdo_execsql_test in-19.10 { 770dd668c26Sdrh DROP TABLE IF EXISTS t0; 771dd668c26Sdrh CREATE TABLE t0(c0 REAL UNIQUE); 772fbfd1133Sdrh INSERT INTO t0(c0) VALUES(2.0625E00); 773fbfd1133Sdrh SELECT 1 FROM t0 WHERE c0 IN ('2.0625'); 774dd668c26Sdrh} {1} 775fbfd1133Sdrhdo_execsql_test in-19.20 { 776fbfd1133Sdrh SELECT c0 IN ('2.0625') FROM t0; 777dd668c26Sdrh} {1} 778fbfd1133Sdrhdo_execsql_test in-19.21 { 779fbfd1133Sdrh SELECT c0 = ('2.0625') FROM t0; 780dd668c26Sdrh} {1} 781fbfd1133Sdrhdo_execsql_test in-19.22 { 782fbfd1133Sdrh SELECT c0 = ('0.20625e+01') FROM t0; 783fbfd1133Sdrh} {1} 784fbfd1133Sdrhdo_execsql_test in-19.30 { 785fbfd1133Sdrh SELECT c0 IN ('2.0625',2,3) FROM t0; 786fbfd1133Sdrh} {1} 787fbfd1133Sdrhdo_execsql_test in-19.40 { 7884fc83654Sdrh DROP TABLE t0; 7894fc83654Sdrh CREATE TABLE t0(c0 TEXT, c1 REAL, c2, PRIMARY KEY(c2, c0, c1)); 7904fc83654Sdrh CREATE INDEX i0 ON t0(c1 IN (c0)); 7914fc83654Sdrh INSERT INTO t0(c0, c2) VALUES (0, NULL) ON CONFLICT(c2, c1, c0) DO NOTHING; 7924fc83654Sdrh PRAGMA integrity_check; 7934fc83654Sdrh} {ok} 7947ec796d0Sdrh 795599456f0Sdan# Ticket f3ff1472887 796599456f0Sdan# 797599456f0Sdando_execsql_test in-20.1 { 798599456f0Sdan SELECT (1 IN (2 IS TRUE)); 799599456f0Sdan} {1} 800599456f0Sdan 801*5348fbe3Sdan# Forum post: https://sqlite.org/forum/forumpost/5782619992. 802*5348fbe3Sdan# 803*5348fbe3Sdanreset_db 804*5348fbe3Sdando_execsql_test in-21.1 { 805*5348fbe3Sdan CREATE TABLE t0(c0); 806*5348fbe3Sdan SELECT COUNT(*) FROM t0 ORDER BY (t0.c0 IN ()); 807*5348fbe3Sdan} {0} 808*5348fbe3Sdan 809*5348fbe3Sdan 8104794b980Sdrhfinish_test 811