Artifact
2b27b4ae7c6b9d534b0412e0d99f989aa1f3b9cf:
- File
test/superlock.test
— part of check-in
[d51c086e]
at
2012-04-02 23:35:45
on branch apple-osx
— Merge in latest changes, autologging options, read only file system wal support, test config conditionalization, WAL frame write prebuffering
(user:
adam
size: 7970)
0000: 23 20 32 30 31 30 20 4e 6f 76 65 6d 62 65 72 20 # 2010 November
0010: 31 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 19.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 urce code. In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 # May you do
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 l..# May you
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 ..# May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 0a 73 65 74 20 ********.#..set
0170: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 testdir [file di
0180: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f rname $argv0].so
0190: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 urce $testdir/te
01a0: 73 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 ster.tcl.source
01b0: 24 74 65 73 74 64 69 72 2f 6c 6f 63 6b 5f 63 6f $testdir/lock_co
01c0: 6d 6d 6f 6e 2e 74 63 6c 0a 73 6f 75 72 63 65 20 mmon.tcl.source
01d0: 24 74 65 73 74 64 69 72 2f 77 61 6c 5f 63 6f 6d $testdir/wal_com
01e0: 6d 6f 6e 2e 74 63 6c 0a 0a 73 65 74 20 74 65 73 mon.tcl..set tes
01f0: 74 70 72 65 66 69 78 20 73 75 70 65 72 6c 6f 63 tprefix superloc
0200: 6b 0a 0a 23 20 54 65 73 74 20 6f 72 67 61 6e 69 k..# Test organi
0210: 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 20 20 31 2e zation:.#.# 1.
0220: 2a 3a 20 54 65 73 74 20 73 75 70 65 72 6c 6f 63 *: Test superloc
0230: 6b 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 k on a rollback
0240: 64 61 74 61 62 61 73 65 2e 20 54 65 73 74 20 74 database. Test t
0250: 68 61 74 20 6f 6e 63 65 20 74 68 65 20 64 62 20 hat once the db
0260: 69 73 0a 23 20 20 20 20 20 20 20 20 73 75 70 65 is.# supe
0270: 72 6c 6f 63 6b 65 64 2c 20 69 74 20 69 73 20 6e rlocked, it is n
0280: 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 ot possible for
0290: 61 20 73 65 63 6f 6e 64 20 63 6c 69 65 6e 74 20 a second client
02a0: 74 6f 20 72 65 61 64 20 66 72 6f 6d 0a 23 20 20 to read from.#
02b0: 20 20 20 20 20 20 69 74 2e 0a 23 0a 23 20 20 20 it..#.#
02c0: 32 2e 2a 3a 20 54 65 73 74 20 73 75 70 65 72 6c 2.*: Test superl
02d0: 6f 63 6b 20 6f 6e 20 61 20 57 41 4c 20 64 61 74 ock on a WAL dat
02e0: 61 62 61 73 65 20 77 69 74 68 20 7a 65 72 6f 20 abase with zero
02f0: 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 frames in the WA
0300: 4c 20 66 69 6c 65 2e 0a 23 20 20 20 20 20 20 20 L file..#
0310: 20 54 65 73 74 20 74 68 61 74 20 6f 6e 63 65 20 Test that once
0320: 74 68 65 20 64 62 20 69 73 20 73 75 70 65 72 6c the db is superl
0330: 6f 63 6b 65 64 2c 20 69 74 20 69 73 20 6e 6f 74 ocked, it is not
0340: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 61 possible to rea
0350: 64 2c 0a 23 20 20 20 20 20 20 20 20 77 72 69 74 d,.# writ
0360: 65 20 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 e or checkpoint
0370: 74 68 65 20 64 62 2e 0a 23 0a 23 20 20 20 33 2e the db..#.# 3.
0380: 2a 3a 20 41 73 20 32 2e 2a 2c 20 66 6f 72 20 57 *: As 2.*, for W
0390: 41 4c 20 64 61 74 61 62 61 73 65 73 20 77 69 74 AL databases wit
03a0: 68 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 72 h one or more fr
03b0: 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c 2e ames in the WAL.
03c0: 0a 23 0a 23 20 20 20 34 2e 2a 3a 20 41 73 20 32 .#.# 4.*: As 2
03d0: 2e 2a 2c 20 66 6f 72 20 57 41 4c 20 64 61 74 61 .*, for WAL data
03e0: 62 61 73 65 73 20 77 69 74 68 20 6f 6e 65 20 6f bases with one o
03f0: 72 20 6d 6f 72 65 20 63 68 65 63 6b 70 6f 69 6e r more checkpoin
0400: 74 65 64 20 66 72 61 6d 65 73 20 0a 23 20 20 20 ted frames .#
0410: 20 20 20 20 20 69 6e 20 74 68 65 20 57 41 4c 2e in the WAL.
0420: 0a 23 0a 23 20 20 20 35 2e 2a 3a 20 54 65 73 74 .#.# 5.*: Test
0430: 20 74 68 61 74 20 61 20 63 61 6c 6c 20 74 6f 20 that a call to
0440: 73 71 6c 69 74 65 33 64 65 6d 6f 5f 73 75 70 65 sqlite3demo_supe
0450: 72 6c 6f 63 6b 28 29 20 75 73 65 73 20 74 68 65 rlock() uses the
0460: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 0a 23 20 busy handler.#
0470: 20 20 20 20 20 20 20 63 6f 72 72 65 63 74 6c 79 correctly
0480: 20 74 6f 20 77 61 69 74 20 66 6f 72 20 65 78 69 to wait for exi
0490: 73 74 69 6e 67 20 63 6c 69 65 6e 74 73 20 74 6f sting clients to
04a0: 20 63 6c 65 61 72 20 6f 6e 20 61 20 57 41 4c 20 clear on a WAL
04b0: 64 61 74 61 62 61 73 65 2e 0a 23 20 20 20 20 20 database..#
04c0: 20 20 20 41 6e 64 20 72 65 74 75 72 6e 73 20 53 And returns S
04d0: 51 4c 49 54 45 5f 42 55 53 59 20 69 66 20 6e 6f QLITE_BUSY if no
04e0: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73 busy handler is
04f0: 20 64 65 66 69 6e 65 64 20 6f 72 20 74 68 65 20 defined or the
0500: 62 75 73 79 0a 23 20 20 20 20 20 20 20 20 68 61 busy.# ha
0510: 6e 64 6c 65 72 20 72 65 74 75 72 6e 73 20 30 20 ndler returns 0
0520: 62 65 66 6f 72 65 20 73 61 69 64 20 63 6c 69 65 before said clie
0530: 6e 74 73 20 72 65 6c 69 6e 71 75 69 73 68 20 74 nts relinquish t
0540: 68 65 69 72 20 6c 6f 63 6b 73 2e 0a 23 0a 23 20 heir locks..#.#
0550: 20 20 36 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 6.*: Test that
0560: 20 69 66 20 61 20 73 75 70 65 72 6c 6f 63 6b 65 if a superlocke
0570: 64 20 57 41 4c 20 64 61 74 61 62 61 73 65 20 69 d WAL database i
0580: 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2c 20 65 s overwritten, e
0590: 78 69 73 74 69 6e 67 0a 23 20 20 20 20 20 20 20 xisting.#
05a0: 20 63 6c 69 65 6e 74 73 20 72 75 6e 20 74 68 65 clients run the
05b0: 20 72 65 63 6f 76 65 72 79 20 74 6f 20 62 75 69 recovery to bui
05c0: 6c 64 20 74 68 65 20 6e 65 77 20 77 61 6c 2d 69 ld the new wal-i
05d0: 6e 64 65 78 20 61 66 74 65 72 20 74 68 65 20 0a ndex after the .
05e0: 23 20 20 20 20 20 20 20 20 73 75 70 65 72 6c 6f # superlo
05f0: 63 6b 20 69 73 20 72 65 6c 65 61 73 65 64 2e 0a ck is released..
0600: 23 20 20 20 20 20 20 20 20 0a 23 0a 0a 69 66 20 # .#..if
0610: 7b 5b 66 6f 72 63 65 64 5f 70 72 6f 78 79 5f 6c {[forced_proxy_l
0620: 6f 63 6b 69 6e 67 5d 7d 20 7b 0a 20 20 66 69 6e ocking]} {. fin
0630: 69 73 68 5f 74 65 73 74 20 0a 20 20 72 65 74 75 ish_test . retu
0640: 72 6e 20 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 rn .}..do_execsq
0650: 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20 43 l_test 1.1 {. C
0660: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 REATE TABLE t1(a
0670: 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 , b);. INSERT I
0680: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c NTO t1 VALUES(1,
0690: 20 32 29 3b 0a 20 20 50 52 41 47 4d 41 20 6a 6f 2);. PRAGMA jo
06a0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 44 45 4c urnal_mode = DEL
06b0: 45 54 45 3b 0a 7d 20 7b 64 65 6c 65 74 65 7d 0a ETE;.} {delete}.
06c0: 0a 69 66 63 61 70 61 62 6c 65 20 21 77 61 6c 20 .ifcapable !wal
06d0: 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a {. finish_test.
06e0: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 return.}..do_t
06f0: 65 73 74 20 31 2e 32 20 7b 20 73 71 6c 69 74 65 est 1.2 { sqlite
0700: 33 64 65 6d 6f 5f 73 75 70 65 72 6c 6f 63 6b 20 3demo_superlock
0710: 75 6e 6c 6f 63 6b 20 74 65 73 74 2e 64 62 20 7d unlock test.db }
0720: 20 7b 75 6e 6c 6f 63 6b 7d 0a 64 6f 5f 63 61 74 {unlock}.do_cat
0730: 63 68 73 71 6c 5f 74 65 73 74 20 31 2e 33 20 7b chsql_test 1.3 {
0740: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 SELECT * FROM t
0750: 31 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 1 } {1 {database
0760: 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f is locked}}.do_
0770: 74 65 73 74 20 31 2e 34 20 7b 20 75 6e 6c 6f 63 test 1.4 { unloc
0780: 6b 20 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c k } {}..ifcapabl
0790: 65 20 21 77 61 6c 20 7b 66 69 6e 69 73 68 5f 74 e !wal {finish_t
07a0: 65 73 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 69 est ; return }.i
07b0: 66 20 7b 20 21 5b 77 61 6c 5f 69 73 5f 6f 6b 5d f { ![wal_is_ok]
07c0: 20 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 } {. finish_te
07d0: 73 74 20 0a 20 20 72 65 74 75 72 6e 20 0a 7d 0a st . return .}.
07e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 .do_execsql_test
07f0: 20 32 2e 31 20 7b 20 0a 20 20 49 4e 53 45 52 54 2.1 { . INSERT
0800: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 INTO t1 VALUES(
0810: 33 2c 20 34 29 3b 0a 20 20 50 52 41 47 4d 41 20 3, 4);. PRAGMA
0820: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 57 journal_mode = W
0830: 41 4c 3b 0a 7d 20 7b 77 61 6c 7d 0a 0a 64 6f 5f AL;.} {wal}..do_
0840: 74 65 73 74 20 32 2e 32 20 7b 20 73 71 6c 69 74 test 2.2 { sqlit
0850: 65 33 64 65 6d 6f 5f 73 75 70 65 72 6c 6f 63 6b e3demo_superlock
0860: 20 75 6e 6c 6f 63 6b 20 74 65 73 74 2e 64 62 20 unlock test.db
0870: 7d 20 7b 75 6e 6c 6f 63 6b 7d 0a 64 6f 5f 63 61 } {unlock}.do_ca
0880: 74 63 68 73 71 6c 5f 74 65 73 74 20 32 2e 33 20 tchsql_test 2.3
0890: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 { SELECT * FROM
08a0: 74 31 20 7d 20 20 20 20 20 20 20 20 20 20 20 7b t1 } {
08b0: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 1 {database is l
08c0: 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 63 61 74 63 68 ocked}}.do_catch
08d0: 73 71 6c 5f 74 65 73 74 20 32 2e 34 20 7b 20 49 sql_test 2.4 { I
08e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 NSERT INTO t1 VA
08f0: 4c 55 45 53 28 35 2c 20 36 29 7d 20 7b 31 20 7b LUES(5, 6)} {1 {
0900: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b database is lock
0910: 65 64 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c ed}}.do_catchsql
0920: 5f 74 65 73 74 20 32 2e 35 20 7b 20 50 52 41 47 _test 2.5 { PRAG
0930: 4d 41 20 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e MA wal_checkpoin
0940: 74 20 7d 20 20 20 20 20 20 7b 30 20 7b 31 20 2d t } {0 {1 -
0950: 31 20 2d 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 32 1 -1}}.do_test 2
0960: 2e 36 20 7b 20 75 6e 6c 6f 63 6b 20 7d 20 7b 7d .6 { unlock } {}
0970: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 ..do_execsql_tes
0980: 74 20 33 2e 31 20 7b 20 49 4e 53 45 52 54 20 49 t 3.1 { INSERT I
0990: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c NTO t1 VALUES(3,
09a0: 20 34 29 20 7d 20 0a 0a 64 6f 5f 74 65 73 74 20 4) } ..do_test
09b0: 33 2e 32 20 7b 20 73 71 6c 69 74 65 33 64 65 6d 3.2 { sqlite3dem
09c0: 6f 5f 73 75 70 65 72 6c 6f 63 6b 20 75 6e 6c 6f o_superlock unlo
09d0: 63 6b 20 74 65 73 74 2e 64 62 20 7d 20 7b 75 6e ck test.db } {un
09e0: 6c 6f 63 6b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 lock}.do_catchsq
09f0: 6c 5f 74 65 73 74 20 33 2e 33 20 7b 20 53 45 4c l_test 3.3 { SEL
0a00: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 ECT * FROM t1 }
0a10: 20 20 20 20 20 20 20 20 20 20 7b 31 20 7b 64 61 {1 {da
0a20: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 tabase is locked
0a30: 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 }}.do_catchsql_t
0a40: 65 73 74 20 33 2e 34 20 7b 20 49 4e 53 45 52 54 est 3.4 { INSERT
0a50: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 INTO t1 VALUES(
0a60: 35 2c 20 36 29 7d 20 7b 31 20 7b 64 61 74 61 62 5, 6)} {1 {datab
0a70: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a ase is locked}}.
0a80: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 do_catchsql_test
0a90: 20 33 2e 35 20 7b 20 50 52 41 47 4d 41 20 77 61 3.5 { PRAGMA wa
0aa0: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 7d 20 20 l_checkpoint }
0ab0: 20 20 20 20 7b 30 20 7b 31 20 2d 31 20 2d 31 7d {0 {1 -1 -1}
0ac0: 7d 0a 64 6f 5f 74 65 73 74 20 33 2e 36 20 7b 20 }.do_test 3.6 {
0ad0: 75 6e 6c 6f 63 6b 20 7d 20 7b 7d 0a 0a 23 20 41 unlock } {}..# A
0ae0: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 74 68 65 t this point the
0af0: 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 WAL file consis
0b00: 74 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 66 ts of a single f
0b10: 72 61 6d 65 20 6f 6e 6c 79 20 2d 20 77 72 69 74 rame only - writ
0b20: 74 65 6e 0a 23 20 62 79 20 74 65 73 74 20 63 61 ten.# by test ca
0b30: 73 65 20 33 2e 31 2e 20 49 66 20 74 68 65 20 5a se 3.1. If the Z
0b40: 45 52 4f 5f 44 41 4d 41 47 45 20 66 6c 61 67 20 ERO_DAMAGE flag
0b50: 77 65 72 65 20 6e 6f 74 20 73 65 74 2c 20 69 74 were not set, it
0b60: 20 77 6f 75 6c 64 20 63 6f 6e 73 69 73 74 0a 23 would consist.#
0b70: 20 6f 66 20 74 77 6f 20 66 72 61 6d 65 73 20 2d of two frames -
0b80: 20 74 68 65 20 66 72 61 6d 65 20 77 72 69 74 74 the frame writt
0b90: 65 6e 20 62 79 20 33 2e 31 20 61 6e 64 20 61 20 en by 3.1 and a
0ba0: 70 61 64 64 69 6e 67 20 66 72 61 6d 65 2e 0a 64 padding frame..d
0bb0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 o_execsql_test 4
0bc0: 2e 31 20 7b 20 50 52 41 47 4d 41 20 77 61 6c 5f .1 { PRAGMA wal_
0bd0: 63 68 65 63 6b 70 6f 69 6e 74 20 7d 20 7b 30 20 checkpoint } {0
0be0: 31 20 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 34 2e 1 1}..do_test 4.
0bf0: 32 20 7b 20 73 71 6c 69 74 65 33 64 65 6d 6f 5f 2 { sqlite3demo_
0c00: 73 75 70 65 72 6c 6f 63 6b 20 75 6e 6c 6f 63 6b superlock unlock
0c10: 20 74 65 73 74 2e 64 62 20 7d 20 7b 75 6e 6c 6f test.db } {unlo
0c20: 63 6b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f ck}.do_catchsql_
0c30: 74 65 73 74 20 34 2e 33 20 7b 20 53 45 4c 45 43 test 4.3 { SELEC
0c40: 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 20 20 T * FROM t1 }
0c50: 20 20 20 20 20 20 20 20 7b 31 20 7b 64 61 74 61 {1 {data
0c60: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d base is locked}}
0c70: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 .do_catchsql_tes
0c80: 74 20 34 2e 34 20 7b 20 49 4e 53 45 52 54 20 49 t 4.4 { INSERT I
0c90: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 2c NTO t1 VALUES(5,
0ca0: 20 36 29 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 6)} {1 {databas
0cb0: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64 6f e is locked}}.do
0cc0: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 _catchsql_test 4
0cd0: 2e 35 20 7b 20 50 52 41 47 4d 41 20 77 61 6c 5f .5 { PRAGMA wal_
0ce0: 63 68 65 63 6b 70 6f 69 6e 74 20 7d 20 20 20 20 checkpoint }
0cf0: 20 20 7b 30 20 7b 31 20 2d 31 20 2d 31 7d 7d 0a {0 {1 -1 -1}}.
0d00: 64 6f 5f 74 65 73 74 20 34 2e 36 20 7b 20 75 6e do_test 4.6 { un
0d10: 6c 6f 63 6b 20 7d 20 7b 7d 0a 0a 64 6f 5f 6d 75 lock } {}..do_mu
0d20: 6c 74 69 63 6c 69 65 6e 74 5f 74 65 73 74 20 74 lticlient_test t
0d30: 6e 20 7b 0a 0a 20 20 70 72 6f 63 20 62 75 73 79 n {.. proc busy
0d40: 68 61 6e 64 6c 65 72 20 7b 78 7d 20 7b 0a 20 20 handler {x} {.
0d50: 20 20 73 77 69 74 63 68 20 2d 2d 20 24 78 20 7b switch -- $x {
0d60: 0a 20 20 20 20 20 20 31 20 7b 20 73 71 6c 31 20 . 1 { sql1
0d70: 22 43 4f 4d 4d 49 54 22 20 7d 0a 20 20 20 20 20 "COMMIT" }.
0d80: 20 32 20 7b 20 73 71 6c 32 20 22 43 4f 4d 4d 49 2 { sql2 "COMMI
0d90: 54 22 20 7d 0a 20 20 20 20 20 20 33 20 7b 20 73 T" }. 3 { s
0da0: 71 6c 33 20 22 43 4f 4d 4d 49 54 22 20 7d 0a 20 ql3 "COMMIT" }.
0db0: 20 20 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64 }. lappend
0dc0: 20 3a 3a 62 75 73 79 6c 69 73 74 20 24 78 0a 20 ::busylist $x.
0dd0: 20 20 20 72 65 74 75 72 6e 20 31 0a 20 20 7d 0a return 1. }.
0de0: 20 20 73 65 74 20 3a 3a 62 75 73 79 6c 69 73 74 set ::busylist
0df0: 20 5b 6c 69 73 74 5d 0a 0a 20 20 64 6f 5f 74 65 [list].. do_te
0e00: 73 74 20 35 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 st 5.$tn.1 {.
0e10: 20 73 71 6c 31 20 7b 0a 20 20 20 20 20 20 43 52 sql1 {. CR
0e20: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c EATE TABLE t1(a,
0e30: 20 62 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d b);. PRAGM
0e40: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d A journal_mode =
0e50: 20 57 41 4c 3b 0a 20 20 20 20 20 20 49 4e 53 45 WAL;. INSE
0e60: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 RT INTO t1 VALUE
0e70: 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 S(1, 2);. }.
0e80: 20 7d 20 7b 77 61 6c 7d 0a 0a 20 20 64 6f 5f 74 } {wal}.. do_t
0e90: 65 73 74 20 35 2e 24 74 6e 2e 32 20 7b 0a 20 20 est 5.$tn.2 {.
0ea0: 20 20 73 71 6c 31 20 7b 20 42 45 47 49 4e 20 3b sql1 { BEGIN ;
0eb0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 SELECT * FROM t
0ec0: 31 20 7d 0a 20 20 20 20 73 71 6c 32 20 7b 20 42 1 }. sql2 { B
0ed0: 45 47 49 4e 20 3b 20 49 4e 53 45 52 54 20 49 4e EGIN ; INSERT IN
0ee0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 TO t1 VALUES(3,
0ef0: 34 29 20 7d 0a 20 20 20 20 73 71 6c 33 20 7b 20 4) }. sql3 {
0f00: 42 45 47 49 4e 20 3b 20 53 45 4c 45 43 54 20 2a BEGIN ; SELECT *
0f10: 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 7d 20 7b FROM t1 }. } {
0f20: 31 20 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 1 2}.. do_test
0f30: 35 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 73 65 5.$tn.3 {. se
0f40: 74 20 3a 3a 62 75 73 79 6c 69 73 74 20 5b 6c 69 t ::busylist [li
0f50: 73 74 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 64 st]. sqlite3d
0f60: 65 6d 6f 5f 73 75 70 65 72 6c 6f 63 6b 20 75 6e emo_superlock un
0f70: 6c 6f 63 6b 20 74 65 73 74 2e 64 62 20 22 22 20 lock test.db ""
0f80: 62 75 73 79 68 61 6e 64 6c 65 72 0a 20 20 20 20 busyhandler.
0f90: 73 65 74 20 3a 3a 62 75 73 79 6c 69 73 74 0a 20 set ::busylist.
0fa0: 20 7d 20 7b 30 20 31 20 32 20 33 7d 0a 0a 20 20 } {0 1 2 3}..
0fb0: 64 6f 5f 74 65 73 74 20 35 2e 24 74 6e 2e 34 20 do_test 5.$tn.4
0fc0: 7b 20 63 73 71 6c 32 20 7b 20 53 45 4c 45 43 54 { csql2 { SELECT
0fd0: 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 7d 20 7b * FROM t1 } } {
0fe0: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 1 {database is l
0ff0: 6f 63 6b 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 ocked}}. do_tes
1000: 74 20 35 2e 24 74 6e 2e 35 20 7b 20 0a 20 20 20 t 5.$tn.5 { .
1010: 20 63 73 71 6c 33 20 7b 20 49 4e 53 45 52 54 20 csql3 { INSERT
1020: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 INTO t1 VALUES(5
1030: 2c 20 36 29 20 7d 20 0a 20 20 7d 20 7b 31 20 7b , 6) } . } {1 {
1040: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b database is lock
1050: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 35 ed}}. do_test 5
1060: 2e 24 74 6e 2e 36 20 7b 20 63 73 71 6c 31 20 22 .$tn.6 { csql1 "
1070: 50 52 41 47 4d 41 20 77 61 6c 5f 63 68 65 63 6b PRAGMA wal_check
1080: 70 6f 69 6e 74 22 20 7d 20 7b 30 20 7b 31 20 2d point" } {0 {1 -
1090: 31 20 2d 31 7d 7d 0a 0a 20 20 64 6f 5f 74 65 73 1 -1}}.. do_tes
10a0: 74 20 35 2e 24 74 6e 2e 37 20 7b 20 75 6e 6c 6f t 5.$tn.7 { unlo
10b0: 63 6b 20 7d 20 7b 7d 0a 0a 20 20 0a 20 20 64 6f ck } {}.. . do
10c0: 5f 74 65 73 74 20 35 2e 24 74 6e 2e 38 20 7b 0a _test 5.$tn.8 {.
10d0: 20 20 20 20 73 71 6c 31 20 7b 20 42 45 47 49 4e sql1 { BEGIN
10e0: 20 3b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d ; SELECT * FROM
10f0: 20 74 31 20 7d 0a 20 20 20 20 73 71 6c 32 20 7b t1 }. sql2 {
1100: 20 42 45 47 49 4e 20 3b 20 49 4e 53 45 52 54 20 BEGIN ; INSERT
1110: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 INTO t1 VALUES(5
1120: 2c 20 36 29 20 7d 0a 20 20 20 20 73 71 6c 33 20 , 6) }. sql3
1130: 7b 20 42 45 47 49 4e 20 3b 20 53 45 4c 45 43 54 { BEGIN ; SELECT
1140: 20 2a 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 7d * FROM t1 }. }
1150: 20 7b 31 20 32 20 33 20 34 7d 0a 0a 20 20 64 6f {1 2 3 4}.. do
1160: 5f 74 65 73 74 20 35 2e 24 74 6e 2e 39 20 7b 20 _test 5.$tn.9 {
1170: 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 . list [catch
1180: 20 7b 73 71 6c 69 74 65 33 64 65 6d 6f 5f 73 75 {sqlite3demo_su
1190: 70 65 72 6c 6f 63 6b 20 75 6e 6c 6f 63 6b 20 74 perlock unlock t
11a0: 65 73 74 2e 64 62 7d 20 6d 73 67 5d 20 24 6d 73 est.db} msg] $ms
11b0: 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 g. } {1 {databa
11c0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 se is locked}}.
11d0: 20 64 6f 5f 74 65 73 74 20 35 2e 24 74 6e 2e 31 do_test 5.$tn.1
11e0: 30 20 7b 20 0a 20 20 20 20 73 71 6c 31 20 43 4f 0 { . sql1 CO
11f0: 4d 4d 49 54 0a 20 20 20 20 6c 69 73 74 20 5b 63 MMIT. list [c
1200: 61 74 63 68 20 7b 73 71 6c 69 74 65 33 64 65 6d atch {sqlite3dem
1210: 6f 5f 73 75 70 65 72 6c 6f 63 6b 20 75 6e 6c 6f o_superlock unlo
1220: 63 6b 20 74 65 73 74 2e 64 62 7d 20 6d 73 67 5d ck test.db} msg]
1230: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61 $msg. } {1 {da
1240: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 tabase is locked
1250: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 35 2e 24 }}. do_test 5.$
1260: 74 6e 2e 31 31 20 7b 20 0a 20 20 20 20 73 71 6c tn.11 { . sql
1270: 32 20 43 4f 4d 4d 49 54 0a 20 20 20 20 6c 69 73 2 COMMIT. lis
1280: 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 t [catch {sqlite
1290: 33 64 65 6d 6f 5f 73 75 70 65 72 6c 6f 63 6b 20 3demo_superlock
12a0: 75 6e 6c 6f 63 6b 20 74 65 73 74 2e 64 62 7d 20 unlock test.db}
12b0: 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 msg] $msg. } {1
12c0: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f {database is lo
12d0: 63 6b 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 cked}}. do_test
12e0: 20 35 2e 24 74 6e 2e 31 32 20 7b 20 0a 20 20 20 5.$tn.12 { .
12f0: 20 73 71 6c 33 20 43 4f 4d 4d 49 54 0a 20 20 20 sql3 COMMIT.
1300: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 73 71 list [catch {sq
1310: 6c 69 74 65 33 64 65 6d 6f 5f 73 75 70 65 72 6c lite3demo_superl
1320: 6f 63 6b 20 75 6e 6c 6f 63 6b 20 74 65 73 74 2e ock unlock test.
1330: 64 62 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 db} msg] $msg.
1340: 7d 20 7b 30 20 75 6e 6c 6f 63 6b 7d 0a 20 20 75 } {0 unlock}. u
1350: 6e 6c 6f 63 6b 0a 0a 0a 20 20 64 6f 5f 74 65 73 nlock... do_tes
1360: 74 20 35 2e 24 74 6e 2e 31 33 20 7b 20 73 71 6c t 5.$tn.13 { sql
1370: 31 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 1 { SELECT * FRO
1380: 4d 20 74 31 20 7d 20 7d 20 7b 31 20 32 20 33 20 M t1 } } {1 2 3
1390: 34 20 35 20 36 7d 0a 20 20 64 6f 5f 74 65 73 74 4 5 6}. do_test
13a0: 20 35 2e 24 74 6e 2e 31 34 20 7b 20 73 71 6c 32 5.$tn.14 { sql2
13b0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d { SELECT * FROM
13c0: 20 74 31 20 7d 20 7d 20 7b 31 20 32 20 33 20 34 t1 } } {1 2 3 4
13d0: 20 35 20 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20 5 6}. do_test
13e0: 35 2e 24 74 6e 2e 31 35 20 7b 20 73 71 6c 69 74 5.$tn.15 { sqlit
13f0: 65 33 64 65 6d 6f 5f 73 75 70 65 72 6c 6f 63 6b e3demo_superlock
1400: 20 75 6e 6c 6f 63 6b 20 74 65 73 74 2e 64 62 20 unlock test.db
1410: 7d 20 7b 75 6e 6c 6f 63 6b 7d 0a 20 20 64 6f 5f } {unlock}. do_
1420: 74 65 73 74 20 35 2e 24 74 6e 2e 31 36 20 7b 20 test 5.$tn.16 {
1430: 75 6e 6c 6f 63 6b 20 7d 20 7b 7d 0a 20 20 64 6f unlock } {}. do
1440: 5f 74 65 73 74 20 35 2e 24 74 6e 2e 31 37 20 7b _test 5.$tn.17 {
1450: 20 73 71 6c 32 20 7b 20 53 45 4c 45 43 54 20 2a sql2 { SELECT *
1460: 20 46 52 4f 4d 20 74 31 20 7d 20 7d 20 7b 31 20 FROM t1 } } {1
1470: 32 20 33 20 34 20 35 20 36 7d 0a 20 20 64 6f 5f 2 3 4 5 6}. do_
1480: 74 65 73 74 20 35 2e 24 74 6e 2e 31 38 20 7b 20 test 5.$tn.18 {
1490: 73 71 6c 31 20 7b 20 53 45 4c 45 43 54 20 2a 20 sql1 { SELECT *
14a0: 46 52 4f 4d 20 74 31 20 7d 20 7d 20 7b 31 20 32 FROM t1 } } {1 2
14b0: 20 33 20 34 20 35 20 36 7d 0a 20 20 64 6f 5f 74 3 4 5 6}. do_t
14c0: 65 73 74 20 35 2e 24 74 6e 2e 31 39 20 7b 20 73 est 5.$tn.19 { s
14d0: 71 6c 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 ql2 { SELECT * F
14e0: 52 4f 4d 20 74 31 20 7d 20 7d 20 7b 31 20 32 20 ROM t1 } } {1 2
14f0: 33 20 34 20 35 20 36 7d 0a 7d 0a 0a 70 72 6f 63 3 4 5 6}.}..proc
1500: 20 72 65 61 64 5f 63 6f 6e 74 65 6e 74 20 7b 66 read_content {f
1510: 69 6c 65 7d 20 7b 0a 20 20 69 66 20 7b 5b 66 69 ile} {. if {[fi
1520: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 5d le exists $file]
1530: 3d 3d 30 7d 20 7b 72 65 74 75 72 6e 20 22 22 7d ==0} {return ""}
1540: 0a 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 . set fd [open
1550: 24 66 69 6c 65 5d 0a 20 20 66 63 6f 6e 66 69 67 $file]. fconfig
1560: 75 72 65 20 24 66 64 20 2d 65 6e 63 6f 64 69 6e ure $fd -encodin
1570: 67 20 62 69 6e 61 72 79 20 2d 74 72 61 6e 73 6c g binary -transl
1580: 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 73 ation binary. s
1590: 65 74 20 63 6f 6e 74 65 6e 74 20 5b 72 65 61 64 et content [read
15a0: 20 24 66 64 5d 0a 20 20 63 6c 6f 73 65 20 24 66 $fd]. close $f
15b0: 64 0a 20 20 72 65 74 75 72 6e 20 24 63 6f 6e 74 d. return $cont
15c0: 65 6e 74 0a 7d 0a 0a 70 72 6f 63 20 77 72 69 74 ent.}..proc writ
15d0: 65 5f 63 6f 6e 74 65 6e 74 20 7b 66 69 6c 65 20 e_content {file
15e0: 63 6f 6e 74 65 6e 74 7d 20 7b 0a 20 20 73 65 74 content} {. set
15f0: 20 66 64 20 5b 6f 70 65 6e 20 24 66 69 6c 65 20 fd [open $file
1600: 77 2b 5d 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 w+]. fconfigure
1610: 20 24 66 64 20 2d 65 6e 63 6f 64 69 6e 67 20 62 $fd -encoding b
1620: 69 6e 61 72 79 20 2d 74 72 61 6e 73 6c 61 74 69 inary -translati
1630: 6f 6e 20 62 69 6e 61 72 79 0a 20 20 70 75 74 73 on binary. puts
1640: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 64 20 -nonewline $fd
1650: 24 63 6f 6e 74 65 6e 74 0a 20 20 63 6c 6f 73 65 $content. close
1660: 20 24 66 64 0a 7d 0a 0a 23 20 42 6f 74 68 20 24 $fd.}..# Both $
1670: 66 69 6c 65 31 20 61 6e 64 20 24 66 69 6c 65 32 file1 and $file2
1680: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 66 69 are database fi
1690: 6c 65 73 2e 20 54 68 69 73 20 66 75 6e 63 74 69 les. This functi
16a0: 6f 6e 20 74 61 6b 65 73 20 61 20 0a 23 20 73 75 on takes a .# su
16b0: 70 65 72 6c 6f 63 6b 20 6f 6e 20 65 61 63 68 2c perlock on each,
16c0: 20 74 68 65 6e 20 65 78 63 68 61 6e 67 65 73 20 then exchanges
16d0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 the content of t
16e0: 68 65 20 74 77 6f 20 66 69 6c 65 73 20 28 69 2e he two files (i.
16f0: 65 2e 0a 23 20 6f 76 65 72 77 72 69 74 65 73 20 e..# overwrites
1700: 24 66 69 6c 65 31 20 77 69 74 68 20 74 68 65 20 $file1 with the
1710: 69 6e 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 73 initial contents
1720: 20 6f 66 20 24 66 69 6c 65 32 2c 20 61 6e 64 20 of $file2, and
1730: 6f 76 65 72 77 72 69 74 65 73 0a 23 20 24 66 69 overwrites.# $fi
1740: 6c 65 32 20 77 69 74 68 20 74 68 65 20 69 6e 69 le2 with the ini
1750: 74 69 61 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 tial contents of
1760: 20 24 66 69 6c 65 31 29 2e 20 54 68 65 20 63 6f $file1). The co
1770: 6e 74 65 6e 74 73 20 6f 66 20 61 6e 79 20 57 41 ntents of any WA
1780: 4c 20 0a 23 20 66 69 6c 65 20 69 73 20 61 6c 73 L .# file is als
1790: 6f 20 65 78 63 68 61 6e 67 65 64 2e 0a 23 0a 70 o exchanged..#.p
17a0: 72 6f 63 20 64 62 5f 73 77 61 70 20 7b 66 69 6c roc db_swap {fil
17b0: 65 31 20 66 69 6c 65 32 7d 20 7b 0a 20 20 73 71 e1 file2} {. sq
17c0: 6c 69 74 65 33 64 65 6d 6f 5f 73 75 70 65 72 6c lite3demo_superl
17d0: 6f 63 6b 20 75 6e 6c 6f 63 6b 31 20 24 66 69 6c ock unlock1 $fil
17e0: 65 31 0a 20 20 73 71 6c 69 74 65 33 64 65 6d 6f e1. sqlite3demo
17f0: 5f 73 75 70 65 72 6c 6f 63 6b 20 75 6e 6c 6f 63 _superlock unloc
1800: 6b 32 20 24 66 69 6c 65 32 0a 0a 20 20 73 65 74 k2 $file2.. set
1810: 20 64 62 31 20 5b 72 65 61 64 5f 63 6f 6e 74 65 db1 [read_conte
1820: 6e 74 20 24 66 69 6c 65 31 5d 0a 20 20 73 65 74 nt $file1]. set
1830: 20 64 62 32 20 5b 72 65 61 64 5f 63 6f 6e 74 65 db2 [read_conte
1840: 6e 74 20 24 66 69 6c 65 32 5d 0a 20 20 77 72 69 nt $file2]. wri
1850: 74 65 5f 63 6f 6e 74 65 6e 74 20 24 66 69 6c 65 te_content $file
1860: 31 20 24 64 62 32 0a 20 20 77 72 69 74 65 5f 63 1 $db2. write_c
1870: 6f 6e 74 65 6e 74 20 24 66 69 6c 65 32 20 24 64 ontent $file2 $d
1880: 62 31 0a 0a 20 20 73 65 74 20 77 61 6c 31 20 5b b1.. set wal1 [
1890: 72 65 61 64 5f 63 6f 6e 74 65 6e 74 20 24 7b 66 read_content ${f
18a0: 69 6c 65 31 7d 2d 77 61 6c 5d 0a 20 20 73 65 74 ile1}-wal]. set
18b0: 20 77 61 6c 32 20 5b 72 65 61 64 5f 63 6f 6e 74 wal2 [read_cont
18c0: 65 6e 74 20 24 7b 66 69 6c 65 32 7d 2d 77 61 6c ent ${file2}-wal
18d0: 5d 0a 20 20 77 72 69 74 65 5f 63 6f 6e 74 65 6e ]. write_conten
18e0: 74 20 24 7b 66 69 6c 65 31 7d 2d 77 61 6c 20 24 t ${file1}-wal $
18f0: 77 61 6c 32 0a 20 20 77 72 69 74 65 5f 63 6f 6e wal2. write_con
1900: 74 65 6e 74 20 24 7b 66 69 6c 65 32 7d 2d 77 61 tent ${file2}-wa
1910: 6c 20 24 77 61 6c 31 0a 0a 20 20 75 6e 6c 6f 63 l $wal1.. unloc
1920: 6b 31 0a 20 20 75 6e 6c 6f 63 6b 32 0a 7d 0a 0a k1. unlock2.}..
1930: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 forcedelete test
1940: 2e 64 62 0a 73 71 6c 69 74 65 33 20 64 62 20 20 .db.sqlite3 db
1950: 74 65 73 74 2e 64 62 0a 64 6f 5f 65 78 65 63 73 test.db.do_execs
1960: 71 6c 5f 74 65 73 74 20 36 2e 31 20 7b 0a 20 20 ql_test 6.1 {.
1970: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 32 ATTACH 'test.db2
1980: 27 20 41 53 20 61 75 78 3b 0a 20 20 50 52 41 47 ' AS aux;. PRAG
1990: 4d 41 20 61 75 78 2e 6a 6f 75 72 6e 61 6c 5f 6d MA aux.journal_m
19a0: 6f 64 65 20 3d 20 77 61 6c 3b 0a 20 20 43 52 45 ode = wal;. CRE
19b0: 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 32 ATE TABLE aux.t2
19c0: 28 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 (x, y);. INSERT
19d0: 20 49 4e 54 4f 20 61 75 78 2e 74 32 20 56 41 4c INTO aux.t2 VAL
19e0: 55 45 53 28 27 61 27 2c 20 27 62 27 29 3b 0a 20 UES('a', 'b');.
19f0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 PRAGMA schema_v
1a00: 65 72 73 69 6f 6e 20 3d 20 34 35 30 3b 0a 20 20 ersion = 450;.
1a10: 44 45 54 41 43 48 20 61 75 78 3b 0a 0a 20 20 50 DETACH aux;.. P
1a20: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e RAGMA main.journ
1a30: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 3b 0a 20 al_mode = wal;.
1a40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 CREATE TABLE t1
1a50: 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 (a, b);. INSERT
1a60: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 INTO t1 VALUES(
1a70: 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 1, 2);. INSERT
1a80: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 INTO t1 VALUES(3
1a90: 2c 20 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a , 4);. SELECT *
1aa0: 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 77 61 6c FROM t1;.} {wal
1ab0: 20 77 61 6c 20 31 20 32 20 33 20 34 7d 0a 0a 0a wal 1 2 3 4}...
1ac0: 64 62 5f 73 77 61 70 20 74 65 73 74 2e 64 62 32 db_swap test.db2
1ad0: 20 74 65 73 74 2e 64 62 0a 64 6f 5f 63 61 74 63 test.db.do_catc
1ae0: 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 20 7b 20 hsql_test 6.2 {
1af0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 SELECT * FROM t1
1b00: 20 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 } {1 {no such t
1b10: 61 62 6c 65 3a 20 74 31 7d 7d 0a 64 6f 5f 63 61 able: t1}}.do_ca
1b20: 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 33 20 tchsql_test 6.3
1b30: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 { SELECT * FROM
1b40: 74 32 20 7d 20 7b 30 20 7b 61 20 62 7d 7d 0a 0a t2 } {0 {a b}}..
1b50: 64 62 5f 73 77 61 70 20 74 65 73 74 2e 64 62 32 db_swap test.db2
1b60: 20 74 65 73 74 2e 64 62 0a 64 6f 5f 63 61 74 63 test.db.do_catc
1b70: 68 73 71 6c 5f 74 65 73 74 20 36 2e 34 20 7b 20 hsql_test 6.4 {
1b80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 SELECT * FROM t1
1b90: 20 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 7d 7d } {0 {1 2 3 4}}
1ba0: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 .do_catchsql_tes
1bb0: 74 20 36 2e 35 20 7b 20 53 45 4c 45 43 54 20 2a t 6.5 { SELECT *
1bc0: 20 46 52 4f 4d 20 74 32 20 7d 20 7b 31 20 7b 6e FROM t2 } {1 {n
1bd0: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32 o such table: t2
1be0: 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 }}..do_execsql_t
1bf0: 65 73 74 20 20 36 2e 36 20 7b 20 50 52 41 47 4d est 6.6 { PRAGM
1c00: 41 20 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 A wal_checkpoint
1c10: 20 7d 20 7b 30 20 30 20 30 7d 0a 0a 64 62 5f 73 } {0 0 0}..db_s
1c20: 77 61 70 20 74 65 73 74 2e 64 62 32 20 74 65 73 wap test.db2 tes
1c30: 74 2e 64 62 0a 64 6f 5f 63 61 74 63 68 73 71 6c t.db.do_catchsql
1c40: 5f 74 65 73 74 20 36 2e 37 20 7b 20 53 45 4c 45 _test 6.7 { SELE
1c50: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 7b CT * FROM t1 } {
1c60: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 1 {no such table
1c70: 3a 20 74 31 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 : t1}}.do_catchs
1c80: 71 6c 5f 74 65 73 74 20 36 2e 38 20 7b 20 53 45 ql_test 6.8 { SE
1c90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 7d LECT * FROM t2 }
1ca0: 20 7b 30 20 7b 61 20 62 7d 7d 0a 0a 64 62 5f 73 {0 {a b}}..db_s
1cb0: 77 61 70 20 74 65 73 74 2e 64 62 32 20 74 65 73 wap test.db2 tes
1cc0: 74 2e 64 62 0a 64 6f 5f 63 61 74 63 68 73 71 6c t.db.do_catchsql
1cd0: 5f 74 65 73 74 20 36 2e 39 20 7b 20 53 45 4c 45 _test 6.9 { SELE
1ce0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 7b CT * FROM t1 } {
1cf0: 30 20 7b 31 20 32 20 33 20 34 7d 7d 0a 64 6f 5f 0 {1 2 3 4}}.do_
1d00: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e catchsql_test 6.
1d10: 31 30 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 10 { SELECT * FR
1d20: 4f 4d 20 74 32 20 7d 20 7b 31 20 7b 6e 6f 20 73 OM t2 } {1 {no s
1d30: 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d 0a uch table: t2}}.
1d40: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 .do_execsql_test
1d50: 20 20 36 2e 31 31 20 7b 20 0a 20 20 50 52 41 47 6.11 { . PRAG
1d60: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 MA journal_mode
1d70: 3d 20 64 65 6c 65 74 65 3b 0a 20 20 50 52 41 47 = delete;. PRAG
1d80: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 35 MA page_size = 5
1d90: 31 32 3b 0a 20 20 56 41 43 55 55 4d 3b 0a 20 20 12;. VACUUM;.
1da0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d PRAGMA journal_m
1db0: 6f 64 65 20 3d 20 77 61 6c 3b 0a 20 20 49 4e 53 ode = wal;. INS
1dc0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 ERT INTO t1 VALU
1dd0: 45 53 28 35 2c 20 36 29 3b 0a 7d 20 7b 64 65 6c ES(5, 6);.} {del
1de0: 65 74 65 20 77 61 6c 7d 0a 0a 64 62 5f 73 77 61 ete wal}..db_swa
1df0: 70 20 74 65 73 74 2e 64 62 32 20 74 65 73 74 2e p test.db2 test.
1e00: 64 62 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 db.do_catchsql_t
1e10: 65 73 74 20 36 2e 31 32 20 7b 20 53 45 4c 45 43 est 6.12 { SELEC
1e20: 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 7b 31 T * FROM t1 } {1
1e30: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a {no such table:
1e40: 20 74 31 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 t1}}.do_catchsq
1e50: 6c 5f 74 65 73 74 20 36 2e 31 33 20 7b 20 53 45 l_test 6.13 { SE
1e60: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 7d LECT * FROM t2 }
1e70: 20 7b 30 20 7b 61 20 62 7d 7d 0a 0a 64 62 5f 73 {0 {a b}}..db_s
1e80: 77 61 70 20 74 65 73 74 2e 64 62 32 20 74 65 73 wap test.db2 tes
1e90: 74 2e 64 62 0a 64 6f 5f 63 61 74 63 68 73 71 6c t.db.do_catchsql
1ea0: 5f 74 65 73 74 20 36 2e 31 34 20 7b 20 53 45 4c _test 6.14 { SEL
1eb0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 20 ECT * FROM t1 }
1ec0: 7b 30 20 7b 31 20 32 20 33 20 34 20 35 20 36 7d {0 {1 2 3 4 5 6}
1ed0: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 }.do_catchsql_te
1ee0: 73 74 20 36 2e 31 35 20 7b 20 53 45 4c 45 43 54 st 6.15 { SELECT
1ef0: 20 2a 20 46 52 4f 4d 20 74 32 20 7d 20 7b 31 20 * FROM t2 } {1
1f00: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 {no such table:
1f10: 74 32 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 t2}}..finish_tes
1f20: 74 0a t.