1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
# 2011 February 3
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set ::testprefix fts3fault2
# If SQLITE_ENABLE_FTS3 is not defined, omit this file.
ifcapable !fts3 { finish_test ; return }
do_test 1.0 {
execsql {
CREATE VIRTUAL TABLE t1 USING fts4(x);
INSERT INTO t1 VALUES('a b c');
INSERT INTO t1 VALUES('c d e');
CREATE VIRTUAL TABLE terms USING fts4aux(t1);
}
faultsim_save_and_close
} {}
do_faultsim_test 1.1 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql "CREATE VIRTUAL TABLE terms2 USING fts4aux(t1)"
} -test {
faultsim_test_result {0 {}}
}
do_faultsim_test 1.2 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql "SELECT * FROM terms"
} -test {
faultsim_test_result {0 {a * 1 1 a 0 1 1 b * 1 1 b 0 1 1 c * 2 2 c 0 2 2 d * 1 1 d 0 1 1 e * 1 1 e 0 1 1}}
}
do_faultsim_test 1.3 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql "SELECT * FROM terms WHERE term>'a' AND TERM < 'd'"
} -test {
faultsim_test_result {0 {b * 1 1 b 0 1 1 c * 2 2 c 0 2 2}}
}
do_faultsim_test 1.4 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql "SELECT * FROM terms WHERE term='c'"
} -test {
faultsim_test_result {0 {c * 2 2 c 0 2 2}}
}
do_test 2.0 {
faultsim_delete_and_reopen
execsql {
CREATE VIRTUAL TABLE tx USING fts4(a, b);
INSERT INTO tx VALUES('a b c', 'x y z');
CREATE VIRTUAL TABLE terms2 USING fts4aux(tx);
}
faultsim_save_and_close
} {}
do_faultsim_test 2.1 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql "SELECT * FROM terms2"
} -test {
faultsim_test_result {0 {a * 1 1 a 0 1 1 b * 1 1 b 0 1 1 c * 1 1 c 0 1 1 x * 1 1 x 1 1 1 y * 1 1 y 1 1 1 z * 1 1 z 1 1 1}}
}
do_faultsim_test 3.0 -faults oom* -prep {
faultsim_delete_and_reopen
db eval { CREATE TABLE 'xx yy'(a, b); }
} -body {
execsql {
CREATE VIRTUAL TABLE tt USING fts4(content="xx yy");
}
} -test {
faultsim_test_result {0 {}}
}
do_faultsim_test 3.1 -faults oom* -prep {
faultsim_delete_and_reopen
db func zip zip
db func unzip unzip
} -body {
execsql {
CREATE VIRTUAL TABLE tt USING fts4(compress=zip, uncompress=unzip);
}
} -test {
faultsim_test_result {0 {}}
}
do_test 4.0 {
faultsim_delete_and_reopen
execsql {
CREATE VIRTUAL TABLE ft USING fts4(a, b);
INSERT INTO ft VALUES('U U T C O', 'F N D E S');
INSERT INTO ft VALUES('P H X G B', 'I D M R U');
INSERT INTO ft VALUES('P P X D M', 'Y V N T C');
INSERT INTO ft VALUES('Z L Q O W', 'D F U N Q');
INSERT INTO ft VALUES('A J D U P', 'C H M Q E');
INSERT INTO ft VALUES('P S A O H', 'S Z C W D');
INSERT INTO ft VALUES('T B N L W', 'C A K T I');
INSERT INTO ft VALUES('K E Z L O', 'L L Y C E');
INSERT INTO ft VALUES('C R E S V', 'Q V F W P');
INSERT INTO ft VALUES('S K H G W', 'R W Q F G');
}
faultsim_save_and_close
} {}
do_faultsim_test 4.1 -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql { INSERT INTO ft(ft) VALUES('rebuild') }
} -test {
faultsim_test_result {0 {}}
}
ifcapable fts3_unicode {
do_test 5.0 {
faultsim_delete_and_reopen
execsql {
CREATE VIRTUAL TABLE ft USING fts4(a, tokenize=unicode61);
}
faultsim_save_and_close
} {}
do_faultsim_test 5.1 -faults oom* -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql { INSERT INTO ft VALUES('the quick brown fox'); }
execsql { INSERT INTO ft VALUES(
'theunusuallylongtokenthatjustdragsonandonandonandthendragsonsomemoreeof'
);
}
execsql { SELECT docid FROM ft WHERE ft MATCH 'th*' }
} -test {
faultsim_test_result {0 {1 2}}
}
}
reset_db
do_test 6.0 {
execsql {
CREATE VIRTUAL TABLE t6 USING fts4(x,order=DESC);
INSERT INTO t6(docid, x) VALUES(-1,'a b');
INSERT INTO t6(docid, x) VALUES(1, 'b');
}
faultsim_save_and_close
} {}
do_faultsim_test 6.1 -faults oom* -prep {
faultsim_restore_and_reopen
db eval {SELECT * FROM sqlite_master}
} -body {
execsql { SELECT docid FROM t6 WHERE t6 MATCH '"a* b"' }
} -test {
faultsim_test_result {0 -1}
}
finish_test
|