16f654a40Sdan# 2017 April 29 26f654a40Sdan# 36f654a40Sdan# The author disclaims copyright to this source code. In place of 46f654a40Sdan# a legal notice, here is a blessing: 56f654a40Sdan# 66f654a40Sdan# May you do good and not evil. 76f654a40Sdan# May you find forgiveness for yourself and forgive others. 86f654a40Sdan# May you share freely, never taking more than you give. 96f654a40Sdan# 106f654a40Sdan#*********************************************************************** 116f654a40Sdan 126f654a40Sdanset testdir [file dirname $argv0] 136f654a40Sdansource $testdir/tester.tcl 146f654a40Sdanset testprefix pushdown 156f654a40Sdan 166f654a40Sdando_execsql_test 1.0 { 176f654a40Sdan CREATE TABLE t1(a, b, c); 186f654a40Sdan INSERT INTO t1 VALUES(1, 'b1', 'c1'); 196f654a40Sdan INSERT INTO t1 VALUES(2, 'b2', 'c2'); 206f654a40Sdan INSERT INTO t1 VALUES(3, 'b3', 'c3'); 216f654a40Sdan INSERT INTO t1 VALUES(4, 'b4', 'c4'); 226f654a40Sdan CREATE INDEX i1 ON t1(a, c); 236f654a40Sdan} 246f654a40Sdan 256f654a40Sdanproc f {val} { 266f654a40Sdan lappend ::L $val 276f654a40Sdan return 0 286f654a40Sdan} 296f654a40Sdandb func f f 306f654a40Sdan 316f654a40Sdando_test 1.1 { 326f654a40Sdan set L [list] 336f654a40Sdan execsql { SELECT * FROM t1 WHERE a=2 AND f(b) AND f(c) } 346f654a40Sdan set L 356f654a40Sdan} {c2} 366f654a40Sdan 376f654a40Sdando_test 1.2 { 386f654a40Sdan set L [list] 396f654a40Sdan execsql { SELECT * FROM t1 WHERE a=3 AND f(c) AND f(b) } 406f654a40Sdan set L 416f654a40Sdan} {c3} 426f654a40Sdan 436f654a40Sdando_execsql_test 1.3 { 446f654a40Sdan DROP INDEX i1; 456f654a40Sdan CREATE INDEX i1 ON t1(a, b); 466f654a40Sdan} 476f654a40Sdando_test 1.4 { 486f654a40Sdan set L [list] 496f654a40Sdan execsql { SELECT * FROM t1 WHERE a=2 AND f(b) AND f(c) } 506f654a40Sdan set L 516f654a40Sdan} {b2} 526f654a40Sdan 536f654a40Sdando_test 1.5 { 546f654a40Sdan set L [list] 556f654a40Sdan execsql { SELECT * FROM t1 WHERE a=3 AND f(c) AND f(b) } 566f654a40Sdan set L 576f654a40Sdan} {b3} 58*d3930b12Sdan 59*d3930b12Sdan#----------------------------------------------- 60*d3930b12Sdan 61*d3930b12Sdando_execsql_test 2.0 { 62*d3930b12Sdan CREATE TABLE u1(a, b, c); 63*d3930b12Sdan CREATE TABLE u2(x, y, z); 64*d3930b12Sdan 65*d3930b12Sdan INSERT INTO u1 VALUES('a1', 'b1', 'c1'); 66*d3930b12Sdan INSERT INTO u2 VALUES('a1', 'b1', 'c1'); 67*d3930b12Sdan} 68*d3930b12Sdan 69*d3930b12Sdando_test 2.1 { 70*d3930b12Sdan set L [list] 71*d3930b12Sdan execsql { 72*d3930b12Sdan SELECT * FROM u1 WHERE f('one')=123 AND 123=( 73*d3930b12Sdan SELECT x FROM u2 WHERE x=a AND f('two') 74*d3930b12Sdan ) 75*d3930b12Sdan } 76*d3930b12Sdan set L 77*d3930b12Sdan} {one} 78*d3930b12Sdan 79*d3930b12Sdando_test 2.2 { 80*d3930b12Sdan set L [list] 81*d3930b12Sdan execsql { 82*d3930b12Sdan SELECT * FROM u1 WHERE 123=( 83*d3930b12Sdan SELECT x FROM u2 WHERE x=a AND f('two') 84*d3930b12Sdan ) AND f('three')=123 85*d3930b12Sdan } 86*d3930b12Sdan set L 87*d3930b12Sdan} {three} 88*d3930b12Sdan 89*d3930b12Sdan 906f654a40Sdan 916f654a40Sdanfinish_test 92