Index: third_party/sqlite/src/test/skipscan1.test |
diff --git a/third_party/sqlite/src/test/skipscan1.test b/third_party/sqlite/src/test/skipscan1.test |
index ac26711603bb1c1b515a2d6e757e40860967186c..6cdeed5439400beded3c7e9f79d32d91a3ca1354 100644 |
--- a/third_party/sqlite/src/test/skipscan1.test |
+++ b/third_party/sqlite/src/test/skipscan1.test |
@@ -43,23 +43,23 @@ do_execsql_test skipscan1-1.2 { |
} {abc 345 7 8 | def 345 9 10 |} |
do_execsql_test skipscan1-1.2eqp { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a; |
} {/* USING INDEX t1abc (ANY(a) AND b=?)*/} |
do_execsql_test skipscan1-1.2sort { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a; |
} {~/*ORDER BY*/} |
do_execsql_test skipscan1-1.3 { |
- SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a DESC; |
+ SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; |
} {def 345 9 10 | abc 345 7 8 |} |
do_execsql_test skipscan1-1.3eqp { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; |
} {/* USING INDEX t1abc (ANY(a) AND b=?)*/} |
do_execsql_test skipscan1-1.3sort { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; |
} {~/*ORDER BY*/} |
do_execsql_test skipscan1-1.4 { |
@@ -150,15 +150,15 @@ do_execsql_test skipscan1-2.1 { |
} {} |
do_execsql_test skipscan1-2.2 { |
- SELECT a,b,c,d,'|' FROM t2 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; |
} {abc 345 7 8 | def 345 9 10 |} |
do_execsql_test skipscan1-2.2eqp { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t2 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; |
} {/* USING INDEX sqlite_autoindex_t2_1 (ANY(a) AND b=?)*/} |
do_execsql_test skipscan1-2.2sort { |
EXPLAIN QUERY PLAN |
- SELECT a,b,c,d,'|' FROM t2 WHERE b=345 ORDER BY a; |
+ SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; |
} {~/*ORDER BY*/} |
@@ -322,4 +322,19 @@ do_execsql_test skipscan1-8.2 { |
ORDER BY +x; |
} {1 AB 2 CD} |
+# Segfault reported on the mailing list by Keith Medcalf on 2016-09-18. |
+# A skip-scan with a "column IN (SELECT ...)" on the second term of the |
+# index. |
+# |
+do_execsql_test skipscan1-9.2 { |
+ CREATE TABLE t9a(a,b,c); |
+ CREATE INDEX t9a_ab ON t9a(a,b); |
+ CREATE TABLE t9b(x,y); |
+ ANALYZE sqlite_master; |
+ INSERT INTO sqlite_stat1 VALUES('t9a','t9a_ab','1000000 250000 1'); |
+ ANALYZE sqlite_master; |
+ EXPLAIN QUERY PLAN |
+ SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); |
+} {/USING INDEX t9a_ab .ANY.a. AND b=./} |
+ |
finish_test |