1588a9a1aSdrh# 2001 September 15 26de4f4caSdrh# 3b19a2bc6Sdrh# The author disclaims copyright to this source code. In place of 4b19a2bc6Sdrh# a legal notice, here is a blessing: 56de4f4caSdrh# 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. 96de4f4caSdrh# 106de4f4caSdrh#*********************************************************************** 116de4f4caSdrh# This file implements regression tests for SQLite library. The 126de4f4caSdrh# focus of this file is testing the use of indices in WHERE clases. 136de4f4caSdrh# 146de4f4caSdrh 156de4f4caSdrhset testdir [file dirname $argv0] 166de4f4caSdrhsource $testdir/tester.tcl 176de4f4caSdrh 186de4f4caSdrh# Build some test data 196de4f4caSdrh# 206de4f4caSdrhdo_test where-1.0 { 216de4f4caSdrh execsql { 226de4f4caSdrh CREATE TABLE t1(w int, x int, y int); 236de4f4caSdrh CREATE TABLE t2(p int, q int, r int, s int); 246de4f4caSdrh } 256de4f4caSdrh for {set i 1} {$i<=100} {incr i} { 266de4f4caSdrh set w $i 276de4f4caSdrh set x [expr {int(log($i)/log(2))}] 286de4f4caSdrh set y [expr {$i*$i + 2*$i + 1}] 296de4f4caSdrh execsql "INSERT INTO t1 VALUES($w,$x,$y)" 306de4f4caSdrh } 313e8c37e7Sdanielk1977 323e8c37e7Sdanielk1977 ifcapable subquery { 336de4f4caSdrh execsql { 346de4f4caSdrh INSERT INTO t2 SELECT 101-w, x, (SELECT max(y) FROM t1)+1-y, y FROM t1; 353e8c37e7Sdanielk1977 } 363e8c37e7Sdanielk1977 } else { 373e8c37e7Sdanielk1977 set maxy [execsql {select max(y) from t1}] 383e8c37e7Sdanielk1977 execsql " 393e8c37e7Sdanielk1977 INSERT INTO t2 SELECT 101-w, x, $maxy+1-y, y FROM t1; 403e8c37e7Sdanielk1977 " 413e8c37e7Sdanielk1977 } 423e8c37e7Sdanielk1977 433e8c37e7Sdanielk1977 execsql { 44edb04ed9Sdrh CREATE INDEX i1w ON t1("w"); -- Verify quoted identifier names 45edb04ed9Sdrh CREATE INDEX i1xy ON t1(`x`,'y' ASC); -- Old MySQL compatibility 466de4f4caSdrh CREATE INDEX i2p ON t2(p); 476de4f4caSdrh CREATE INDEX i2r ON t2(r); 486de4f4caSdrh CREATE INDEX i2qs ON t2(q, s); 496de4f4caSdrh } 506de4f4caSdrh} {} 516de4f4caSdrh 52487ab3caSdrh# Do an SQL statement. Append the search count to the end of the result. 53487ab3caSdrh# 54487ab3caSdrhproc count sql { 55487ab3caSdrh set ::sqlite_search_count 0 56487ab3caSdrh return [concat [execsql $sql] $::sqlite_search_count] 57487ab3caSdrh} 58487ab3caSdrh 59487ab3caSdrh# Verify that queries use an index. We are using the special variable 60487ab3caSdrh# "sqlite_search_count" which tallys the number of executions of MoveTo 61487ab3caSdrh# and Next operators in the VDBE. By verifing that the search count is 62487ab3caSdrh# small we can be assured that indices are being used properly. 636de4f4caSdrh# 644f07e5fbSdrhdo_test where-1.1.1 { 654f07e5fbSdrh count {SELECT x, y, w FROM t1 WHERE w=10} 664f07e5fbSdrh} {3 121 10 3} 67e0cc3c29Sdrhdo_test where-1.1.1b { 68e0cc3c29Sdrh count {SELECT x, y, w FROM t1 WHERE w IS 10} 69e0cc3c29Sdrh} {3 121 10 3} 706fa978daSdrhdo_eqp_test where-1.1.2 { 716fa978daSdrh SELECT x, y, w FROM t1 WHERE w=10 728210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 73e0cc3c29Sdrhdo_eqp_test where-1.1.2b { 74e0cc3c29Sdrh SELECT x, y, w FROM t1 WHERE w IS 10 758210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 764f07e5fbSdrhdo_test where-1.1.3 { 77d1d38488Sdrh db status step 78d1d38488Sdrh} {0} 79d1d38488Sdrhdo_test where-1.1.4 { 80d1d38488Sdrh db eval {SELECT x, y, w FROM t1 WHERE +w=10} 81d1d38488Sdrh} {3 121 10} 82d1d38488Sdrhdo_test where-1.1.5 { 83d1d38488Sdrh db status step 84d1d38488Sdrh} {99} 856fa978daSdrhdo_eqp_test where-1.1.6 { 866fa978daSdrh SELECT x, y, w FROM t1 WHERE +w=10 878210233cSdrh} {*SCAN t1*} 88d1d38488Sdrhdo_test where-1.1.7 { 894f07e5fbSdrh count {SELECT x, y, w AS abc FROM t1 WHERE abc=10} 904f07e5fbSdrh} {3 121 10 3} 916fa978daSdrhdo_eqp_test where-1.1.8 { 926fa978daSdrh SELECT x, y, w AS abc FROM t1 WHERE abc=10 938210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 94d1d38488Sdrhdo_test where-1.1.9 { 95d1d38488Sdrh db status step 96d1d38488Sdrh} {0} 974f07e5fbSdrhdo_test where-1.2.1 { 984f07e5fbSdrh count {SELECT x, y, w FROM t1 WHERE w=11} 994f07e5fbSdrh} {3 144 11 3} 1004f07e5fbSdrhdo_test where-1.2.2 { 1014f07e5fbSdrh count {SELECT x, y, w AS abc FROM t1 WHERE abc=11} 1024f07e5fbSdrh} {3 144 11 3} 1034f07e5fbSdrhdo_test where-1.3.1 { 1044f07e5fbSdrh count {SELECT x, y, w AS abc FROM t1 WHERE 11=w} 1054f07e5fbSdrh} {3 144 11 3} 1064f07e5fbSdrhdo_test where-1.3.2 { 1074f07e5fbSdrh count {SELECT x, y, w AS abc FROM t1 WHERE 11=abc} 1084f07e5fbSdrh} {3 144 11 3} 109e0cc3c29Sdrhdo_test where-1.3.3 { 110e0cc3c29Sdrh count {SELECT x, y, w AS abc FROM t1 WHERE 11 IS abc} 111e0cc3c29Sdrh} {3 144 11 3} 1124f07e5fbSdrhdo_test where-1.4.1 { 1134f07e5fbSdrh count {SELECT w, x, y FROM t1 WHERE 11=w AND x>2} 1144f07e5fbSdrh} {11 3 144 3} 115e0cc3c29Sdrhdo_test where-1.4.1b { 116e0cc3c29Sdrh count {SELECT w, x, y FROM t1 WHERE 11 IS w AND x>2} 117e0cc3c29Sdrh} {11 3 144 3} 1186fa978daSdrhdo_eqp_test where-1.4.2 { 1196fa978daSdrh SELECT w, x, y FROM t1 WHERE 11=w AND x>2 1208210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 121e0cc3c29Sdrhdo_eqp_test where-1.4.2b { 122e0cc3c29Sdrh SELECT w, x, y FROM t1 WHERE 11 IS w AND x>2 1238210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 1244f07e5fbSdrhdo_test where-1.4.3 { 1254f07e5fbSdrh count {SELECT w AS a, x AS b, y FROM t1 WHERE 11=a AND b>2} 1264f07e5fbSdrh} {11 3 144 3} 1276fa978daSdrhdo_eqp_test where-1.4.4 { 1286fa978daSdrh SELECT w AS a, x AS b, y FROM t1 WHERE 11=a AND b>2 1298210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 1306de4f4caSdrhdo_test where-1.5 { 131487ab3caSdrh count {SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2} 132487ab3caSdrh} {3 144 3} 1336fa978daSdrhdo_eqp_test where-1.5.2 { 1346fa978daSdrh SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2 1358210233cSdrh} {*SEARCH t1 USING INDEX i1w (w=?)*} 1366de4f4caSdrhdo_test where-1.6 { 137487ab3caSdrh count {SELECT x, y FROM t1 WHERE y<200 AND x>2 AND w=11} 138487ab3caSdrh} {3 144 3} 1396de4f4caSdrhdo_test where-1.7 { 140487ab3caSdrh count {SELECT x, y FROM t1 WHERE w=11 AND y<200 AND x>2} 141487ab3caSdrh} {3 144 3} 1426de4f4caSdrhdo_test where-1.8 { 143487ab3caSdrh count {SELECT x, y FROM t1 WHERE w>10 AND y=144 AND x=3} 144487ab3caSdrh} {3 144 3} 1456fa978daSdrhdo_eqp_test where-1.8.2 { 1466fa978daSdrh SELECT x, y FROM t1 WHERE w>10 AND y=144 AND x=3 1478210233cSdrh} {*SEARCH t1 USING INDEX i1xy (x=? AND y=?)*} 1486fa978daSdrhdo_eqp_test where-1.8.3 { 1496fa978daSdrh SELECT x, y FROM t1 WHERE y=144 AND x=3 1508210233cSdrh} {*SEARCH t1 USING COVERING INDEX i1xy (x=? AND y=?)*} 1516de4f4caSdrhdo_test where-1.9 { 152487ab3caSdrh count {SELECT x, y FROM t1 WHERE y=144 AND w>10 AND x=3} 153487ab3caSdrh} {3 144 3} 1546de4f4caSdrhdo_test where-1.10 { 155487ab3caSdrh count {SELECT x, y FROM t1 WHERE x=3 AND w>=10 AND y=121} 156487ab3caSdrh} {3 121 3} 1576de4f4caSdrhdo_test where-1.11 { 158487ab3caSdrh count {SELECT x, y FROM t1 WHERE x=3 AND y=100 AND w<10} 159487ab3caSdrh} {3 100 3} 160e0cc3c29Sdrhdo_test where-1.11b { 161e0cc3c29Sdrh count {SELECT x, y FROM t1 WHERE x IS 3 AND y IS 100 AND w<10} 162e0cc3c29Sdrh} {3 100 3} 163487ab3caSdrh 164487ab3caSdrh# New for SQLite version 2.1: Verify that that inequality constraints 165487ab3caSdrh# are used correctly. 166487ab3caSdrh# 167487ab3caSdrhdo_test where-1.12 { 168487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y<100} 169487ab3caSdrh} {8 3} 170e0cc3c29Sdrhdo_test where-1.12b { 171e0cc3c29Sdrh count {SELECT w FROM t1 WHERE x IS 3 AND y<100} 172e0cc3c29Sdrh} {8 3} 173487ab3caSdrhdo_test where-1.13 { 174487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 100>y} 175487ab3caSdrh} {8 3} 176487ab3caSdrhdo_test where-1.14 { 177487ab3caSdrh count {SELECT w FROM t1 WHERE 3=x AND y<100} 178487ab3caSdrh} {8 3} 179e0cc3c29Sdrhdo_test where-1.14b { 180e0cc3c29Sdrh count {SELECT w FROM t1 WHERE 3 IS x AND y<100} 181e0cc3c29Sdrh} {8 3} 182487ab3caSdrhdo_test where-1.15 { 183487ab3caSdrh count {SELECT w FROM t1 WHERE 3=x AND 100>y} 184487ab3caSdrh} {8 3} 185487ab3caSdrhdo_test where-1.16 { 186487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y<=100} 187487ab3caSdrh} {8 9 5} 188487ab3caSdrhdo_test where-1.17 { 189487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 100>=y} 190487ab3caSdrh} {8 9 5} 191487ab3caSdrhdo_test where-1.18 { 192487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y>225} 193487ab3caSdrh} {15 3} 194e0cc3c29Sdrhdo_test where-1.18b { 195e0cc3c29Sdrh count {SELECT w FROM t1 WHERE x IS 3 AND y>225} 196e0cc3c29Sdrh} {15 3} 197487ab3caSdrhdo_test where-1.19 { 198487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 225<y} 199487ab3caSdrh} {15 3} 200487ab3caSdrhdo_test where-1.20 { 201487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y>=225} 202487ab3caSdrh} {14 15 5} 203487ab3caSdrhdo_test where-1.21 { 204487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 225<=y} 205487ab3caSdrh} {14 15 5} 206487ab3caSdrhdo_test where-1.22 { 207487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y>121 AND y<196} 208487ab3caSdrh} {11 12 5} 209e0cc3c29Sdrhdo_test where-1.22b { 210e0cc3c29Sdrh count {SELECT w FROM t1 WHERE x IS 3 AND y>121 AND y<196} 211e0cc3c29Sdrh} {11 12 5} 212487ab3caSdrhdo_test where-1.23 { 213487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<=196} 214487ab3caSdrh} {10 11 12 13 9} 215487ab3caSdrhdo_test where-1.24 { 216487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 121<y AND 196>y} 217487ab3caSdrh} {11 12 5} 218487ab3caSdrhdo_test where-1.25 { 219487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND 121<=y AND 196>=y} 220487ab3caSdrh} {10 11 12 13 9} 221487ab3caSdrh 222487ab3caSdrh# Need to work on optimizing the BETWEEN operator. 223487ab3caSdrh# 224487ab3caSdrh# do_test where-1.26 { 225487ab3caSdrh# count {SELECT w FROM t1 WHERE x=3 AND y BETWEEN 121 AND 196} 226487ab3caSdrh# } {10 11 12 13 9} 227487ab3caSdrh 228487ab3caSdrhdo_test where-1.27 { 229487ab3caSdrh count {SELECT w FROM t1 WHERE x=3 AND y+1==122} 23021de2e75Sdanielk1977} {10 10} 2317cf6e4deSdrh 232487ab3caSdrhdo_test where-1.28 { 233487ab3caSdrh count {SELECT w FROM t1 WHERE x+1=4 AND y+1==122} 234487ab3caSdrh} {10 99} 235487ab3caSdrhdo_test where-1.29 { 236487ab3caSdrh count {SELECT w FROM t1 WHERE y==121} 237487ab3caSdrh} {10 99} 238487ab3caSdrh 239487ab3caSdrh 240487ab3caSdrhdo_test where-1.30 { 241487ab3caSdrh count {SELECT w FROM t1 WHERE w>97} 2429012bcbcSdrh} {98 99 100 3} 243487ab3caSdrhdo_test where-1.31 { 244487ab3caSdrh count {SELECT w FROM t1 WHERE w>=97} 2459012bcbcSdrh} {97 98 99 100 4} 246487ab3caSdrhdo_test where-1.33 { 247487ab3caSdrh count {SELECT w FROM t1 WHERE w==97} 2489012bcbcSdrh} {97 2} 249ac931eb9Sdrhdo_test where-1.33.1 { 250ac931eb9Sdrh count {SELECT w FROM t1 WHERE w<=97 AND w==97} 251ac931eb9Sdrh} {97 2} 252ac931eb9Sdrhdo_test where-1.33.2 { 253ac931eb9Sdrh count {SELECT w FROM t1 WHERE w<98 AND w==97} 254ac931eb9Sdrh} {97 2} 255ac931eb9Sdrhdo_test where-1.33.3 { 256ac931eb9Sdrh count {SELECT w FROM t1 WHERE w>=97 AND w==97} 257ac931eb9Sdrh} {97 2} 258ac931eb9Sdrhdo_test where-1.33.4 { 259ac931eb9Sdrh count {SELECT w FROM t1 WHERE w>96 AND w==97} 260ac931eb9Sdrh} {97 2} 261ac931eb9Sdrhdo_test where-1.33.5 { 262ac931eb9Sdrh count {SELECT w FROM t1 WHERE w==97 AND w==97} 263ac931eb9Sdrh} {97 2} 264487ab3caSdrhdo_test where-1.34 { 265487ab3caSdrh count {SELECT w FROM t1 WHERE w+1==98} 266487ab3caSdrh} {97 99} 267487ab3caSdrhdo_test where-1.35 { 268487ab3caSdrh count {SELECT w FROM t1 WHERE w<3} 269cfc6ca41Sdrh} {1 2 3} 270487ab3caSdrhdo_test where-1.36 { 271487ab3caSdrh count {SELECT w FROM t1 WHERE w<=3} 272cfc6ca41Sdrh} {1 2 3 4} 273487ab3caSdrhdo_test where-1.37 { 2748aff1015Sdrh count {SELECT w FROM t1 WHERE w+1<=4 ORDER BY w} 2759012bcbcSdrh} {1 2 3 99} 276487ab3caSdrh 2776977fea8Sdrhdo_test where-1.38 { 2786977fea8Sdrh count {SELECT (w) FROM t1 WHERE (w)>(97)} 2799012bcbcSdrh} {98 99 100 3} 2806977fea8Sdrhdo_test where-1.39 { 2816977fea8Sdrh count {SELECT (w) FROM t1 WHERE (w)>=(97)} 2829012bcbcSdrh} {97 98 99 100 4} 2836977fea8Sdrhdo_test where-1.40 { 2846977fea8Sdrh count {SELECT (w) FROM t1 WHERE (w)==(97)} 2859012bcbcSdrh} {97 2} 2866977fea8Sdrhdo_test where-1.41 { 2876977fea8Sdrh count {SELECT (w) FROM t1 WHERE ((w)+(1))==(98)} 2886977fea8Sdrh} {97 99} 2896977fea8Sdrh 2906de4f4caSdrh 2916de4f4caSdrh# Do the same kind of thing except use a join as the data source. 2926de4f4caSdrh# 2936de4f4caSdrhdo_test where-2.1 { 294487ab3caSdrh count { 295487ab3caSdrh SELECT w, p FROM t2, t1 2966de4f4caSdrh WHERE x=q AND y=s AND r=8977 2976de4f4caSdrh } 298487ab3caSdrh} {34 67 6} 2996de4f4caSdrhdo_test where-2.2 { 300487ab3caSdrh count { 301487ab3caSdrh SELECT w, p FROM t2, t1 3026de4f4caSdrh WHERE x=q AND s=y AND r=8977 3036de4f4caSdrh } 304487ab3caSdrh} {34 67 6} 3056de4f4caSdrhdo_test where-2.3 { 306487ab3caSdrh count { 307487ab3caSdrh SELECT w, p FROM t2, t1 3086de4f4caSdrh WHERE x=q AND s=y AND r=8977 AND w>10 3096de4f4caSdrh } 310487ab3caSdrh} {34 67 6} 3116de4f4caSdrhdo_test where-2.4 { 312487ab3caSdrh count { 313487ab3caSdrh SELECT w, p FROM t2, t1 3146de4f4caSdrh WHERE p<80 AND x=q AND s=y AND r=8977 AND w>10 3156de4f4caSdrh } 316487ab3caSdrh} {34 67 6} 3176de4f4caSdrhdo_test where-2.5 { 318487ab3caSdrh count { 319487ab3caSdrh SELECT w, p FROM t2, t1 3206de4f4caSdrh WHERE p<80 AND x=q AND 8977=r AND s=y AND w>10 3216de4f4caSdrh } 322487ab3caSdrh} {34 67 6} 3236de4f4caSdrhdo_test where-2.6 { 324487ab3caSdrh count { 325487ab3caSdrh SELECT w, p FROM t2, t1 3266de4f4caSdrh WHERE x=q AND p=77 AND s=y AND w>5 3276de4f4caSdrh } 328487ab3caSdrh} {24 77 6} 3296de4f4caSdrhdo_test where-2.7 { 330487ab3caSdrh count { 331487ab3caSdrh SELECT w, p FROM t1, t2 3326de4f4caSdrh WHERE x=q AND p>77 AND s=y AND w=5 3336de4f4caSdrh } 334487ab3caSdrh} {5 96 6} 3356de4f4caSdrh 3366de4f4caSdrh# Lets do a 3-way join. 3376de4f4caSdrh# 3386de4f4caSdrhdo_test where-3.1 { 339487ab3caSdrh count { 340487ab3caSdrh SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C 3416de4f4caSdrh WHERE C.w=101-B.p AND B.r=10202-A.y AND A.w=11 3426de4f4caSdrh } 3439012bcbcSdrh} {11 90 11 8} 3446de4f4caSdrhdo_test where-3.2 { 345487ab3caSdrh count { 346487ab3caSdrh SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C 3476de4f4caSdrh WHERE C.w=101-B.p AND B.r=10202-A.y AND A.w=12 3486de4f4caSdrh } 3499012bcbcSdrh} {12 89 12 8} 3506de4f4caSdrhdo_test where-3.3 { 351487ab3caSdrh count { 352487ab3caSdrh SELECT A.w, B.p, C.w FROM t1 as A, t2 as B, t1 as C 3536de4f4caSdrh WHERE A.w=15 AND B.p=C.w AND B.r=10202-A.y 3546de4f4caSdrh } 3559012bcbcSdrh} {15 86 86 8} 3566de4f4caSdrh 35708192d5fSdrh# Test to see that the special case of a constant WHERE clause is 35808192d5fSdrh# handled. 35908192d5fSdrh# 36008192d5fSdrhdo_test where-4.1 { 36108192d5fSdrh count { 36208192d5fSdrh SELECT * FROM t1 WHERE 0 36308192d5fSdrh } 36408192d5fSdrh} {0} 36508192d5fSdrhdo_test where-4.2 { 36608192d5fSdrh count { 36708192d5fSdrh SELECT * FROM t1 WHERE 1 LIMIT 1 36808192d5fSdrh } 369ec7429aeSdrh} {1 0 4 0} 37008192d5fSdrhdo_test where-4.3 { 37108192d5fSdrh execsql { 37208192d5fSdrh SELECT 99 WHERE 0 37308192d5fSdrh } 37408192d5fSdrh} {} 37508192d5fSdrhdo_test where-4.4 { 37608192d5fSdrh execsql { 37708192d5fSdrh SELECT 99 WHERE 1 37808192d5fSdrh } 37908192d5fSdrh} {99} 380ba0232a0Sdrhdo_test where-4.5 { 381ba0232a0Sdrh execsql { 382ba0232a0Sdrh SELECT 99 WHERE 0.1 383ba0232a0Sdrh } 384ba0232a0Sdrh} {99} 385ba0232a0Sdrhdo_test where-4.6 { 386ba0232a0Sdrh execsql { 387ba0232a0Sdrh SELECT 99 WHERE 0.0 388ba0232a0Sdrh } 389ba0232a0Sdrh} {} 39085e9e22bSdrhdo_test where-4.7 { 39185e9e22bSdrh execsql { 39285e9e22bSdrh SELECT count(*) FROM t1 WHERE t1.w 39385e9e22bSdrh } 39485e9e22bSdrh} {100} 39508192d5fSdrh 39648185c15Sdrh# Verify that IN operators in a WHERE clause are handled correctly. 3973e8c37e7Sdanielk1977# Omit these tests if the build is not capable of sub-queries. 39848185c15Sdrh# 3993e8c37e7Sdanielk1977ifcapable subquery { 40048185c15Sdrh do_test where-5.1 { 40148185c15Sdrh count { 40248185c15Sdrh SELECT * FROM t1 WHERE rowid IN (1,2,3,1234) order by 1; 40348185c15Sdrh } 4044db38a70Sdrh } {1 0 4 2 1 9 3 1 16 4} 40548185c15Sdrh do_test where-5.2 { 40648185c15Sdrh count { 40748185c15Sdrh SELECT * FROM t1 WHERE rowid+0 IN (1,2,3,1234) order by 1; 40848185c15Sdrh } 40921de2e75Sdanielk1977 } {1 0 4 2 1 9 3 1 16 102} 4101b8fc65bSdrh do_test where-5.3a { 41148185c15Sdrh count { 41248185c15Sdrh SELECT * FROM t1 WHERE w IN (-1,1,2,3) order by 1; 41348185c15Sdrh } 414b1d607deSdrh } {1 0 4 2 1 9 3 1 16 12} 4151b8fc65bSdrh do_test where-5.3b { 4161b8fc65bSdrh count { 4171b8fc65bSdrh SELECT * FROM t1 WHERE w IN (3,-1,1,2) order by 1; 4181b8fc65bSdrh } 419b1d607deSdrh } {1 0 4 2 1 9 3 1 16 12} 4201b8fc65bSdrh do_test where-5.3c { 4211b8fc65bSdrh count { 4221b8fc65bSdrh SELECT * FROM t1 WHERE w IN (3,2,-1,1,2) order by 1; 4231b8fc65bSdrh } 424b1d607deSdrh } {1 0 4 2 1 9 3 1 16 12} 4251b8fc65bSdrh do_test where-5.3d { 4261b8fc65bSdrh count { 4271b8fc65bSdrh SELECT * FROM t1 WHERE w IN (-1,1,2,3) order by 1 DESC; 4281b8fc65bSdrh } 429b1d607deSdrh } {3 1 16 2 1 9 1 0 4 11} 43048185c15Sdrh do_test where-5.4 { 43148185c15Sdrh count { 43248185c15Sdrh SELECT * FROM t1 WHERE w+0 IN (-1,1,2,3) order by 1; 43348185c15Sdrh } 43421de2e75Sdanielk1977 } {1 0 4 2 1 9 3 1 16 102} 43548185c15Sdrh do_test where-5.5 { 43648185c15Sdrh count { 43748185c15Sdrh SELECT * FROM t1 WHERE rowid IN 43848185c15Sdrh (select rowid from t1 where rowid IN (-1,2,4)) 43948185c15Sdrh ORDER BY 1; 44048185c15Sdrh } 441772ae62aSdrh } {2 1 9 4 2 25 3} 44248185c15Sdrh do_test where-5.6 { 44348185c15Sdrh count { 44448185c15Sdrh SELECT * FROM t1 WHERE rowid+0 IN 44548185c15Sdrh (select rowid from t1 where rowid IN (-1,2,4)) 44648185c15Sdrh ORDER BY 1; 44748185c15Sdrh } 44821de2e75Sdanielk1977 } {2 1 9 4 2 25 103} 44948185c15Sdrh do_test where-5.7 { 45048185c15Sdrh count { 45148185c15Sdrh SELECT * FROM t1 WHERE w IN 45248185c15Sdrh (select rowid from t1 where rowid IN (-1,2,4)) 45348185c15Sdrh ORDER BY 1; 45448185c15Sdrh } 455772ae62aSdrh } {2 1 9 4 2 25 9} 45648185c15Sdrh do_test where-5.8 { 45748185c15Sdrh count { 45848185c15Sdrh SELECT * FROM t1 WHERE w+0 IN 45948185c15Sdrh (select rowid from t1 where rowid IN (-1,2,4)) 46048185c15Sdrh ORDER BY 1; 46148185c15Sdrh } 46221de2e75Sdanielk1977 } {2 1 9 4 2 25 103} 46348185c15Sdrh do_test where-5.9 { 46448185c15Sdrh count { 46548185c15Sdrh SELECT * FROM t1 WHERE x IN (1,7) ORDER BY 1; 46648185c15Sdrh } 467b1d607deSdrh } {2 1 9 3 1 16 6} 46848185c15Sdrh do_test where-5.10 { 46948185c15Sdrh count { 47048185c15Sdrh SELECT * FROM t1 WHERE x+0 IN (1,7) ORDER BY 1; 47148185c15Sdrh } 472e3184744Sdrh } {2 1 9 3 1 16 199} 47348185c15Sdrh do_test where-5.11 { 47448185c15Sdrh count { 47548185c15Sdrh SELECT * FROM t1 WHERE y IN (6400,8100) ORDER BY 1; 47648185c15Sdrh } 477e3184744Sdrh } {79 6 6400 89 6 8100 199} 47848185c15Sdrh do_test where-5.12 { 47948185c15Sdrh count { 48048185c15Sdrh SELECT * FROM t1 WHERE x=6 AND y IN (6400,8100) ORDER BY 1; 48148185c15Sdrh } 4823adc9cedSdrh } {79 6 6400 89 6 8100 7} 48348185c15Sdrh do_test where-5.13 { 48448185c15Sdrh count { 48548185c15Sdrh SELECT * FROM t1 WHERE x IN (1,7) AND y NOT IN (6400,8100) ORDER BY 1; 48648185c15Sdrh } 487b1d607deSdrh } {2 1 9 3 1 16 6} 48848185c15Sdrh do_test where-5.14 { 48948185c15Sdrh count { 49048185c15Sdrh SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1; 49148185c15Sdrh } 492fa17e134Sdrh } {2 1 9 5} 4933adc9cedSdrh do_test where-5.15 { 4943adc9cedSdrh count { 4953adc9cedSdrh SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,16) ORDER BY 1; 4963adc9cedSdrh } 497fa17e134Sdrh } {2 1 9 3 1 16 9} 4982d96b934Sdrh do_test where-5.100 { 4992d96b934Sdrh db eval { 5002d96b934Sdrh SELECT w, x, y FROM t1 WHERE x IN (1,5) AND y IN (9,8,3025,1000,3969) 5012d96b934Sdrh ORDER BY x, y 5022d96b934Sdrh } 5032d96b934Sdrh } {2 1 9 54 5 3025 62 5 3969} 5042d96b934Sdrh do_test where-5.101 { 5052d96b934Sdrh db eval { 5062d96b934Sdrh SELECT w, x, y FROM t1 WHERE x IN (1,5) AND y IN (9,8,3025,1000,3969) 5072d96b934Sdrh ORDER BY x DESC, y DESC 5082d96b934Sdrh } 5092d96b934Sdrh } {62 5 3969 54 5 3025 2 1 9} 5102d96b934Sdrh do_test where-5.102 { 5112d96b934Sdrh db eval { 5122d96b934Sdrh SELECT w, x, y FROM t1 WHERE x IN (1,5) AND y IN (9,8,3025,1000,3969) 5132d96b934Sdrh ORDER BY x DESC, y 5142d96b934Sdrh } 5152d96b934Sdrh } {54 5 3025 62 5 3969 2 1 9} 5162d96b934Sdrh do_test where-5.103 { 5172d96b934Sdrh db eval { 5182d96b934Sdrh SELECT w, x, y FROM t1 WHERE x IN (1,5) AND y IN (9,8,3025,1000,3969) 5192d96b934Sdrh ORDER BY x, y DESC 5202d96b934Sdrh } 5212d96b934Sdrh } {2 1 9 62 5 3969 54 5 3025} 5223e8c37e7Sdanielk1977} 52348185c15Sdrh 5246bf89570Sdrh# This procedure executes the SQL. Then it checks to see if the OP_Sort 5256bf89570Sdrh# opcode was executed. If an OP_Sort did occur, then "sort" is appended 5266bf89570Sdrh# to the result. If no OP_Sort happened, then "nosort" is appended. 5276bf89570Sdrh# 5286bf89570Sdrh# This procedure is used to check to make sure sorting is or is not 5296bf89570Sdrh# occurring as expected. 530e3184744Sdrh# 531e3184744Sdrhproc cksort {sql} { 532e3184744Sdrh set data [execsql $sql] 533d1d38488Sdrh if {[db status sort]} {set x sort} {set x nosort} 534e3184744Sdrh lappend data $x 535e3184744Sdrh return $data 536e3184744Sdrh} 537e3184744Sdrh# Check out the logic that attempts to implement the ORDER BY clause 538e3184744Sdrh# using an index rather than by sorting. 539e3184744Sdrh# 540e3184744Sdrhdo_test where-6.1 { 541e3184744Sdrh execsql { 542e3184744Sdrh CREATE TABLE t3(a,b,c); 543e3184744Sdrh CREATE INDEX t3a ON t3(a); 544e3184744Sdrh CREATE INDEX t3bc ON t3(b,c); 545e3184744Sdrh CREATE INDEX t3acb ON t3(a,c,b); 546e3184744Sdrh INSERT INTO t3 SELECT w, 101-w, y FROM t1; 547e3184744Sdrh SELECT count(*), sum(a), sum(b), sum(c) FROM t3; 548e3184744Sdrh } 5493d1d95e6Sdrh} {100 5050 5050 348550} 550e3184744Sdrhdo_test where-6.2 { 551e3184744Sdrh cksort { 552e3184744Sdrh SELECT * FROM t3 ORDER BY a LIMIT 3 553e3184744Sdrh } 554e3184744Sdrh} {1 100 4 2 99 9 3 98 16 nosort} 555e3184744Sdrhdo_test where-6.3 { 556e3184744Sdrh cksort { 557e3184744Sdrh SELECT * FROM t3 ORDER BY a+1 LIMIT 3 558e3184744Sdrh } 559e3184744Sdrh} {1 100 4 2 99 9 3 98 16 sort} 560e3184744Sdrhdo_test where-6.4 { 561e3184744Sdrh cksort { 562e3184744Sdrh SELECT * FROM t3 WHERE a<10 ORDER BY a LIMIT 3 563e3184744Sdrh } 564e3184744Sdrh} {1 100 4 2 99 9 3 98 16 nosort} 565e3184744Sdrhdo_test where-6.5 { 566e3184744Sdrh cksort { 567e3184744Sdrh SELECT * FROM t3 WHERE a>0 AND a<10 ORDER BY a LIMIT 3 568e3184744Sdrh } 569e3184744Sdrh} {1 100 4 2 99 9 3 98 16 nosort} 570e3184744Sdrhdo_test where-6.6 { 571e3184744Sdrh cksort { 572e3184744Sdrh SELECT * FROM t3 WHERE a>0 ORDER BY a LIMIT 3 573e3184744Sdrh } 574e3184744Sdrh} {1 100 4 2 99 9 3 98 16 nosort} 5758c098e61Sdrhdo_test where-6.7.1 { 576e3184744Sdrh cksort { 5778c098e61Sdrh SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 10 578e3184744Sdrh } 5798c098e61Sdrh} {/1 100 4 2 99 9 3 98 16 .* nosort/} 5808c098e61Sdrhdo_test where-6.7.2 { 5818c098e61Sdrh cksort { 5828c098e61Sdrh SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 1 5838c098e61Sdrh } 584f559ed34Sdrh} {1 100 4 nosort} 5853e8c37e7Sdanielk1977ifcapable subquery { 5861b8fc65bSdrh do_test where-6.8a { 587e3184744Sdrh cksort { 588e3184744Sdrh SELECT * FROM t3 WHERE a IN (3,5,7,1,9,4,2) ORDER BY a LIMIT 3 589e3184744Sdrh } 5901b8fc65bSdrh } {1 100 4 2 99 9 3 98 16 nosort} 5911b8fc65bSdrh do_test where-6.8b { 5921b8fc65bSdrh cksort { 5931b8fc65bSdrh SELECT * FROM t3 WHERE a IN (3,5,7,1,9,4,2) ORDER BY a DESC LIMIT 3 5941b8fc65bSdrh } 5952d96b934Sdrh } {9 92 100 7 94 64 5 96 36 nosort} 5963e8c37e7Sdanielk1977} 597dd4852c3Sdrhdo_test where-6.9.1 { 598e3184744Sdrh cksort { 599e3184744Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a LIMIT 3 600e3184744Sdrh } 601e3184744Sdrh} {1 100 4 nosort} 602ac931eb9Sdrhdo_test where-6.9.1.1 { 603ac931eb9Sdrh cksort { 604ac931eb9Sdrh SELECT * FROM t3 WHERE a>=1 AND a=1 AND c>0 ORDER BY a LIMIT 3 605ac931eb9Sdrh } 606ac931eb9Sdrh} {1 100 4 nosort} 607ac931eb9Sdrhdo_test where-6.9.1.2 { 608ac931eb9Sdrh cksort { 609ac931eb9Sdrh SELECT * FROM t3 WHERE a<2 AND a=1 AND c>0 ORDER BY a LIMIT 3 610ac931eb9Sdrh } 611ac931eb9Sdrh} {1 100 4 nosort} 612dd4852c3Sdrhdo_test where-6.9.2 { 613dd4852c3Sdrh cksort { 614dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a,c LIMIT 3 615dd4852c3Sdrh } 616dd4852c3Sdrh} {1 100 4 nosort} 617dd4852c3Sdrhdo_test where-6.9.3 { 618dd4852c3Sdrh cksort { 619dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY c LIMIT 3 620dd4852c3Sdrh } 621dd4852c3Sdrh} {1 100 4 nosort} 622dd4852c3Sdrhdo_test where-6.9.4 { 623dd4852c3Sdrh cksort { 624dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a DESC LIMIT 3 625dd4852c3Sdrh } 626dd4852c3Sdrh} {1 100 4 nosort} 627dd4852c3Sdrhdo_test where-6.9.5 { 628dd4852c3Sdrh cksort { 629dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a DESC, c DESC LIMIT 3 630dd4852c3Sdrh } 631dd4852c3Sdrh} {1 100 4 nosort} 632dd4852c3Sdrhdo_test where-6.9.6 { 633dd4852c3Sdrh cksort { 634dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY c DESC LIMIT 3 635dd4852c3Sdrh } 636dd4852c3Sdrh} {1 100 4 nosort} 637dd4852c3Sdrhdo_test where-6.9.7 { 638dd4852c3Sdrh cksort { 639dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY c,a LIMIT 3 640dd4852c3Sdrh } 6414fe425adSdrh} {1 100 4 nosort} 642dd4852c3Sdrhdo_test where-6.9.8 { 643dd4852c3Sdrh cksort { 644dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a DESC, c ASC LIMIT 3 645dd4852c3Sdrh } 6469012bcbcSdrh} {1 100 4 nosort} 647dd4852c3Sdrhdo_test where-6.9.9 { 648dd4852c3Sdrh cksort { 649dd4852c3Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a ASC, c DESC LIMIT 3 650dd4852c3Sdrh } 6519012bcbcSdrh} {1 100 4 nosort} 652e3184744Sdrhdo_test where-6.10 { 653e3184744Sdrh cksort { 654e3184744Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a LIMIT 3 655e3184744Sdrh } 656e3184744Sdrh} {1 100 4 nosort} 657e3184744Sdrhdo_test where-6.11 { 658e3184744Sdrh cksort { 659e3184744Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a,c LIMIT 3 660e3184744Sdrh } 661e3184744Sdrh} {1 100 4 nosort} 662e3184744Sdrhdo_test where-6.12 { 663e3184744Sdrh cksort { 664e3184744Sdrh SELECT * FROM t3 WHERE a=1 AND c>0 ORDER BY a,c,b LIMIT 3 665e3184744Sdrh } 666e3184744Sdrh} {1 100 4 nosort} 667e3184744Sdrhdo_test where-6.13 { 668e3184744Sdrh cksort { 669e3184744Sdrh SELECT * FROM t3 WHERE a>0 ORDER BY a DESC LIMIT 3 670e3184744Sdrh } 671dd4852c3Sdrh} {100 1 10201 99 2 10000 98 3 9801 nosort} 672dd4852c3Sdrhdo_test where-6.13.1 { 673dd4852c3Sdrh cksort { 674dd4852c3Sdrh SELECT * FROM t3 WHERE a>0 ORDER BY -a LIMIT 3 675dd4852c3Sdrh } 676e3184744Sdrh} {100 1 10201 99 2 10000 98 3 9801 sort} 677e3184744Sdrhdo_test where-6.14 { 678e3184744Sdrh cksort { 679e3184744Sdrh SELECT * FROM t3 ORDER BY b LIMIT 3 680e3184744Sdrh } 681e3184744Sdrh} {100 1 10201 99 2 10000 98 3 9801 nosort} 682e3184744Sdrhdo_test where-6.15 { 683e3184744Sdrh cksort { 684e3184744Sdrh SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t3.a LIMIT 3 685e3184744Sdrh } 686e3184744Sdrh} {1 0 2 1 3 1 nosort} 687e3184744Sdrhdo_test where-6.16 { 688e3184744Sdrh cksort { 689e3184744Sdrh SELECT t3.a, t1.x FROM t3, t1 WHERE t3.a=t1.w ORDER BY t1.x, t3.a LIMIT 3 690e3184744Sdrh } 691e3184744Sdrh} {1 0 2 1 3 1 sort} 692c330af1dSdrhdo_test where-6.19 { 693c330af1dSdrh cksort { 694c330af1dSdrh SELECT y FROM t1 ORDER BY w LIMIT 3; 695c330af1dSdrh } 696c330af1dSdrh} {4 9 16 nosort} 697b6c29897Sdrhdo_test where-6.20 { 698b6c29897Sdrh cksort { 699b6c29897Sdrh SELECT y FROM t1 ORDER BY rowid LIMIT 3; 700b6c29897Sdrh } 701b6c29897Sdrh} {4 9 16 nosort} 702b6c29897Sdrhdo_test where-6.21 { 703b6c29897Sdrh cksort { 704b6c29897Sdrh SELECT y FROM t1 ORDER BY rowid, y LIMIT 3; 705b6c29897Sdrh } 706cc19254dSdrh} {4 9 16 nosort} 707b6c29897Sdrhdo_test where-6.22 { 708b6c29897Sdrh cksort { 709b6c29897Sdrh SELECT y FROM t1 ORDER BY rowid, y DESC LIMIT 3; 710b6c29897Sdrh } 711cc19254dSdrh} {4 9 16 nosort} 712b6c29897Sdrhdo_test where-6.23 { 713b6c29897Sdrh cksort { 714b6c29897Sdrh SELECT y FROM t1 WHERE y>4 ORDER BY rowid, w, x LIMIT 3; 715b6c29897Sdrh } 716cc19254dSdrh} {9 16 25 nosort} 717b6c29897Sdrhdo_test where-6.24 { 718b6c29897Sdrh cksort { 719b6c29897Sdrh SELECT y FROM t1 WHERE y>=9 ORDER BY rowid, x DESC, w LIMIT 3; 720b6c29897Sdrh } 721cc19254dSdrh} {9 16 25 nosort} 722b6c29897Sdrhdo_test where-6.25 { 723b6c29897Sdrh cksort { 724b6c29897Sdrh SELECT y FROM t1 WHERE y>4 AND y<25 ORDER BY rowid; 725b6c29897Sdrh } 726b6c29897Sdrh} {9 16 nosort} 727b6c29897Sdrhdo_test where-6.26 { 728b6c29897Sdrh cksort { 729b6c29897Sdrh SELECT y FROM t1 WHERE y>=4 AND y<=25 ORDER BY oid; 730b6c29897Sdrh } 731b6c29897Sdrh} {4 9 16 25 nosort} 732b6c29897Sdrhdo_test where-6.27 { 733b6c29897Sdrh cksort { 734b6c29897Sdrh SELECT y FROM t1 WHERE y<=25 ORDER BY _rowid_, w+y; 735b6c29897Sdrh } 736cc19254dSdrh} {4 9 16 25 nosort} 737b6c29897Sdrh 738c330af1dSdrh 739dd4852c3Sdrh# Tests for reverse-order sorting. 740dd4852c3Sdrh# 741dd4852c3Sdrhdo_test where-7.1 { 742dd4852c3Sdrh cksort { 743dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 ORDER BY y; 744dd4852c3Sdrh } 745dd4852c3Sdrh} {8 9 10 11 12 13 14 15 nosort} 746dd4852c3Sdrhdo_test where-7.2 { 747dd4852c3Sdrh cksort { 748dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 ORDER BY y DESC; 749dd4852c3Sdrh } 750dd4852c3Sdrh} {15 14 13 12 11 10 9 8 nosort} 751dd4852c3Sdrhdo_test where-7.3 { 752dd4852c3Sdrh cksort { 753dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>100 ORDER BY y LIMIT 3; 754dd4852c3Sdrh } 755dd4852c3Sdrh} {10 11 12 nosort} 756dd4852c3Sdrhdo_test where-7.4 { 757dd4852c3Sdrh cksort { 758dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>100 ORDER BY y DESC LIMIT 3; 759dd4852c3Sdrh } 760dd4852c3Sdrh} {15 14 13 nosort} 761dd4852c3Sdrhdo_test where-7.5 { 762dd4852c3Sdrh cksort { 763dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>121 ORDER BY y DESC; 764dd4852c3Sdrh } 765dd4852c3Sdrh} {15 14 13 12 11 nosort} 766dd4852c3Sdrhdo_test where-7.6 { 767dd4852c3Sdrh cksort { 768dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>=121 ORDER BY y DESC; 769dd4852c3Sdrh } 770dd4852c3Sdrh} {15 14 13 12 11 10 nosort} 771dd4852c3Sdrhdo_test where-7.7 { 772dd4852c3Sdrh cksort { 773dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<196 ORDER BY y DESC; 774dd4852c3Sdrh } 775dd4852c3Sdrh} {12 11 10 nosort} 776dd4852c3Sdrhdo_test where-7.8 { 777dd4852c3Sdrh cksort { 778dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<=196 ORDER BY y DESC; 779dd4852c3Sdrh } 780dd4852c3Sdrh} {13 12 11 10 nosort} 781dd4852c3Sdrhdo_test where-7.9 { 782dd4852c3Sdrh cksort { 783dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>121 AND y<=196 ORDER BY y DESC; 784dd4852c3Sdrh } 785dd4852c3Sdrh} {13 12 11 nosort} 786dd4852c3Sdrhdo_test where-7.10 { 787dd4852c3Sdrh cksort { 788dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>100 AND y<196 ORDER BY y DESC; 789dd4852c3Sdrh } 790dd4852c3Sdrh} {12 11 10 nosort} 791dd4852c3Sdrhdo_test where-7.11 { 792dd4852c3Sdrh cksort { 793dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<196 ORDER BY y; 794dd4852c3Sdrh } 795dd4852c3Sdrh} {10 11 12 nosort} 796dd4852c3Sdrhdo_test where-7.12 { 797dd4852c3Sdrh cksort { 798dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>=121 AND y<=196 ORDER BY y; 799dd4852c3Sdrh } 800dd4852c3Sdrh} {10 11 12 13 nosort} 801dd4852c3Sdrhdo_test where-7.13 { 802dd4852c3Sdrh cksort { 803dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>121 AND y<=196 ORDER BY y; 804dd4852c3Sdrh } 805dd4852c3Sdrh} {11 12 13 nosort} 806dd4852c3Sdrhdo_test where-7.14 { 807dd4852c3Sdrh cksort { 808dd4852c3Sdrh SELECT w FROM t1 WHERE x=3 AND y>100 AND y<196 ORDER BY y; 809dd4852c3Sdrh } 810dd4852c3Sdrh} {10 11 12 nosort} 8111a844c38Sdrhdo_test where-7.15 { 8121a844c38Sdrh cksort { 8131a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y<81 ORDER BY y; 8141a844c38Sdrh } 8151a844c38Sdrh} {nosort} 8161a844c38Sdrhdo_test where-7.16 { 8171a844c38Sdrh cksort { 8181a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y<=81 ORDER BY y; 8191a844c38Sdrh } 8201a844c38Sdrh} {8 nosort} 8211a844c38Sdrhdo_test where-7.17 { 8221a844c38Sdrh cksort { 8231a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y>256 ORDER BY y; 8241a844c38Sdrh } 8251a844c38Sdrh} {nosort} 8261a844c38Sdrhdo_test where-7.18 { 8271a844c38Sdrh cksort { 8281a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y>=256 ORDER BY y; 8291a844c38Sdrh } 8301a844c38Sdrh} {15 nosort} 8311a844c38Sdrhdo_test where-7.19 { 8321a844c38Sdrh cksort { 8331a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y<81 ORDER BY y DESC; 8341a844c38Sdrh } 8351a844c38Sdrh} {nosort} 8361a844c38Sdrhdo_test where-7.20 { 8371a844c38Sdrh cksort { 8381a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y<=81 ORDER BY y DESC; 8391a844c38Sdrh } 8401a844c38Sdrh} {8 nosort} 8411a844c38Sdrhdo_test where-7.21 { 8421a844c38Sdrh cksort { 8431a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y>256 ORDER BY y DESC; 8441a844c38Sdrh } 8451a844c38Sdrh} {nosort} 8461a844c38Sdrhdo_test where-7.22 { 8471a844c38Sdrh cksort { 8481a844c38Sdrh SELECT w FROM t1 WHERE x=3 AND y>=256 ORDER BY y DESC; 8491a844c38Sdrh } 8501a844c38Sdrh} {15 nosort} 8511a844c38Sdrhdo_test where-7.23 { 8521a844c38Sdrh cksort { 8531a844c38Sdrh SELECT w FROM t1 WHERE x=0 AND y<4 ORDER BY y; 8541a844c38Sdrh } 8551a844c38Sdrh} {nosort} 8561a844c38Sdrhdo_test where-7.24 { 8571a844c38Sdrh cksort { 8581a844c38Sdrh SELECT w FROM t1 WHERE x=0 AND y<=4 ORDER BY y; 8591a844c38Sdrh } 8601a844c38Sdrh} {1 nosort} 8611a844c38Sdrhdo_test where-7.25 { 8621a844c38Sdrh cksort { 8631a844c38Sdrh SELECT w FROM t1 WHERE x=6 AND y>10201 ORDER BY y; 8641a844c38Sdrh } 8651a844c38Sdrh} {nosort} 8661a844c38Sdrhdo_test where-7.26 { 8671a844c38Sdrh cksort { 8681a844c38Sdrh SELECT w FROM t1 WHERE x=6 AND y>=10201 ORDER BY y; 8691a844c38Sdrh } 8701a844c38Sdrh} {100 nosort} 8711a844c38Sdrhdo_test where-7.27 { 8721a844c38Sdrh cksort { 8731a844c38Sdrh SELECT w FROM t1 WHERE x=0 AND y<4 ORDER BY y DESC; 8741a844c38Sdrh } 8751a844c38Sdrh} {nosort} 8761a844c38Sdrhdo_test where-7.28 { 8771a844c38Sdrh cksort { 8781a844c38Sdrh SELECT w FROM t1 WHERE x=0 AND y<=4 ORDER BY y DESC; 8791a844c38Sdrh } 8801a844c38Sdrh} {1 nosort} 8811a844c38Sdrhdo_test where-7.29 { 8821a844c38Sdrh cksort { 8831a844c38Sdrh SELECT w FROM t1 WHERE x=6 AND y>10201 ORDER BY y DESC; 8841a844c38Sdrh } 8851a844c38Sdrh} {nosort} 8861a844c38Sdrhdo_test where-7.30 { 8871a844c38Sdrh cksort { 8881a844c38Sdrh SELECT w FROM t1 WHERE x=6 AND y>=10201 ORDER BY y DESC; 8891a844c38Sdrh } 8901a844c38Sdrh} {100 nosort} 891b6c29897Sdrhdo_test where-7.31 { 892b6c29897Sdrh cksort { 893b6c29897Sdrh SELECT y FROM t1 ORDER BY rowid DESC LIMIT 3 894b6c29897Sdrh } 895b6c29897Sdrh} {10201 10000 9801 nosort} 896b6c29897Sdrhdo_test where-7.32 { 897b6c29897Sdrh cksort { 898a21c8495Sdrh SELECT y FROM t1 WHERE y<25 ORDER BY rowid DESC 899b6c29897Sdrh } 900b6c29897Sdrh} {16 9 4 nosort} 901b6c29897Sdrhdo_test where-7.33 { 902b6c29897Sdrh cksort { 903a21c8495Sdrh SELECT y FROM t1 WHERE y<=25 ORDER BY rowid DESC 904b6c29897Sdrh } 905b6c29897Sdrh} {25 16 9 4 nosort} 906b6c29897Sdrhdo_test where-7.34 { 907b6c29897Sdrh cksort { 908b6c29897Sdrh SELECT y FROM t1 WHERE y<25 AND y>4 ORDER BY rowid DESC, y DESC 909b6c29897Sdrh } 910cc19254dSdrh} {16 9 nosort} 911b6c29897Sdrhdo_test where-7.35 { 912b6c29897Sdrh cksort { 913b6c29897Sdrh SELECT y FROM t1 WHERE y<25 AND y>=4 ORDER BY rowid DESC 914b6c29897Sdrh } 915b6c29897Sdrh} {16 9 4 nosort} 9161a844c38Sdrh 9171a844c38Sdrhdo_test where-8.1 { 9181a844c38Sdrh execsql { 9191a844c38Sdrh CREATE TABLE t4 AS SELECT * FROM t1; 9201a844c38Sdrh CREATE INDEX i4xy ON t4(x,y); 9211a844c38Sdrh } 9221a844c38Sdrh cksort { 9231a844c38Sdrh SELECT w FROM t4 WHERE x=4 and y<1000 ORDER BY y DESC limit 3; 9241a844c38Sdrh } 9251a844c38Sdrh} {30 29 28 nosort} 9261a844c38Sdrhdo_test where-8.2 { 9271a844c38Sdrh execsql { 9281a844c38Sdrh DELETE FROM t4; 9291a844c38Sdrh } 9301a844c38Sdrh cksort { 9311a844c38Sdrh SELECT w FROM t4 WHERE x=4 and y<1000 ORDER BY y DESC limit 3; 9321a844c38Sdrh } 9331a844c38Sdrh} {nosort} 9341a844c38Sdrh 935d4d595f9Sdrh# Make sure searches with an index work with an empty table. 936d4d595f9Sdrh# 937d4d595f9Sdrhdo_test where-9.1 { 938d4d595f9Sdrh execsql { 939d4d595f9Sdrh CREATE TABLE t5(x PRIMARY KEY); 940d4d595f9Sdrh SELECT * FROM t5 WHERE x<10; 941d4d595f9Sdrh } 942d4d595f9Sdrh} {} 943d4d595f9Sdrhdo_test where-9.2 { 944d4d595f9Sdrh execsql { 945d4d595f9Sdrh SELECT * FROM t5 WHERE x<10 ORDER BY x DESC; 946d4d595f9Sdrh } 947d4d595f9Sdrh} {} 948d4d595f9Sdrhdo_test where-9.3 { 949d4d595f9Sdrh execsql { 950d4d595f9Sdrh SELECT * FROM t5 WHERE x=10; 951d4d595f9Sdrh } 952d4d595f9Sdrh} {} 953d4d595f9Sdrh 95437ea94b8Sdrhdo_test where-10.1 { 95537ea94b8Sdrh execsql { 95637ea94b8Sdrh SELECT 1 WHERE abs(random())<0 95737ea94b8Sdrh } 95837ea94b8Sdrh} {} 9597bdc0c1dSdrhdo_test where-10.2 { 9607bdc0c1dSdrh proc tclvar_func {vname} {return [set ::$vname]} 9617bdc0c1dSdrh db function tclvar tclvar_func 9627bdc0c1dSdrh set ::v1 0 9637bdc0c1dSdrh execsql { 9647bdc0c1dSdrh SELECT count(*) FROM t1 WHERE tclvar('v1'); 9657bdc0c1dSdrh } 9667bdc0c1dSdrh} {0} 9677bdc0c1dSdrhdo_test where-10.3 { 9687bdc0c1dSdrh set ::v1 1 9697bdc0c1dSdrh execsql { 9707bdc0c1dSdrh SELECT count(*) FROM t1 WHERE tclvar('v1'); 9717bdc0c1dSdrh } 9727bdc0c1dSdrh} {100} 9737bdc0c1dSdrhdo_test where-10.4 { 9747bdc0c1dSdrh set ::v1 1 9757bdc0c1dSdrh proc tclvar_func {vname} { 9767bdc0c1dSdrh upvar #0 $vname v 9777bdc0c1dSdrh set v [expr {!$v}] 9787bdc0c1dSdrh return $v 9797bdc0c1dSdrh } 9807bdc0c1dSdrh execsql { 9817bdc0c1dSdrh SELECT count(*) FROM t1 WHERE tclvar('v1'); 9827bdc0c1dSdrh } 9837bdc0c1dSdrh} {50} 9847bdc0c1dSdrh 9859eb2028fSdrh# Ticket #1376. The query below was causing a segfault. 9869eb2028fSdrh# The problem was the age-old error of calling realloc() on an 9879eb2028fSdrh# array while there are still pointers to individual elements of 9889eb2028fSdrh# that array. 9899eb2028fSdrh# 9909eb2028fSdrhdo_test where-11.1 { 9919eb2028fSdrh execsql { 9929eb2028fSdrh CREATE TABLE t99(Dte INT, X INT); 9939eb2028fSdrh DELETE FROM t99 WHERE (Dte = 2451337) OR (Dte = 2451339) OR 9949eb2028fSdrh (Dte BETWEEN 2451345 AND 2451347) OR (Dte = 2451351) OR 9959eb2028fSdrh (Dte BETWEEN 2451355 AND 2451356) OR (Dte = 2451358) OR 9969eb2028fSdrh (Dte = 2451362) OR (Dte = 2451365) OR (Dte = 2451367) OR 9979eb2028fSdrh (Dte BETWEEN 2451372 AND 2451376) OR (Dte BETWEEN 2451382 AND 2451384) OR 9989eb2028fSdrh (Dte = 2451387) OR (Dte BETWEEN 2451389 AND 2451391) OR 9999eb2028fSdrh (Dte BETWEEN 2451393 AND 2451395) OR (Dte = 2451400) OR 10009eb2028fSdrh (Dte = 2451402) OR (Dte = 2451404) OR (Dte BETWEEN 2451416 AND 2451418) OR 10019eb2028fSdrh (Dte = 2451422) OR (Dte = 2451426) OR (Dte BETWEEN 2451445 AND 2451446) OR 10029eb2028fSdrh (Dte = 2451456) OR (Dte = 2451458) OR (Dte BETWEEN 2451465 AND 2451467) OR 10039eb2028fSdrh (Dte BETWEEN 2451469 AND 2451471) OR (Dte = 2451474) OR 10049eb2028fSdrh (Dte BETWEEN 2451477 AND 2451501) OR (Dte BETWEEN 2451503 AND 2451509) OR 10059eb2028fSdrh (Dte BETWEEN 2451511 AND 2451514) OR (Dte BETWEEN 2451518 AND 2451521) OR 10069eb2028fSdrh (Dte BETWEEN 2451523 AND 2451531) OR (Dte BETWEEN 2451533 AND 2451537) OR 10079eb2028fSdrh (Dte BETWEEN 2451539 AND 2451544) OR (Dte BETWEEN 2451546 AND 2451551) OR 10089eb2028fSdrh (Dte BETWEEN 2451553 AND 2451555) OR (Dte = 2451557) OR 10099eb2028fSdrh (Dte BETWEEN 2451559 AND 2451561) OR (Dte = 2451563) OR 10109eb2028fSdrh (Dte BETWEEN 2451565 AND 2451566) OR (Dte BETWEEN 2451569 AND 2451571) OR 10119eb2028fSdrh (Dte = 2451573) OR (Dte = 2451575) OR (Dte = 2451577) OR (Dte = 2451581) OR 10129eb2028fSdrh (Dte BETWEEN 2451583 AND 2451586) OR (Dte BETWEEN 2451588 AND 2451592) OR 10139eb2028fSdrh (Dte BETWEEN 2451596 AND 2451598) OR (Dte = 2451600) OR 10149eb2028fSdrh (Dte BETWEEN 2451602 AND 2451603) OR (Dte = 2451606) OR (Dte = 2451611); 10159eb2028fSdrh } 10169eb2028fSdrh} {} 10179eb2028fSdrh 1018cc19254dSdrh# Ticket #2116: Make sure sorting by index works well with nn INTEGER PRIMARY 1019cc19254dSdrh# KEY. 1020cc19254dSdrh# 1021cc19254dSdrhdo_test where-12.1 { 1022cc19254dSdrh execsql { 1023cc19254dSdrh CREATE TABLE t6(a INTEGER PRIMARY KEY, b TEXT); 1024cc19254dSdrh INSERT INTO t6 VALUES(1,'one'); 1025cc19254dSdrh INSERT INTO t6 VALUES(4,'four'); 1026cc19254dSdrh CREATE INDEX t6i1 ON t6(b); 1027cc19254dSdrh } 1028cc19254dSdrh cksort { 1029cc19254dSdrh SELECT * FROM t6 ORDER BY b; 1030cc19254dSdrh } 1031cc19254dSdrh} {4 four 1 one nosort} 1032cc19254dSdrhdo_test where-12.2 { 1033cc19254dSdrh cksort { 1034cc19254dSdrh SELECT * FROM t6 ORDER BY b, a; 1035cc19254dSdrh } 1036cc19254dSdrh} {4 four 1 one nosort} 1037cc19254dSdrhdo_test where-12.3 { 1038cc19254dSdrh cksort { 1039cc19254dSdrh SELECT * FROM t6 ORDER BY a; 1040cc19254dSdrh } 1041cc19254dSdrh} {1 one 4 four nosort} 1042cc19254dSdrhdo_test where-12.4 { 1043cc19254dSdrh cksort { 1044cc19254dSdrh SELECT * FROM t6 ORDER BY a, b; 1045cc19254dSdrh } 1046cc19254dSdrh} {1 one 4 four nosort} 1047cc19254dSdrhdo_test where-12.5 { 1048cc19254dSdrh cksort { 1049cc19254dSdrh SELECT * FROM t6 ORDER BY b DESC; 1050cc19254dSdrh } 1051cc19254dSdrh} {1 one 4 four nosort} 1052cc19254dSdrhdo_test where-12.6 { 1053cc19254dSdrh cksort { 1054cc19254dSdrh SELECT * FROM t6 ORDER BY b DESC, a DESC; 1055cc19254dSdrh } 1056cc19254dSdrh} {1 one 4 four nosort} 1057cc19254dSdrhdo_test where-12.7 { 1058cc19254dSdrh cksort { 1059cc19254dSdrh SELECT * FROM t6 ORDER BY b DESC, a ASC; 1060cc19254dSdrh } 1061cc19254dSdrh} {1 one 4 four sort} 1062cc19254dSdrhdo_test where-12.8 { 1063cc19254dSdrh cksort { 1064cc19254dSdrh SELECT * FROM t6 ORDER BY b ASC, a DESC; 1065cc19254dSdrh } 1066cc19254dSdrh} {4 four 1 one sort} 1067cc19254dSdrhdo_test where-12.9 { 1068cc19254dSdrh cksort { 1069cc19254dSdrh SELECT * FROM t6 ORDER BY a DESC; 1070cc19254dSdrh } 1071cc19254dSdrh} {4 four 1 one nosort} 1072cc19254dSdrhdo_test where-12.10 { 1073cc19254dSdrh cksort { 1074cc19254dSdrh SELECT * FROM t6 ORDER BY a DESC, b DESC; 1075cc19254dSdrh } 1076cc19254dSdrh} {4 four 1 one nosort} 1077cc19254dSdrhdo_test where-12.11 { 1078cc19254dSdrh cksort { 1079cc19254dSdrh SELECT * FROM t6 ORDER BY a DESC, b ASC; 1080cc19254dSdrh } 1081cc19254dSdrh} {4 four 1 one nosort} 1082cc19254dSdrhdo_test where-12.12 { 1083cc19254dSdrh cksort { 1084cc19254dSdrh SELECT * FROM t6 ORDER BY a ASC, b DESC; 1085cc19254dSdrh } 1086cc19254dSdrh} {1 one 4 four nosort} 1087cc19254dSdrhdo_test where-13.1 { 1088cc19254dSdrh execsql { 1089cc19254dSdrh CREATE TABLE t7(a INTEGER PRIMARY KEY, b TEXT); 1090cc19254dSdrh INSERT INTO t7 VALUES(1,'one'); 1091cc19254dSdrh INSERT INTO t7 VALUES(4,'four'); 1092cc19254dSdrh CREATE INDEX t7i1 ON t7(b); 1093cc19254dSdrh } 1094cc19254dSdrh cksort { 1095cc19254dSdrh SELECT * FROM t7 ORDER BY b; 1096cc19254dSdrh } 1097cc19254dSdrh} {4 four 1 one nosort} 1098cc19254dSdrhdo_test where-13.2 { 1099cc19254dSdrh cksort { 1100cc19254dSdrh SELECT * FROM t7 ORDER BY b, a; 1101cc19254dSdrh } 1102cc19254dSdrh} {4 four 1 one nosort} 1103cc19254dSdrhdo_test where-13.3 { 1104cc19254dSdrh cksort { 1105cc19254dSdrh SELECT * FROM t7 ORDER BY a; 1106cc19254dSdrh } 1107cc19254dSdrh} {1 one 4 four nosort} 1108cc19254dSdrhdo_test where-13.4 { 1109cc19254dSdrh cksort { 1110cc19254dSdrh SELECT * FROM t7 ORDER BY a, b; 1111cc19254dSdrh } 1112cc19254dSdrh} {1 one 4 four nosort} 1113cc19254dSdrhdo_test where-13.5 { 1114cc19254dSdrh cksort { 1115cc19254dSdrh SELECT * FROM t7 ORDER BY b DESC; 1116cc19254dSdrh } 1117cc19254dSdrh} {1 one 4 four nosort} 1118cc19254dSdrhdo_test where-13.6 { 1119cc19254dSdrh cksort { 1120cc19254dSdrh SELECT * FROM t7 ORDER BY b DESC, a DESC; 1121cc19254dSdrh } 1122cc19254dSdrh} {1 one 4 four nosort} 1123cc19254dSdrhdo_test where-13.7 { 1124cc19254dSdrh cksort { 1125cc19254dSdrh SELECT * FROM t7 ORDER BY b DESC, a ASC; 1126cc19254dSdrh } 1127cc19254dSdrh} {1 one 4 four sort} 1128cc19254dSdrhdo_test where-13.8 { 1129cc19254dSdrh cksort { 1130cc19254dSdrh SELECT * FROM t7 ORDER BY b ASC, a DESC; 1131cc19254dSdrh } 1132cc19254dSdrh} {4 four 1 one sort} 1133cc19254dSdrhdo_test where-13.9 { 1134cc19254dSdrh cksort { 1135cc19254dSdrh SELECT * FROM t7 ORDER BY a DESC; 1136cc19254dSdrh } 1137cc19254dSdrh} {4 four 1 one nosort} 1138cc19254dSdrhdo_test where-13.10 { 1139cc19254dSdrh cksort { 1140cc19254dSdrh SELECT * FROM t7 ORDER BY a DESC, b DESC; 1141cc19254dSdrh } 1142cc19254dSdrh} {4 four 1 one nosort} 1143cc19254dSdrhdo_test where-13.11 { 1144cc19254dSdrh cksort { 1145cc19254dSdrh SELECT * FROM t7 ORDER BY a DESC, b ASC; 1146cc19254dSdrh } 1147cc19254dSdrh} {4 four 1 one nosort} 1148cc19254dSdrhdo_test where-13.12 { 1149cc19254dSdrh cksort { 1150cc19254dSdrh SELECT * FROM t7 ORDER BY a ASC, b DESC; 1151cc19254dSdrh } 1152cc19254dSdrh} {1 one 4 four nosort} 1153cc19254dSdrh 11547b4fc6a8Sdrh# Ticket #2211. 11557b4fc6a8Sdrh# 11567b4fc6a8Sdrh# When optimizing out ORDER BY clauses, make sure that trailing terms 11577b4fc6a8Sdrh# of the ORDER BY clause do not reference other tables in a join. 11587b4fc6a8Sdrh# 1159e825831eSdanif {[permutation] != "no_optimization"} { 11607b4fc6a8Sdrhdo_test where-14.1 { 11617b4fc6a8Sdrh execsql { 1162165674d8Sdrh CREATE TABLE t8(a INTEGER PRIMARY KEY, b TEXT UNIQUE, c CHAR(100)); 1163165674d8Sdrh INSERT INTO t8(a,b) VALUES(1,'one'); 1164165674d8Sdrh INSERT INTO t8(a,b) VALUES(4,'four'); 11657b4fc6a8Sdrh } 11667b4fc6a8Sdrh cksort { 11677b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.a, y.b 11687b4fc6a8Sdrh } 11696f0e400cSdrh} {1/4 1/1 4/4 4/1 nosort} 11707b4fc6a8Sdrhdo_test where-14.2 { 11717b4fc6a8Sdrh cksort { 11727b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.a, y.b DESC 11737b4fc6a8Sdrh } 11746f0e400cSdrh} {1/1 1/4 4/1 4/4 nosort} 11757b4fc6a8Sdrhdo_test where-14.3 { 11767b4fc6a8Sdrh cksort { 11777b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.a, x.b 11787b4fc6a8Sdrh } 11793f4d1d1bSdrh} {1/4 1/1 4/4 4/1 nosort} 11807b4fc6a8Sdrhdo_test where-14.4 { 11817b4fc6a8Sdrh cksort { 11827b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.a, x.b DESC 11837b4fc6a8Sdrh } 11843f4d1d1bSdrh} {1/4 1/1 4/4 4/1 nosort} 11857b4fc6a8Sdrhdo_test where-14.5 { 118699f8fb66Sdan # This test case changed from "nosort" to "sort". See ticket 2a5629202f. 11877b4fc6a8Sdrh cksort { 11887b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a||x.b 11897b4fc6a8Sdrh } 11905343b2d4Sdrh} {/4/[14] 4/[14] 1/[14] 1/[14] sort/} 11917b4fc6a8Sdrhdo_test where-14.6 { 119299f8fb66Sdan # This test case changed from "nosort" to "sort". See ticket 2a5629202f. 11937b4fc6a8Sdrh cksort { 11947b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a||x.b DESC 11957b4fc6a8Sdrh } 11965343b2d4Sdrh} {/4/[14] 4/[14] 1/[14] 1/[14] sort/} 11977b4fc6a8Sdrhdo_test where-14.7 { 11987b4fc6a8Sdrh cksort { 11997b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, y.a||y.b 12007b4fc6a8Sdrh } 12017b4fc6a8Sdrh} {4/1 4/4 1/1 1/4 sort} 120232ffdb73Sdrhdo_test where-14.7.1 { 120332ffdb73Sdrh cksort { 120432ffdb73Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a, y.a||y.b 120532ffdb73Sdrh } 120632ffdb73Sdrh} {4/1 4/4 1/1 1/4 sort} 120732ffdb73Sdrhdo_test where-14.7.2 { 120832ffdb73Sdrh cksort { 120932ffdb73Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a, x.a||x.b 121032ffdb73Sdrh } 12113f4d1d1bSdrh} {4/4 4/1 1/4 1/1 nosort} 12127b4fc6a8Sdrhdo_test where-14.8 { 12137b4fc6a8Sdrh cksort { 12147b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, y.a||y.b DESC 12157b4fc6a8Sdrh } 12167b4fc6a8Sdrh} {4/4 4/1 1/4 1/1 sort} 12177b4fc6a8Sdrhdo_test where-14.9 { 12187b4fc6a8Sdrh cksort { 12197b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a||y.b 12207b4fc6a8Sdrh } 12217b4fc6a8Sdrh} {4/4 4/1 1/4 1/1 sort} 12227b4fc6a8Sdrhdo_test where-14.10 { 12237b4fc6a8Sdrh cksort { 12247b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, x.a||y.b DESC 12257b4fc6a8Sdrh } 12267b4fc6a8Sdrh} {4/1 4/4 1/1 1/4 sort} 12277b4fc6a8Sdrhdo_test where-14.11 { 12287b4fc6a8Sdrh cksort { 12297b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, y.a||x.b 12307b4fc6a8Sdrh } 12317b4fc6a8Sdrh} {4/1 4/4 1/1 1/4 sort} 12327b4fc6a8Sdrhdo_test where-14.12 { 12337b4fc6a8Sdrh cksort { 12347b4fc6a8Sdrh SELECT x.a || '/' || y.a FROM t8 x, t8 y ORDER BY x.b, y.a||x.b DESC 12357b4fc6a8Sdrh } 12367b4fc6a8Sdrh} {4/4 4/1 1/4 1/1 sort} 1237e825831eSdan} ;# {permutation != "no_optimization"} 1238cc19254dSdrh 1239c9cf6e3dSdanielk1977# Ticket #2445. 1240c9cf6e3dSdanielk1977# 1241c9cf6e3dSdanielk1977# There was a crash that could occur when a where clause contains an 1242c9cf6e3dSdanielk1977# alias for an expression in the result set, and that expression retrieves 1243c9cf6e3dSdanielk1977# a column of the second or subsequent table in a join. 1244c9cf6e3dSdanielk1977# 1245c9cf6e3dSdanielk1977do_test where-15.1 { 1246c9cf6e3dSdanielk1977 execsql { 1247c9cf6e3dSdanielk1977 CREATE TEMP TABLE t1 (a, b, c, d, e); 1248c9cf6e3dSdanielk1977 CREATE TEMP TABLE t2 (f); 1249c9cf6e3dSdanielk1977 SELECT t1.e AS alias FROM t2, t1 WHERE alias = 1 ; 1250c9cf6e3dSdanielk1977 } 1251c9cf6e3dSdanielk1977} {} 12529eb2028fSdrh 12532d605499Sdanielk1977# Ticket #3408. 12542d605499Sdanielk1977# 12552d605499Sdanielk1977# The branch of code in where.c that generated rowid lookups was 12562d605499Sdanielk1977# incorrectly deallocating a constant register, meaning that if the 12572d605499Sdanielk1977# vdbe code ran more than once, the second time around the constant 12582d605499Sdanielk1977# value may have been clobbered by some other value. 12592d605499Sdanielk1977# 12602d605499Sdanielk1977do_test where-16.1 { 12612d605499Sdanielk1977 execsql { 12622d605499Sdanielk1977 CREATE TABLE a1(id INTEGER PRIMARY KEY, v); 12632d605499Sdanielk1977 CREATE TABLE a2(id INTEGER PRIMARY KEY, v); 12642d605499Sdanielk1977 INSERT INTO a1 VALUES(1, 'one'); 12652d605499Sdanielk1977 INSERT INTO a1 VALUES(2, 'two'); 12662d605499Sdanielk1977 INSERT INTO a2 VALUES(1, 'one'); 12672d605499Sdanielk1977 INSERT INTO a2 VALUES(2, 'two'); 12682d605499Sdanielk1977 } 12692d605499Sdanielk1977} {} 12702d605499Sdanielk1977do_test where-16.2 { 12712d605499Sdanielk1977 execsql { 12722d605499Sdanielk1977 SELECT * FROM a2 CROSS JOIN a1 WHERE a1.id=1 AND a1.v='one'; 12732d605499Sdanielk1977 } 12742d605499Sdanielk1977} {1 one 1 one 2 two 1 one} 12752d605499Sdanielk1977 12762d605499Sdanielk1977# The actual problem reported in #3408. 12772d605499Sdanielk1977do_test where-16.3 { 12782d605499Sdanielk1977 execsql { 12792d605499Sdanielk1977 CREATE TEMP TABLE foo(idx INTEGER); 12802d605499Sdanielk1977 INSERT INTO foo VALUES(1); 12812d605499Sdanielk1977 INSERT INTO foo VALUES(1); 12822d605499Sdanielk1977 INSERT INTO foo VALUES(1); 12832d605499Sdanielk1977 INSERT INTO foo VALUES(2); 12842d605499Sdanielk1977 INSERT INTO foo VALUES(2); 12852d605499Sdanielk1977 CREATE TEMP TABLE bar(stuff INTEGER); 12862d605499Sdanielk1977 INSERT INTO bar VALUES(100); 12872d605499Sdanielk1977 INSERT INTO bar VALUES(200); 12882d605499Sdanielk1977 INSERT INTO bar VALUES(300); 12892d605499Sdanielk1977 } 12902d605499Sdanielk1977} {} 12912d605499Sdanielk1977do_test where-16.4 { 12922d605499Sdanielk1977 execsql { 12932d605499Sdanielk1977 SELECT bar.RowID id FROM foo, bar WHERE foo.idx = bar.RowID AND id = 2; 12942d605499Sdanielk1977 } 12952d605499Sdanielk1977} {2 2} 12962d605499Sdanielk1977 1297ed717fe3Sdrhintegrity_check {where-99.0} 129808192d5fSdrh 12993072c5eaSdanielk1977#--------------------------------------------------------------------- 13003072c5eaSdanielk1977# These tests test that a bug surrounding the use of ForceInt has been 13013072c5eaSdanielk1977# fixed in where.c. 13023072c5eaSdanielk1977# 13033072c5eaSdanielk1977do_test where-17.1 { 13043072c5eaSdanielk1977 execsql { 13053072c5eaSdanielk1977 CREATE TABLE tbooking ( 13063072c5eaSdanielk1977 id INTEGER PRIMARY KEY, 13073072c5eaSdanielk1977 eventtype INTEGER NOT NULL 13083072c5eaSdanielk1977 ); 13093072c5eaSdanielk1977 INSERT INTO tbooking VALUES(42, 3); 13103072c5eaSdanielk1977 INSERT INTO tbooking VALUES(43, 4); 13113072c5eaSdanielk1977 } 13123072c5eaSdanielk1977} {} 13133072c5eaSdanielk1977do_test where-17.2 { 13143072c5eaSdanielk1977 execsql { 13153072c5eaSdanielk1977 SELECT a.id 13163072c5eaSdanielk1977 FROM tbooking AS a 13173072c5eaSdanielk1977 WHERE a.eventtype=3; 13183072c5eaSdanielk1977 } 13193072c5eaSdanielk1977} {42} 13203072c5eaSdanielk1977do_test where-17.3 { 13213072c5eaSdanielk1977 execsql { 13223072c5eaSdanielk1977 SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id) 13233072c5eaSdanielk1977 FROM tbooking AS a 13243072c5eaSdanielk1977 WHERE a.eventtype=3; 13253072c5eaSdanielk1977 } 13263072c5eaSdanielk1977} {42 43} 13273072c5eaSdanielk1977do_test where-17.4 { 13283072c5eaSdanielk1977 execsql { 13293072c5eaSdanielk1977 SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id) 13303072c5eaSdanielk1977 FROM (SELECT 1.5 AS id) AS a 13313072c5eaSdanielk1977 } 13323072c5eaSdanielk1977} {1.5 42} 13333072c5eaSdanielk1977do_test where-17.5 { 13343072c5eaSdanielk1977 execsql { 13353072c5eaSdanielk1977 CREATE TABLE tother(a, b); 13363072c5eaSdanielk1977 INSERT INTO tother VALUES(1, 3.7); 13373072c5eaSdanielk1977 SELECT id, a FROM tbooking, tother WHERE id>a; 13383072c5eaSdanielk1977 } 13393072c5eaSdanielk1977} {42 1 43 1} 13403072c5eaSdanielk1977 134167a5ec7bSdrh# Ticket [be84e357c035d068135f20bcfe82761bbf95006b] 2013-09-03 134267a5ec7bSdrh# Segfault during query involving LEFT JOIN column in the ORDER BY clause. 134367a5ec7bSdrh# 134467a5ec7bSdrhdo_execsql_test where-18.1 { 134567a5ec7bSdrh CREATE TABLE t181(a); 134667a5ec7bSdrh CREATE TABLE t182(b,c); 134767a5ec7bSdrh INSERT INTO t181 VALUES(1); 134867a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c IS NULL; 134967a5ec7bSdrh} {1} 13506134b2dfSdrhdo_execsql_test where-18.1rj { 13516134b2dfSdrh SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY c IS NULL; 13526134b2dfSdrh} {1} 135367a5ec7bSdrhdo_execsql_test where-18.2 { 135467a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +c; 135567a5ec7bSdrh} {1} 135667a5ec7bSdrhdo_execsql_test where-18.3 { 135767a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c; 135867a5ec7bSdrh} {1} 13596134b2dfSdrhdo_execsql_test where-18.3rj { 13606134b2dfSdrh SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY c; 13616134b2dfSdrh} {1} 136267a5ec7bSdrhdo_execsql_test where-18.4 { 136367a5ec7bSdrh INSERT INTO t181 VALUES(1),(1),(1),(1); 136467a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +c; 136567a5ec7bSdrh} {1} 13666134b2dfSdrhdo_execsql_test where-18.4rj { 13676134b2dfSdrh SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY +c; 13686134b2dfSdrh} {1} 136967a5ec7bSdrhdo_execsql_test where-18.5 { 137067a5ec7bSdrh INSERT INTO t181 VALUES(2); 137167a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c IS NULL, +a; 137267a5ec7bSdrh} {1 2} 137367a5ec7bSdrhdo_execsql_test where-18.6 { 137467a5ec7bSdrh INSERT INTO t181 VALUES(2); 137567a5ec7bSdrh SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +a, +c IS NULL; 137667a5ec7bSdrh} {1 2} 137767a5ec7bSdrh 1378cb23e5d5Sdrh# Make sure the OR optimization works on a JOIN 1379cb23e5d5Sdrh# 1380cb23e5d5Sdrhdo_execsql_test where-19.0 { 1381cb23e5d5Sdrh CREATE TABLE t191(a INT UNIQUE NOT NULL, b INT UNIQUE NOT NULL,c,d); 1382cb23e5d5Sdrh CREATE INDEX t191a ON t1(a); 1383cb23e5d5Sdrh CREATE INDEX t191b ON t1(b); 1384cb23e5d5Sdrh CREATE TABLE t192(x INTEGER PRIMARY KEY,y INT, z INT); 1385cb23e5d5Sdrh 1386cb23e5d5Sdrh EXPLAIN QUERY PLAN 1387cb23e5d5Sdrh SELECT t191.rowid FROM t192, t191 WHERE (a=y OR b=y) AND x=?1; 1388cb23e5d5Sdrh} {/.* sqlite_autoindex_t191_1 .* sqlite_autoindex_t191_2 .*/} 1389cb23e5d5Sdrh 1390c447595dSdrh# 2018-04-24 ticket [https://www.sqlite.org/src/info/4ba5abf65c5b0f9a] 1391c447595dSdrh# Index on expressions leads to an incorrect answer for a LEFT JOIN 1392c447595dSdrh# 1393c447595dSdrhdo_execsql_test where-20.0 { 1394c447595dSdrh CREATE TABLE t201(x); 1395c447595dSdrh CREATE TABLE t202(y, z); 1396c447595dSdrh INSERT INTO t201 VALUES('key'); 1397c447595dSdrh INSERT INTO t202 VALUES('key', -1); 1398c447595dSdrh CREATE INDEX t202i ON t202(y, ifnull(z, 0)); 1399c447595dSdrh SELECT count(*) FROM t201 LEFT JOIN t202 ON (x=y) WHERE ifnull(z, 0) >=0; 1400c447595dSdrh} {0} 1401c447595dSdrh 1402ccb9eb78Sdando_execsql_test where-21.0 { 1403ccb9eb78Sdan CREATE TABLE t12(a, b, c); 1404ccb9eb78Sdan CREATE TABLE t13(x); 1405ccb9eb78Sdan CREATE INDEX t12ab ON t12(b, a); 1406ccb9eb78Sdan CREATE INDEX t12ac ON t12(c, a); 1407ccb9eb78Sdan 1408ccb9eb78Sdan INSERT INTO t12 VALUES(4, 0, 1); 1409ccb9eb78Sdan INSERT INTO t12 VALUES(4, 1, 0); 1410ccb9eb78Sdan INSERT INTO t12 VALUES(5, 0, 1); 1411ccb9eb78Sdan INSERT INTO t12 VALUES(5, 1, 0); 1412ccb9eb78Sdan 1413ccb9eb78Sdan INSERT INTO t13 VALUES(1), (2), (3), (4); 1414ccb9eb78Sdan} 1415ccb9eb78Sdando_execsql_test where-21.1 { 1416ccb9eb78Sdan SELECT * FROM t12 WHERE 1417ccb9eb78Sdan a = (SELECT * FROM (SELECT count(*) FROM t13 LIMIT 5) ORDER BY 1 LIMIT 10) 1418ccb9eb78Sdan AND (b=1 OR c=1); 1419ccb9eb78Sdan} { 1420ccb9eb78Sdan 4 1 0 1421ccb9eb78Sdan 4 0 1 1422ccb9eb78Sdan} 142367a5ec7bSdrh 1424383bb4faSdrh# 2018-11-05: ticket [https://www.sqlite.org/src/tktview/65eb38f6e46de8c75e188a] 1425383bb4faSdrh# Incorrect result in LEFT JOIN when STAT4 is enabled. 1426383bb4faSdrh# 1427383bb4faSdrhsqlite3 db :memory: 1428383bb4faSdrhdo_execsql_test where-22.1 { 1429383bb4faSdrh CREATE TABLE t1(a INT); 1430383bb4faSdrh CREATE INDEX t1a ON t1(a); 1431383bb4faSdrh INSERT INTO t1(a) VALUES(NULL),(NULL),(42),(NULL),(NULL); 1432383bb4faSdrh CREATE TABLE t2(dummy INT); 1433383bb4faSdrh SELECT count(*) FROM t1 LEFT JOIN t2 ON a IS NOT NULL; 1434383bb4faSdrh} {5} 1435383bb4faSdrh 1436bc0a55cfSdrh# 20190-02-22: A bug introduced by checkin 1437bc0a55cfSdrh# https://www.sqlite.org/src/info/fa792714ae62fa98. 1438bc0a55cfSdrh# 1439bc0a55cfSdrhdo_execsql_test where-23.0 { 1440bc0a55cfSdrh DROP TABLE IF EXISTS t1; 1441bc0a55cfSdrh DROP TABLE IF EXISTS t2; 1442bc0a55cfSdrh CREATE TABLE t1(a INTEGER PRIMARY KEY); 1443bc0a55cfSdrh INSERT INTO t1(a) VALUES(1),(2),(3); 1444bc0a55cfSdrh CREATE TABLE t2(x INTEGER PRIMARY KEY, y INT); 1445bc0a55cfSdrh INSERT INTO t2(y) VALUES(2),(3); 1446bc0a55cfSdrh SELECT * FROM t1, t2 WHERE a=y AND y=3; 1447bc0a55cfSdrh} {3 2 3} 1448383bb4faSdrh 14496cf3009fSdan#------------------------------------------------------------------------- 14506cf3009fSdan# 14516cf3009fSdanreset_db 14526cf3009fSdando_execsql_test where-24.0 { 14536cf3009fSdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b); 14546cf3009fSdan INSERT INTO t1 VALUES(1, 'one'); 14556cf3009fSdan INSERT INTO t1 VALUES(2, 'two'); 14566cf3009fSdan INSERT INTO t1 VALUES(3, 'three'); 14576cf3009fSdan INSERT INTO t1 VALUES(4, 'four'); 14586cf3009fSdan} 14596cf3009fSdan 14606cf3009fSdanforeach {tn sql res} { 14616cf3009fSdan 1 "SELECT b FROM t1" {one two three four} 14626cf3009fSdan 2 "SELECT b FROM t1 WHERE a<4" {one two three} 14636cf3009fSdan 3 "SELECT b FROM t1 WHERE a>1" {two three four} 14646cf3009fSdan 4 "SELECT b FROM t1 WHERE a>1 AND a<4" {two three} 14656cf3009fSdan 14666cf3009fSdan 5 "SELECT b FROM t1 WHERE a>? AND a<4" {} 14676cf3009fSdan 6 "SELECT b FROM t1 WHERE a>1 AND a<?" {} 14686cf3009fSdan 7 "SELECT b FROM t1 WHERE a>? AND a<?" {} 14696cf3009fSdan 14706cf3009fSdan 7 "SELECT b FROM t1 WHERE a>=? AND a<=4" {} 14716cf3009fSdan 8 "SELECT b FROM t1 WHERE a>=1 AND a<=?" {} 14726cf3009fSdan 9 "SELECT b FROM t1 WHERE a>=? AND a<=?" {} 14736cf3009fSdan} { 14746cf3009fSdan set rev [list] 14756cf3009fSdan foreach r $res { set rev [concat $r $rev] } 14766cf3009fSdan 14776cf3009fSdan do_execsql_test where-24.$tn.1 "$sql" $res 14786cf3009fSdan do_execsql_test where-24.$tn.2 "$sql ORDER BY rowid" $res 14796cf3009fSdan do_execsql_test where-24.$tn.3 "$sql ORDER BY rowid DESC" $rev 14806cf3009fSdan 14816cf3009fSdan do_execsql_test where-24-$tn.4 " 14826cf3009fSdan BEGIN; 14836cf3009fSdan DELETE FROM t1; 14846cf3009fSdan $sql; 14856cf3009fSdan $sql ORDER BY rowid; 14866cf3009fSdan $sql ORDER BY rowid DESC; 14876cf3009fSdan ROLLBACK; 14886cf3009fSdan " 14896cf3009fSdan} 14906cf3009fSdan 14916cf3009fSdan#------------------------------------------------------------------------- 14926cf3009fSdan# 14936cf3009fSdanreset_db 14946cf3009fSdando_execsql_test where-25.0 { 14956cf3009fSdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); 14966cf3009fSdan CREATE UNIQUE INDEX i1 ON t1(c); 14976cf3009fSdan INSERT INTO t1 VALUES(1, 'one', 'i'); 14986cf3009fSdan INSERT INTO t1 VALUES(2, 'two', 'ii'); 14996cf3009fSdan 15006cf3009fSdan CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); 15016cf3009fSdan CREATE UNIQUE INDEX i2 ON t2(c); 15026cf3009fSdan INSERT INTO t2 VALUES(1, 'one', 'i'); 15036cf3009fSdan INSERT INTO t2 VALUES(2, 'two', 'ii'); 15046cf3009fSdan INSERT INTO t2 VALUES(3, 'three', 'iii'); 15056cf3009fSdan 15066cf3009fSdan PRAGMA writable_schema = 1; 1507346a70caSdrh UPDATE sqlite_schema SET rootpage = ( 1508346a70caSdrh SELECT rootpage FROM sqlite_schema WHERE name = 'i2' 15096cf3009fSdan ) WHERE name = 'i1'; 15106cf3009fSdan} 15116cf3009fSdandb close 15126cf3009fSdansqlite3 db test.db 15136cf3009fSdando_catchsql_test where-25.1 { 15146cf3009fSdan DELETE FROM t1 WHERE c='iii' 15156cf3009fSdan} {1 {database disk image is malformed}} 15166cf3009fSdando_catchsql_test where-25.2 { 15176cf3009fSdan INSERT INTO t1 VALUES(4, 'four', 'iii') 15186cf3009fSdan ON CONFLICT(c) DO UPDATE SET b=NULL 15196cf3009fSdan} {1 {database disk image is malformed}} 15206cf3009fSdan 15216cf3009fSdanreset_db 15226cf3009fSdando_execsql_test where-25.3 { 15236cf3009fSdan CREATE TABLE t1(a PRIMARY KEY, b, c) WITHOUT ROWID; 15246cf3009fSdan CREATE UNIQUE INDEX i1 ON t1(c); 15256cf3009fSdan INSERT INTO t1 VALUES(1, 'one', 'i'); 15266cf3009fSdan INSERT INTO t1 VALUES(2, 'two', 'ii'); 15276cf3009fSdan 15286cf3009fSdan CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); 15296cf3009fSdan CREATE UNIQUE INDEX i2 ON t2(c); 15306cf3009fSdan INSERT INTO t2 VALUES(1, 'one', 'i'); 15316cf3009fSdan INSERT INTO t2 VALUES(2, 'two', 'ii'); 15326cf3009fSdan INSERT INTO t2 VALUES(3, 'three', 'iii'); 15336cf3009fSdan 15346cf3009fSdan PRAGMA writable_schema = 1; 1535346a70caSdrh UPDATE sqlite_schema SET rootpage = ( 1536346a70caSdrh SELECT rootpage FROM sqlite_schema WHERE name = 'i2' 15376cf3009fSdan ) WHERE name = 'i1'; 15386cf3009fSdan} 15396cf3009fSdandb close 15406cf3009fSdansqlite3 db test.db 15416cf3009fSdando_catchsql_test where-25.4 { 15426cf3009fSdan SELECT * FROM t1 WHERE c='iii' 15436cf3009fSdan} {0 {}} 15446cf3009fSdando_catchsql_test where-25.5 { 15456cf3009fSdan INSERT INTO t1 VALUES(4, 'four', 'iii') 15466cf3009fSdan ON CONFLICT(c) DO UPDATE SET b=NULL 15476cf3009fSdan} {1 {corrupt database}} 15486cf3009fSdan 15493e364802Sdrh# 2019-08-21 Ticket https://www.sqlite.org/src/info/d9f584e936c7a8d0 15503e364802Sdrh# 15513e364802Sdrhdb close 15523e364802Sdrhsqlite3 db :memory: 15533e364802Sdrhdo_execsql_test where-26.1 { 15543e364802Sdrh CREATE TABLE t0(c0 INTEGER PRIMARY KEY, c1 TEXT); 15553e364802Sdrh INSERT INTO t0(c0, c1) VALUES (1, 'a'); 15563e364802Sdrh CREATE TABLE t1(c0 INT PRIMARY KEY, c1 TEXT); 15573e364802Sdrh INSERT INTO t1(c0, c1) VALUES (1, 'a'); 15583e364802Sdrh SELECT * FROM t0 WHERE '-1' BETWEEN 0 AND t0.c0; 15593e364802Sdrh} {1 a} 15603e364802Sdrhdo_execsql_test where-26.2 { 15613e364802Sdrh SELECT * FROM t1 WHERE '-1' BETWEEN 0 AND t1.c0; 15623e364802Sdrh} {1 a} 15633e364802Sdrhdo_execsql_test where-26.3 { 15643e364802Sdrh SELECT * FROM t0 WHERE '-1'>=0 AND '-1'<=t0.c0; 15653e364802Sdrh} {1 a} 15663e364802Sdrhdo_execsql_test where-26.4 { 15673e364802Sdrh SELECT * FROM t1 WHERE '-1'>=0 AND '-1'<=t1.c0; 15683e364802Sdrh} {1 a} 15693e364802Sdrhdo_execsql_test where-26.5 { 15703e364802Sdrh SELECT '-1' BETWEEN 0 AND t0.c0 FROM t0; 15713e364802Sdrh} {1} 15723e364802Sdrhdo_execsql_test where-26.6 { 15733e364802Sdrh SELECT '-1' BETWEEN 0 AND t1.c0 FROM t1; 15743e364802Sdrh} {1} 15753e364802Sdrhdo_execsql_test where-26.7 { 15763e364802Sdrh SELECT '-1'>=0 AND '-1'<=t0.c0 FROM t0; 15773e364802Sdrh} {1} 15783e364802Sdrhdo_execsql_test where-26.8 { 15793e364802Sdrh SELECT '-1'>=0 AND '-1'<=t1.c0 FROM t1; 15803e364802Sdrh} {1} 15813e364802Sdrh 1582de324617Sdrh# 2021-07-19 https://sqlite.org/forum/forumpost/2bdb86a068 1583de324617Sdrh# Lose of precision when doing comparisons between integer and 1584de324617Sdrh# floating point values that are near 9223372036854775807 in the 1585de324617Sdrh# OP_SeekGE opcode (and similar). 1586de324617Sdrh# 1587619a5f55Sdan# Valgrind documentation acknowledges that under valgrind, FP calculations 1588619a5f55Sdan# may not be as accurate as on x86/amd64 hardware. This seems to be causing 1589619a5f55Sdan# these tests to fail. 1590619a5f55Sdan# 1591619a5f55Sdan# https://valgrind.org/docs/manual/manual-core.html#manual-core.limits 1592619a5f55Sdan# 1593619a5f55Sdanif {[permutation]!="valgrind"} { 1594de324617Sdrh reset_db 1595de324617Sdrh do_execsql_test where-27.1 { 1596de324617Sdrh CREATE TABLE t1(a INTEGER PRIMARY KEY); 1597de324617Sdrh INSERT INTO t1(a) VALUES(9223372036854775807); 1598de324617Sdrh SELECT 1 FROM t1 WHERE a>=(9223372036854775807+1); 1599de324617Sdrh } {} 1600de324617Sdrh do_execsql_test where-27.2 { 1601de324617Sdrh SELECT a>=9223372036854775807+1 FROM t1; 1602de324617Sdrh } {0} 1603619a5f55Sdan} 1604de324617Sdrh 1605*cc212e44Sdrh# 2022-05-10 dbsqlfuzz 4c5e3e89bc251d28378be88233f531b84ec66901 1606*cc212e44Sdrh# 1607*cc212e44Sdrhreset_db 1608*cc212e44Sdrhdo_execsql_test where-28.1 { 1609*cc212e44Sdrh CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); 1610*cc212e44Sdrh CREATE INDEX t1b ON t1(b,b,b,b,b,b,b,b,b,b,b,b,b); 1611*cc212e44Sdrh INSERT INTO t1(a,b) VALUES(1,1),(15,2),(19,5); 1612*cc212e44Sdrh UPDATE t1 SET b=999 WHERE a IN (SELECT 15) AND b IN (1,2); 1613*cc212e44Sdrh SELECT * FROM t1; 1614*cc212e44Sdrh} { 1615*cc212e44Sdrh 1 1 1616*cc212e44Sdrh 15 999 1617*cc212e44Sdrh 19 5 1618*cc212e44Sdrh} 1619*cc212e44Sdrh 16206de4f4caSdrhfinish_test 1621