OLD | NEW |
| (Empty) |
1 # 2010 August 4 | |
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 # The focus of this file is testing the CLI shell tool. | |
13 # These tests are specific to the .import command. | |
14 # | |
15 # $Id: shell5.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $ | |
16 # | |
17 | |
18 # Test plan: | |
19 # | |
20 # shell5-1.*: Basic tests specific to the ".import" command. | |
21 # | |
22 | |
23 set CLI "./sqlite3" | |
24 | |
25 proc do_test {name cmd expected} { | |
26 puts -nonewline "$name ..." | |
27 set res [uplevel $cmd] | |
28 if {$res eq $expected} { | |
29 puts Ok | |
30 } else { | |
31 puts Error | |
32 puts " Got: $res" | |
33 puts " Expected: $expected" | |
34 exit | |
35 } | |
36 } | |
37 | |
38 proc catchcmd {db {cmd ""}} { | |
39 global CLI | |
40 set out [open cmds.txt w] | |
41 puts $out $cmd | |
42 close $out | |
43 set line "exec $CLI $db < cmds.txt" | |
44 set rc [catch { eval $line } msg] | |
45 list $rc $msg | |
46 } | |
47 | |
48 file delete -force test.db test.db.journal | |
49 | |
50 #---------------------------------------------------------------------------- | |
51 # Test cases shell5-1.*: Basic handling of the .import and .separator commands. | |
52 # | |
53 | |
54 # .import FILE TABLE Import data from FILE into TABLE | |
55 do_test shell5-1.1.1 { | |
56 catchcmd "test.db" ".import" | |
57 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for
help}} | |
58 do_test shell5-1.1.2 { | |
59 catchcmd "test.db" ".import FOO" | |
60 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for
help}} | |
61 do_test shell5-1.1.2 { | |
62 catchcmd "test.db" ".import FOO BAR" | |
63 } {1 {Error: no such table: BAR}} | |
64 do_test shell5-1.1.3 { | |
65 # too many arguments | |
66 catchcmd "test.db" ".import FOO BAR BAD" | |
67 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for
help}} | |
68 | |
69 # .separator STRING Change separator used by output mode and .import | |
70 do_test shell1-1.2.1 { | |
71 catchcmd "test.db" ".separator" | |
72 } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" f
or help}} | |
73 do_test shell1-1.2.2 { | |
74 catchcmd "test.db" ".separator FOO" | |
75 } {0 {}} | |
76 do_test shell1-1.2.3 { | |
77 # too many arguments | |
78 catchcmd "test.db" ".separator FOO BAD" | |
79 } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" f
or help}} | |
80 | |
81 # separator should default to "|" | |
82 do_test shell5-1.3.1 { | |
83 set res [catchcmd "test.db" ".show"] | |
84 list [regexp {separator: \"\|\"} $res] | |
85 } {1} | |
86 | |
87 # set separator to different value. | |
88 # check that .show reports new value | |
89 do_test shell5-1.3.2 { | |
90 set res [catchcmd "test.db" {.separator , | |
91 .show}] | |
92 list [regexp {separator: \",\"} $res] | |
93 } {1} | |
94 | |
95 # import file doesn't exist | |
96 do_test shell5-1.4.1 { | |
97 file delete -force FOO | |
98 set res [catchcmd "test.db" {CREATE TABLE t1(a, b); | |
99 .import FOO t1}] | |
100 } {1 {Error: cannot open "FOO"}} | |
101 | |
102 # empty import file | |
103 do_test shell5-1.4.2 { | |
104 file delete -force shell5.csv | |
105 set in [open shell5.csv w] | |
106 close $in | |
107 set res [catchcmd "test.db" {.import shell5.csv t1 | |
108 SELECT COUNT(*) FROM t1;}] | |
109 } {0 0} | |
110 | |
111 # import file with 1 row, 1 column (expecting 2 cols) | |
112 do_test shell5-1.4.3 { | |
113 set in [open shell5.csv w] | |
114 puts $in "1" | |
115 close $in | |
116 set res [catchcmd "test.db" {.import shell5.csv t1}] | |
117 } {1 {Error: shell5.csv line 1: expected 2 columns of data but found 1}} | |
118 | |
119 # import file with 1 row, 3 columns (expecting 2 cols) | |
120 do_test shell5-1.4.4 { | |
121 set in [open shell5.csv w] | |
122 puts $in "1|2|3" | |
123 close $in | |
124 set res [catchcmd "test.db" {.import shell5.csv t1}] | |
125 } {1 {Error: shell5.csv line 1: expected 2 columns of data but found 3}} | |
126 | |
127 # import file with 1 row, 2 columns | |
128 do_test shell5-1.4.5 { | |
129 set in [open shell5.csv w] | |
130 puts $in "1|2" | |
131 close $in | |
132 set res [catchcmd "test.db" {.import shell5.csv t1 | |
133 SELECT COUNT(*) FROM t1;}] | |
134 } {0 1} | |
135 | |
136 # import file with 2 rows, 2 columns | |
137 # note we end up with 3 rows because of the 1 row | |
138 # imported above. | |
139 do_test shell5-1.4.6 { | |
140 set in [open shell5.csv w] | |
141 puts $in "2|3" | |
142 puts $in "3|4" | |
143 close $in | |
144 set res [catchcmd "test.db" {.import shell5.csv t1 | |
145 SELECT COUNT(*) FROM t1;}] | |
146 } {0 3} | |
147 | |
148 # import file with 1 row, 2 columns, using a comma | |
149 do_test shell5-1.4.7 { | |
150 set in [open shell5.csv w] | |
151 puts $in "4,5" | |
152 close $in | |
153 set res [catchcmd "test.db" {.separator , | |
154 .import shell5.csv t1 | |
155 SELECT COUNT(*) FROM t1;}] | |
156 } {0 4} | |
157 | |
158 # import file with 1 row, 2 columns, text data | |
159 do_test shell5-1.4.8.1 { | |
160 set in [open shell5.csv w] | |
161 puts $in "5|Now is the time for all good men to come to the aid of their count
ry." | |
162 close $in | |
163 set res [catchcmd "test.db" {.import shell5.csv t1 | |
164 SELECT COUNT(*) FROM t1;}] | |
165 } {0 5} | |
166 | |
167 do_test shell5-1.4.8.2 { | |
168 catchcmd "test.db" {SELECT b FROM t1 WHERE a='5';} | |
169 } {0 {Now is the time for all good men to come to the aid of their country.}} | |
170 | |
171 # import file with 1 row, 2 columns, quoted text data | |
172 # note that currently sqlite doesn't support quoted fields, and | |
173 # imports the entire field, quotes and all. | |
174 do_test shell5-1.4.9.1 { | |
175 set in [open shell5.csv w] | |
176 puts $in "6|'Now is the time for all good men to come to the aid of their coun
try.'" | |
177 close $in | |
178 set res [catchcmd "test.db" {.import shell5.csv t1 | |
179 SELECT COUNT(*) FROM t1;}] | |
180 } {0 6} | |
181 | |
182 do_test shell5-1.4.9.2 { | |
183 catchcmd "test.db" {SELECT b FROM t1 WHERE a='6';} | |
184 } {0 {'Now is the time for all good men to come to the aid of their country.'}} | |
185 | |
186 # import file with 1 row, 2 columns, quoted text data | |
187 do_test shell5-1.4.10.1 { | |
188 set in [open shell5.csv w] | |
189 puts $in "7|\"Now is the time for all good men to come to the aid of their cou
ntry.\"" | |
190 close $in | |
191 set res [catchcmd "test.db" {.import shell5.csv t1 | |
192 SELECT COUNT(*) FROM t1;}] | |
193 } {0 7} | |
194 | |
195 do_test shell5-1.4.10.2 { | |
196 catchcmd "test.db" {SELECT b FROM t1 WHERE a='7';} | |
197 } {0 {"Now is the time for all good men to come to the aid of their country."}} | |
198 | |
199 # check importing very long field | |
200 do_test shell5-1.5.1 { | |
201 set str [string repeat X 999] | |
202 set in [open shell5.csv w] | |
203 puts $in "8|$str" | |
204 close $in | |
205 set res [catchcmd "test.db" {.import shell5.csv t1 | |
206 SELECT length(b) FROM t1 WHERE a='8';}] | |
207 } {0 999} | |
208 | |
209 # try importing into a table with a large number of columns. | |
210 # This is limited by SQLITE_MAX_VARIABLE_NUMBER, which defaults to 999. | |
211 set cols 999 | |
212 do_test shell5-1.6.1 { | |
213 set sql {CREATE TABLE t2(} | |
214 set data {} | |
215 for {set i 1} {$i<$cols} {incr i} { | |
216 append sql "c$i," | |
217 append data "$i|" | |
218 } | |
219 append sql "c$cols);" | |
220 append data "$cols" | |
221 catchcmd "test.db" $sql | |
222 set in [open shell5.csv w] | |
223 puts $in $data | |
224 close $in | |
225 set res [catchcmd "test.db" {.import shell5.csv t2 | |
226 SELECT COUNT(*) FROM t2;}] | |
227 } {0 1} | |
228 | |
229 # try importing a large number of rows | |
230 set rows 999999 | |
231 do_test shell5-1.7.1 { | |
232 set in [open shell5.csv w] | |
233 for {set i 1} {$i<=$rows} {incr i} { | |
234 puts $in $i | |
235 } | |
236 close $in | |
237 set res [catchcmd "test.db" {CREATE TABLE t3(a); | |
238 .import shell5.csv t3 | |
239 SELECT COUNT(*) FROM t3;}] | |
240 } [list 0 $rows] | |
241 | |
242 | |
243 puts "CLI tests completed successfully" | |
OLD | NEW |