Annotation of embedaddon/sqlite3/test/fts2k.test, revision 1.1.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>