File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / fts2k.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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.1.1.1 2012/02/21 17:04:16 misho 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>