| 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
 | 
| 
 |