| Index: third_party/sqlite/src/test/minmax.test
|
| diff --git a/third_party/sqlite/src/test/minmax.test b/third_party/sqlite/src/test/minmax.test
|
| index 599024508cda660cd3bcb1d031e1784aae516e2f..fb9bbb383a74e2427a35fe7ee221ba151626a35d 100644
|
| --- a/third_party/sqlite/src/test/minmax.test
|
| +++ b/third_party/sqlite/src/test/minmax.test
|
| @@ -17,6 +17,7 @@
|
|
|
| set testdir [file dirname $argv0]
|
| source $testdir/tester.tcl
|
| +set ::testprefix minmax
|
|
|
| do_test minmax-1.0 {
|
| execsql {
|
| @@ -299,7 +300,7 @@ ifcapable {compound && subquery} {
|
| SELECT max(rowid) FROM t4 UNION SELECT max(rowid) FROM t5
|
| )
|
| }
|
| - } {1}
|
| + } {{}}
|
| do_test minmax-9.2 {
|
| execsql {
|
| SELECT max(rowid) FROM (
|
| @@ -536,7 +537,96 @@ do_test minmax-12.17 {
|
| }
|
| } {5}
|
|
|
| +#-------------------------------------------------------------------------
|
| +reset_db
|
| +
|
| +proc do_test_13 {op name sql1 sql2 res} {
|
| + set ::sqlite_search_count 0
|
| + uplevel [list do_execsql_test $name.1 $sql1 $res]
|
| + set a $::sqlite_search_count
|
| +
|
| + set ::sqlite_search_count 0
|
| + uplevel [list do_execsql_test $name.2 $sql2 $res]
|
| + set b $::sqlite_search_count
|
| +
|
| + uplevel [list do_test $name.3 [list expr "$a $op $b"] 1]
|
| +}
|
| +
|
| +# Run a test named $name. Check that SQL statements $sql1 and $sql2 both
|
| +# return the same result, but that $sql2 increments the $sqlite_search_count
|
| +# variable more often (indicating that it is visiting more rows to determine
|
| +# the result).
|
| +#
|
| +proc do_test_13_opt {name sql1 sql2 res} {
|
| + uplevel [list do_test_13 < $name $sql1 $sql2 $res]
|
| +}
|
| +
|
| +# Like [do_test_13_noopt], except this time check that the $sqlite_search_count
|
| +# variable is incremented the same number of times by both SQL statements.
|
| +#
|
| +proc do_test_13_noopt {name sql1 sql2 res} {
|
| + uplevel [list do_test_13 == $name $sql1 $sql2 $res]
|
| +}
|
| +
|
| +do_execsql_test 13.1 {
|
| + CREATE TABLE t1(a, b, c);
|
| + INSERT INTO t1 VALUES('a', 1, 1);
|
| + INSERT INTO t1 VALUES('b', 6, 6);
|
| + INSERT INTO t1 VALUES('c', 5, 5);
|
| + INSERT INTO t1 VALUES('a', 4, 4);
|
| + INSERT INTO t1 VALUES('a', 5, 5);
|
| + INSERT INTO t1 VALUES('c', 6, 6);
|
| + INSERT INTO t1 VALUES('b', 4, 4);
|
| + INSERT INTO t1 VALUES('c', 7, 7);
|
| + INSERT INTO t1 VALUES('b', 2, 2);
|
| + INSERT INTO t1 VALUES('b', 3, 3);
|
| + INSERT INTO t1 VALUES('a', 3, 3);
|
| + INSERT INTO t1 VALUES('b', 5, 5);
|
| + INSERT INTO t1 VALUES('c', 4, 4);
|
| + INSERT INTO t1 VALUES('c', 3, 3);
|
| + INSERT INTO t1 VALUES('a', 2, 2);
|
| + SELECT * FROM t1 ORDER BY a, b, c;
|
| +} {a 1 1 a 2 2 a 3 3 a 4 4 a 5 5
|
| + b 2 2 b 3 3 b 4 4 b 5 5 b 6 6
|
| + c 3 3 c 4 4 c 5 5 c 6 6 c 7 7
|
| +}
|
| +do_execsql_test 13.2 { CREATE INDEX i1 ON t1(a, b, c) }
|
| +
|
| +do_test_13_opt 13.3 {
|
| + SELECT min(b) FROM t1 WHERE a='b'
|
| +} {
|
| + SELECT min(c) FROM t1 WHERE a='b'
|
| +} {2}
|
| +
|
| +do_test_13_opt 13.4 {
|
| + SELECT a, min(b) FROM t1 WHERE a='b'
|
| +} {
|
| + SELECT a, min(c) FROM t1 WHERE a='b'
|
| +} {b 2}
|
| +
|
| +do_test_13_opt 13.4 {
|
| + SELECT a||c, max(b)+4 FROM t1 WHERE a='c'
|
| +} {
|
| + SELECT a||c, max(c)+4 FROM t1 WHERE a='c'
|
| +} {c7 11}
|
| +
|
| +do_test_13_noopt 13.5 {
|
| + SELECT a||c, max(b+1) FROM t1 WHERE a='c'
|
| +} {
|
| + SELECT a||c, max(c+1) FROM t1 WHERE a='c'
|
| +} {c7 8}
|
| +
|
| +do_test_13_noopt 13.6 {
|
| + SELECT count(b) FROM t1 WHERE a='c'
|
| +} {
|
| + SELECT count(c) FROM t1 WHERE a='c'
|
| +} {5}
|
|
|
| +do_test_13_noopt 13.7 {
|
| + SELECT min(b), count(b) FROM t1 WHERE a='a';
|
| +} {
|
| + SELECT min(c), count(c) FROM t1 WHERE a='a';
|
| +} {1 5}
|
|
|
|
|
| finish_test
|
|
|