Index: third_party/sqlite/sqlite-src-3170000/test/without_rowid6.test |
diff --git a/third_party/sqlite/sqlite-src-3170000/test/without_rowid6.test b/third_party/sqlite/sqlite-src-3170000/test/without_rowid6.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3f9fe415d87bdd0ec8641abbe1013b2682888b22 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3170000/test/without_rowid6.test |
@@ -0,0 +1,121 @@ |
+# 2014-12-28 |
+# |
+# The author disclaims copyright to this source code. In place of |
+# a legal notice, here is a blessing: |
+# |
+# May you do good and not evil. |
+# May you find forgiveness for yourself and forgive others. |
+# May you share freely, never taking more than you give. |
+# |
+#*********************************************************************** |
+# |
+# Verify that WITHOUT ROWID tables work correctly when the PRIMARY KEY |
+# has redundant columns. |
+# |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+ |
+do_execsql_test without_rowid6-100 { |
+ CREATE TABLE t1(a,b,c,d,e, PRIMARY KEY(a,b,c,a,b,c,d,a,b,c)) WITHOUT ROWID; |
+ CREATE INDEX t1a ON t1(b, b); |
+ WITH RECURSIVE |
+ c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<1000) |
+ INSERT INTO t1(a,b,c,d,e) SELECT i, i+1000, printf('x%dy',i), 0, 0 FROM c; |
+ ANALYZE; |
+} {} |
+do_execsql_test without_rowid6-110 { |
+ SELECT c FROM t1 WHERE a=123; |
+} {x123y} |
+do_execsql_test without_rowid6-120 { |
+ SELECT c FROM t1 WHERE b=1123; |
+} {x123y} |
+do_execsql_test without_rowid6-130 { |
+ SELECT c FROM t1 ORDER BY a DESC LIMIT 5; |
+} {x1000y x999y x998y x997y x996y} |
+do_execsql_test without_rowid6-140 { |
+ SELECT c FROM t1 ORDER BY b LIMIT 5; |
+} {x1y x2y x3y x4y x5y} |
+ |
+# Column t1.b starts out as a unique index, but that index is |
+# subsequently converted into a PRIMARY KEY. |
+# |
+do_execsql_test without_rowid6-200 { |
+ DROP TABLE IF EXISTS t1; |
+ CREATE TABLE t1( |
+ a UNIQUE, |
+ b UNIQUE, |
+ c UNIQUE, |
+ PRIMARY KEY(b) |
+ ) WITHOUT ROWID; |
+ INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {4 1} |
+do_execsql_test without_rowid6-210 { |
+ EXPLAIN QUERY PLAN |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} |
+do_execsql_test without_rowid6-220 { |
+ PRAGMA index_list(t1); |
+} {/sqlite_autoindex_t1_2 1 pk/} |
+ |
+do_execsql_test without_rowid6-300 { |
+ DROP TABLE IF EXISTS t1; |
+ CREATE TABLE t1( |
+ a UNIQUE, |
+ b PRIMARY KEY, |
+ c UNIQUE, |
+ UNIQUE(b) |
+ ) WITHOUT ROWID; |
+ INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {4 1} |
+do_execsql_test without_rowid6-310 { |
+ EXPLAIN QUERY PLAN |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} |
+do_execsql_test without_rowid6-320 { |
+ PRAGMA index_list(t1); |
+} {/sqlite_autoindex_t1_2 1 pk/} |
+ |
+do_execsql_test without_rowid6-400 { |
+ DROP TABLE IF EXISTS t1; |
+ CREATE TABLE t1( |
+ a UNIQUE, |
+ b UNIQUE PRIMARY KEY, |
+ c UNIQUE |
+ ) WITHOUT ROWID; |
+ INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {4 1} |
+do_execsql_test without_rowid6-410 { |
+ EXPLAIN QUERY PLAN |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} |
+do_execsql_test without_rowid6-420 { |
+ PRAGMA index_list(t1); |
+} {/sqlite_autoindex_t1_2 1 pk/} |
+ |
+do_execsql_test without_rowid6-500 { |
+ DROP TABLE IF EXISTS t1; |
+ CREATE TABLE t1(a,b,c, |
+ UNIQUE(b,c), |
+ PRIMARY KEY(b,c) |
+ ) WITHOUT ROWID; |
+ INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {4 1} |
+do_execsql_test without_rowid6-510 { |
+ EXPLAIN QUERY PLAN |
+ SELECT a FROM t1 WHERE b>3 ORDER BY b; |
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} |
+do_execsql_test without_rowid6-520 { |
+ PRAGMA index_list(t1); |
+} {/sqlite_autoindex_t1_1 1 pk/} |
+ |
+do_catchsql_test without_rowid6-600 { |
+ CREATE TABLE t6(a,b,c,PRIMARY KEY(a,rowid,b))WITHOUT ROWID; |
+} {1 {no such column: rowid}} |
+ |
+ |
+finish_test |