xref: /sqlite-3.40.0/test/fts3fault.test (revision af4c214e)
1e25ac099Sdan# 2010 June 15
2e25ac099Sdan#
3e25ac099Sdan# The author disclaims copyright to this source code.  In place of
4e25ac099Sdan# a legal notice, here is a blessing:
5e25ac099Sdan#
6e25ac099Sdan#    May you do good and not evil.
7e25ac099Sdan#    May you find forgiveness for yourself and forgive others.
8e25ac099Sdan#    May you share freely, never taking more than you give.
9e25ac099Sdan#
10e25ac099Sdan#***********************************************************************
11e25ac099Sdan#
12e25ac099Sdan
13e25ac099Sdanset testdir [file dirname $argv0]
14e25ac099Sdansource $testdir/tester.tcl
15e25ac099Sdan
16e25ac099Sdanset ::testprefix fts3fault
17e25ac099Sdan
18e25ac099Sdan# Test error handling in the sqlite3Fts3Init() function. This is the
19e25ac099Sdan# function that registers the FTS3 module and various support functions
20e25ac099Sdan# with SQLite.
21e25ac099Sdan#
22e25ac099Sdando_faultsim_test 1 -body {
23e25ac099Sdan  sqlite3 db test.db
24e25ac099Sdan  expr 0
25e25ac099Sdan} -test {
26e25ac099Sdan  catch { db close }
27e25ac099Sdan}
28e25ac099Sdan
29e25ac099Sdan# Test error handling in an "ALTER TABLE ... RENAME TO" statement on an
30e25ac099Sdan# FTS3 table. Specifically, test renaming the table within a transaction
31e25ac099Sdan# after it has been written to.
32e25ac099Sdan#
33e25ac099Sdanfaultsim_delete_and_reopen
34e25ac099Sdando_execsql_test 2.0 {
35e25ac099Sdan  CREATE VIRTUAL TABLE t1 USING fts3;
36e25ac099Sdan  INSERT INTO t1 VALUES('test renaming the table');
37e25ac099Sdan  INSERT INTO t1 VALUES(' after it has been written');
38e25ac099Sdan}
39e25ac099Sdando_faultsim_test 2 -prep {
40e25ac099Sdan  sqlite3 db test.db
41e25ac099Sdan  execsql {
42e25ac099Sdan    BEGIN;
43e25ac099Sdan      INSERT INTO t1 VALUES('registers the FTS3 module');
44e25ac099Sdan      INSERT INTO t1 VALUES('various support functions');
45e25ac099Sdan  }
46e25ac099Sdan} -body {
47e25ac099Sdan  execsql { ALTER TABLE t1 RENAME TO t2 }
48e25ac099Sdan} -test {
49e25ac099Sdan  faultsim_test_result {0 {}}
50e25ac099Sdan}
51e25ac099Sdan
52e25ac099Sdan# Test error handling in the special case where a single prefix query
53e25ac099Sdan# matches terms that reside on a large range of leaf nodes.
54e25ac099Sdan#
55e25ac099Sdando_test fts3fault-3.0 {
56e25ac099Sdan  sqlite3 db test.db
57e25ac099Sdan  execsql { CREATE VIRTUAL TABLE t3 USING fts4; }
58e25ac099Sdan  execsql { INSERT INTO t3(t3) VALUES('nodesize=50') }
59e25ac099Sdan  execsql { BEGIN }
60e25ac099Sdan  for {set i 0} {$i < 1000} {incr i} {
61e25ac099Sdan    execsql { INSERT INTO t3 VALUES('aaa' || $i) }
62e25ac099Sdan  }
63e25ac099Sdan  execsql { COMMIT }
64e25ac099Sdan} {}
65e25ac099Sdan
66e25ac099Sdando_faultsim_test 3 -faults oom-transient -prep {
67e25ac099Sdan  sqlite3 db test.db
68e25ac099Sdan  execsql { SELECT * FROM t3 WHERE t3 MATCH 'x' }
69e25ac099Sdan} -body {
70e25ac099Sdan  execsql { SELECT count(rowid) FROM t3 WHERE t3 MATCH 'aa*' }
71e25ac099Sdan} -test {
72e25ac099Sdan  faultsim_test_result {0 1000}
73e25ac099Sdan}
74e25ac099Sdan
75e25ac099Sdando_test fts3fault-4.0 {
76e25ac099Sdan  faultsim_delete_and_reopen
77e25ac099Sdan  execsql {
78e25ac099Sdan    CREATE VIRTUAL TABLE t4 USING fts4;
79e25ac099Sdan    INSERT INTO t4 VALUES('The British Government called on');
80e25ac099Sdan    INSERT INTO t4 VALUES('as pesetas then became much');
81e25ac099Sdan  }
82e25ac099Sdan} {}
83e25ac099Sdanfaultsim_save_and_close
84e25ac099Sdando_faultsim_test 4 -prep {
85e25ac099Sdan  faultsim_restore_and_reopen
86e25ac099Sdan  execsql { SELECT content FROM t4 }
87e25ac099Sdan} -body {
88e25ac099Sdan  execsql { SELECT optimize(t4) FROM t4 LIMIT 1 }
89e25ac099Sdan} -test {
90e25ac099Sdan  faultsim_test_result {0 {{Index optimized}}}
91e25ac099Sdan}
92e25ac099Sdan
93e25ac099Sdando_test fts3fault-5.0 {
94e25ac099Sdan  faultsim_delete_and_reopen
95e25ac099Sdan  execsql {
96e25ac099Sdan    CREATE VIRTUAL TABLE t5 USING fts4;
97e25ac099Sdan    INSERT INTO t5 VALUES('The British Government called on');
98e25ac099Sdan    INSERT INTO t5 VALUES('as pesetas then became much');
99e25ac099Sdan  }
100e25ac099Sdan} {}
101e25ac099Sdanfaultsim_save_and_close
102e25ac099Sdando_faultsim_test 5 -prep {
103e25ac099Sdan  faultsim_restore_and_reopen
104e25ac099Sdan  execsql {
105e25ac099Sdan    BEGIN;
106e25ac099Sdan      INSERT INTO t5 VALUES('influential in shaping his future outlook');
107e25ac099Sdan      INSERT INTO t5 VALUES('might be acceptable to the British electorate');
108e25ac099Sdan  }
109e25ac099Sdan} -body {
110e25ac099Sdan  execsql { SELECT rowid FROM t5 WHERE t5 MATCH 'british' }
111e25ac099Sdan} -test {
112e25ac099Sdan  faultsim_test_result {0 {1 4}}
113e25ac099Sdan}
114e25ac099Sdan
115e25ac099Sdando_test fts3fault-6.0 {
116e25ac099Sdan  faultsim_delete_and_reopen
117e25ac099Sdan  execsql { CREATE VIRTUAL TABLE t6 USING fts4 }
118e25ac099Sdan} {}
119e25ac099Sdanfaultsim_save_and_close
120e25ac099Sdando_faultsim_test 6 -prep {
121e25ac099Sdan  faultsim_restore_and_reopen
122e25ac099Sdan  execsql { SELECT rowid FROM t6 }
123e25ac099Sdan} -body {
124e25ac099Sdan  execsql { DROP TABLE t6 }
125e25ac099Sdan} -test {
126e25ac099Sdan  faultsim_test_result {0 {}}
127e25ac099Sdan}
128e25ac099Sdan
129*af4c214eSdan# Test various malloc failures while processing FTS4 parameters.
130*af4c214eSdan#
131*af4c214eSdando_faultsim_test 7.1 -prep {
132*af4c214eSdan  faultsim_delete_and_reopen
133*af4c214eSdan} -body {
134*af4c214eSdan  execsql { CREATE VIRTUAL TABLE t1 USING fts4(a, b, matchinfo=fts3) }
135*af4c214eSdan} -test {
136*af4c214eSdan  faultsim_test_result {0 {}}
137*af4c214eSdan}
138*af4c214eSdando_faultsim_test 7.2 -prep {
139*af4c214eSdan  faultsim_delete_and_reopen
140*af4c214eSdan} -body {
141*af4c214eSdan  execsql { CREATE VIRTUAL TABLE t1 USING fts4(a, b, matchinfo=fs3) }
142*af4c214eSdan} -test {
143*af4c214eSdan  faultsim_test_result {1 {unrecognized matchinfo: fs3}} \
144*af4c214eSdan                       {1 {vtable constructor failed: t1}}
145*af4c214eSdan}
146*af4c214eSdando_faultsim_test 7.3 -prep {
147*af4c214eSdan  faultsim_delete_and_reopen
148*af4c214eSdan} -body {
149*af4c214eSdan  execsql { CREATE VIRTUAL TABLE t1 USING fts4(a, b, matchnfo=fts3) }
150*af4c214eSdan} -test {
151*af4c214eSdan  faultsim_test_result {1 {unrecognized parameter: matchnfo=fts3}} \
152*af4c214eSdan                       {1 {vtable constructor failed: t1}}
153*af4c214eSdan}
154*af4c214eSdan
155e25ac099Sdanfinish_test
156