111 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2014 October 21
 | |
| #
 | |
| # 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.
 | |
| #
 | |
| #***********************************************************************
 | |
| #
 | |
| # This file contains tests for the RBU module.
 | |
| #
 | |
| 
 | |
| 
 | |
| if {![info exists testdir]} {
 | |
|   set testdir [file join [file dirname [info script]] .. .. test]
 | |
| }
 | |
| source $testdir/tester.tcl
 | |
| set ::testprefix rbu7
 | |
| 
 | |
| # Test index:
 | |
| #
 | |
| #   1.*: That affinities are correctly applied to values within the 
 | |
| #        RBU database.
 | |
| #
 | |
| #   2.*: Tests for multi-column primary keys.
 | |
| #
 | |
| 
 | |
| do_test 1.0 {
 | |
|   execsql {
 | |
|     CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT ROWID;
 | |
|     INSERT INTO t1 VALUES(1, 'abc');
 | |
|     INSERT INTO t1 VALUES(2, 'def');
 | |
|   }
 | |
| 
 | |
|   forcedelete rbu.db
 | |
|   sqlite3 rbu rbu.db
 | |
|   rbu eval {
 | |
|     CREATE TABLE data_t1(a, b, rbu_control);
 | |
|     INSERT INTO data_t1 VALUES('1', NULL, 1);
 | |
|   }
 | |
|   rbu close
 | |
| } {}
 | |
| 
 | |
| do_test 1.1 {
 | |
|   sqlite3rbu rbu test.db rbu.db
 | |
|   while { [rbu step]=="SQLITE_OK" } {}
 | |
|   rbu close
 | |
| } {SQLITE_DONE}
 | |
| 
 | |
| sqlite3 db test.db
 | |
| do_execsql_test 1.2 {
 | |
|   SELECT * FROM t1
 | |
| } {2 def}
 | |
| 
 | |
| #-------------------------------------------------------------------------
 | |
| #
 | |
| foreach {tn tbl} {
 | |
|   1 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID }
 | |
|   2 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) }
 | |
| } {
 | |
|   reset_db
 | |
| 
 | |
|   execsql $tbl
 | |
|   do_execsql_test 2.$tn.1 {
 | |
|     CREATE INDEX t1c ON t1(c);
 | |
|     INSERT INTO t1 VALUES(1, 1, 'a');
 | |
|     INSERT INTO t1 VALUES(1, 2, 'b');
 | |
|     INSERT INTO t1 VALUES(2, 1, 'c');
 | |
|     INSERT INTO t1 VALUES(2, 2, 'd');
 | |
|   }
 | |
| 
 | |
|   do_test 2.$tn.2 {
 | |
|     forcedelete rbu.db
 | |
|     sqlite3 rbu rbu.db
 | |
|     execsql {
 | |
|       CREATE TABLE data_t1(a, b, c, rbu_control);
 | |
|       INSERT INTO data_t1 VALUES(3, 1, 'e', 0);
 | |
|       INSERT INTO data_t1 VALUES(3, 2, 'f', 0);
 | |
|       INSERT INTO data_t1 VALUES(1, 2, NULL, 1);
 | |
|       INSERT INTO data_t1 VALUES(2, 1, 'X', '..x');
 | |
|     } rbu
 | |
|     rbu close
 | |
|   } {}
 | |
| 
 | |
|   do_test 2.$tn.3 {
 | |
|     set rc "SQLITE_OK"
 | |
|     while {$rc == "SQLITE_OK"} {
 | |
|       sqlite3rbu rbu test.db rbu.db
 | |
|       rbu step
 | |
|       set rc [rbu close]
 | |
|     } 
 | |
|     set rc
 | |
|   } {SQLITE_DONE}
 | |
| 
 | |
|   do_execsql_test 2.$tn.1 {
 | |
|     SELECT * FROM t1 ORDER BY a, b
 | |
|   } {
 | |
|     1 1 a
 | |
|     2 1 X
 | |
|     2 2 d
 | |
|     3 1 e
 | |
|     3 2 f
 | |
|   }
 | |
| }
 | |
| 
 | |
| finish_test
 | |
| 
 | |
| 
 | 
