xref: /sqlite-3.40.0/test/whereG.test (revision 21571a94)
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