summaryrefslogtreecommitdiff
path: root/test/fts3fault2.test
blob: 0178ed27ccc93829f2a80e62b645830d97f08811 (plain)
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
# 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 {}}
}

finish_test