Roll src/third_party/WebKit a3b4a2e:7441784 (svn 202551:202552)
[chromium-blink-merge.git] / third_party / sqlite / src / test / recover0.test
blobaac2ed9164bac030282262ead7e0ac8227ba2b48
1 # 2012 January 4 {}
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # Test recover module syntax.
15 # $Id$
17 # TODO(shess): Test with attached databases.
19 # TODO(shess): Handle column mismatches?  As things stand, the code
20 # only needs to pull the root page, so that may not be completely
21 # feasible.
23 set testdir [file dirname $argv0]
24 source $testdir/tester.tcl
26 db eval {
27   DROP TABLE IF EXISTS backing;
28   CREATE TABLE backing (t TEXT);
30   DROP TABLE IF EXISTS backing2;
31   CREATE TABLE backing2 (id INTEGER PRIMARY KEY, t TEXT);
34 # Baseline create works.
35 do_test recover-syntax-0.0 {
36   db eval {DROP TABLE IF EXISTS temp.syntax}
37   catchsql {
38     CREATE VIRTUAL TABLE temp.syntax USING recover(
39       backing,
40       t TEXT
41     );
42   }
43 } {0 {}}
45 # Can specify database.
46 do_test recover-syntax-0.1 {
47   db eval {DROP TABLE IF EXISTS temp.syntax}
48   catchsql {
49     CREATE VIRTUAL TABLE temp.syntax USING recover(
50       main.backing,
51       t TEXT
52     );
53   }
54 } {0 {}}
56 # Can specify sqlite_master.
57 do_test recover-syntax-0.2 {
58   db eval {DROP TABLE IF EXISTS temp.syntax}
59   catchsql {
60     CREATE VIRTUAL TABLE temp.syntax USING recover(
61       sqlite_master,
62       type TEXT,
63       name TEXT,
64       tbl_name TEXT,
65       rootpage INTEGER,
66       sql TEXT
67     );
68   }
69 } {0 {}}
71 # Fails if virtual table is not in the temp database.
72 do_test recover-syntax-1.0 {
73   db eval {DROP TABLE IF EXISTS temp.syntax;}
74   catchsql {
75     CREATE VIRTUAL TABLE syntax USING recover(
76       backing,
77       t TEXT
78     );
79   }
80 } {1 {recover table must be in temp database}}
82 # Fails if mentions missing table.
83 do_test recover-syntax-2.0 {
84   db eval {DROP TABLE IF EXISTS temp.syntax;}
85   catchsql {
86     CREATE VIRTUAL TABLE temp.syntax USING recover(
87       snacking,
88       t TEXT
89     );
90   }
91 } {1 {unable to find backing table}}
93 # Fails if mentions missing database.
94 do_test recover-syntax-2.1 {
95   db eval {DROP TABLE IF EXISTS temp.syntax;}
96   catchsql {
97     CREATE VIRTUAL TABLE temp.syntax USING recover(
98       db.backing,
99       t TEXT
100     );
101   }
102 } {1 {unable to find backing table}}
104 # Fails if mentions garbage backing.
105 do_test recover-syntax-2.2 {
106   db eval {DROP TABLE IF EXISTS temp.syntax;}
107   catchsql {
108     CREATE VIRTUAL TABLE temp.syntax USING recover(
109       main.backing excess,
110       t TEXT
111     );
112   }
113 } {1 {unable to find backing table}}
115 # Database only fails.
116 do_test recover-syntax-2.3 {
117   db eval {DROP TABLE IF EXISTS temp.syntax;}
118   catchsql {
119     CREATE VIRTUAL TABLE temp.syntax USING recover(
120       main.,
121       t TEXT
122     );
123   }
124 } {1 {ill-formed table specifier}}
126 # Table only fails.
127 do_test recover-syntax-2.4 {
128   db eval {DROP TABLE IF EXISTS temp.syntax;}
129   catchsql {
130     CREATE VIRTUAL TABLE temp.syntax USING recover(
131       .backing,
132       t TEXT
133     );
134   }
135 } {1 {ill-formed table specifier}}
137 # Manifest typing.
138 do_test recover-syntax-3.0 {
139   db eval {DROP TABLE IF EXISTS temp.syntax}
140   execsql {
141     CREATE VIRTUAL TABLE temp.syntax USING recover(
142       backing,
143       t
144     );
145     PRAGMA table_info(syntax);
146   }
147 } {0 t {} 0 {} 0}
149 # ANY as an alternative for manifest typing.
150 do_test recover-syntax-3.1 {
151   db eval {DROP TABLE IF EXISTS temp.syntax}
152   execsql {
153     CREATE VIRTUAL TABLE temp.syntax USING recover(
154       backing,
155       t ANY
156     );
157     PRAGMA table_info(syntax);
158   }
159 } {0 t {} 0 {} 0}
161 # ANY NOT NULL
162 do_test recover-syntax-3.2 {
163   db eval {DROP TABLE IF EXISTS temp.syntax}
164   execsql {
165     CREATE VIRTUAL TABLE temp.syntax USING recover(
166       backing,
167       t ANY NOT NULL
168     );
169     PRAGMA table_info(syntax);
170   }
171 } {0 t {} 1 {} 0}
173 # ANY STRICT is not sensible.
174 do_test recover-syntax-3.3 {
175   db eval {DROP TABLE IF EXISTS temp.syntax}
176   catchsql {
177     CREATE VIRTUAL TABLE temp.syntax USING recover(
178       backing,
179       v ANY STRICT
180     );
181     PRAGMA table_info(syntax);
182   }
183 } {1 {unable to parse column 0}}
185 # TEXT column by type works.
186 do_test recover-syntax-4.0 {
187   db eval {DROP TABLE IF EXISTS temp.syntax}
188   execsql {
189     CREATE VIRTUAL TABLE temp.syntax USING recover(
190       backing,
191       t TEXT
192     );
193     PRAGMA table_info(syntax);
194   }
195 } {0 t TEXT 0 {} 0}
197 # TEXT NOT NULL
198 do_test recover-syntax-4.1 {
199   db eval {DROP TABLE IF EXISTS temp.syntax}
200   execsql {
201     CREATE VIRTUAL TABLE temp.syntax USING recover(
202       backing,
203       t TEXT NOT NULL
204     );
205     PRAGMA table_info(syntax);
206   }
207 } {0 t TEXT 1 {} 0}
209 # TEXT STRICT
210 do_test recover-syntax-4.2 {
211   db eval {DROP TABLE IF EXISTS temp.syntax}
212   execsql {
213     CREATE VIRTUAL TABLE temp.syntax USING recover(
214       backing,
215       t TEXT STRICT
216     );
217     PRAGMA table_info(syntax);
218   }
219 } {0 t TEXT 0 {} 0}
221 # TEXT STRICT NOT NULL
222 do_test recover-syntax-4.3 {
223   db eval {DROP TABLE IF EXISTS temp.syntax}
224   execsql {
225     CREATE VIRTUAL TABLE temp.syntax USING recover(
226       backing,
227       t TEXT STRICT NOT NULL
228     );
229     PRAGMA table_info(syntax);
230   }
231 } {0 t TEXT 1 {} 0}
233 # INTEGER
234 do_test recover-syntax-5.0 {
235   db eval {DROP TABLE IF EXISTS temp.syntax}
236   execsql {
237     CREATE VIRTUAL TABLE temp.syntax USING recover(
238       backing,
239       i INTEGER
240     );
241     PRAGMA table_info(syntax);
242   }
243 } {0 i INTEGER 0 {} 0}
245 # INTEGER NOT NULL
246 do_test recover-syntax-5.1 {
247   db eval {DROP TABLE IF EXISTS temp.syntax}
248   execsql {
249     CREATE VIRTUAL TABLE temp.syntax USING recover(
250       backing,
251       i INTEGER NOT NULL
252     );
253     PRAGMA table_info(syntax);
254   }
255 } {0 i INTEGER 1 {} 0}
257 # INTEGER STRICT
258 do_test recover-syntax-5.2 {
259   db eval {DROP TABLE IF EXISTS temp.syntax}
260   execsql {
261     CREATE VIRTUAL TABLE temp.syntax USING recover(
262       backing,
263       i INTEGER STRICT
264     );
265     PRAGMA table_info(syntax);
266   }
267 } {0 i INTEGER 0 {} 0}
269 # INTEGER STRICT NOT NULL
270 do_test recover-syntax-5.3 {
271   db eval {DROP TABLE IF EXISTS temp.syntax}
272   execsql {
273     CREATE VIRTUAL TABLE temp.syntax USING recover(
274       backing,
275       i INTEGER STRICT NOT NULL
276     );
277     PRAGMA table_info(syntax);
278   }
279 } {0 i INTEGER 1 {} 0}
281 # BLOB
282 do_test recover-syntax-6.0 {
283   db eval {DROP TABLE IF EXISTS temp.syntax}
284   execsql {
285     CREATE VIRTUAL TABLE temp.syntax USING recover(
286       backing,
287       b BLOB
288     );
289     PRAGMA table_info(syntax);
290   }
291 } {0 b BLOB 0 {} 0}
293 # BLOB NOT NULL
294 do_test recover-syntax-6.1 {
295   db eval {DROP TABLE IF EXISTS temp.syntax}
296   execsql {
297     CREATE VIRTUAL TABLE temp.syntax USING recover(
298       backing,
299       b BLOB NOT NULL
300     );
301     PRAGMA table_info(syntax);
302   }
303 } {0 b BLOB 1 {} 0}
305 # BLOB STRICT
306 do_test recover-syntax-6.2 {
307   db eval {DROP TABLE IF EXISTS temp.syntax}
308   execsql {
309     CREATE VIRTUAL TABLE temp.syntax USING recover(
310       backing,
311       b BLOB STRICT
312     );
313     PRAGMA table_info(syntax);
314   }
315 } {0 b BLOB 0 {} 0}
317 # BLOB STRICT NOT NULL
318 do_test recover-syntax-6.3 {
319   db eval {DROP TABLE IF EXISTS temp.syntax}
320   execsql {
321     CREATE VIRTUAL TABLE temp.syntax USING recover(
322       backing,
323       b BLOB STRICT NOT NULL
324     );
325     PRAGMA table_info(syntax);
326   }
327 } {0 b BLOB 1 {} 0}
329 # FLOAT
330 do_test recover-syntax-7.0 {
331   db eval {DROP TABLE IF EXISTS temp.syntax}
332   execsql {
333     CREATE VIRTUAL TABLE temp.syntax USING recover(
334       backing,
335       f FLOAT
336     );
337     PRAGMA table_info(syntax);
338   }
339 } {0 f FLOAT 0 {} 0}
341 # FLOAT NOT NULL
342 do_test recover-syntax-7.1 {
343   db eval {DROP TABLE IF EXISTS temp.syntax}
344   execsql {
345     CREATE VIRTUAL TABLE temp.syntax USING recover(
346       backing,
347       f FLOAT NOT NULL
348     );
349     PRAGMA table_info(syntax);
350   }
351 } {0 f FLOAT 1 {} 0}
353 # FLOAT STRICT
354 do_test recover-syntax-7.2 {
355   db eval {DROP TABLE IF EXISTS temp.syntax}
356   execsql {
357     CREATE VIRTUAL TABLE temp.syntax USING recover(
358       backing,
359       f FLOAT STRICT
360     );
361     PRAGMA table_info(syntax);
362   }
363 } {0 f FLOAT 0 {} 0}
365 # FLOAT STRICT NOT NULL
366 do_test recover-syntax-7.3 {
367   db eval {DROP TABLE IF EXISTS temp.syntax}
368   execsql {
369     CREATE VIRTUAL TABLE temp.syntax USING recover(
370       backing,
371       f FLOAT STRICT NOT NULL
372     );
373     PRAGMA table_info(syntax);
374   }
375 } {0 f FLOAT 1 {} 0}
377 # NUMERIC
378 do_test recover-syntax-8.0 {
379   db eval {DROP TABLE IF EXISTS temp.syntax}
380   execsql {
381     CREATE VIRTUAL TABLE temp.syntax USING recover(
382       backing,
383       f NUMERIC
384     );
385     PRAGMA table_info(syntax);
386   }
387 } {0 f NUMERIC 0 {} 0}
389 # NUMERIC NOT NULL
390 do_test recover-syntax-8.1 {
391   db eval {DROP TABLE IF EXISTS temp.syntax}
392   execsql {
393     CREATE VIRTUAL TABLE temp.syntax USING recover(
394       backing,
395       f NUMERIC NOT NULL
396     );
397     PRAGMA table_info(syntax);
398   }
399 } {0 f NUMERIC 1 {} 0}
401 # NUMERIC STRICT
402 do_test recover-syntax-8.2 {
403   db eval {DROP TABLE IF EXISTS temp.syntax}
404   execsql {
405     CREATE VIRTUAL TABLE temp.syntax USING recover(
406       backing,
407       f NUMERIC STRICT
408     );
409     PRAGMA table_info(syntax);
410   }
411 } {0 f NUMERIC 0 {} 0}
413 # NUMERIC STRICT NOT NULL
414 do_test recover-syntax-8.3 {
415   db eval {DROP TABLE IF EXISTS temp.syntax}
416   execsql {
417     CREATE VIRTUAL TABLE temp.syntax USING recover(
418       backing,
419       f NUMERIC STRICT NOT NULL
420     );
421     PRAGMA table_info(syntax);
422   }
423 } {0 f NUMERIC 1 {} 0}
425 # ROWID
426 do_test recover-syntax-9.0 {
427   db eval {DROP TABLE IF EXISTS temp.syntax}
428   execsql {
429     CREATE VIRTUAL TABLE temp.syntax USING recover(
430       backing2,
431       id ROWID,
432       v
433     );
434     PRAGMA table_info(syntax);
435   }
436 } {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
438 # ROWID NOT NULL (is default)
439 do_test recover-syntax-9.1 {
440   db eval {DROP TABLE IF EXISTS temp.syntax}
441   execsql {
442     CREATE VIRTUAL TABLE temp.syntax USING recover(
443       backing2,
444       id ROWID NOT NULL,
445       v
446     );
447     PRAGMA table_info(syntax);
448   }
449 } {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
451 # ROWID STRICT
452 do_test recover-syntax-9.0 {
453   db eval {DROP TABLE IF EXISTS temp.syntax}
454   execsql {
455     CREATE VIRTUAL TABLE temp.syntax USING recover(
456       backing2,
457       id ROWID STRICT,
458       v
459     );
460     PRAGMA table_info(syntax);
461   }
462 } {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
464 # ROWID STRICT NOT NULL (is default)
465 do_test recover-syntax-9.1 {
466   db eval {DROP TABLE IF EXISTS temp.syntax}
467   execsql {
468     CREATE VIRTUAL TABLE temp.syntax USING recover(
469       backing2,
470       id ROWID STRICT NOT NULL,
471       v
472     );
473     PRAGMA table_info(syntax);
474   }
475 } {0 id INTEGER 1 {} 0 1 v {} 0 {} 0}
477 # Invalid type info is not ignored.
478 do_test recover-syntax-10.0 {
479   db eval {DROP TABLE IF EXISTS temp.syntax}
480   catchsql {
481     CREATE VIRTUAL TABLE temp.syntax USING recover(
482       backing,
483       v GARBAGE
484     );
485   }
486 } {1 {unable to parse column 0}}
488 # Extraneous type info is not ignored.
489 do_test recover-syntax-10.1 {
490   db eval {DROP TABLE IF EXISTS temp.syntax}
491   catchsql {
492     CREATE VIRTUAL TABLE temp.syntax USING recover(
493       backing,
494       v INTEGER GARBAGE
495     );
496   }
497 } {1 {unable to parse column 0}}
499 # Extraneous type info is not ignored.
500 do_test recover-syntax-10.2 {
501   db eval {DROP TABLE IF EXISTS temp.syntax}
502   catchsql {
503     CREATE VIRTUAL TABLE temp.syntax USING recover(
504       backing,
505       v INTEGER NOT NULL GARBAGE
506     );
507   }
508 } {1 {unable to parse column 0}}
510 # Multiple types don't work.
511 do_test recover-syntax-10.3 {
512   db eval {DROP TABLE IF EXISTS temp.syntax}
513   catchsql {
514     CREATE VIRTUAL TABLE temp.syntax USING recover(
515       backing,
516       v INTEGER FLOAT BLOB
517     );
518   }
519 } {1 {unable to parse column 0}}
521 # Multiple types don't work.
522 do_test recover-syntax-10.4 {
523   db eval {DROP TABLE IF EXISTS temp.syntax}
524   catchsql {
525     CREATE VIRTUAL TABLE temp.syntax USING recover(
526       backing,
527       v INTEGER NOT NULL TEXT
528     );
529   }
530 } {1 {unable to parse column 0}}
532 finish_test