Annotation of embedaddon/sqlite3/test/fts2k.test, revision 1.1
1.1 ! misho 1: # 2007 March 9
! 2: #
! 3: # The author disclaims copyright to this source code.
! 4: #
! 5: #*************************************************************************
! 6: # This file implements regression tests for SQLite library. These
! 7: # make sure that fts2 insertion buffering is fully transparent when
! 8: # using transactions.
! 9: #
! 10: # $Id: fts2k.test,v 1.2 2007/08/10 23:47:04 shess Exp $
! 11: #
! 12:
! 13: set testdir [file dirname $argv0]
! 14: source $testdir/tester.tcl
! 15:
! 16: # If SQLITE_ENABLE_FTS2 is defined, omit this file.
! 17: ifcapable !fts2 {
! 18: finish_test
! 19: return
! 20: }
! 21:
! 22: db eval {
! 23: CREATE VIRTUAL TABLE t1 USING fts2(content);
! 24: INSERT INTO t1 (rowid, content) VALUES(1, "hello world");
! 25: INSERT INTO t1 (rowid, content) VALUES(2, "hello there");
! 26: INSERT INTO t1 (rowid, content) VALUES(3, "cruel world");
! 27: }
! 28:
! 29: # Test that possibly-buffered inserts went through after commit.
! 30: do_test fts2k-1.1 {
! 31: execsql {
! 32: BEGIN TRANSACTION;
! 33: INSERT INTO t1 (rowid, content) VALUES(4, "false world");
! 34: INSERT INTO t1 (rowid, content) VALUES(5, "false door");
! 35: COMMIT TRANSACTION;
! 36: SELECT rowid FROM t1 WHERE t1 MATCH 'world';
! 37: }
! 38: } {1 3 4}
! 39:
! 40: # Test that buffered inserts are seen by selects in the same
! 41: # transaction.
! 42: do_test fts2k-1.2 {
! 43: execsql {
! 44: BEGIN TRANSACTION;
! 45: INSERT INTO t1 (rowid, content) VALUES(6, "another world");
! 46: INSERT INTO t1 (rowid, content) VALUES(7, "another test");
! 47: SELECT rowid FROM t1 WHERE t1 MATCH 'world';
! 48: COMMIT TRANSACTION;
! 49: }
! 50: } {1 3 4 6}
! 51:
! 52: # Test that buffered inserts are seen within a transaction. This is
! 53: # really the same test as 1.2.
! 54: do_test fts2k-1.3 {
! 55: execsql {
! 56: BEGIN TRANSACTION;
! 57: INSERT INTO t1 (rowid, content) VALUES(8, "second world");
! 58: INSERT INTO t1 (rowid, content) VALUES(9, "second sight");
! 59: SELECT rowid FROM t1 WHERE t1 MATCH 'world';
! 60: ROLLBACK TRANSACTION;
! 61: }
! 62: } {1 3 4 6 8}
! 63:
! 64: # Double-check that the previous result doesn't persist past the
! 65: # rollback!
! 66: do_test fts2k-1.4 {
! 67: execsql {
! 68: SELECT rowid FROM t1 WHERE t1 MATCH 'world';
! 69: }
! 70: } {1 3 4 6}
! 71:
! 72: # Test it all together.
! 73: do_test fts2k-1.5 {
! 74: execsql {
! 75: BEGIN TRANSACTION;
! 76: INSERT INTO t1 (rowid, content) VALUES(10, "second world");
! 77: INSERT INTO t1 (rowid, content) VALUES(11, "second sight");
! 78: ROLLBACK TRANSACTION;
! 79: SELECT rowid FROM t1 WHERE t1 MATCH 'world';
! 80: }
! 81: } {1 3 4 6}
! 82:
! 83: # Test that the obvious case works.
! 84: do_test fts2k-1.6 {
! 85: execsql {
! 86: BEGIN;
! 87: INSERT INTO t1 (rowid, content) VALUES(12, "third world");
! 88: COMMIT;
! 89: SELECT rowid FROM t1 WHERE t1 MATCH 'third';
! 90: }
! 91: } {12}
! 92:
! 93: # This is exactly the same as the previous test, except that older
! 94: # code loses the INSERT due to an SQLITE_SCHEMA error.
! 95: do_test fts2k-1.7 {
! 96: execsql {
! 97: BEGIN;
! 98: INSERT INTO t1 (rowid, content) VALUES(13, "third dimension");
! 99: CREATE TABLE x (c);
! 100: COMMIT;
! 101: SELECT rowid FROM t1 WHERE t1 MATCH 'dimension';
! 102: }
! 103: } {13}
! 104:
! 105: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>