Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(619)

Side by Side Diff: third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5config.test

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # 2015 Jan 13
2 #
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
5 #
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
9 #
10 #***********************************************************************
11 #
12 # This file focuses on the code in fts5_config.c, which is largely concerned
13 # with parsing the various configuration and CREATE TABLE options.
14 #
15
16 source [file join [file dirname [info script]] fts5_common.tcl]
17 set testprefix fts5config
18
19 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
20 ifcapable !fts5 {
21 finish_test
22 return
23 }
24
25 #-------------------------------------------------------------------------
26 # Try different types of quote characters.
27 #
28 do_execsql_test 1.0 {
29 CREATE VIRTUAL TABLE t1 USING fts5('a', "b", [c], `d`);
30 PRAGMA table_info = t1;
31 } {
32 0 a {} 0 {} 0
33 1 b {} 0 {} 0
34 2 c {} 0 {} 0
35 3 d {} 0 {} 0
36 }
37
38 #-------------------------------------------------------------------------
39 # Syntax errors in the prefix= option.
40 #
41 foreach {tn opt} {
42 1 {prefix=x}
43 2 {prefix='x'}
44 3 {prefix='$'}
45 4 {prefix='1,2,'}
46 5 {prefix=',1'}
47 } {
48 set res [list 1 {malformed prefix=... directive}]
49 do_catchsql_test 2.$tn "CREATE VIRTUAL TABLE f1 USING fts5(x, $opt)" $res
50 }
51
52 #-------------------------------------------------------------------------
53 # Syntax errors in the 'rank' option.
54 #
55 foreach {tn val} {
56 1 "f1(xyz)"
57 2 "f1(zyx)"
58 3 "f1(nzz)"
59 4 "f1(x'!!')"
60 5 "f1(x':;')"
61 6 "f1(x'[]')"
62 7 "f1(x'{}')"
63 8 "f1('abc)"
64 } {
65 do_catchsql_test 3.$tn {
66 INSERT INTO t1(t1, rank) VALUES('rank', $val);
67 } {1 {SQL logic error or missing database}}
68 }
69
70 #-------------------------------------------------------------------------
71 # The parsing of SQL literals specified as part of 'rank' options.
72 #
73 do_execsql_test 4.0 {
74 CREATE VIRTUAL TABLE zzz USING fts5(one);
75 INSERT INTO zzz VALUES('a b c');
76 }
77 proc first {cmd A} { return $A }
78 sqlite3_fts5_create_function db first first
79
80 foreach {tn arg} {
81 1 "123"
82 2 "'01234567890ABCDEF'"
83 3 "x'0123'"
84 4 "x'ABCD'"
85 5 "x'0123456789ABCDEF'"
86 6 "x'0123456789abcdef'"
87 7 "22.5"
88 8 "-91.5"
89 9 "-.5"
90 10 "''''"
91 11 "+.5"
92 } {
93 set func [string map {' ''} "first($arg)"]
94 do_execsql_test 4.1.$tn "
95 INSERT INTO zzz(zzz, rank) VALUES('rank', '$func');
96 SELECT rank IS $arg FROM zzz WHERE zzz MATCH 'a + b + c'
97 " 1
98 }
99
100 do_execsql_test 4.2 {
101 INSERT INTO zzz(zzz, rank) VALUES('rank', 'f1()');
102 } {}
103
104 #-------------------------------------------------------------------------
105 # Misquoting in tokenize= and other options.
106 #
107 do_catchsql_test 5.1 {
108 CREATE VIRTUAL TABLE xx USING fts5(x, tokenize="porter 'ascii");
109 } {1 {parse error in tokenize directive}}
110
111 breakpoint
112 do_catchsql_test 5.2 {
113 CREATE VIRTUAL TABLE xx USING fts5(x, [y[]);
114 } {0 {}}
115
116 do_catchsql_test 5.3 {
117 CREATE VIRTUAL TABLE yy USING fts5(x, [y]]);
118 } {1 {unrecognized token: "]"}}
119
120 #-------------------------------------------------------------------------
121 # Errors in prefix= directives.
122 #
123 do_catchsql_test 6.2 {
124 CREATE VIRTUAL TABLE abc USING fts5(a, prefix='1, 2, 1001');
125 } {1 {prefix length out of range (max 999)}}
126 do_catchsql_test 6.3 {
127 CREATE VIRTUAL TAbLE abc USING fts5(a, prefix='1, 2, 0000');
128 } {1 {prefix length out of range (max 999)}}
129 do_catchsql_test 6.4 {
130 CREATE VIRTUAL TABLE abc USING fts5(a, prefix='1 , 1000000');
131 } {1 {prefix length out of range (max 999)}}
132
133 #-------------------------------------------------------------------------
134 # Duplicate tokenize= and other options.
135 #
136 do_catchsql_test 7.1 {
137 CREATE VIRTUAL TABLE abc USING fts5(a, tokenize=porter, tokenize=ascii);
138 } {1 {multiple tokenize=... directives}}
139 do_catchsql_test 7.2 {
140 CREATE VIRTUAL TABLE abc USING fts5(a, content=porter, content=ascii);
141 } {1 {multiple content=... directives}}
142 do_catchsql_test 7.3 {
143 CREATE VIRTUAL TABLE abc USING fts5(a, content_rowid=porter, content_rowid=a);
144 } {1 {multiple content_rowid=... directives}}
145
146 #-------------------------------------------------------------------------
147 # Unrecognized option.
148 #
149 do_catchsql_test 8.0 {
150 CREATE VIRTUAL TABLE abc USING fts5(a, nosuchoption=123);
151 } {1 {unrecognized option: "nosuchoption"}}
152 do_catchsql_test 8.1 {
153 CREATE VIRTUAL TABLE abc USING fts5(a, "nosuchoption"=123);
154 } {1 {parse error in ""nosuchoption"=123"}}
155
156 #-------------------------------------------------------------------------
157 # Errors in:
158 #
159 # 9.1.* 'pgsz' options.
160 # 9.2.* 'automerge' options.
161 # 9.3.* 'crisismerge' options.
162 #
163 do_execsql_test 9.0 {
164 CREATE VIRTUAL TABLE abc USING fts5(a, b);
165 } {}
166 do_catchsql_test 9.1.1 {
167 INSERT INTO abc(abc, rank) VALUES('pgsz', -5);
168 } {1 {SQL logic error or missing database}}
169 do_catchsql_test 9.1.2 {
170 INSERT INTO abc(abc, rank) VALUES('pgsz', 50000000);
171 } {1 {SQL logic error or missing database}}
172 do_catchsql_test 9.1.3 {
173 INSERT INTO abc(abc, rank) VALUES('pgsz', 66.67);
174 } {1 {SQL logic error or missing database}}
175
176 do_catchsql_test 9.2.1 {
177 INSERT INTO abc(abc, rank) VALUES('automerge', -5);
178 } {1 {SQL logic error or missing database}}
179 do_catchsql_test 9.2.2 {
180 INSERT INTO abc(abc, rank) VALUES('automerge', 50000000);
181 } {1 {SQL logic error or missing database}}
182 do_catchsql_test 9.2.3 {
183 INSERT INTO abc(abc, rank) VALUES('automerge', 66.67);
184 } {1 {SQL logic error or missing database}}
185 do_execsql_test 9.2.4 {
186 INSERT INTO abc(abc, rank) VALUES('automerge', 1);
187 } {}
188
189 do_catchsql_test 9.3.1 {
190 INSERT INTO abc(abc, rank) VALUES('crisismerge', -5);
191 } {1 {SQL logic error or missing database}}
192 do_catchsql_test 9.3.2 {
193 INSERT INTO abc(abc, rank) VALUES('crisismerge', 66.67);
194 } {1 {SQL logic error or missing database}}
195 do_execsql_test 9.3.3 {
196 INSERT INTO abc(abc, rank) VALUES('crisismerge', 1);
197 } {}
198 do_execsql_test 9.3.4 {
199 INSERT INTO abc(abc, rank) VALUES('crisismerge', 50000000);
200 } {}
201
202 do_catchsql_test 9.4.1 {
203 INSERT INTO abc(abc, rank) VALUES('nosuchoption', 1);
204 } {1 {SQL logic error or missing database}}
205
206 #-------------------------------------------------------------------------
207 # Too many prefix indexes. Maximum allowed is 31.
208 #
209 foreach {tn spec} {
210 1 {prefix="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 2 6 27 28 29 30 31 32"}
211 2 {prefix="1 2 3 4", prefix="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"}
212 } {
213 set sql "CREATE VIRTUAL TABLE xyz USING fts5(x, $spec)"
214 do_catchsql_test 10.$tn $sql {1 {too many prefix indexes (max 31)}}
215 }
216
217 finish_test
218
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698