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

Side by Side Diff: third_party/sqlite/src/test/backcompat.test

Issue 901033002: Import SQLite 3.8.7.4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Chromium changes to support SQLite 3.8.7.4. Created 5 years, 10 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
1 # 2010 August 19 1 # 2010 August 19
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 # This file implements regression tests for SQLite library. The 11 # This file implements regression tests for SQLite library. The
12 # focus of this file is testing that the current version of SQLite 12 # focus of this file is testing that the current version of SQLite
13 # is capable of reading and writing databases created by previous 13 # is capable of reading and writing databases created by previous
14 # versions, and vice-versa. 14 # versions, and vice-versa.
15 # 15 #
16 # To use this test, old versions of the testfixture process should be 16 # To use this test, old versions of the testfixture process should be
17 # copied into the working directory alongside the new version. The old 17 # copied into the working directory alongside the new version. The old
18 # versions should be named "testfixtureXXX" (or testfixtureXXX.exe on 18 # versions should be named "testfixtureXXX" (or testfixtureXXX.exe on
19 # windows), where XXX can be any string. 19 # windows), where XXX can be any string.
20 # 20 #
21 # This test file uses the tcl code for controlling a second testfixture 21 # This test file uses the tcl code for controlling a second testfixture
22 # process located in lock_common.tcl. See the commments in lock_common.tcl 22 # process located in lock_common.tcl. See the commments in lock_common.tcl
23 # for documentation of the available commands. 23 # for documentation of the available commands.
24 # 24 #
25 25
26 set testdir [file dirname $argv0] 26 set testdir [file dirname $argv0]
27 source $testdir/tester.tcl 27 source $testdir/tester.tcl
28 source $testdir/lock_common.tcl 28 source $testdir/lock_common.tcl
29 source $testdir/malloc_common.tcl 29 source $testdir/malloc_common.tcl
30 source $testdir/bc_common.tcl
30 db close 31 db close
31 32
32 # Search for binaries to test against. Any executable files that match 33 if {"" == [bc_find_binaries backcompat.test]} {
33 # our naming convention are assumed to be testfixture binaries to test
34 # against.
35 #
36 set binaries [list]
37 set pattern "[file tail [info nameofexec]]?*"
38 if {$tcl_platform(platform)=="windows"} {
39 set pattern [string map {\.exe {}} $pattern]
40 }
41 foreach file [glob -nocomplain $pattern] {
42 if {[file executable $file] && [file isfile $file]} {lappend binaries $file}
43 }
44 if {[llength $binaries]==0} {
45 puts "WARNING: No historical binaries to test against."
46 puts "WARNING: No backwards-compatibility tests have been run."
47 finish_test 34 finish_test
48 return 35 return
49 } 36 }
50 proc get_version {binary} {
51 set chan [launch_testfixture $binary]
52 set v [testfixture $chan { sqlite3 -version }]
53 close $chan
54 set v
55 }
56 foreach bin $binaries {
57 puts -nonewline "Testing against $bin - "
58 flush stdout
59 puts "version [get_version $bin]"
60 }
61 37
62 proc do_backcompat_test {rv bin1 bin2 script} { 38 proc do_backcompat_test {rv bin1 bin2 script} {
63 39
64 file delete -force test.db 40 forcedelete test.db
65 41
66 if {$bin1 != ""} { set ::bc_chan1 [launch_testfixture $bin1] } 42 if {$bin1 != ""} { set ::bc_chan1 [launch_testfixture $bin1] }
67 set ::bc_chan2 [launch_testfixture $bin2] 43 set ::bc_chan2 [launch_testfixture $bin2]
68 44
69 if { $rv } { 45 if { $rv } {
70 proc code2 {tcl} { uplevel #0 $tcl } 46 proc code2 {tcl} { uplevel #0 $tcl }
71 if {$bin1 != ""} { proc code2 {tcl} { testfixture $::bc_chan1 $tcl } } 47 if {$bin1 != ""} { proc code2 {tcl} { testfixture $::bc_chan1 $tcl } }
72 proc code1 {tcl} { testfixture $::bc_chan2 $tcl } 48 proc code1 {tcl} { testfixture $::bc_chan2 $tcl }
73 } else { 49 } else {
74 proc code1 {tcl} { uplevel #0 $tcl } 50 proc code1 {tcl} { uplevel #0 $tcl }
75 if {$bin1 != ""} { proc code1 {tcl} { testfixture $::bc_chan1 $tcl } } 51 if {$bin1 != ""} { proc code1 {tcl} { testfixture $::bc_chan1 $tcl } }
76 proc code2 {tcl} { testfixture $::bc_chan2 $tcl } 52 proc code2 {tcl} { testfixture $::bc_chan2 $tcl }
77 } 53 }
78 54
79 proc sql1 sql { code1 [list db eval $sql] } 55 proc sql1 sql { code1 [list db eval $sql] }
80 proc sql2 sql { code2 [list db eval $sql] } 56 proc sql2 sql { code2 [list db eval $sql] }
81 57
82 code1 { sqlite3 db test.db } 58 code1 { sqlite3 db test.db }
83 code2 { sqlite3 db test.db } 59 code2 { sqlite3 db test.db }
84 60
61 foreach c {code1 code2} {
62 $c {
63 set v [split [db version] .]
64 if {[llength $v]==3} {lappend v 0}
65 set ::sqlite_libversion [format \
66 "%d%.2d%.2d%2d" [lindex $v 0] [lindex $v 1] [lindex $v 2] [lindex $v 3]
67 ]
68 }
69 }
70
85 uplevel $script 71 uplevel $script
86 72
87 catch { code1 { db close } } 73 catch { code1 { db close } }
88 catch { code2 { db close } } 74 catch { code2 { db close } }
89 catch { close $::bc_chan2 } 75 catch { close $::bc_chan2 }
90 catch { close $::bc_chan1 } 76 catch { close $::bc_chan1 }
77
78
91 } 79 }
92 80
93 array set ::incompatible [list] 81 array set ::incompatible [list]
94 proc do_allbackcompat_test {script} { 82 proc do_allbackcompat_test {script} {
95 83
96 foreach bin $::binaries { 84 foreach bin $::BC(binaries) {
97 set nErr [set_test_counter errors] 85 set nErr [set_test_counter errors]
98 foreach dir {0 1} { 86 foreach dir {0 1} {
99 87
100 set bintag [string map {testfixture {}} $bin] 88 set bintag [string map {testfixture {}} $bin]
101 set bintag [string map {\.exe {}} $bintag] 89 set bintag [string map {\.exe {}} $bintag]
102 if {$bintag == ""} {set bintag self} 90 if {$bintag == ""} {set bintag self}
103 set ::bcname ".$bintag.$dir." 91 set ::bcname ".$bintag.$dir."
104 92
105 rename do_test _do_test 93 rename do_test _do_test
106 proc do_test {nm sql res} { 94 proc do_test {nm sql res} {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 close $fd 133 close $fd
146 } 134 }
147 proc read_file_system {} { 135 proc read_file_system {} {
148 set ret [list] 136 set ret [list]
149 foreach f {test.db test.db-journal test.db-wal} { lappend ret [read_file $f] } 137 foreach f {test.db test.db-journal test.db-wal} { lappend ret [read_file $f] }
150 set ret 138 set ret
151 } 139 }
152 proc write_file_system {data} { 140 proc write_file_system {data} {
153 foreach f {test.db test.db-journal test.db-wal} d $data { 141 foreach f {test.db test.db-journal test.db-wal} d $data {
154 if {[string length $d] == 0} { 142 if {[string length $d] == 0} {
155 file delete -force $f 143 forcedelete $f
156 } else { 144 } else {
157 write_file $f $d 145 write_file $f $d
158 } 146 }
159 } 147 }
160 } 148 }
161 149
162 #------------------------------------------------------------------------- 150 #-------------------------------------------------------------------------
163 # Actual tests begin here. 151 # Actual tests begin here.
164 # 152 #
165 # This first block of tests checks to see that the same database and 153 # This first block of tests checks to see that the same database and
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 code2 { db close } 205 code2 { db close }
218 write_file_system $data 206 write_file_system $data
219 code1 { sqlite3 db test.db } 207 code1 { sqlite3 db test.db }
220 code2 { sqlite3 db test.db } 208 code2 { sqlite3 db test.db }
221 209
222 set same [expr {[sql2 {SELECT md5sum(a), md5sum(b) FROM t1}] == $cksum2}] 210 set same [expr {[sql2 {SELECT md5sum(a), md5sum(b) FROM t1}] == $cksum2}]
223 do_test backcompat-1.2.6 [list set {} $same] 1 211 do_test backcompat-1.2.6 [list set {} $same] 1
224 212
225 do_test backcompat-1.2.7 { sql1 { PRAGMA integrity_check } } {ok} 213 do_test backcompat-1.2.7 { sql1 { PRAGMA integrity_check } } {ok}
226 do_test backcompat-1.2.8 { sql2 { PRAGMA integrity_check } } {ok} 214 do_test backcompat-1.2.8 { sql2 { PRAGMA integrity_check } } {ok}
215
216 do_test backcompat-2.1 {
217 sql1 {
218 CREATE TABLE t2(a UNIQUE, b PRIMARY KEY, c UNIQUE);
219 INSERT INTO t2 VALUES(1,9,5);
220 INSERT INTO t2 VALUES(5,5,1);
221 INSERT INTO t2 VALUES(9,1,9);
222 SELECT * FROM t2 ORDER BY a;
223 }
224 } {1 9 5 5 5 1 9 1 9}
225 do_test backcompat-2.2 {
226 sql2 {
227 SELECT * FROM sqlite_master WHERE rootpage=-1;
228 SELECT * FROM t2 ORDER BY a;
229 }
230 } {1 9 5 5 5 1 9 1 9}
231 do_test backcompat-2.3 {
232 sql1 {
233 SELECT * FROM t2 ORDER BY b;
234 }
235 } {9 1 9 5 5 1 1 9 5}
236 do_test backcompat-2.4 {
237 sql2 {
238 SELECT * FROM t2 ORDER BY b;
239 }
240 } {9 1 9 5 5 1 1 9 5}
241 do_test backcompat-2.5 {
242 sql1 {
243 SELECT * FROM t2 ORDER BY c;
244 }
245 } {5 5 1 1 9 5 9 1 9}
246 do_test backcompat-2.6 {
247 sql2 {
248 SELECT * FROM t2 ORDER BY c;
249 }
250 } {5 5 1 1 9 5 9 1 9}
227 } 251 }
228 foreach k [lsort [array names ::incompatible]] { 252 foreach k [lsort [array names ::incompatible]] {
229 puts "ERROR: Detected journal incompatibility with version $k" 253 puts "ERROR: Detected journal incompatibility with version $k"
230 } 254 }
231 unset ::incompatible 255 unset ::incompatible
232 256
233 257
234 #------------------------------------------------------------------------- 258 #-------------------------------------------------------------------------
235 # Test that WAL and wal-index files may be shared between different 259 # Test that WAL and wal-index files may be shared between different
236 # SQLite versions. 260 # SQLite versions.
237 # 261 #
238 do_allbackcompat_test { 262 do_allbackcompat_test {
239 if {[code1 {sqlite3 -version}] >= "3.7.0" 263 if {[code1 {sqlite3 -version}] >= "3.7.0"
264 && [code1 {set ::sqlite_options(wal)}]
240 && [code2 {sqlite3 -version}] >= "3.7.0" 265 && [code2 {sqlite3 -version}] >= "3.7.0"
266 && [code2 {set ::sqlite_options(wal)}]
241 } { 267 } {
242 268
243 do_test backcompat-2.1.1 { sql1 { 269 do_test backcompat-2.1.1 { sql1 {
244 PRAGMA journal_mode = WAL; 270 PRAGMA journal_mode = WAL;
245 CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); 271 CREATE TABLE t1(a PRIMARY KEY, b UNIQUE);
246 INSERT INTO t1 VALUES('I', 1); 272 INSERT INTO t1 VALUES('I', 1);
247 INSERT INTO t1 VALUES('II', 2); 273 INSERT INTO t1 VALUES('II', 2);
248 INSERT INTO t1 VALUES('III', 3); 274 INSERT INTO t1 VALUES('III', 3);
249 SELECT * FROM t1; 275 SELECT * FROM t1;
250 } } {wal I 1 II 2 III 3} 276 } } {wal I 1 II 2 III 3}
(...skipping 17 matching lines...) Expand all
268 do_test backcompat-2.1.4 { sql1 { 294 do_test backcompat-2.1.4 { sql1 {
269 SELECT * FROM t1; 295 SELECT * FROM t1;
270 } } {I 1 II 2 III 3} 296 } } {I 1 II 2 III 3}
271 } 297 }
272 } 298 }
273 299
274 #------------------------------------------------------------------------- 300 #-------------------------------------------------------------------------
275 # Test that FTS3 tables may be read/written by different versions of 301 # Test that FTS3 tables may be read/written by different versions of
276 # SQLite. 302 # SQLite.
277 # 303 #
278 set contents { 304 ifcapable fts3 {
279 CREATE VIRTUAL TABLE t1 USING fts3(a, b); 305 set contents {
280 } 306 CREATE VIRTUAL TABLE t1 USING fts3(a, b);
281 foreach {num doc} { 307 }
282 one "jk zm jk eczkjblu urvysbnykk sk gnl jk ttvgf hmjf" 308 foreach {num doc} {
283 two "jk bnhc jjrxpjkb mjpavjuhw fibokdry igju jk zm zm xh" 309 one "jk zm jk eczkjblu urvysbnykk sk gnl jk ttvgf hmjf"
284 three "wxe ogttbykvt uhzq xr iaf zf urvysbnykk aayxpmve oacaxgjoo mjpavjuhw" 310 two "jk bnhc jjrxpjkb mjpavjuhw fibokdry igju jk zm zm xh"
285 four "gazrt jk ephknonq myjp uenvbm wuvajhwqz jk zm xnxhf nvfasfh" 311 three "wxe ogttbykvt uhzq xr iaf zf urvysbnykk aayxpmve oacaxgjoo mjpavjuhw"
286 five "zm aayxpmve csjqxhgj xnxhf xr jk aayxpmve xnxhf zm zm" 312 four "gazrt jk ephknonq myjp uenvbm wuvajhwqz jk zm xnxhf nvfasfh"
287 six "sokcyf zm ogyavjvv jk zm fibokdry zm jk igju igju" 313 five "zm aayxpmve csjqxhgj xnxhf xr jk aayxpmve xnxhf zm zm"
288 seven "vgsld bvgimjik xuprtlyle jk akmikrqyt jk aayxpmve hkfoudzftq ddjj" 314 six "sokcyf zm ogyavjvv jk zm fibokdry zm jk igju igju"
289 eight "zm uhzq ovkyevlgv zk uenvbm csjqxhgj jk vgsld pgybs jk" 315 seven "vgsld bvgimjik xuprtlyle jk akmikrqyt jk aayxpmve hkfoudzftq ddjj"
290 nine "zm agmckuiu zexh fibokdry jk uhzq bu tugflixoex xnxhf sk" 316 eight "zm uhzq ovkyevlgv zk uenvbm csjqxhgj jk vgsld pgybs jk"
291 } { 317 nine "zm agmckuiu zexh fibokdry jk uhzq bu tugflixoex xnxhf sk"
292 append contents "INSERT INTO t1 VALUES('$num', '$doc');"
293 }
294 do_allbackcompat_test {
295 if {[code1 {set ::sqlite_options(fts3)}]
296 && [code2 {set ::sqlite_options(fts3)}]
297 } { 318 } {
319 append contents "INSERT INTO t1 VALUES('$num', '$doc');"
320 }
321 do_allbackcompat_test {
322 if {[code1 {set ::sqlite_options(fts3)}]
323 && [code2 {set ::sqlite_options(fts3)}]
324 } {
325
326 do_test backcompat-3.1 { sql1 $contents } {}
327
328 foreach {n q} {
329 1 "SELECT * FROM t1 ORDER BY a, b"
330 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
331 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
332 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
333 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
334 } {
335 do_test backcompat-3.2 [list sql1 $q] [sql2 $q]
336 }
337
338 do_test backcompat-3.3 { sql1 {
339 INSERT INTO t1 SELECT * FROM t1;
340 INSERT INTO t1 SELECT * FROM t1;
341 INSERT INTO t1 SELECT * FROM t1;
342 INSERT INTO t1 SELECT * FROM t1;
343 INSERT INTO t1 SELECT * FROM t1;
344 INSERT INTO t1 SELECT * FROM t1;
345 INSERT INTO t1 SELECT * FROM t1;
346 INSERT INTO t1 SELECT * FROM t1;
347 } } {}
348
349 foreach {n q} {
350 1 "SELECT * FROM t1 ORDER BY a, b"
351 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
352 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
353 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
354 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
355 } {
356 do_test backcompat-3.4 [list sql1 $q] [sql2 $q]
357 }
358
359 set alphabet "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4"
360 for {set i 0} {$i < 900} {incr i} {
361 set term "[lindex $alphabet [expr $i/30]][lindex $alphabet [expr $i%30]] "
362 sql1 "INSERT INTO t1 VALUES($i, '[string repeat $term 14]')"
363 }
364
365 foreach {n q} {
366 1 "SELECT * FROM t1 ORDER BY a, b"
367 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
368 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
369 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
370 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
371
372 6 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'aa'"
373 7 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH '44'"
374 8 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'a*'"
375 } {
376 do_test backcompat-3.5 [list sql1 $q] [sql2 $q]
377 }
378
379 do_test backcompat-3.6 {
380 sql1 "SELECT optimize(t1) FROM t1 LIMIT 1"
381 } {{Index optimized}}
382
383 foreach {n q} {
384 1 "SELECT * FROM t1 ORDER BY a, b"
385 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
386 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
387 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
388 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
389
390 6 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'aa'"
391 7 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH '44'"
392 8 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'a*'"
393 } {
394 do_test backcompat-3.7 [list sql1 $q] [sql2 $q]
395 }
298 396
299 do_test backcompat-3.1 { sql1 $contents } {} 397 # Now test that an incremental merge can be started by one version
398 # and finished by another. And that the integrity-check still
399 # passes.
400 do_test backcompat-3.8 {
401 sql1 {
402 DROP TABLE IF EXISTS t1;
403 DROP TABLE IF EXISTS t2;
404 CREATE TABLE t1(docid, words);
405 CREATE VIRTUAL TABLE t2 USING fts3(words);
406 }
407 code1 [list source $testdir/genesis.tcl]
408 code1 { fts_kjv_genesis }
409 sql1 {
410 INSERT INTO t2 SELECT words FROM t1;
411 INSERT INTO t2 SELECT words FROM t1;
412 INSERT INTO t2 SELECT words FROM t1;
413 INSERT INTO t2 SELECT words FROM t1;
414 INSERT INTO t2 SELECT words FROM t1;
415 INSERT INTO t2 SELECT words FROM t1;
416 SELECT level, group_concat(idx, ' ') FROM t2_segdir GROUP BY level;
417 }
418 } {0 {0 1 2 3 4 5}}
300 419
301 foreach {n q} { 420 if {[code1 { set ::sqlite_libversion }] >=3071200
302 1 "SELECT * FROM t1 ORDER BY a, b" 421 && [code2 { set ::sqlite_libversion }] >=3071200
303 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'" 422 } {
304 3 "SELECT * FROM t1 WHERE a MATCH 'five'" 423 do_test backcompat-3.9 {
305 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'" 424 sql1 { INSERT INTO t2(t2) VALUES('merge=100,4'); }
306 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'" 425 sql2 { INSERT INTO t2(t2) VALUES('merge=100,4'); }
307 } { 426 sql1 { INSERT INTO t2(t2) VALUES('merge=100,4'); }
308 do_test backcompat-3.2 [list sql1 $q] [sql2 $q] 427 sql2 { INSERT INTO t2(t2) VALUES('merge=2500,4'); }
309 } 428 sql2 {
429 SELECT level, group_concat(idx, ' ') FROM t2_segdir GROUP BY level;
430 }
431 } {0 {0 1} 1 0}
310 432
311 do_test backcompat-3.3 { sql1 { 433 do_test backcompat-3.10 {
312 INSERT INTO t1 SELECT * FROM t1; 434 sql1 { INSERT INTO t2(t2) VALUES('integrity-check') }
313 INSERT INTO t1 SELECT * FROM t1; 435 sql2 { INSERT INTO t2(t2) VALUES('integrity-check') }
314 INSERT INTO t1 SELECT * FROM t1; 436 } {}
315 INSERT INTO t1 SELECT * FROM t1; 437 }
316 INSERT INTO t1 SELECT * FROM t1;
317 INSERT INTO t1 SELECT * FROM t1;
318 INSERT INTO t1 SELECT * FROM t1;
319 INSERT INTO t1 SELECT * FROM t1;
320 } } {}
321
322 foreach {n q} {
323 1 "SELECT * FROM t1 ORDER BY a, b"
324 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
325 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
326 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
327 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
328 } {
329 do_test backcompat-3.4 [list sql1 $q] [sql2 $q]
330 }
331
332 set alphabet "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4"
333 for {set i 0} {$i < 900} {incr i} {
334 set term "[lindex $alphabet [expr $i/30]][lindex $alphabet [expr $i%30]] "
335 sql1 "INSERT INTO t1 VALUES($i, '[string repeat $term 14]')"
336 }
337
338 foreach {n q} {
339 1 "SELECT * FROM t1 ORDER BY a, b"
340 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
341 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
342 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
343 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
344
345 6 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'aa'"
346 7 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH '44'"
347 8 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'a*'"
348 } {
349 do_test backcompat-3.5 [list sql1 $q] [sql2 $q]
350 }
351
352 do_test backcompat-3.6 {
353 sql1 "SELECT optimize(t1) FROM t1 LIMIT 1"
354 } {{Index optimized}}
355
356 foreach {n q} {
357 1 "SELECT * FROM t1 ORDER BY a, b"
358 2 "SELECT rowid FROM t1 WHERE a MATCH 'five'"
359 3 "SELECT * FROM t1 WHERE a MATCH 'five'"
360 4 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'jk'"
361 5 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'tug* OR eight'"
362
363 6 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'aa'"
364 7 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH '44'"
365 8 "SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'a*'"
366 } {
367 do_test backcompat-3.7 [list sql1 $q] [sql2 $q]
368 } 438 }
369 } 439 }
370 } 440 }
371 441
372 #------------------------------------------------------------------------- 442 #-------------------------------------------------------------------------
373 # Test that Rtree tables may be read/written by different versions of 443 # Test that Rtree tables may be read/written by different versions of
374 # SQLite. 444 # SQLite.
375 # 445 #
376 set contents { 446 ifcapable rtree {
377 CREATE VIRTUAL TABLE t1 USING rtree(id, x1, x2, y1, y2); 447 set contents {
378 } 448 CREATE VIRTUAL TABLE t1 USING rtree(id, x1, x2, y1, y2);
379 foreach {id x1 x2 y1 y2} { 449 }
380 1 -47.64 43.87 33.86 34.42 2 -21.51 17.32 2.05 31.04 450 foreach {id x1 x2 y1 y2} {
381 3 -43.67 -38.33 -19.79 3.43 4 32.41 35.16 9.12 19.82 451 1 -47.64 43.87 33.86 34.42 2 -21.51 17.32 2.05 31.04
382 5 33.28 34.87 14.78 28.26 6 49.31 116.59 -9.87 75.09 452 3 -43.67 -38.33 -19.79 3.43 4 32.41 35.16 9.12 19.82
383 7 -14.93 34.51 -17.64 64.09 8 -43.05 23.43 -1.19 69.44 453 5 33.28 34.87 14.78 28.26 6 49.31 116.59 -9.87 75.09
384 9 44.79 133.56 28.09 80.30 10 -2.66 81.47 -41.38 -10.46 454 7 -14.93 34.51 -17.64 64.09 8 -43.05 23.43 -1.19 69.44
385 11 -42.89 -3.54 15.76 71.63 12 -3.50 84.96 -11.64 64.95 455 9 44.79 133.56 28.09 80.30 10 -2.66 81.47 -41.38 -10.46
386 13 -45.69 26.25 11.14 55.06 14 -44.09 11.23 17.52 44.45 456 11 -42.89 -3.54 15.76 71.63 12 -3.50 84.96 -11.64 64.95
387 15 36.23 133.49 -19.38 53.67 16 -17.89 81.54 14.64 50.61 457 13 -45.69 26.25 11.14 55.06 14 -44.09 11.23 17.52 44.45
388 17 -41.97 -24.04 -39.43 28.95 18 -5.85 7.76 -6.38 47.02 458 15 36.23 133.49 -19.38 53.67 16 -17.89 81.54 14.64 50.61
389 19 18.82 27.10 42.82 100.09 20 39.17 113.45 26.14 73.47 459 17 -41.97 -24.04 -39.43 28.95 18 -5.85 7.76 -6.38 47.02
390 21 22.31 103.17 49.92 106.05 22 -43.06 40.38 -1.75 76.08 460 19 18.82 27.10 42.82 100.09 20 39.17 113.45 26.14 73.47
391 23 2.43 57.27 -14.19 -3.83 24 -47.57 -4.35 8.93 100.06 461 21 22.31 103.17 49.92 106.05 22 -43.06 40.38 -1.75 76.08
392 25 -37.47 49.14 -29.11 8.81 26 -7.86 75.72 49.34 107.42 462 23 2.43 57.27 -14.19 -3.83 24 -47.57 -4.35 8.93 100.06
393 27 1.53 45.49 20.36 49.74 28 -48.48 32.54 28.81 54.45 463 25 -37.47 49.14 -29.11 8.81 26 -7.86 75.72 49.34 107.42
394 29 2.67 39.77 -4.05 13.67 30 4.11 62.88 -47.44 -5.72 464 27 1.53 45.49 20.36 49.74 28 -48.48 32.54 28.81 54.45
395 31 -21.47 51.75 37.25 116.09 32 45.59 111.37 -6.43 43.64 465 29 2.67 39.77 -4.05 13.67 30 4.11 62.88 -47.44 -5.72
396 33 35.23 48.29 23.54 113.33 34 16.61 68.35 -14.69 65.97 466 31 -21.47 51.75 37.25 116.09 32 45.59 111.37 -6.43 43.64
397 35 13.98 16.60 48.66 102.87 36 19.74 23.84 31.15 77.27 467 33 35.23 48.29 23.54 113.33 34 16.61 68.35 -14.69 65.97
398 37 -27.61 24.43 7.96 94.91 38 -34.77 12.05 -22.60 -6.29 468 35 13.98 16.60 48.66 102.87 36 19.74 23.84 31.15 77.27
399 39 -25.83 8.71 -13.48 -12.53 40 -17.11 -1.01 18.06 67.89 469 37 -27.61 24.43 7.96 94.91 38 -34.77 12.05 -22.60 -6.29
400 41 14.13 71.72 -3.78 39.25 42 23.75 76.00 -16.30 8.23 470 39 -25.83 8.71 -13.48 -12.53 40 -17.11 -1.01 18.06 67.89
401 43 -39.15 28.63 38.12 125.88 44 48.62 86.09 36.49 102.95 471 41 14.13 71.72 -3.78 39.25 42 23.75 76.00 -16.30 8.23
402 45 -31.39 -21.98 2.52 89.78 46 5.65 56.04 15.94 89.10 472 43 -39.15 28.63 38.12 125.88 44 48.62 86.09 36.49 102.95
403 47 18.28 95.81 46.46 143.08 48 30.93 102.82 -20.08 37.36 473 45 -31.39 -21.98 2.52 89.78 46 5.65 56.04 15.94 89.10
404 49 -20.78 -3.48 -5.58 35.46 50 49.85 90.58 -24.48 46.29 474 47 18.28 95.81 46.46 143.08 48 30.93 102.82 -20.08 37.36
405 } { 475 49 -20.78 -3.48 -5.58 35.46 50 49.85 90.58 -24.48 46.29
406 if {$x1 >= $x2 || $y1 >= $y2} { error "$x1 $x2 $y1 $y2" }
407 append contents "INSERT INTO t1 VALUES($id, $x1, $x2, $y1, $y2);"
408 }
409 set queries {
410 1 "SELECT id FROM t1 WHERE x1>10 AND x2<44"
411 2 "SELECT id FROM t1 WHERE y1<100"
412 3 "SELECT id FROM t1 WHERE y1<100 AND x1>0"
413 4 "SELECT id FROM t1 WHERE y1>10 AND x1>0 AND x2<50 AND y2<550"
414 }
415 do_allbackcompat_test {
416 if {[code1 {set ::sqlite_options(fts3)}]
417 && [code2 {set ::sqlite_options(fts3)}]
418 } { 476 } {
419 477 if {$x1 >= $x2 || $y1 >= $y2} { error "$x1 $x2 $y1 $y2" }
420 do_test backcompat-4.1 { sql1 $contents } {} 478 append contents "INSERT INTO t1 VALUES($id, $x1, $x2, $y1, $y2);"
421 479 }
422 foreach {n q} $::queries { 480 set queries {
423 do_test backcompat-4.2.$n [list sql1 $q] [sql2 $q] 481 1 "SELECT id FROM t1 WHERE x1>10 AND x2<44"
482 2 "SELECT id FROM t1 WHERE y1<100"
483 3 "SELECT id FROM t1 WHERE y1<100 AND x1>0"
484 4 "SELECT id FROM t1 WHERE y1>10 AND x1>0 AND x2<50 AND y2<550"
485 }
486 do_allbackcompat_test {
487 if {[code1 {set ::sqlite_options(fts3)}]
488 && [code2 {set ::sqlite_options(fts3)}]
489 } {
490
491 do_test backcompat-4.1 { sql1 $contents } {}
492
493 foreach {n q} $::queries {
494 do_test backcompat-4.2.$n [list sql1 $q] [sql2 $q]
495 }
496
497 do_test backcompat-4.3 { sql1 {
498 INSERT INTO t1 SELECT id+100, x1+10.0, x2+10.0, y1-10.0, y2-10.0 FROM t1 ;
499 } } {}
500
501 foreach {n q} $::queries {
502 do_test backcompat-4.4.$n [list sql1 $q] [sql2 $q]
503 }
504
505 do_test backcompat-4.5 { sql2 {
506 INSERT INTO t1 SELECT id+200, x1+20.0, x2+20.0, y1-20.0, y2-20.0 FROM t1 ;
507 } } {}
508
509 foreach {n q} $::queries {
510 do_test backcompat-4.6.$n [list sql1 $q] [sql2 $q]
511 }
512
424 } 513 }
425
426 do_test backcompat-4.3 { sql1 {
427 INSERT INTO t1 SELECT id+100, x1+10.0, x2+10.0, y1-10.0, y2-10.0 FROM t1;
428 } } {}
429
430 foreach {n q} $::queries {
431 do_test backcompat-4.4.$n [list sql1 $q] [sql2 $q]
432 }
433
434 do_test backcompat-4.5 { sql2 {
435 INSERT INTO t1 SELECT id+200, x1+20.0, x2+20.0, y1-20.0, y2-20.0 FROM t1;
436 } } {}
437
438 foreach {n q} $::queries {
439 do_test backcompat-4.6.$n [list sql1 $q] [sql2 $q]
440 }
441
442 } 514 }
443 } 515 }
444 516
445 finish_test 517 finish_test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698