106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2007 March 9
 | |
| #
 | |
| # The author disclaims copyright to this source code.
 | |
| #
 | |
| #*************************************************************************
 | |
| # This file implements regression tests for SQLite library.  These
 | |
| # make sure that fts2 insertion buffering is fully transparent when
 | |
| # using transactions.
 | |
| #
 | |
| # $Id: fts2k.test,v 1.2 2007/08/10 23:47:04 shess Exp $
 | |
| #
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| 
 | |
| # If SQLITE_ENABLE_FTS2 is defined, omit this file.
 | |
| ifcapable !fts2 {
 | |
|   finish_test
 | |
|   return
 | |
| }
 | |
| 
 | |
| db eval {
 | |
|   CREATE VIRTUAL TABLE t1 USING fts2(content);
 | |
|   INSERT INTO t1 (rowid, content) VALUES(1, "hello world");
 | |
|   INSERT INTO t1 (rowid, content) VALUES(2, "hello there");
 | |
|   INSERT INTO t1 (rowid, content) VALUES(3, "cruel world");
 | |
| }
 | |
| 
 | |
| # Test that possibly-buffered inserts went through after commit.
 | |
| do_test fts2k-1.1 {
 | |
|   execsql {
 | |
|     BEGIN TRANSACTION;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(4, "false world");
 | |
|     INSERT INTO t1 (rowid, content) VALUES(5, "false door");
 | |
|     COMMIT TRANSACTION;
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'world';
 | |
|   }
 | |
| } {1 3 4}
 | |
| 
 | |
| # Test that buffered inserts are seen by selects in the same
 | |
| # transaction.
 | |
| do_test fts2k-1.2 {
 | |
|   execsql {
 | |
|     BEGIN TRANSACTION;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(6, "another world");
 | |
|     INSERT INTO t1 (rowid, content) VALUES(7, "another test");
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'world';
 | |
|     COMMIT TRANSACTION;
 | |
|   }
 | |
| } {1 3 4 6}
 | |
| 
 | |
| # Test that buffered inserts are seen within a transaction.  This is
 | |
| # really the same test as 1.2.
 | |
| do_test fts2k-1.3 {
 | |
|   execsql {
 | |
|     BEGIN TRANSACTION;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(8, "second world");
 | |
|     INSERT INTO t1 (rowid, content) VALUES(9, "second sight");
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'world';
 | |
|     ROLLBACK TRANSACTION;
 | |
|   }
 | |
| } {1 3 4 6 8}
 | |
| 
 | |
| # Double-check that the previous result doesn't persist past the
 | |
| # rollback!
 | |
| do_test fts2k-1.4 {
 | |
|   execsql {
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'world';
 | |
|   }
 | |
| } {1 3 4 6}
 | |
| 
 | |
| # Test it all together.
 | |
| do_test fts2k-1.5 {
 | |
|   execsql {
 | |
|     BEGIN TRANSACTION;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(10, "second world");
 | |
|     INSERT INTO t1 (rowid, content) VALUES(11, "second sight");
 | |
|     ROLLBACK TRANSACTION;
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'world';
 | |
|   }
 | |
| } {1 3 4 6}
 | |
| 
 | |
| # Test that the obvious case works.
 | |
| do_test fts2k-1.6 {
 | |
|   execsql {
 | |
|     BEGIN;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(12, "third world");
 | |
|     COMMIT;
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'third';
 | |
|   }
 | |
| } {12}
 | |
| 
 | |
| # This is exactly the same as the previous test, except that older
 | |
| # code loses the INSERT due to an SQLITE_SCHEMA error.
 | |
| do_test fts2k-1.7 {
 | |
|   execsql {
 | |
|     BEGIN;
 | |
|     INSERT INTO t1 (rowid, content) VALUES(13, "third dimension");
 | |
|     CREATE TABLE x (c);
 | |
|     COMMIT;
 | |
|     SELECT rowid FROM t1 WHERE t1 MATCH 'dimension';
 | |
|   }
 | |
| } {13}
 | |
| 
 | |
| finish_test
 | 
