mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-10-30 07:05:46 +03:00 
			
		
		
		
	tables. FossilOrigin-Name: 5771b1d611b3562ea6c040f3f893073c4d0ee58c35b37ae211520d9aee8ed547
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 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)
 | |
|   }
 | |
| 
 | |
|   7 {
 | |
|     CREATE TABLE x1(a PRIMARY KEY COLLATE nocase, b);
 | |
|     CREATE TABLE y1(a REFERENCES x1);
 | |
|   } {
 | |
|     CREATE INDEX 'y1_a' ON 'y1'('a' COLLATE nocase); --> x1(a)
 | |
|   }
 | |
| 
 | |
|   8 {
 | |
|     CREATE TABLE x1(a, b COLLATE nocase, c COLLATE rtrim, PRIMARY KEY(c, b, a));
 | |
|     CREATE TABLE y1(d, e, f, FOREIGN KEY(d, e, f) REFERENCES x1);
 | |
|   } {
 | |
|     CREATE INDEX 'y1_d_e_f' ON 'y1'('d' COLLATE rtrim, 'e' COLLATE nocase, 'f'); --> x1(c,b,a)
 | |
|   }
 | |
| 
 | |
|   9 {
 | |
|     CREATE TABLE p1(a, b UNIQUE);
 | |
|     CREATE TABLE c1(x INTEGER PRIMARY KEY REFERENCES p1(b));
 | |
|   } {
 | |
|   }
 | |
| 
 | |
|   10 {
 | |
|     CREATE TABLE parent (id INTEGER PRIMARY KEY); 
 | |
|     CREATE TABLE child2 (id INT PRIMARY KEY, parentID INT REFERENCES parent) 
 | |
|       WITHOUT ROWID;
 | |
|   } {
 | |
|     CREATE INDEX 'child2_parentID' ON 'child2'('parentID'); --> parent(id)
 | |
|   }
 | |
| 
 | |
| } {
 | |
|   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
 |