OLD | NEW |
1 # 2009 Nov 11 | 1 # 2009 Nov 11 |
2 # | 2 # |
3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
5 # | 5 # |
6 # May you do good and not evil. | 6 # May you do good and not evil. |
7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
9 # | 9 # |
10 #*********************************************************************** | 10 #*********************************************************************** |
11 # | 11 # |
12 # The focus of this file is testing the CLI shell tool. | 12 # The focus of this file is testing the CLI shell tool. |
13 # | 13 # |
14 # | 14 # |
15 | 15 |
16 # Test plan: | 16 # Test plan: |
17 # | 17 # |
18 # shell1-1.*: Basic command line option handling. | 18 # shell1-1.*: Basic command line option handling. |
19 # shell1-2.*: Basic "dot" command token parsing. | 19 # shell1-2.*: Basic "dot" command token parsing. |
20 # shell1-3.*: Basic test that "dot" command can be called. | 20 # shell1-3.*: Basic test that "dot" command can be called. |
21 # | 21 # |
22 set testdir [file dirname $argv0] | 22 set testdir [file dirname $argv0] |
23 source $testdir/tester.tcl | 23 source $testdir/tester.tcl |
24 if {$tcl_platform(platform)=="windows"} { | 24 set CLI [test_find_cli] |
25 set CLI "sqlite3.exe" | |
26 } else { | |
27 set CLI "./sqlite3" | |
28 } | |
29 if {![file executable $CLI]} { | |
30 finish_test | |
31 return | |
32 } | |
33 db close | 25 db close |
34 forcedelete test.db test.db-journal test.db-wal | 26 forcedelete test.db test.db-journal test.db-wal |
35 sqlite3 db test.db | 27 sqlite3 db test.db |
36 | 28 |
37 #---------------------------------------------------------------------------- | 29 #---------------------------------------------------------------------------- |
38 # Test cases shell1-1.*: Basic command line option handling. | 30 # Test cases shell1-1.*: Basic command line option handling. |
39 # | 31 # |
40 | 32 |
41 # invalid option | 33 # invalid option |
42 do_test shell1-1.1.1 { | 34 do_test shell1-1.1.1 { |
43 set res [catchcmd "-bad test.db" ""] | 35 set res [catchcmd "-bad test.db" ""] |
44 set rc [lindex $res 0] | 36 set rc [lindex $res 0] |
45 list $rc \ | 37 list $rc \ |
46 [regexp {Error: unknown option: -bad} $res] | 38 [regexp {Error: unknown option: -bad} $res] |
47 } {1 1} | 39 } {1 1} |
48 do_test shell1-1.1.1b { | 40 do_test shell1-1.1.1b { |
49 set res [catchcmd "test.db -bad" ""] | 41 set res [catchcmd "test.db -bad" ""] |
50 set rc [lindex $res 0] | 42 set rc [lindex $res 0] |
51 list $rc \ | 43 list $rc \ |
52 [regexp {Error: unknown option: -bad} $res] | 44 [regexp {Error: unknown option: -bad} $res] |
53 } {1 1} | 45 } {1 1} |
54 # error on extra options | 46 # error on extra options |
55 do_test shell1-1.1.2 { | 47 do_test shell1-1.1.2 { |
56 catchcmd "test.db \"select 3\" \"select 4\"" "" | 48 catchcmd "test.db \"select+3\" \"select+4\"" "" |
57 } {0 {3 | 49 } {0 {3 |
58 4}} | 50 4}} |
59 # error on extra options | 51 # error on extra options |
60 do_test shell1-1.1.3 { | 52 do_test shell1-1.1.3 { |
61 catchcmd "test.db FOO test.db BAD" ".quit" | 53 catchcmd "test.db FOO test.db BAD" ".quit" |
62 } {1 {Error: near "FOO": syntax error}} | 54 } {1 {Error: near "FOO": syntax error}} |
63 | 55 |
64 # -help | 56 # -help |
65 do_test shell1-1.2.1 { | 57 do_test shell1-1.2.1 { |
66 set res [catchcmd "-help test.db" ""] | 58 set res [catchcmd "-help test.db" ""] |
(...skipping 10 matching lines...) Expand all Loading... |
77 } {0 {}} | 69 } {0 {}} |
78 do_test shell1-1.3.2 { | 70 do_test shell1-1.3.2 { |
79 catchcmd "-init FOO test.db .quit BAD" "" | 71 catchcmd "-init FOO test.db .quit BAD" "" |
80 } {0 {}} | 72 } {0 {}} |
81 do_test shell1-1.3.3 { | 73 do_test shell1-1.3.3 { |
82 catchcmd "-init FOO test.db BAD .quit" "" | 74 catchcmd "-init FOO test.db BAD .quit" "" |
83 } {1 {Error: near "BAD": syntax error}} | 75 } {1 {Error: near "BAD": syntax error}} |
84 | 76 |
85 # -echo print commands before execution | 77 # -echo print commands before execution |
86 do_test shell1-1.4.1 { | 78 do_test shell1-1.4.1 { |
87 catchcmd "-echo test.db" "" | 79 catchcmd "-echo test.db" "" |
88 } {0 {}} | 80 } {0 {}} |
89 | 81 |
90 # -[no]header turn headers on or off | 82 # -[no]header turn headers on or off |
91 do_test shell1-1.5.1 { | 83 do_test shell1-1.5.1 { |
92 catchcmd "-header test.db" "" | 84 catchcmd "-header test.db" "" |
93 } {0 {}} | 85 } {0 {}} |
94 do_test shell1-1.5.2 { | 86 do_test shell1-1.5.2 { |
95 catchcmd "-noheader test.db" "" | 87 catchcmd "-noheader test.db" "" |
96 } {0 {}} | 88 } {0 {}} |
97 | 89 |
98 # -bail stop after hitting an error | 90 # -bail stop after hitting an error |
99 do_test shell1-1.6.1 { | 91 do_test shell1-1.6.1 { |
100 catchcmd "-bail test.db" "" | 92 catchcmd "-bail test.db" "" |
101 } {0 {}} | 93 } {0 {}} |
102 | 94 |
103 # -interactive force interactive I/O | 95 # -interactive force interactive I/O |
104 do_test shell1-1.7.1 { | 96 do_test shell1-1.7.1 { |
105 set res [catchcmd "-interactive test.db" ".quit"] | 97 set res [catchcmd "-interactive test.db" ".quit"] |
106 set rc [lindex $res 0] | 98 set rc [lindex $res 0] |
107 list $rc \ | 99 list $rc \ |
108 [regexp {SQLite version} $res] \ | 100 [regexp {SQLite version} $res] \ |
109 [regexp {Enter ".help" for usage hints} $res] | 101 [regexp {Enter ".help" for usage hints} $res] |
110 } {0 1 1} | 102 } {0 1 1} |
111 | 103 |
112 # -batch force batch I/O | 104 # -batch force batch I/O |
113 do_test shell1-1.8.1 { | 105 do_test shell1-1.8.1 { |
114 catchcmd "-batch test.db" "" | 106 catchcmd "-batch test.db" "" |
115 } {0 {}} | 107 } {0 {}} |
116 | 108 |
117 # -column set output mode to 'column' | 109 # -column set output mode to 'column' |
118 do_test shell1-1.9.1 { | 110 do_test shell1-1.9.1 { |
119 catchcmd "-column test.db" "" | 111 catchcmd "-column test.db" "" |
120 } {0 {}} | 112 } {0 {}} |
121 | 113 |
122 # -csv set output mode to 'csv' | 114 # -csv set output mode to 'csv' |
123 do_test shell1-1.10.1 { | 115 do_test shell1-1.10.1 { |
124 catchcmd "-csv test.db" "" | 116 catchcmd "-csv test.db" "" |
125 } {0 {}} | 117 } {0 {}} |
126 | 118 |
127 # -html set output mode to HTML | 119 # -html set output mode to HTML |
128 do_test shell1-1.11.1 { | 120 do_test shell1-1.11.1 { |
129 catchcmd "-html test.db" "" | 121 catchcmd "-html test.db" "" |
130 } {0 {}} | 122 } {0 {}} |
131 | 123 |
132 # -line set output mode to 'line' | 124 # -line set output mode to 'line' |
133 do_test shell1-1.12.1 { | 125 do_test shell1-1.12.1 { |
134 catchcmd "-line test.db" "" | 126 catchcmd "-line test.db" "" |
135 } {0 {}} | 127 } {0 {}} |
136 | 128 |
137 # -list set output mode to 'list' | 129 # -list set output mode to 'list' |
138 do_test shell1-1.13.1 { | 130 do_test shell1-1.13.1 { |
139 catchcmd "-list test.db" "" | 131 catchcmd "-list test.db" "" |
140 } {0 {}} | 132 } {0 {}} |
141 | 133 |
142 # -separator 'x' set output field separator (|) | 134 # -separator 'x' set output field separator (|) |
143 do_test shell1-1.14.1 { | 135 do_test shell1-1.14.1 { |
144 catchcmd "-separator 'x' test.db" "" | 136 catchcmd "-separator 'x' test.db" "" |
145 } {0 {}} | 137 } {0 {}} |
146 do_test shell1-1.14.2 { | 138 do_test shell1-1.14.2 { |
147 catchcmd "-separator x test.db" "" | 139 catchcmd "-separator x test.db" "" |
148 } {0 {}} | 140 } {0 {}} |
149 do_test shell1-1.14.3 { | 141 do_test shell1-1.14.3 { |
150 set res [catchcmd "-separator" ""] | 142 set res [catchcmd "-separator" ""] |
151 set rc [lindex $res 0] | 143 set rc [lindex $res 0] |
152 list $rc \ | 144 list $rc \ |
153 [regexp {Error: missing argument to -separator} $res] | 145 [regexp {Error: missing argument to -separator} $res] |
154 } {1 1} | 146 } {1 1} |
155 | 147 |
156 # -stats print memory stats before each finalize | 148 # -stats print memory stats before each finalize |
157 do_test shell1-1.14b.1 { | 149 do_test shell1-1.14b.1 { |
158 catchcmd "-stats test.db" "" | 150 catchcmd "-stats test.db" "" |
159 } {0 {}} | 151 } {0 {}} |
160 | 152 |
161 # -nullvalue 'text' set text string for NULL values | 153 # -nullvalue 'text' set text string for NULL values |
162 do_test shell1-1.15.1 { | 154 do_test shell1-1.15.1 { |
163 catchcmd "-nullvalue 'x' test.db" "" | 155 catchcmd "-nullvalue 'x' test.db" "" |
164 } {0 {}} | 156 } {0 {}} |
165 do_test shell1-1.15.2 { | 157 do_test shell1-1.15.2 { |
166 catchcmd "-nullvalue x test.db" "" | 158 catchcmd "-nullvalue x test.db" "" |
167 } {0 {}} | 159 } {0 {}} |
168 do_test shell1-1.15.3 { | 160 do_test shell1-1.15.3 { |
169 set res [catchcmd "-nullvalue" ""] | 161 set res [catchcmd "-nullvalue" ""] |
170 set rc [lindex $res 0] | 162 set rc [lindex $res 0] |
171 list $rc \ | 163 list $rc \ |
172 [regexp {Error: missing argument to -nullvalue} $res] | 164 [regexp {Error: missing argument to -nullvalue} $res] |
173 } {1 1} | 165 } {1 1} |
174 | 166 |
175 # -version show SQLite version | 167 # -version show SQLite version |
176 do_test shell1-1.16.1 { | 168 do_test shell1-1.16.1 { |
177 set x [catchcmd "-version test.db" ""] | 169 set x [catchcmd "-version test.db" ""] |
178 } {/3.[0-9.]+ 20\d\d-[01]\d-\d\d \d\d:\d\d:\d\d [0-9a-f]+/} | 170 } {/3.[0-9.]+ 20\d\d-[01]\d-\d\d \d\d:\d\d:\d\d [0-9a-f]+/} |
179 | 171 |
180 #---------------------------------------------------------------------------- | 172 #---------------------------------------------------------------------------- |
181 # Test cases shell1-2.*: Basic "dot" command token parsing. | 173 # Test cases shell1-2.*: Basic "dot" command token parsing. |
182 # | 174 # |
183 | 175 |
184 # check first token handling | 176 # check first token handling |
185 do_test shell1-2.1.1 { | 177 do_test shell1-2.1.1 { |
186 catchcmd "test.db" ".foo" | 178 catchcmd "test.db" ".foo" |
187 } {1 {Error: unknown command or invalid arguments: "foo". Enter ".help" for hel
p}} | 179 } {1 {Error: unknown command or invalid arguments: "foo". Enter ".help" for hel
p}} |
188 do_test shell1-2.1.2 { | 180 do_test shell1-2.1.2 { |
189 catchcmd "test.db" ".\"foo OFF\"" | 181 catchcmd "test.db" ".\"foo OFF\"" |
190 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} | 182 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} |
191 do_test shell1-2.1.3 { | 183 do_test shell1-2.1.3 { |
192 catchcmd "test.db" ".\'foo OFF\'" | 184 catchcmd "test.db" ".\'foo OFF\'" |
193 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} | 185 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} |
194 | 186 |
195 # unbalanced quotes | 187 # unbalanced quotes |
196 do_test shell1-2.2.1 { | 188 do_test shell1-2.2.1 { |
197 catchcmd "test.db" ".\"foo OFF" | 189 catchcmd "test.db" ".\"foo OFF" |
198 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} | 190 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} |
199 do_test shell1-2.2.2 { | 191 do_test shell1-2.2.2 { |
200 catchcmd "test.db" ".\'foo OFF" | 192 catchcmd "test.db" ".\'foo OFF" |
201 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} | 193 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for
help}} |
202 do_test shell1-2.2.3 { | 194 do_test shell1-2.2.3 { |
203 catchcmd "test.db" ".explain \"OFF" | 195 catchcmd "test.db" ".explain \"OFF" |
204 } {0 {}} | 196 } {0 {}} |
205 do_test shell1-2.2.4 { | 197 do_test shell1-2.2.4 { |
206 catchcmd "test.db" ".explain \'OFF" | 198 catchcmd "test.db" ".explain \'OFF" |
207 } {0 {}} | 199 } {0 {}} |
208 do_test shell1-2.2.5 { | 200 do_test shell1-2.2.5 { |
209 catchcmd "test.db" ".mode \"insert FOO" | 201 catchcmd "test.db" ".mode \"insert FOO" |
210 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 202 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
211 do_test shell1-2.2.6 { | 203 do_test shell1-2.2.6 { |
212 catchcmd "test.db" ".mode \'insert FOO" | 204 catchcmd "test.db" ".mode \'insert FOO" |
213 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 205 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
214 | 206 |
215 # check multiple tokens, and quoted tokens | 207 # check multiple tokens, and quoted tokens |
216 do_test shell1-2.3.1 { | 208 do_test shell1-2.3.1 { |
217 catchcmd "test.db" ".explain 1" | 209 catchcmd "test.db" ".explain 1" |
218 } {0 {}} | 210 } {0 {}} |
219 do_test shell1-2.3.2 { | 211 do_test shell1-2.3.2 { |
220 catchcmd "test.db" ".explain on" | 212 catchcmd "test.db" ".explain on" |
221 } {0 {}} | 213 } {0 {}} |
222 do_test shell1-2.3.3 { | 214 do_test shell1-2.3.3 { |
223 catchcmd "test.db" ".explain \"1 2 3\"" | 215 catchcmd "test.db" ".explain \"1 2 3\"" |
224 } {1 {ERROR: Not a boolean value: "1 2 3". Assuming "no".}} | 216 } {1 {ERROR: Not a boolean value: "1 2 3". Assuming "no".}} |
225 do_test shell1-2.3.4 { | 217 do_test shell1-2.3.4 { |
226 catchcmd "test.db" ".explain \"OFF\"" | 218 catchcmd "test.db" ".explain \"OFF\"" |
227 } {0 {}} | 219 } {0 {}} |
228 do_test shell1-2.3.5 { | 220 do_test shell1-2.3.5 { |
229 catchcmd "test.db" ".\'explain\' \'OFF\'" | 221 catchcmd "test.db" ".\'explain\' \'OFF\'" |
230 } {0 {}} | 222 } {0 {}} |
231 do_test shell1-2.3.6 { | 223 do_test shell1-2.3.6 { |
232 catchcmd "test.db" ".explain \'OFF\'" | 224 catchcmd "test.db" ".explain \'OFF\'" |
233 } {0 {}} | 225 } {0 {}} |
234 do_test shell1-2.3.7 { | 226 do_test shell1-2.3.7 { |
235 catchcmd "test.db" ".\'explain\' \'OFF\'" | 227 catchcmd "test.db" ".\'explain\' \'OFF\'" |
236 } {0 {}} | 228 } {0 {}} |
237 | 229 |
238 # check quoted args are unquoted | 230 # check quoted args are unquoted |
239 do_test shell1-2.4.1 { | 231 do_test shell1-2.4.1 { |
240 catchcmd "test.db" ".mode FOO" | 232 catchcmd "test.db" ".mode FOO" |
241 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 233 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
242 do_test shell1-2.4.2 { | 234 do_test shell1-2.4.2 { |
243 catchcmd "test.db" ".mode csv" | 235 catchcmd "test.db" ".mode csv" |
244 } {0 {}} | 236 } {0 {}} |
245 do_test shell1-2.4.2 { | 237 do_test shell1-2.4.2 { |
246 catchcmd "test.db" ".mode \"csv\"" | 238 catchcmd "test.db" ".mode \"csv\"" |
247 } {0 {}} | 239 } {0 {}} |
248 | 240 |
249 | 241 |
250 #---------------------------------------------------------------------------- | 242 #---------------------------------------------------------------------------- |
251 # Test cases shell1-3.*: Basic test that "dot" command can be called. | 243 # Test cases shell1-3.*: Basic test that "dot" command can be called. |
(...skipping 22 matching lines...) Expand all Loading... |
274 catchcmd "test.db" ".bail ON" | 266 catchcmd "test.db" ".bail ON" |
275 } {0 {}} | 267 } {0 {}} |
276 do_test shell1-3.2.3 { | 268 do_test shell1-3.2.3 { |
277 catchcmd "test.db" ".bail OFF" | 269 catchcmd "test.db" ".bail OFF" |
278 } {0 {}} | 270 } {0 {}} |
279 do_test shell1-3.2.4 { | 271 do_test shell1-3.2.4 { |
280 # too many arguments | 272 # too many arguments |
281 catchcmd "test.db" ".bail OFF BAD" | 273 catchcmd "test.db" ".bail OFF BAD" |
282 } {1 {Usage: .bail on|off}} | 274 } {1 {Usage: .bail on|off}} |
283 | 275 |
| 276 ifcapable vtab { |
284 # .databases List names and files of attached databases | 277 # .databases List names and files of attached databases |
285 do_test shell1-3.3.1 { | 278 do_test shell1-3.3.1 { |
286 catchcmd "-csv test.db" ".databases" | 279 catchcmd "-csv test.db" ".databases" |
287 } "/0 +.*main +[string map {/ .} [string range [get_pwd] 0 10]].*/" | 280 } "/0.+main.+[string map {/ ".{1,2}"} [string range [get_pwd] 0 10]].*/" |
288 do_test shell1-3.3.2 { | 281 do_test shell1-3.3.2 { |
289 # extra arguments ignored | 282 # extra arguments ignored |
290 catchcmd "test.db" ".databases BAD" | 283 catchcmd "test.db" ".databases BAD" |
291 } "/0 +.*main +[string map {/ .} [string range [get_pwd] 0 10]].*/" | 284 } "/0.+main.+[string map {/ ".{1,2}"} [string range [get_pwd] 0 10]].*/" |
| 285 } |
292 | 286 |
293 # .dump ?TABLE? ... Dump the database in an SQL text format | 287 # .dump ?TABLE? ... Dump the database in an SQL text format |
294 # If TABLE specified, only dump tables matching | 288 # If TABLE specified, only dump tables matching |
295 # LIKE pattern TABLE. | 289 # LIKE pattern TABLE. |
296 do_test shell1-3.4.1 { | 290 do_test shell1-3.4.1 { |
297 set res [catchcmd "test.db" ".dump"] | 291 set res [catchcmd "test.db" ".dump"] |
298 list [regexp {BEGIN TRANSACTION;} $res] \ | 292 list [regexp {BEGIN TRANSACTION;} $res] \ |
299 [regexp {COMMIT;} $res] | 293 [regexp {COMMIT;} $res] |
300 } {1 1} | 294 } {1 1} |
301 do_test shell1-3.4.2 { | 295 do_test shell1-3.4.2 { |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 # csv Comma-separated values | 422 # csv Comma-separated values |
429 # column Left-aligned columns. (See .width) | 423 # column Left-aligned columns. (See .width) |
430 # html HTML <table> code | 424 # html HTML <table> code |
431 # insert SQL insert statements for TABLE | 425 # insert SQL insert statements for TABLE |
432 # line One value per line | 426 # line One value per line |
433 # list Values delimited by .separator strings | 427 # list Values delimited by .separator strings |
434 # tabs Tab-separated values | 428 # tabs Tab-separated values |
435 # tcl TCL list elements | 429 # tcl TCL list elements |
436 do_test shell1-3.13.1 { | 430 do_test shell1-3.13.1 { |
437 catchcmd "test.db" ".mode" | 431 catchcmd "test.db" ".mode" |
438 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 432 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
439 do_test shell1-3.13.2 { | 433 do_test shell1-3.13.2 { |
440 catchcmd "test.db" ".mode FOO" | 434 catchcmd "test.db" ".mode FOO" |
441 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 435 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
442 do_test shell1-3.13.3 { | 436 do_test shell1-3.13.3 { |
443 catchcmd "test.db" ".mode csv" | 437 catchcmd "test.db" ".mode csv" |
444 } {0 {}} | 438 } {0 {}} |
445 do_test shell1-3.13.4 { | 439 do_test shell1-3.13.4 { |
446 catchcmd "test.db" ".mode column" | 440 catchcmd "test.db" ".mode column" |
447 } {0 {}} | 441 } {0 {}} |
448 do_test shell1-3.13.5 { | 442 do_test shell1-3.13.5 { |
449 catchcmd "test.db" ".mode html" | 443 catchcmd "test.db" ".mode html" |
450 } {0 {}} | 444 } {0 {}} |
451 do_test shell1-3.13.6 { | 445 do_test shell1-3.13.6 { |
(...skipping 12 matching lines...) Expand all Loading... |
464 catchcmd "test.db" ".mode tcl" | 458 catchcmd "test.db" ".mode tcl" |
465 } {0 {}} | 459 } {0 {}} |
466 do_test shell1-3.13.11 { | 460 do_test shell1-3.13.11 { |
467 # extra arguments ignored | 461 # extra arguments ignored |
468 catchcmd "test.db" ".mode tcl BAD" | 462 catchcmd "test.db" ".mode tcl BAD" |
469 } {0 {}} | 463 } {0 {}} |
470 | 464 |
471 # don't allow partial mode type matches | 465 # don't allow partial mode type matches |
472 do_test shell1-3.13.12 { | 466 do_test shell1-3.13.12 { |
473 catchcmd "test.db" ".mode l" | 467 catchcmd "test.db" ".mode l" |
474 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 468 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
475 do_test shell1-3.13.13 { | 469 do_test shell1-3.13.13 { |
476 catchcmd "test.db" ".mode li" | 470 catchcmd "test.db" ".mode li" |
477 } {1 {Error: mode should be one of: ascii column csv html insert line list tabs
tcl}} | 471 } {1 {Error: mode should be one of: ascii column csv html insert line list quote
tabs tcl}} |
478 do_test shell1-3.13.14 { | 472 do_test shell1-3.13.14 { |
479 catchcmd "test.db" ".mode lin" | 473 catchcmd "test.db" ".mode lin" |
480 } {0 {}} | 474 } {0 {}} |
481 | 475 |
482 # .nullvalue STRING Print STRING in place of NULL values | 476 # .nullvalue STRING Print STRING in place of NULL values |
483 do_test shell1-3.14.1 { | 477 do_test shell1-3.14.1 { |
484 catchcmd "test.db" ".nullvalue" | 478 catchcmd "test.db" ".nullvalue" |
485 } {1 {Usage: .nullvalue STRING}} | 479 } {1 {Usage: .nullvalue STRING}} |
486 do_test shell1-3.14.2 { | 480 do_test shell1-3.14.2 { |
487 catchcmd "test.db" ".nullvalue FOO" | 481 catchcmd "test.db" ".nullvalue FOO" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 # LIKE pattern TABLE. | 563 # LIKE pattern TABLE. |
570 do_test shell1-3.21.1 { | 564 do_test shell1-3.21.1 { |
571 catchcmd "test.db" ".schema" | 565 catchcmd "test.db" ".schema" |
572 } {0 {}} | 566 } {0 {}} |
573 do_test shell1-3.21.2 { | 567 do_test shell1-3.21.2 { |
574 catchcmd "test.db" ".schema FOO" | 568 catchcmd "test.db" ".schema FOO" |
575 } {0 {}} | 569 } {0 {}} |
576 do_test shell1-3.21.3 { | 570 do_test shell1-3.21.3 { |
577 # too many arguments | 571 # too many arguments |
578 catchcmd "test.db" ".schema FOO BAD" | 572 catchcmd "test.db" ".schema FOO BAD" |
579 } {1 {Usage: .schema ?LIKE-PATTERN?}} | 573 } {1 {Usage: .schema ?--indent? ?LIKE-PATTERN?}} |
580 | 574 |
581 do_test shell1-3.21.4 { | 575 do_test shell1-3.21.4 { |
582 catchcmd "test.db" { | 576 catchcmd "test.db" { |
583 CREATE TABLE t1(x); | 577 CREATE TABLE t1(x); |
584 CREATE VIEW v2 AS SELECT x+1 AS y FROM t1; | 578 CREATE VIEW v2 AS SELECT x+1 AS y FROM t1; |
585 CREATE VIEW v1 AS SELECT y+1 FROM v2; | 579 CREATE VIEW v1 AS SELECT y+1 FROM v2; |
586 } | 580 } |
587 catchcmd "test.db" ".schema" | 581 catchcmd "test.db" ".schema" |
588 } {0 {CREATE TABLE t1(x); | 582 } {0 {CREATE TABLE t1(x); |
589 CREATE VIEW v2 AS SELECT x+1 AS y FROM t1; | 583 CREATE VIEW v2 AS SELECT x+1 AS y FROM t1; |
(...skipping 28 matching lines...) Expand all Loading... |
618 [regexp {rowseparator:} $res] \ | 612 [regexp {rowseparator:} $res] \ |
619 [regexp {stats:} $res] \ | 613 [regexp {stats:} $res] \ |
620 [regexp {width:} $res] | 614 [regexp {width:} $res] |
621 } {1 1 1 1 1 1 1 1 1 1} | 615 } {1 1 1 1 1 1 1 1 1 1} |
622 do_test shell1-3.23.2 { | 616 do_test shell1-3.23.2 { |
623 # too many arguments | 617 # too many arguments |
624 catchcmd "test.db" ".show BAD" | 618 catchcmd "test.db" ".show BAD" |
625 } {1 {Usage: .show}} | 619 } {1 {Usage: .show}} |
626 | 620 |
627 # .stats ON|OFF Turn stats on or off | 621 # .stats ON|OFF Turn stats on or off |
628 do_test shell1-3.23b.1 { | 622 #do_test shell1-3.23b.1 { |
629 catchcmd "test.db" ".stats" | 623 # catchcmd "test.db" ".stats" |
630 } {1 {Usage: .stats on|off}} | 624 #} {1 {Usage: .stats on|off}} |
631 do_test shell1-3.23b.2 { | 625 do_test shell1-3.23b.2 { |
632 catchcmd "test.db" ".stats ON" | 626 catchcmd "test.db" ".stats ON" |
633 } {0 {}} | 627 } {0 {}} |
634 do_test shell1-3.23b.3 { | 628 do_test shell1-3.23b.3 { |
635 catchcmd "test.db" ".stats OFF" | 629 catchcmd "test.db" ".stats OFF" |
636 } {0 {}} | 630 } {0 {}} |
637 do_test shell1-3.23b.4 { | 631 do_test shell1-3.23b.4 { |
638 # too many arguments | 632 # too many arguments |
639 catchcmd "test.db" ".stats OFF BAD" | 633 catchcmd "test.db" ".stats OFF BAD" |
640 } {1 {Usage: .stats on|off}} | 634 } {1 {Usage: .stats ?on|off?}} |
641 | 635 |
642 # .tables ?TABLE? List names of tables | 636 # .tables ?TABLE? List names of tables |
643 # If TABLE specified, only list tables matching | 637 # If TABLE specified, only list tables matching |
644 # LIKE pattern TABLE. | 638 # LIKE pattern TABLE. |
645 do_test shell1-3.24.1 { | 639 do_test shell1-3.24.1 { |
646 catchcmd "test.db" ".tables" | 640 catchcmd "test.db" ".tables" |
647 } {0 {}} | 641 } {0 {}} |
648 do_test shell1-3.24.2 { | 642 do_test shell1-3.24.2 { |
649 catchcmd "test.db" ".tables FOO" | 643 catchcmd "test.db" ".tables FOO" |
650 } {0 {}} | 644 } {0 {}} |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 for {set i 1} {$i < 256} {incr i} { | 865 for {set i 1} {$i < 256} {incr i} { |
872 # | 866 # |
873 # NOTE: Due to how the Tcl [exec] command works (i.e. where it treats | 867 # NOTE: Due to how the Tcl [exec] command works (i.e. where it treats |
874 # command channels opened for it as textual ones), the carriage | 868 # command channels opened for it as textual ones), the carriage |
875 # return character (and on Windows, the end-of-file character) | 869 # return character (and on Windows, the end-of-file character) |
876 # cannot be used here. | 870 # cannot be used here. |
877 # | 871 # |
878 if {$i==0x0D || ($tcl_platform(platform)=="windows" && $i==0x1A)} { | 872 if {$i==0x0D || ($tcl_platform(platform)=="windows" && $i==0x1A)} { |
879 continue | 873 continue |
880 } | 874 } |
| 875 if {$i>=0xE0 && $tcl_platform(os)=="OpenBSD"} continue |
| 876 if {$i>=0xE0 && $i<=0xEF && $tcl_platform(os)=="Linux"} continue |
881 set hex [format %02X $i] | 877 set hex [format %02X $i] |
882 set char [subst \\x$hex]; set oldChar $char | 878 set char [subst \\x$hex]; set oldChar $char |
883 set escapes [list] | 879 set escapes [list] |
884 if {$tcl_platform(platform)=="windows"} { | 880 if {$tcl_platform(platform)=="windows"} { |
885 # | 881 # |
886 # NOTE: On Windows, we need to escape all the whitespace characters, | 882 # NOTE: On Windows, we need to escape all the whitespace characters, |
887 # the alarm (\a) character, and those with special meaning to | 883 # the alarm (\a) character, and those with special meaning to |
888 # the SQLite shell itself. | 884 # the SQLite shell itself. |
889 # | 885 # |
890 set escapes [list \ | 886 set escapes [list \ |
(...skipping 15 matching lines...) Expand all Loading... |
906 " " "\" \"" \" \\\" ' \"'\" \\ \\\\] | 902 " " "\" \"" \" \\\" ' \"'\" \\ \\\\] |
907 } | 903 } |
908 set char [string map $escapes $char] | 904 set char [string map $escapes $char] |
909 set x [catchcmdex test.db ".print $char\n"] | 905 set x [catchcmdex test.db ".print $char\n"] |
910 set code [lindex $x 0] | 906 set code [lindex $x 0] |
911 set res [lindex $x 1] | 907 set res [lindex $x 1] |
912 if {$code ne "0"} { | 908 if {$code ne "0"} { |
913 error "failed with error: $res" | 909 error "failed with error: $res" |
914 } | 910 } |
915 if {$res ne "$oldChar\n"} { | 911 if {$res ne "$oldChar\n"} { |
916 error "failed with byte $hex mismatch" | 912 if {[llength $res] > 0} { |
| 913 set got [format %02X [scan $res %c]] |
| 914 } else { |
| 915 set got <empty> |
| 916 } |
| 917 error "failed with byte $hex mismatch, got $got" |
917 } | 918 } |
918 } | 919 } |
919 } {} | 920 } {} |
920 | 921 |
| 922 # These test cases do not work on MinGW |
| 923 if 0 { |
| 924 |
| 925 # The string used here is the word "test" in Chinese. |
| 926 # In UTF-8, it is encoded as: \xE6\xB5\x8B\xE8\xAF\x95 |
| 927 set test \u6D4B\u8BD5 |
| 928 |
| 929 do_test shell1-6.0 { |
| 930 set fileName $test; append fileName .db |
| 931 catch {forcedelete $fileName} |
| 932 set x [catchcmdex $fileName "CREATE TABLE t1(x);\n.schema\n"] |
| 933 set code [lindex $x 0] |
| 934 set res [string trim [lindex $x 1]] |
| 935 if {$code ne "0"} { |
| 936 error "failed with error: $res" |
| 937 } |
| 938 if {$res ne "CREATE TABLE t1(x);"} { |
| 939 error "failed with mismatch: $res" |
| 940 } |
| 941 if {![file exists $fileName]} { |
| 942 error "file \"$fileName\" (Unicode) does not exist" |
| 943 } |
| 944 forcedelete $fileName |
| 945 } {} |
| 946 |
| 947 do_test shell1-6.1 { |
| 948 catch {forcedelete test3.db} |
| 949 set x [catchcmdex test3.db \ |
| 950 "CREATE TABLE [encoding convertto utf-8 $test](x);\n.schema\n"] |
| 951 set code [lindex $x 0] |
| 952 set res [string trim [lindex $x 1]] |
| 953 if {$code ne "0"} { |
| 954 error "failed with error: $res" |
| 955 } |
| 956 if {$res ne "CREATE TABLE ${test}(x);"} { |
| 957 error "failed with mismatch: $res" |
| 958 } |
| 959 forcedelete test3.db |
| 960 } {} |
| 961 } |
| 962 |
921 finish_test | 963 finish_test |
OLD | NEW |