1699b3d4fSdrh# 2009 February 23 2699b3d4fSdrh# 3699b3d4fSdrh# The author disclaims copyright to this source code. In place of 4699b3d4fSdrh# a legal notice, here is a blessing: 5699b3d4fSdrh# 6699b3d4fSdrh# May you do good and not evil. 7699b3d4fSdrh# May you find forgiveness for yourself and forgive others. 8699b3d4fSdrh# May you share freely, never taking more than you give. 9699b3d4fSdrh# 10699b3d4fSdrh#*********************************************************************** 11699b3d4fSdrh# This file implements regression tests for SQLite library. The 12699b3d4fSdrh# focus of this file is testing the reverse_select_order pragma. 13699b3d4fSdrh# 145901b571Sdrh# $Id: whereA.test,v 1.3 2009/06/10 19:33:29 drh Exp $ 15699b3d4fSdrh 16699b3d4fSdrhset testdir [file dirname $argv0] 17699b3d4fSdrhsource $testdir/tester.tcl 18699b3d4fSdrh 19699b3d4fSdrhdo_test whereA-1.1 { 20699b3d4fSdrh db eval { 21699b3d4fSdrh CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c); 22699b3d4fSdrh INSERT INTO t1 VALUES(1,2,3); 23699b3d4fSdrh INSERT INTO t1 values(2,'hello','world'); 24699b3d4fSdrh INSERT INTO t1 VALUES(3,4.53,NULL); 25699b3d4fSdrh SELECT * FROM t1 26699b3d4fSdrh } 27699b3d4fSdrh} {1 2 3 2 hello world 3 4.53 {}} 28699b3d4fSdrhdo_test whereA-1.2 { 29699b3d4fSdrh db eval { 30699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 31699b3d4fSdrh SELECT * FROM t1; 32699b3d4fSdrh } 33699b3d4fSdrh} {3 4.53 {} 2 hello world 1 2 3} 34699b3d4fSdrh 35699b3d4fSdrhdo_test whereA-1.3 { 366a9c64b3Sdrh db close 376a9c64b3Sdrh sqlite3 db test.db 386a9c64b3Sdrh db eval { 396a9c64b3Sdrh PRAGMA reverse_unordered_selects=1; 406a9c64b3Sdrh SELECT * FROM t1; 416a9c64b3Sdrh } 426a9c64b3Sdrh} {3 4.53 {} 2 hello world 1 2 3} 436a9c64b3Sdrhdo_test whereA-1.4 { 446a9c64b3Sdrh db close 456a9c64b3Sdrh sqlite3 db test.db 46699b3d4fSdrh db eval { 47699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 48699b3d4fSdrh SELECT * FROM t1 ORDER BY rowid; 49699b3d4fSdrh } 50699b3d4fSdrh} {1 2 3 2 hello world 3 4.53 {}} 516a9c64b3Sdrhdo_test whereA-1.5 { 526a9c64b3Sdrh db eval { 536a9c64b3Sdrh VACUUM; 546a9c64b3Sdrh SELECT * FROM t1 ORDER BY rowid; 556a9c64b3Sdrh } 566a9c64b3Sdrh} {1 2 3 2 hello world 3 4.53 {}} 576a9c64b3Sdrhdo_test whereA-1.6 { 586a9c64b3Sdrh db eval { 596a9c64b3Sdrh PRAGMA reverse_unordered_selects; 606a9c64b3Sdrh } 616a9c64b3Sdrh} {1} 626a9c64b3Sdrhdo_test whereA-1.7 { 636a9c64b3Sdrh db close 646a9c64b3Sdrh sqlite3 db test.db 656a9c64b3Sdrh db eval { 666a9c64b3Sdrh PRAGMA reverse_unordered_selects=1; 676a9c64b3Sdrh VACUUM; 686a9c64b3Sdrh SELECT * FROM t1; 696a9c64b3Sdrh } 706a9c64b3Sdrh} {3 4.53 {} 2 hello world 1 2 3} 71d0aa2f3aSdrhdo_execsql_test whereA-1.8 { 72d0aa2f3aSdrh SELECT * FROM t1 WHERE b=2 AND a IS NULL; 73d0aa2f3aSdrh} {} 74d0aa2f3aSdrhdo_execsql_test whereA-1.9 { 75d0aa2f3aSdrh SELECT * FROM t1 WHERE b=2 AND a IS NOT NULL; 76d0aa2f3aSdrh} {1 2 3} 77699b3d4fSdrh 78699b3d4fSdrhdo_test whereA-2.1 { 79699b3d4fSdrh db eval { 80699b3d4fSdrh PRAGMA reverse_unordered_selects=0; 81699b3d4fSdrh SELECT * FROM t1 WHERE a>0; 82699b3d4fSdrh } 83699b3d4fSdrh} {1 2 3 2 hello world 3 4.53 {}} 84699b3d4fSdrhdo_test whereA-2.2 { 85699b3d4fSdrh db eval { 86699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 87699b3d4fSdrh SELECT * FROM t1 WHERE a>0; 88699b3d4fSdrh } 89699b3d4fSdrh} {3 4.53 {} 2 hello world 1 2 3} 90699b3d4fSdrh 91699b3d4fSdrhdo_test whereA-2.3 { 92699b3d4fSdrh db eval { 93699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 94699b3d4fSdrh SELECT * FROM t1 WHERE a>0 ORDER BY rowid; 95699b3d4fSdrh } 96699b3d4fSdrh} {1 2 3 2 hello world 3 4.53 {}} 97699b3d4fSdrh 98699b3d4fSdrhdo_test whereA-3.1 { 99699b3d4fSdrh db eval { 100699b3d4fSdrh PRAGMA reverse_unordered_selects=0; 101699b3d4fSdrh SELECT * FROM t1 WHERE b>0; 102699b3d4fSdrh } 103699b3d4fSdrh} {1 2 3 3 4.53 {} 2 hello world} 104699b3d4fSdrhdo_test whereA-3.2 { 105699b3d4fSdrh db eval { 106699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 107699b3d4fSdrh SELECT * FROM t1 WHERE b>0; 108699b3d4fSdrh } 109699b3d4fSdrh} {2 hello world 3 4.53 {} 1 2 3} 110699b3d4fSdrhdo_test whereA-3.3 { 111699b3d4fSdrh db eval { 112699b3d4fSdrh PRAGMA reverse_unordered_selects=1; 113699b3d4fSdrh SELECT * FROM t1 WHERE b>0 ORDER BY b; 114699b3d4fSdrh } 115699b3d4fSdrh} {1 2 3 3 4.53 {} 2 hello world} 116699b3d4fSdrh 11769a442efSdrhdo_test whereA-4.1 { 11869a442efSdrh db eval { 11969a442efSdrh CREATE TABLE t2(x); 12069a442efSdrh INSERT INTO t2 VALUES(1); 12169a442efSdrh INSERT INTO t2 VALUES(2); 12269a442efSdrh SELECT x FROM t2; 12369a442efSdrh } 12469a442efSdrh} {2 1} 1255901b571Sdrh# Do an SQL statement. Append the search count to the end of the result. 1265901b571Sdrh# 1275901b571Sdrhproc count sql { 1285901b571Sdrh set ::sqlite_sort_count 0 1295901b571Sdrh return [concat [execsql $sql] $::sqlite_sort_count] 1305901b571Sdrh} 1315901b571Sdrhdo_test whereA-4.2 { ;# Ticket #3904 1325901b571Sdrh db eval { 1335901b571Sdrh CREATE INDEX t2x ON t2(x); 1345901b571Sdrh } 1355901b571Sdrh count { 1365901b571Sdrh SELECT x FROM t2; 1375901b571Sdrh } 1385901b571Sdrh} {2 1 0} 1395901b571Sdrhdo_test whereA-4.3 { 1405901b571Sdrh count { 1415901b571Sdrh SELECT x FROM t2 ORDER BY x; 1425901b571Sdrh } 1435901b571Sdrh} {1 2 0} 1445901b571Sdrhdo_test whereA-4.4 { 1455901b571Sdrh count { 1465901b571Sdrh SELECT x FROM t2 ORDER BY x DESC; 1475901b571Sdrh } 1485901b571Sdrh} {2 1 0} 1495901b571Sdrhdo_test whereA-4.5 { 1505901b571Sdrh db eval {DROP INDEX t2x;} 1515901b571Sdrh count { 1525901b571Sdrh SELECT x FROM t2 ORDER BY x; 1535901b571Sdrh } 1545901b571Sdrh} {1 2 1} 1555901b571Sdrhdo_test whereA-4.6 { 1565901b571Sdrh count { 1575901b571Sdrh SELECT x FROM t2 ORDER BY x DESC; 1585901b571Sdrh } 1595901b571Sdrh} {2 1 1} 16069a442efSdrh 16186b40dfdSdrh# Ticket https://sqlite.org/src/tktview/cb91bf4290c211 2017-08-01 16286b40dfdSdrh# Assertion fault following PRAGMA reverse_unordered_selects=ON. 16386b40dfdSdrh# 16486b40dfdSdrhdo_execsql_test whereA-5.1 { 16586b40dfdSdrh PRAGMA reverse_unordered_selects=on; 16686b40dfdSdrh DROP TABLE IF EXISTS t1; 16786b40dfdSdrh CREATE TABLE t1(a,b); 16886b40dfdSdrh INSERT INTO t1 VALUES(1,2); 16986b40dfdSdrh CREATE INDEX t1b ON t1(b); 17086b40dfdSdrh SELECT a FROM t1 WHERE b=-99 OR b>1; 17186b40dfdSdrh} {1} 17286b40dfdSdrh 173*4ad1a1c7Sdrh# 2020-10-02 OSSFuzz find for an issue introduced by a check-in 174*4ad1a1c7Sdrh# on the previous day. 175*4ad1a1c7Sdrh# 176*4ad1a1c7Sdrhreset_db 177*4ad1a1c7Sdrhdo_execsql_test whereA-6.1 { 178*4ad1a1c7Sdrh CREATE TABLE t1(a, b); 179*4ad1a1c7Sdrh CREATE INDEX t1aa ON t1(a,a); 180*4ad1a1c7Sdrh INSERT INTO t1 VALUES(1,2); 181*4ad1a1c7Sdrh ANALYZE; 182*4ad1a1c7Sdrh UPDATE sqlite_stat1 SET stat='27 3 3' WHERE idx='t1aa'; 183*4ad1a1c7Sdrh ANALYZE sqlite_schema; 184*4ad1a1c7Sdrh PRAGMA reverse_unordered_selects (1) ; 185*4ad1a1c7Sdrh SELECT a FROM t1 WHERE a=1 OR a=2; 186*4ad1a1c7Sdrh} {1} 187*4ad1a1c7Sdrh 18869a442efSdrh 189699b3d4fSdrhfinish_test 190