• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 fts3 insertion buffering is fully transparent when
8# using transactions.
9#
10# $Id: fts3ak.test,v 1.1 2007/08/20 17:38:42 shess Exp $
11#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15
16# If SQLITE_ENABLE_FTS3 is defined, omit this file.
17ifcapable !fts3 {
18  finish_test
19  return
20}
21
22db eval {
23  CREATE VIRTUAL TABLE t1 USING fts3(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.
30do_test fts3ak-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.
42do_test fts3ak-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.
54do_test fts3ak-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!
66do_test fts3ak-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.
73do_test fts3ak-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.
84do_test fts3ak-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.
95do_test fts3ak-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
105finish_test
106