1aae0f9e4Sdrh# 2013-09-05 2aae0f9e4Sdrh# 3aae0f9e4Sdrh# The author disclaims copyright to this source code. In place of 4aae0f9e4Sdrh# a legal notice, here is a blessing: 5aae0f9e4Sdrh# 6aae0f9e4Sdrh# May you do good and not evil. 7aae0f9e4Sdrh# May you find forgiveness for yourself and forgive others. 8aae0f9e4Sdrh# May you share freely, never taking more than you give. 9aae0f9e4Sdrh# 10aae0f9e4Sdrh#*********************************************************************** 11aae0f9e4Sdrh# 1203202a97Sdrh# Test cases for query planning decisions and the likely(), unlikely(), and 13aae0f9e4Sdrh# likelihood() functions. 14aae0f9e4Sdrh 15aae0f9e4Sdrhset testdir [file dirname $argv0] 16aae0f9e4Sdrhsource $testdir/tester.tcl 17aa9933c1Sdanset testprefix whereG 18aae0f9e4Sdrh 19aae0f9e4Sdrhdo_execsql_test whereG-1.0 { 20aae0f9e4Sdrh CREATE TABLE composer( 21aae0f9e4Sdrh cid INTEGER PRIMARY KEY, 22aae0f9e4Sdrh cname TEXT 23aae0f9e4Sdrh ); 24aae0f9e4Sdrh CREATE TABLE album( 25aae0f9e4Sdrh aid INTEGER PRIMARY KEY, 26aae0f9e4Sdrh aname TEXT 27aae0f9e4Sdrh ); 28aae0f9e4Sdrh CREATE TABLE track( 29aae0f9e4Sdrh tid INTEGER PRIMARY KEY, 30aae0f9e4Sdrh cid INTEGER REFERENCES composer, 31aae0f9e4Sdrh aid INTEGER REFERENCES album, 32aae0f9e4Sdrh title TEXT 33aae0f9e4Sdrh ); 34aae0f9e4Sdrh CREATE INDEX track_i1 ON track(cid); 35aae0f9e4Sdrh CREATE INDEX track_i2 ON track(aid); 3609328c00Sdrh INSERT INTO composer VALUES(1, 'W. A. Mozart'); 3709328c00Sdrh INSERT INTO composer VALUES(2, 'Beethoven'); 3809328c00Sdrh INSERT INTO composer VALUES(3, 'Thomas Tallis'); 3909328c00Sdrh INSERT INTO composer VALUES(4, 'Joseph Hayden'); 4009328c00Sdrh INSERT INTO composer VALUES(5, 'Thomas Weelkes'); 4109328c00Sdrh INSERT INTO composer VALUES(6, 'J. S. Bach'); 4209328c00Sdrh INSERT INTO composer VALUES(7, 'Orlando Gibbons'); 4309328c00Sdrh INSERT INTO composer VALUES(8, 'Josquin des Prés'); 4409328c00Sdrh INSERT INTO composer VALUES(9, 'Byrd'); 4509328c00Sdrh INSERT INTO composer VALUES(10, 'Francis Poulenc'); 4609328c00Sdrh INSERT INTO composer VALUES(11, 'Mendelsshon'); 4709328c00Sdrh INSERT INTO composer VALUES(12, 'Zoltán Kodály'); 4809328c00Sdrh INSERT INTO composer VALUES(13, 'Handel'); 4909328c00Sdrh INSERT INTO album VALUES(100, 'Kodály: Missa Brevis'); 5009328c00Sdrh INSERT INTO album VALUES(101, 'Messiah'); 5109328c00Sdrh INSERT INTO album VALUES(102, 'Missa Brevis in D-, K.65'); 5209328c00Sdrh INSERT INTO album VALUES(103, 'The complete English anthems'); 5309328c00Sdrh INSERT INTO album VALUES(104, 'Mass in B Minor, BWV 232'); 5409328c00Sdrh INSERT INTO track VALUES(10005, 12, 100, 'Sanctus'); 5509328c00Sdrh INSERT INTO track VALUES(10007, 12, 100, 'Agnus Dei'); 5609328c00Sdrh INSERT INTO track VALUES(10115, 13, 101, 'Surely He Hath Borne Our Griefs'); 5709328c00Sdrh INSERT INTO track VALUES(10129, 13, 101, 'Since By Man Came Death'); 5809328c00Sdrh INSERT INTO track VALUES(10206, 1, 102, 'Agnus Dei'); 5909328c00Sdrh INSERT INTO track VALUES(10301, 3, 103, 'If Ye Love Me'); 6009328c00Sdrh INSERT INTO track VALUES(10402, 6, 104, 'Domine Deus'); 6109328c00Sdrh INSERT INTO track VALUES(10403, 6, 104, 'Qui tollis'); 62aae0f9e4Sdrh} {} 63aae0f9e4Sdrhdo_eqp_test whereG-1.1 { 64aae0f9e4Sdrh SELECT DISTINCT aname 65aae0f9e4Sdrh FROM album, composer, track 66aae0f9e4Sdrh WHERE unlikely(cname LIKE '%bach%') 67aae0f9e4Sdrh AND composer.cid=track.cid 68aae0f9e4Sdrh AND album.aid=track.aid; 69b3f0276bSdrh} {composer*track*album} 7009328c00Sdrhdo_execsql_test whereG-1.2 { 7109328c00Sdrh SELECT DISTINCT aname 7209328c00Sdrh FROM album, composer, track 7309328c00Sdrh WHERE unlikely(cname LIKE '%bach%') 7409328c00Sdrh AND composer.cid=track.cid 7509328c00Sdrh AND album.aid=track.aid; 7609328c00Sdrh} {{Mass in B Minor, BWV 232}} 7709328c00Sdrh 7809328c00Sdrhdo_eqp_test whereG-1.3 { 79aae0f9e4Sdrh SELECT DISTINCT aname 80aae0f9e4Sdrh FROM album, composer, track 81aae0f9e4Sdrh WHERE likelihood(cname LIKE '%bach%', 0.5) 82aae0f9e4Sdrh AND composer.cid=track.cid 83aae0f9e4Sdrh AND album.aid=track.aid; 84aae0f9e4Sdrh} {/.*track.*composer.*album.*/} 8509328c00Sdrhdo_execsql_test whereG-1.4 { 8609328c00Sdrh SELECT DISTINCT aname 8709328c00Sdrh FROM album, composer, track 8809328c00Sdrh WHERE likelihood(cname LIKE '%bach%', 0.5) 8909328c00Sdrh AND composer.cid=track.cid 9009328c00Sdrh AND album.aid=track.aid; 9109328c00Sdrh} {{Mass in B Minor, BWV 232}} 9209328c00Sdrh 9309328c00Sdrhdo_eqp_test whereG-1.5 { 94aae0f9e4Sdrh SELECT DISTINCT aname 95aae0f9e4Sdrh FROM album, composer, track 96aae0f9e4Sdrh WHERE cname LIKE '%bach%' 97aae0f9e4Sdrh AND composer.cid=track.cid 98aae0f9e4Sdrh AND album.aid=track.aid; 996284db90Sdrh} {/.*track.*(composer.*album|album.*composer).*/} 10009328c00Sdrhdo_execsql_test whereG-1.6 { 10109328c00Sdrh SELECT DISTINCT aname 10209328c00Sdrh FROM album, composer, track 10309328c00Sdrh WHERE cname LIKE '%bach%' 10409328c00Sdrh AND composer.cid=track.cid 10509328c00Sdrh AND album.aid=track.aid; 10609328c00Sdrh} {{Mass in B Minor, BWV 232}} 10709328c00Sdrh 10809328c00Sdrhdo_eqp_test whereG-1.7 { 109aae0f9e4Sdrh SELECT DISTINCT aname 110aae0f9e4Sdrh FROM album, composer, track 111aae0f9e4Sdrh WHERE cname LIKE '%bach%' 112aae0f9e4Sdrh AND unlikely(composer.cid=track.cid) 113aae0f9e4Sdrh AND unlikely(album.aid=track.aid); 1146284db90Sdrh} {/.*track.*(composer.*album|album.*composer).*/} 11509328c00Sdrhdo_execsql_test whereG-1.8 { 11609328c00Sdrh SELECT DISTINCT aname 11709328c00Sdrh FROM album, composer, track 11809328c00Sdrh WHERE cname LIKE '%bach%' 11909328c00Sdrh AND unlikely(composer.cid=track.cid) 12009328c00Sdrh AND unlikely(album.aid=track.aid); 12109328c00Sdrh} {{Mass in B Minor, BWV 232}} 122aae0f9e4Sdrh 123aae0f9e4Sdrhdo_test whereG-2.1 { 124aae0f9e4Sdrh catchsql { 125aae0f9e4Sdrh SELECT DISTINCT aname 126aae0f9e4Sdrh FROM album, composer, track 127aae0f9e4Sdrh WHERE likelihood(cname LIKE '%bach%', -0.01) 128aae0f9e4Sdrh AND composer.cid=track.cid 129aae0f9e4Sdrh AND album.aid=track.aid; 130aae0f9e4Sdrh } 131aae0f9e4Sdrh} {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} 132aae0f9e4Sdrhdo_test whereG-2.2 { 133aae0f9e4Sdrh catchsql { 134aae0f9e4Sdrh SELECT DISTINCT aname 135aae0f9e4Sdrh FROM album, composer, track 136aae0f9e4Sdrh WHERE likelihood(cname LIKE '%bach%', 1.01) 137aae0f9e4Sdrh AND composer.cid=track.cid 138aae0f9e4Sdrh AND album.aid=track.aid; 139aae0f9e4Sdrh } 140aae0f9e4Sdrh} {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} 141aae0f9e4Sdrhdo_test whereG-2.3 { 142aae0f9e4Sdrh catchsql { 143aae0f9e4Sdrh SELECT DISTINCT aname 144aae0f9e4Sdrh FROM album, composer, track 145aae0f9e4Sdrh WHERE likelihood(cname LIKE '%bach%', track.cid) 146aae0f9e4Sdrh AND composer.cid=track.cid 147aae0f9e4Sdrh AND album.aid=track.aid; 148aae0f9e4Sdrh } 149aae0f9e4Sdrh} {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} 150aae0f9e4Sdrh 1517d9e7d82Sdrh# Commuting a term of the WHERE clause should not change the query plan 1527d9e7d82Sdrh# 1537d9e7d82Sdrhdo_execsql_test whereG-3.0 { 1547d9e7d82Sdrh CREATE TABLE a(a1 PRIMARY KEY, a2); 1557d9e7d82Sdrh CREATE TABLE b(b1 PRIMARY KEY, b2); 1567d9e7d82Sdrh} {} 1577d9e7d82Sdrhdo_eqp_test whereG-3.1 { 1587d9e7d82Sdrh SELECT * FROM a, b WHERE b1=a1 AND a2=5; 1598210233cSdrh} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} 1607d9e7d82Sdrhdo_eqp_test whereG-3.2 { 1617d9e7d82Sdrh SELECT * FROM a, b WHERE a1=b1 AND a2=5; 1628210233cSdrh} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} 1637d9e7d82Sdrhdo_eqp_test whereG-3.3 { 1647d9e7d82Sdrh SELECT * FROM a, b WHERE a2=5 AND b1=a1; 1658210233cSdrh} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} 1667d9e7d82Sdrhdo_eqp_test whereG-3.4 { 1677d9e7d82Sdrh SELECT * FROM a, b WHERE a2=5 AND a1=b1; 1688210233cSdrh} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} 1697d9e7d82Sdrh 170c438df1bSdrh# Ticket [1e64dd782a126f48d78c43a664844a41d0e6334e]: 171c438df1bSdrh# Incorrect result in a nested GROUP BY/DISTINCT due to the use of an OP_SCopy 172c438df1bSdrh# where an OP_Copy was needed. 173c438df1bSdrh# 174c438df1bSdrhdo_execsql_test whereG-4.0 { 175c438df1bSdrh CREATE TABLE t4(x); 176c438df1bSdrh INSERT INTO t4 VALUES('right'),('wrong'); 177c438df1bSdrh SELECT DISTINCT x 178c438df1bSdrh FROM (SELECT x FROM t4 GROUP BY x) 179c438df1bSdrh WHERE x='right' 180c438df1bSdrh ORDER BY x; 181c438df1bSdrh} {right} 182c438df1bSdrh 183aa9933c1Sdan#------------------------------------------------------------------------- 1848ad1d8baSdan# Test that likelihood() specifications on indexed terms are taken into 1858ad1d8baSdan# account by various forms of loops. 186aa9933c1Sdan# 1878ad1d8baSdan# 5.1.*: open ended range scans 1888ad1d8baSdan# 5.2.*: skip-scans 1898ad1d8baSdan# 190aa9933c1Sdanreset_db 1918ad1d8baSdan 192aa9933c1Sdando_execsql_test 5.1 { 193aa9933c1Sdan CREATE TABLE t1(a, b, c); 194aa9933c1Sdan CREATE INDEX i1 ON t1(a, b); 195aa9933c1Sdan} 196aa9933c1Sdando_eqp_test 5.1.2 { 197aa9933c1Sdan SELECT * FROM t1 WHERE a>? 1988210233cSdrh} {SEARCH t1 USING INDEX i1 (a>?)} 199aa9933c1Sdando_eqp_test 5.1.3 { 200aa9933c1Sdan SELECT * FROM t1 WHERE likelihood(a>?, 0.9) 2018210233cSdrh} {SCAN t1} 20203202a97Sdrhdo_eqp_test 5.1.4 { 20303202a97Sdrh SELECT * FROM t1 WHERE likely(a>?) 2048210233cSdrh} {SCAN t1} 205aa9933c1Sdan 206aa9933c1Sdando_test 5.2 { 207aa9933c1Sdan for {set i 0} {$i < 100} {incr i} { 208aa9933c1Sdan execsql { INSERT INTO t1 VALUES('abc', $i, $i); } 209aa9933c1Sdan } 210aa9933c1Sdan execsql { INSERT INTO t1 SELECT 'def', b, c FROM t1; } 211aa9933c1Sdan execsql { ANALYZE } 212aa9933c1Sdan} {} 213aa9933c1Sdando_eqp_test 5.2.2 { 214aa9933c1Sdan SELECT * FROM t1 WHERE likelihood(b>?, 0.01) 2158210233cSdrh} {SEARCH t1 USING INDEX i1 (ANY(a) AND b>?)} 216aa9933c1Sdando_eqp_test 5.2.3 { 217aa9933c1Sdan SELECT * FROM t1 WHERE likelihood(b>?, 0.9) 2188210233cSdrh} {SCAN t1} 21903202a97Sdrhdo_eqp_test 5.2.4 { 22003202a97Sdrh SELECT * FROM t1 WHERE likely(b>?) 2218210233cSdrh} {SCAN t1} 2227d9e7d82Sdrh 223461ff359Sdrhifcapable stat4 { 224461ff359Sdrh do_eqp_test 5.3.1.stat4 { 225461ff359Sdrh SELECT * FROM t1 WHERE a=? 2268210233cSdrh } {SCAN t1} 227461ff359Sdrh} else { 2288ad1d8baSdan do_eqp_test 5.3.1 { 2298ad1d8baSdan SELECT * FROM t1 WHERE a=? 2308210233cSdrh } {SEARCH t1 USING INDEX i1} 231461ff359Sdrh} 2328ad1d8baSdando_eqp_test 5.3.2 { 2338ad1d8baSdan SELECT * FROM t1 WHERE likelihood(a=?, 0.9) 2348210233cSdrh} {SCAN t1} 23503202a97Sdrhdo_eqp_test 5.3.3 { 23603202a97Sdrh SELECT * FROM t1 WHERE likely(a=?) 2378210233cSdrh} {SCAN t1} 2388ad1d8baSdan 239606f2344Sdrh# 2015-06-18 240606f2344Sdrh# Ticket [https://www.sqlite.org/see/tktview/472f0742a1868fb58862bc588ed70] 241606f2344Sdrh# 242606f2344Sdrhdo_execsql_test 6.0 { 243606f2344Sdrh DROP TABLE IF EXISTS t1; 244606f2344Sdrh CREATE TABLE t1(i int, x, y, z); 245606f2344Sdrh INSERT INTO t1 VALUES (1,1,1,1), (2,2,2,2), (3,3,3,3), (4,4,4,4); 246606f2344Sdrh DROP TABLE IF EXISTS t2; 247606f2344Sdrh CREATE TABLE t2(i int, bool char); 248606f2344Sdrh INSERT INTO t2 VALUES(1,'T'), (2,'F'); 249606f2344Sdrh SELECT count(*) FROM t1 LEFT JOIN t2 ON t1.i=t2.i AND bool='T'; 250606f2344Sdrh SELECT count(*) FROM t1 LEFT JOIN t2 ON likely(t1.i=t2.i) AND bool='T'; 251606f2344Sdrh} {4 4} 252606f2344Sdrh 2535f02ab09Sdrh# 2015-06-20 2545f02ab09Sdrh# Crash discovered by AFL 2555f02ab09Sdrh# 2565f02ab09Sdrhdo_execsql_test 7.0 { 2575f02ab09Sdrh DROP TABLE IF EXISTS t1; 2585f02ab09Sdrh CREATE TABLE t1(a, b, PRIMARY KEY(a,b)); 2595f02ab09Sdrh INSERT INTO t1 VALUES(9,1),(1,2); 2605f02ab09Sdrh DROP TABLE IF EXISTS t2; 2615f02ab09Sdrh CREATE TABLE t2(x, y, PRIMARY KEY(x,y)); 2625f02ab09Sdrh INSERT INTO t2 VALUES(3,3),(4,4); 2635f02ab09Sdrh SELECT likely(a), x FROM t1, t2 ORDER BY 1, 2; 2645f02ab09Sdrh} {1 3 1 4 9 3 9 4} 2655f02ab09Sdrhdo_execsql_test 7.1 { 2665f02ab09Sdrh SELECT unlikely(a), x FROM t1, t2 ORDER BY 1, 2; 2675f02ab09Sdrh} {1 3 1 4 9 3 9 4} 2685f02ab09Sdrhdo_execsql_test 7.2 { 2695f02ab09Sdrh SELECT likelihood(a,0.5), x FROM t1, t2 ORDER BY 1, 2; 2705f02ab09Sdrh} {1 3 1 4 9 3 9 4} 2715f02ab09Sdrhdo_execsql_test 7.3 { 2725f02ab09Sdrh SELECT coalesce(a,a), x FROM t1, t2 ORDER BY 1, 2; 2735f02ab09Sdrh} {1 3 1 4 9 3 9 4} 2745f02ab09Sdrh 2750d950af3Sdrh# 2019-08-22 2760d950af3Sdrh# Ticket https://www.sqlite.org/src/info/7e07a3dbf5a8cd26 2770d950af3Sdrh# 2780d950af3Sdrhdo_execsql_test 8.1 { 2790d950af3Sdrh DROP TABLE IF EXISTS t0; 2800d950af3Sdrh CREATE TABLE t0 (c0); 2810d950af3Sdrh INSERT INTO t0(c0) VALUES ('a'); 2820d950af3Sdrh SELECT LIKELY(t0.rowid) <= '0' FROM t0; 2830d950af3Sdrh} {1} 2840d950af3Sdrhdo_execsql_test 8.2 { 2850d950af3Sdrh SELECT * FROM t0 WHERE LIKELY(t0.rowid) <= '0'; 2860d950af3Sdrh} {a} 2870d950af3Sdrhdo_execsql_test 8.3 { 2880d950af3Sdrh SELECT (t0.rowid) <= '0' FROM t0; 2890d950af3Sdrh} {0} 2900d950af3Sdrhdo_execsql_test 8.4 { 2910d950af3Sdrh SELECT * FROM t0 WHERE (t0.rowid) <= '0'; 2920d950af3Sdrh} {} 2930d950af3Sdrhdo_execsql_test 8.5 { 2940d950af3Sdrh SELECT unlikely(t0.rowid) <= '0', likelihood(t0.rowid,0.5) <= '0' FROM t0; 2950d950af3Sdrh} {1 1} 2960d950af3Sdrhdo_execsql_test 8.6 { 2970d950af3Sdrh SELECT * FROM t0 WHERE unlikely(t0.rowid) <= '0'; 2980d950af3Sdrh} {a} 2990d950af3Sdrhdo_execsql_test 8.7 { 3000d950af3Sdrh SELECT * FROM t0 WHERE likelihood(t0.rowid, 0.5) <= '0'; 3010d950af3Sdrh} {a} 3020d950af3Sdrhdo_execsql_test 8.8 { 3030d950af3Sdrh SELECT unlikely(t0.rowid <= '0'), 3040d950af3Sdrh likely(t0.rowid <= '0'), 3050d950af3Sdrh likelihood(t0.rowid <= '0',0.5) 3060d950af3Sdrh FROM t0; 3070d950af3Sdrh} {0 0 0} 3080d950af3Sdrhdo_execsql_test 8.9 { 3090d950af3Sdrh SELECT * FROM t0 WHERE unlikely(t0.rowid <= '0'); 3100d950af3Sdrh} {} 3110d950af3Sdrhdo_execsql_test 8.10 { 3120d950af3Sdrh SELECT * FROM t0 WHERE likelihood(t0.rowid <= '0', 0.5); 3130d950af3Sdrh} {} 3140d950af3Sdrh 31502ff747bSdrh# 2019-12-31: assertion fault discovered by Yongheng's fuzzer. 31602ff747bSdrh# Harmless memIsValid() due to the code generators failure to 31702ff747bSdrh# release the registers used by OP_ResultRow. 31802ff747bSdrh# 31902ff747bSdrhdo_execsql_test 9.10 { 32002ff747bSdrh DROP TABLE IF EXISTS t1; 32102ff747bSdrh CREATE TABLE t1(a, b FLOAT); 32202ff747bSdrh INSERT INTO t1(a) VALUES(''),(NULL),('X'),(NULL); 32302ff747bSdrh SELECT coalesce(max(quote(a)),10) FROM t1 GROUP BY a; 32402ff747bSdrh} {NULL '' 'X'} 325606f2344Sdrh 32686d2de25Sdrh# 2020-06-14: assert() changed back into testcase() 32786d2de25Sdrh# ticket 9fb26d37cefaba40 32886d2de25Sdrh# 32986d2de25Sdrhreset_db 33086d2de25Sdrhdo_execsql_test 10.1 { 33186d2de25Sdrh CREATE TABLE a(b TEXT); INSERT INTO a VALUES(0),(4),(9); 33286d2de25Sdrh CREATE TABLE c(d NUM); 33386d2de25Sdrh CREATE VIEW f(g, h) AS SELECT b, 0 FROM a UNION SELECT d, d FROM c; 33486d2de25Sdrh SELECT g = g FROM f GROUP BY h; 33586d2de25Sdrh} {1} 33686d2de25Sdrh 3379988db83Sdanreset_db 3389988db83Sdando_execsql_test 11.0 { 3399988db83Sdan CREATE TABLE t1(x PRIMARY KEY, y); 3409988db83Sdan INSERT INTO t1 VALUES('AAA', 'BBB'); 3419988db83Sdan 3429988db83Sdan CREATE TABLE t2(z); 3439988db83Sdan INSERT INTO t2 VALUES('t2'); 3449988db83Sdan 3459988db83Sdan CREATE TABLE t3(x PRIMARY KEY, y); 3469988db83Sdan INSERT INTO t3 VALUES('AAA', 'AAA'); 3479988db83Sdan} 3489988db83Sdan 3499988db83Sdando_execsql_test 11.1.1 { 3509988db83Sdan SELECT * FROM t1 JOIN t2 ON unlikely(x=y) AND y='AAA' 3519988db83Sdan} 3529988db83Sdando_execsql_test 11.1.2 { 3539988db83Sdan SELECT * FROM t1 JOIN t2 ON likely(x=y) AND y='AAA' 3549988db83Sdan} 3559988db83Sdando_execsql_test 11.1.3 { 3569988db83Sdan SELECT * FROM t1 JOIN t2 ON x=y AND y='AAA' 3579988db83Sdan} 3589988db83Sdan 3599988db83Sdando_execsql_test 11.2.1 { 3609988db83Sdan SELECT * FROM t3 JOIN t2 ON unlikely(x=y) AND y='AAA' 3619988db83Sdan} {AAA AAA t2} 3629988db83Sdando_execsql_test 11.2.2 { 3639988db83Sdan SELECT * FROM t3 JOIN t2 ON likely(x=y) AND y='AAA' 3649988db83Sdan} {AAA AAA t2} 3659988db83Sdando_execsql_test 11.2.3 { 3669988db83Sdan SELECT * FROM t3 JOIN t2 ON x=y AND y='AAA' 3679988db83Sdan} {AAA AAA t2} 3689988db83Sdan 369*21571a94Sdrh# 2021-06-14 forum https://sqlite.org/forum/forumpost/3b940c437a 370*21571a94Sdrh# Affinity problem when a likely() function is used as a column in 371*21571a94Sdrh# an index. 372*21571a94Sdrh# 373*21571a94Sdrhreset_db 374*21571a94Sdrhdo_execsql_test 12.0 { 375*21571a94Sdrh CREATE TABLE t1(a REAL); 376*21571a94Sdrh INSERT INTO t1(a) VALUES(123); 377*21571a94Sdrh CREATE INDEX t1x1 ON t1(likely(a)); 378*21571a94Sdrh SELECT typeof(likely(a)) FROM t1 NOT INDEXED; 379*21571a94Sdrh SELECT typeof(likely(a)) FROM t1 INDEXED BY t1x1; 380*21571a94Sdrh} {real real} 381*21571a94Sdrhdo_execsql_test 12.1 { 382*21571a94Sdrh CREATE INDEX t1x2 ON t1(abs(a)); 383*21571a94Sdrh SELECT typeof(abs(a)) FROM t1 NOT INDEXED; 384*21571a94Sdrh SELECT typeof(abs(a)) FROM t1 INDEXED BY t1x2; 385*21571a94Sdrh} {real real} 386*21571a94Sdrh 3879988db83Sdan 388aae0f9e4Sdrhfinish_test 389