Index: third_party/sqlite/src/test/shell6.test |
diff --git a/third_party/sqlite/src/test/shell6.test b/third_party/sqlite/src/test/shell6.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a70c4b429833fa32c3a7fe069108d2111168fda2 |
--- /dev/null |
+++ b/third_party/sqlite/src/test/shell6.test |
@@ -0,0 +1,101 @@ |
+# 2016 December 15 |
+# |
+# 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. |
+# |
+#*********************************************************************** |
+# |
+# Test the shell tool ".lint fkey-indexes" command. |
+# |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+ifcapable !vtab {finish_test; return} |
+set testprefix shell6 |
+set CLI [test_find_cli] |
+db close |
+forcedelete test.db test.db-journal test.db-wal |
+ |
+foreach {tn schema output} { |
+ 1 { |
+ CREATE TABLE p1(a PRIMARY KEY, b); |
+ CREATE TABLE c1(x, y REFERENCES p1); |
+ } { |
+ CREATE INDEX 'c1_y' ON 'c1'('y'); --> p1(a) |
+ } |
+ |
+ 2 { |
+ CREATE TABLE p1(a PRIMARY KEY, b); |
+ CREATE TABLE c2(x REFERENCES p1, y REFERENCES p1); |
+ } { |
+ CREATE INDEX 'c2_y' ON 'c2'('y'); --> p1(a) |
+ CREATE INDEX 'c2_x' ON 'c2'('x'); --> p1(a) |
+ } |
+ |
+ 3 { |
+ CREATE TABLE 'p 1'(a, b, c, PRIMARY KEY(c, b)); |
+ CREATE TABLE 'c 1'(x, y, z, FOREIGN KEY (z, y) REFERENCES 'p 1'); |
+ } { |
+ CREATE INDEX 'c 1_z_y' ON 'c 1'('z', 'y'); --> p 1(c,b) |
+ } |
+ |
+ 4 { |
+ CREATE TABLE p1(a, 'b b b' PRIMARY KEY); |
+ CREATE TABLE c1('x y z' REFERENCES p1); |
+ CREATE INDEX i1 ON c1('x y z') WHERE "x y z" IS NOT NULL; |
+ } { |
+ } |
+ |
+ 5 { |
+ CREATE TABLE p1(a, 'b b b' PRIMARY KEY); |
+ CREATE TABLE c1('x y z' REFERENCES p1); |
+ CREATE INDEX i1 ON c1('x y z') WHERE "x y z" IS NOT 12; |
+ } { |
+ CREATE INDEX 'c1_x y z' ON 'c1'('x y z'); --> p1(b b b) |
+ } |
+ |
+ 6 { |
+ CREATE TABLE x1(a, b, c, UNIQUE(a, b)); |
+ CREATE TABLE y1(a, b, c, FOREIGN KEY(b, a) REFERENCES x1(a, b)); |
+ CREATE INDEX y1i ON y1(a, c, b); |
+ } { |
+ CREATE INDEX 'y1_b_a' ON 'y1'('b', 'a'); --> x1(a,b) |
+ } |
+ |
+ 6 { |
+ CREATE TABLE x1(a COLLATE nocase, b, UNIQUE(a)); |
+ CREATE TABLE y1(a COLLATE rtrim REFERENCES x1(a)); |
+ } { |
+ CREATE INDEX 'y1_a' ON 'y1'('a' COLLATE nocase); --> x1(a) |
+ } |
+ |
+} { |
+ forcedelete test.db |
+ sqlite3 db test.db |
+ execsql $schema |
+ |
+ set expected "" |
+ foreach line [split $output "\n"] { |
+ set line [string trim $line] |
+ if {$line!=""} { |
+ append expected "$line\n" |
+ } |
+ } |
+ |
+ do_test 1.$tn.1 { |
+ set RES [catchcmd test.db [list .lint fkey-indexes]] |
+ } [list 0 [string trim $expected]] |
+ |
+ do_test 1.$tn.2 { |
+ execsql [lindex $RES 1] |
+ catchcmd test.db [list .lint fkey-indexes] |
+ } {0 {}} |
+ |
+ db close |
+} |
+ |
+finish_test |