Index: third_party/sqlite/src/test/whereD.test |
diff --git a/third_party/sqlite/src/test/whereD.test b/third_party/sqlite/src/test/whereD.test |
index 17fdac7017c5d592870d4040a65a2cbe3fe00c15..8ced0ffc723ac9b2bc4816269a46cb9b06df4d1e 100644 |
--- a/third_party/sqlite/src/test/whereD.test |
+++ b/third_party/sqlite/src/test/whereD.test |
@@ -156,7 +156,7 @@ do_searchcount_test 3.4.4 { |
do_searchcount_test 3.5.1 { |
SELECT a, b FROM t3 WHERE (a=1 AND b='one') OR rowid=4 |
-} {1 one 2 two search 3} |
+} {1 one 2 two search 2} |
do_searchcount_test 3.5.2 { |
SELECT a, c FROM t3 WHERE (a=1 AND b='one') OR rowid=4 |
} {1 i 2 ii search 3} |
@@ -271,5 +271,147 @@ do_execsql_test 5.3 { |
c16=1 or c17=1; |
} {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {}} |
+#------------------------------------------------------------------------- |
+do_execsql_test 6.1 { |
+ CREATE TABLE x1(a, b, c, d, e); |
+ CREATE INDEX x1a ON x1(a); |
+ CREATE INDEX x1bc ON x1(b, c); |
+ CREATE INDEX x1cd ON x1(c, d); |
+ |
+ INSERT INTO x1 VALUES(1, 2, 3, 4, 'A'); |
+ INSERT INTO x1 VALUES(5, 6, 7, 8, 'B'); |
+ INSERT INTO x1 VALUES(9, 10, 11, 12, 'C'); |
+ INSERT INTO x1 VALUES(13, 14, 15, 16, 'D'); |
+} |
+ |
+do_searchcount_test 6.2.1 { |
+ SELECT e FROM x1 WHERE b=2 OR c=7; |
+} {A B search 6} |
+do_searchcount_test 6.2.2 { |
+ SELECT c FROM x1 WHERE b=2 OR c=7; |
+} {3 7 search 4} |
+ |
+do_searchcount_test 6.3.1 { |
+ SELECT e FROM x1 WHERE a=1 OR b=10; |
+} {A C search 6} |
+do_searchcount_test 6.3.2 { |
+ SELECT c FROM x1 WHERE a=1 OR b=10; |
+} {3 11 search 5} |
+do_searchcount_test 6.3.3 { |
+ SELECT rowid FROM x1 WHERE a=1 OR b=10; |
+} {1 3 search 4} |
+ |
+do_searchcount_test 6.4.1 { |
+ SELECT a FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
+} {1 9 search 6} |
+do_searchcount_test 6.4.2 { |
+ SELECT b, c FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
+} {2 3 10 11 search 5} |
+do_searchcount_test 6.4.3 { |
+ SELECT rowid, c FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
+} {1 3 3 11 search 4} |
+ |
+do_searchcount_test 6.5.1 { |
+ SELECT a FROM x1 WHERE rowid = 2 OR c=11 |
+} {5 9 search 3} |
+do_searchcount_test 6.5.2 { |
+ SELECT d FROM x1 WHERE rowid = 2 OR c=11 |
+} {8 12 search 2} |
+do_searchcount_test 6.5.3 { |
+ SELECT d FROM x1 WHERE c=11 OR rowid = 2 |
+} {12 8 search 2} |
+do_searchcount_test 6.5.4 { |
+ SELECT a FROM x1 WHERE c=11 OR rowid = 2 |
+} {9 5 search 3} |
+ |
+do_searchcount_test 6.6.1 { |
+ SELECT rowid FROM x1 WHERE a=1 OR b=6 OR c=11 |
+} {1 2 3 search 6} |
+do_searchcount_test 6.6.2 { |
+ SELECT c FROM x1 WHERE a=1 OR b=6 OR c=11 |
+} {3 7 11 search 7} |
+do_searchcount_test 6.6.3 { |
+ SELECT c FROM x1 WHERE c=11 OR a=1 OR b=6 |
+} {11 3 7 search 7} |
+do_searchcount_test 6.6.4 { |
+ SELECT c FROM x1 WHERE b=6 OR c=11 OR a=1 |
+} {7 11 3 search 7} |
+ |
+#------------------------------------------------------------------------- |
+# |
+do_execsql_test 7.0 { |
+ CREATE TABLE y1(a, b); |
+ CREATE TABLE y2(x, y); |
+ CREATE INDEX y2xy ON y2(x, y); |
+ INSERT INTO y1 VALUES(1, 1); |
+ INSERT INTO y2 VALUES(3, 3); |
+} |
+ |
+do_execsql_test 7.1 { |
+ SELECT * FROM y1 LEFT JOIN y2 ON ((x=1 AND y=b) OR (x=2 AND y=b)) |
+} {1 1 {} {}} |
+ |
+do_execsql_test 7.3 { |
+ CREATE TABLE foo (Id INTEGER PRIMARY KEY, fa INTEGER, fb INTEGER); |
+ CREATE TABLE bar (Id INTEGER PRIMARY KEY, ba INTEGER, bb INTEGER); |
+ |
+ INSERT INTO foo VALUES(1, 1, 1); |
+ INSERT INTO foo VALUES(2, 1, 2); |
+ INSERT INTO foo VALUES(3, 1, 3); |
+ INSERT INTO foo VALUES(4, 1, 4); |
+ INSERT INTO foo VALUES(5, 1, 5); |
+ INSERT INTO foo VALUES(6, 1, 6); |
+ INSERT INTO foo VALUES(7, 1, 7); |
+ INSERT INTO foo VALUES(8, 1, 8); |
+ INSERT INTO foo VALUES(9, 1, 9); |
+ |
+ INSERT INTO bar VALUES(NULL, 1, 1); |
+ INSERT INTO bar VALUES(NULL, 2, 2); |
+ INSERT INTO bar VALUES(NULL, 3, 3); |
+ INSERT INTO bar VALUES(NULL, 1, 4); |
+ INSERT INTO bar VALUES(NULL, 2, 5); |
+ INSERT INTO bar VALUES(NULL, 3, 6); |
+ INSERT INTO bar VALUES(NULL, 1, 7); |
+ INSERT INTO bar VALUES(NULL, 2, 8); |
+ INSERT INTO bar VALUES(NULL, 3, 9); |
+} |
+ |
+do_execsql_test 7.4 { |
+ SELECT |
+ bar.Id, bar.ba, bar.bb, foo.fb |
+ FROM foo LEFT JOIN bar |
+ ON (bar.ba = 1 AND bar.bb = foo.fb) |
+ OR (bar.ba = 5 AND bar.bb = foo.fb); |
+} { |
+ 1 1 1 1 |
+ {} {} {} 2 |
+ {} {} {} 3 |
+ 4 1 4 4 |
+ {} {} {} 5 |
+ {} {} {} 6 |
+ 7 1 7 7 |
+ {} {} {} 8 |
+ {} {} {} 9 |
+} |
+ |
+do_execsql_test 7.5 { |
+ CREATE INDEX idx_bar ON bar(ba, bb); |
+ SELECT |
+ bar.Id, bar.ba, bar.bb, foo.fb |
+ FROM foo LEFT JOIN bar |
+ ON (bar.ba = 1 AND bar.bb = foo.fb) |
+ OR (bar.ba = 5 AND bar.bb = foo.fb); |
+} { |
+ 1 1 1 1 |
+ {} {} {} 2 |
+ {} {} {} 3 |
+ 4 1 4 4 |
+ {} {} {} 5 |
+ {} {} {} 6 |
+ 7 1 7 7 |
+ {} {} {} 8 |
+ {} {} {} 9 |
+} |
+ |
finish_test |