Artifact 57e26a801f21027b7530da77db54286a6fe4997e:
0000: 23 0a 23 20 32 30 31 30 20 53 65 70 74 65 6d 62 #.# 2010 Septemb
0010: 65 72 20 31 37 0a 23 0a 23 20 20 20 20 4d 61 79 er 17.#.# May
0020: 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 you do good and
0030: 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20 20 20 not evil..#
0040: 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 May you find for
0050: 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 giveness for you
0060: 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 rself and forgiv
0070: 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20 20 4d e others..# M
0080: 61 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 ay you share fre
0090: 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e ely, never takin
00a0: 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 g more than you
00b0: 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a give..#.#*******
00c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
00d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
00e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0100: 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d 70 .# This file imp
0110: 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73 73 69 lements regressi
0120: 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53 51 4c on tests for SQL
0130: 69 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 ite library. Th
0140: 65 0a 23 20 66 6f 63 75 73 20 6f 66 20 74 68 69 e.# focus of thi
0150: 73 20 66 69 6c 65 20 69 73 20 74 68 65 20 69 6e s file is the in
0160: 74 65 72 61 63 74 69 6f 6e 73 20 62 65 74 77 65 teractions betwe
0170: 65 6e 20 74 68 65 20 46 54 53 33 2f 34 20 6d 6f en the FTS3/4 mo
0180: 64 75 6c 65 20 0a 23 20 61 6e 64 20 73 68 61 72 dule .# and shar
0190: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0a 23 ed-cache mode..#
01a0: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 ..set testdir [f
01b0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 ile dirname $arg
01c0: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 v0].source $test
01d0: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a dir/tester.tcl..
01e0: 69 66 63 61 70 61 62 6c 65 20 21 66 74 73 33 7c ifcapable !fts3|
01f0: 7c 21 73 68 61 72 65 64 5f 63 61 63 68 65 20 7b |!shared_cache {
0200: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 . finish_test.
0210: 20 72 65 74 75 72 6e 0a 7d 0a 73 65 74 20 3a 3a return.}.set ::
0220: 74 65 73 74 70 72 65 66 69 78 20 66 74 73 33 73 testprefix fts3s
0230: 68 61 72 65 64 0a 0a 64 62 20 63 6c 6f 73 65 0a hared..db close.
0240: 73 65 74 20 3a 3a 65 6e 61 62 6c 65 5f 73 68 61 set ::enable_sha
0250: 72 65 64 5f 63 61 63 68 65 20 5b 73 71 6c 69 74 red_cache [sqlit
0260: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 e3_enable_shared
0270: 5f 63 61 63 68 65 20 31 5d 0a 0a 23 20 4f 70 65 _cache 1]..# Ope
0280: 6e 20 74 77 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e n two connection
0290: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 s to the databas
02a0: 65 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 e in shared-cach
02b0: 65 20 6d 6f 64 65 2e 0a 23 0a 73 71 6c 69 74 65 e mode..#.sqlite
02c0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73 71 6c 3 db test.db.sql
02d0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 ite3 db2 test.db
02e0: 0a 0a 23 20 43 72 65 61 74 65 20 61 20 76 69 72 ..# Create a vir
02f0: 74 75 61 6c 20 46 54 53 33 20 74 61 62 6c 65 2e tual FTS3 table.
0300: 20 50 6f 70 75 6c 61 74 65 20 69 74 20 77 69 74 Populate it wit
0310: 68 20 73 6f 6d 65 20 69 6e 69 74 69 61 6c 20 64 h some initial d
0320: 61 74 61 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 ata..#.do_execsq
0330: 6c 5f 74 65 73 74 20 66 74 73 33 73 68 61 72 65 l_test fts3share
0340: 64 2d 31 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 d-1.1 {. CREATE
0350: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 VIRTUAL TABLE t
0360: 31 20 55 53 49 4e 47 20 66 74 73 33 28 78 29 3b 1 USING fts3(x);
0370: 0a 20 20 42 45 47 49 4e 3b 0a 20 20 49 4e 53 45 . BEGIN;. INSE
0380: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 RT INTO t1 VALUE
0390: 53 28 27 57 65 20 6c 69 73 74 65 6e 65 64 20 61 S('We listened a
03a0: 6e 64 20 6c 6f 6f 6b 65 64 20 73 69 64 65 77 61 nd looked sidewa
03b0: 79 73 20 75 70 21 27 29 3b 0a 20 20 49 4e 53 45 ys up!');. INSE
03c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 RT INTO t1 VALUE
03d0: 53 28 27 46 65 61 72 20 61 74 20 6d 79 20 68 65 S('Fear at my he
03e0: 61 72 74 2c 20 61 73 20 61 74 20 61 20 63 75 70 art, as at a cup
03f0: 2c 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e ,');. INSERT IN
0400: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 4d 79 TO t1 VALUES('My
0410: 20 6c 69 66 65 2d 62 6c 6f 6f 64 20 73 65 65 6d life-blood seem
0420: 65 64 20 74 6f 20 73 69 70 21 27 29 3b 0a 20 20 ed to sip!');.
0430: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 INSERT INTO t1 V
0440: 41 4c 55 45 53 28 27 54 68 65 20 73 74 61 72 73 ALUES('The stars
0450: 20 77 65 72 65 20 64 69 6d 2c 20 61 6e 64 20 74 were dim, and t
0460: 68 69 63 6b 20 74 68 65 20 6e 69 67 68 74 27 29 hick the night')
0470: 3b 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d 20 7b 7d ;. COMMIT;.} {}
0480: 0a 0a 23 20 4f 70 65 6e 20 61 20 77 72 69 74 65 ..# Open a write
0490: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 transaction and
04a0: 20 69 6e 73 65 72 74 20 72 6f 77 73 20 69 6e 74 insert rows int
04b0: 6f 20 74 68 65 20 46 54 53 33 20 74 61 62 6c 65 o the FTS3 table
04c0: 2e 20 54 68 69 73 20 74 61 6b 65 73 0a 23 20 61 . This takes.# a
04d0: 20 77 72 69 74 65 2d 6c 6f 63 6b 20 6f 6e 20 74 write-lock on t
04e0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 31 he underlying t1
04f0: 5f 63 6f 6e 74 65 6e 74 20 74 61 62 6c 65 2e 0a _content table..
0500: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 #.do_execsql_tes
0510: 74 20 66 74 73 33 73 68 61 72 65 64 2d 31 2e 32 t fts3shared-1.2
0520: 20 7b 0a 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 {. BEGIN;.
0530: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 INSERT INTO t1 V
0540: 41 4c 55 45 53 28 27 54 68 65 20 73 74 65 65 72 ALUES('The steer
0550: 73 6d 61 6e 27 27 73 20 66 61 63 65 20 62 79 20 sman''s face by
0560: 68 69 73 20 6c 61 6d 70 20 67 6c 65 61 6d 65 64 his lamp gleamed
0570: 20 77 68 69 74 65 3b 27 29 3b 0a 7d 20 7b 7d 0a white;');.} {}.
0580: 0a 23 20 4e 6f 77 20 74 72 79 20 61 20 53 45 4c .# Now try a SEL
0590: 45 43 54 20 6f 6e 20 74 68 65 20 66 75 6c 6c 2d ECT on the full-
05a0: 74 65 78 74 20 74 61 62 6c 65 2e 20 54 68 69 73 text table. This
05b0: 20 70 61 72 74 69 63 75 6c 61 72 20 53 45 4c 45 particular SELE
05c0: 43 54 20 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 CT does not.# re
05d0: 61 64 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 ad data from the
05e0: 20 25 5f 63 6f 6e 74 65 6e 74 20 74 61 62 6c 65 %_content table
05f0: 2e 20 42 75 74 20 69 74 20 73 74 69 6c 6c 20 61 . But it still a
0600: 74 74 65 6d 70 74 73 20 74 6f 20 6f 62 74 61 69 ttempts to obtai
0610: 6e 20 61 20 6c 6f 63 6b 0a 23 20 6f 6e 20 74 68 n a lock.# on th
0620: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 at table and so
0630: 74 68 65 20 53 45 4c 45 43 54 20 66 61 69 6c 73 the SELECT fails
0640: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 ..#.do_test fts3
0650: 73 68 61 72 65 64 2d 31 2e 33 20 7b 0a 20 20 63 shared-1.3 {. c
0660: 61 74 63 68 73 71 6c 20 7b 20 20 0a 20 20 20 20 atchsql { .
0670: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 53 45 4c BEGIN;. SEL
0680: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 ECT rowid FROM t
0690: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 1 WHERE t1 MATCH
06a0: 20 27 73 74 61 72 73 27 20 0a 20 20 7d 20 64 62 'stars' . } db
06b0: 32 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 2.} {1 {database
06c0: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 table is locked
06d0: 7d 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 }}..# Verify tha
06e0: 74 20 74 68 65 20 66 69 72 73 74 20 63 6f 6e 6e t the first conn
06f0: 65 63 74 69 6f 6e 20 63 61 6e 20 63 6f 6d 6d 69 ection can commi
0700: 74 20 69 74 73 20 74 72 61 6e 73 61 63 74 69 6f t its transactio
0710: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 73 n..#.do_test fts
0720: 33 73 68 61 72 65 64 2d 31 2e 34 20 7b 20 73 71 3shared-1.4 { sq
0730: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f lite3_get_autoco
0740: 6d 6d 69 74 20 64 62 20 7d 20 30 0a 64 6f 5f 65 mmit db } 0.do_e
0750: 78 65 63 73 71 6c 5f 74 65 73 74 20 66 74 73 33 xecsql_test fts3
0760: 73 68 61 72 65 64 2d 31 2e 35 20 7b 20 43 4f 4d shared-1.5 { COM
0770: 4d 49 54 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 MIT } {}.do_test
0780: 20 66 74 73 33 73 68 61 72 65 64 2d 31 2e 36 20 fts3shared-1.6
0790: 7b 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 { sqlite3_get_au
07a0: 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 31 0a tocommit db } 1.
07b0: 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20 74 .# Verify that t
07c0: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 he second connec
07d0: 74 69 6f 6e 20 73 74 69 6c 6c 20 68 61 73 20 61 tion still has a
07e0: 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 n open transacti
07f0: 6f 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 on..#.do_test ft
0800: 73 33 73 68 61 72 65 64 2d 31 2e 36 20 7b 20 73 s3shared-1.6 { s
0810: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 qlite3_get_autoc
0820: 6f 6d 6d 69 74 20 64 62 32 20 7d 20 30 0a 0a 64 ommit db2 } 0..d
0830: 62 20 63 6c 6f 73 65 0a 64 62 32 20 63 6c 6f 73 b close.db2 clos
0840: 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d e..#------------
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 -------------.#
0890: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 The following te
08a0: 73 74 73 20 2d 20 66 74 73 33 73 68 61 72 65 64 sts - fts3shared
08b0: 2d 32 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 -2.* - test that
08c0: 20 75 6e 6c 65 73 73 20 46 54 53 20 69 73 20 62 unless FTS is b
08d0: 79 70 61 73 73 65 64 0a 23 20 61 6e 64 20 74 68 ypassed.# and th
08e0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62 e underlying tab
08f0: 6c 65 73 20 61 63 63 65 73 73 65 64 20 64 69 72 les accessed dir
0900: 65 63 74 6c 79 2c 20 69 74 20 69 73 20 6e 6f 74 ectly, it is not
0910: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e possible for an
0920: 0a 23 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 .# SQLITE_LOCKED
0930: 20 65 72 72 6f 72 20 74 6f 20 62 65 20 65 6e 6f error to be eno
0940: 75 6e 74 65 72 65 64 20 77 68 65 6e 20 63 6f 6d untered when com
0950: 6d 69 74 74 69 6e 67 20 61 6e 20 46 54 53 20 74 mitting an FTS t
0960: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23 0a 23 20 ransaction..#.#
0970: 41 6e 79 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 Any SQLITE_LOCKE
0980: 44 20 65 72 72 6f 72 20 73 68 6f 75 6c 64 20 62 D error should b
0990: 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 e returned when
09a0: 74 68 65 20 66 74 73 34 20 28 6f 72 20 66 74 73 the fts4 (or fts
09b0: 34 61 75 78 29 0a 23 20 74 61 62 6c 65 20 69 73 4aux).# table is
09c0: 20 66 69 72 73 74 20 72 65 61 64 2f 77 72 69 74 first read/writ
09d0: 74 65 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 ten within a tra
09e0: 6e 73 61 63 74 69 6f 6e 2c 20 6e 6f 74 20 6c 61 nsaction, not la
09f0: 74 65 72 20 6f 6e 2e 0a 23 0a 73 65 74 20 4c 4f ter on..#.set LO
0a00: 43 4b 45 44 20 7b 31 20 7b 64 61 74 61 62 61 73 CKED {1 {databas
0a10: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 e table is locke
0a20: 64 7d 7d 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 d}}.forcedelete
0a30: 74 65 73 74 2e 64 62 0a 73 71 6c 69 74 65 33 20 test.db.sqlite3
0a40: 64 62 52 20 74 65 73 74 2e 64 62 0a 73 71 6c 69 dbR test.db.sqli
0a50: 74 65 33 20 64 62 57 20 74 65 73 74 2e 64 62 0a te3 dbW test.db.
0a60: 64 6f 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20 do_test 2.1 {.
0a70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 execsql {. CR
0a80: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 EATE VIRTUAL TAB
0a90: 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 34 LE t1 USING fts4
0aa0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 ;. CREATE TAB
0ab0: 4c 45 20 74 32 65 78 74 28 61 2c 20 62 29 3b 0a LE t2ext(a, b);.
0ac0: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 CREATE VIRTU
0ad0: 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e AL TABLE t2 USIN
0ae0: 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d 74 G fts4(content=t
0af0: 32 65 78 74 29 3b 0a 20 20 20 20 43 52 45 41 54 2ext);. CREAT
0b00: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 E VIRTUAL TABLE
0b10: 74 31 61 75 78 20 55 53 49 4e 47 20 66 74 73 34 t1aux USING fts4
0b20: 61 75 78 28 74 31 29 3b 0a 20 20 20 20 43 52 45 aux(t1);. CRE
0b30: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c ATE VIRTUAL TABL
0b40: 45 20 74 32 61 75 78 20 55 53 49 4e 47 20 66 74 E t2aux USING ft
0b50: 73 34 61 75 78 28 74 32 29 3b 0a 0a 20 20 20 20 s4aux(t2);..
0b60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 20 INSERT INTO t1
0b70: 20 56 41 4c 55 45 53 28 27 61 20 62 20 63 27 29 VALUES('a b c')
0b80: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 ;. INSERT INT
0b90: 4f 20 74 32 28 72 6f 77 69 64 2c 20 61 2c 20 62 O t2(rowid, a, b
0ba0: 29 20 56 41 4c 55 45 53 28 31 2c 20 27 64 20 65 ) VALUES(1, 'd e
0bb0: 20 66 27 2c 20 27 67 20 68 20 69 27 29 3b 0a 20 f', 'g h i');.
0bc0: 20 7d 20 64 62 57 0a 7d 20 7b 7d 0a 0a 23 20 54 } dbW.} {}..# T
0bd0: 65 73 74 20 74 68 61 74 20 6f 6e 63 65 20 5b 64 est that once [d
0be0: 62 57 5d 20 68 61 73 20 77 72 69 74 74 65 6e 20 bW] has written
0bf0: 74 6f 20 74 68 65 20 46 54 53 20 74 61 62 6c 65 to the FTS table
0c00: 2c 20 6e 6f 20 63 6c 69 65 6e 74 20 6d 61 79 20 , no client may
0c10: 72 65 61 64 0a 23 20 66 72 6f 6d 20 74 68 65 20 read.# from the
0c20: 46 54 53 20 6f 72 20 66 74 73 34 61 75 78 20 74 FTS or fts4aux t
0c30: 61 62 6c 65 2e 0a 64 6f 5f 74 65 73 74 20 32 2e able..do_test 2.
0c40: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 2.1 {. execsql
0c50: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 {. BEGIN;.
0c60: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 INSERT INTO t
0c70: 31 20 56 41 4c 55 45 53 28 27 6a 20 6b 20 6c 27 1 VALUES('j k l'
0c80: 29 3b 0a 20 20 7d 20 64 62 57 0a 20 20 65 78 65 );. } dbW. exe
0c90: 63 73 71 6c 20 42 45 47 49 4e 20 64 62 52 0a 7d csql BEGIN dbR.}
0ca0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 32 2e {}.do_test 2.2.
0cb0: 32 20 7b 20 63 61 74 63 68 73 71 6c 20 22 53 45 2 { catchsql "SE
0cc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 LECT * FROM t1 W
0cd0: 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20 20 20 HERE rowid=1"
0ce0: 20 20 20 20 20 20 20 64 62 52 20 7d 20 24 4c 4f dbR } $LO
0cf0: 43 4b 45 44 0a 64 6f 5f 74 65 73 74 20 32 2e 32 CKED.do_test 2.2
0d00: 2e 33 20 7b 20 63 61 74 63 68 73 71 6c 20 22 53 .3 { catchsql "S
0d10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 ELECT * FROM t1
0d20: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 WHERE t1 MATCH '
0d30: 61 27 22 20 20 20 20 20 64 62 52 20 7d 20 24 4c a'" dbR } $L
0d40: 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 20 32 2e OCKED.do_test 2.
0d50: 32 2e 34 20 7b 20 63 61 74 63 68 73 71 6c 20 22 2.4 { catchsql "
0d60: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f SELECT rowid FRO
0d70: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 M t1 WHERE t1 MA
0d80: 54 43 48 20 27 61 27 22 20 64 62 52 20 7d 20 24 TCH 'a'" dbR } $
0d90: 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 20 32 LOCKED.do_test 2
0da0: 2e 32 2e 35 20 7b 20 63 61 74 63 68 73 71 6c 20 .2.5 { catchsql
0db0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 "SELECT * FROM t
0dc0: 31 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1"
0dd0: 20 20 20 20 20 20 20 20 20 20 64 62 52 20 7d 20 dbR }
0de0: 24 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 20 $LOCKED.do_test
0df0: 32 2e 32 2e 36 20 7b 20 63 61 74 63 68 73 71 6c 2.2.6 { catchsql
0e00: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 "SELECT * FROM
0e10: 74 31 61 75 78 22 20 20 20 20 20 20 20 20 20 20 t1aux"
0e20: 20 20 20 20 20 20 20 20 20 20 20 64 62 52 20 7d dbR }
0e30: 20 24 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 $LOCKED.do_test
0e40: 20 32 2e 32 2e 37 20 7b 20 65 78 65 63 73 71 6c 2.2.7 { execsql
0e50: 20 43 4f 4d 4d 49 54 20 64 62 57 20 7d 20 7b 7d COMMIT dbW } {}
0e60: 0a 64 6f 5f 74 65 73 74 20 32 2e 32 2e 38 20 7b .do_test 2.2.8 {
0e70: 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 20 execsql COMMIT
0e80: 64 62 52 20 7d 20 7b 7d 0a 0a 23 20 53 61 6d 65 dbR } {}..# Same
0e90: 20 74 65 73 74 20 61 73 20 32 2e 32 2e 2a 2c 20 test as 2.2.*,
0ea0: 65 78 63 65 70 74 20 77 69 74 68 20 61 20 63 6f except with a co
0eb0: 6e 74 65 6e 74 3d 20 74 61 62 6c 65 2e 0a 23 0a ntent= table..#.
0ec0: 64 6f 5f 74 65 73 74 20 32 2e 33 2e 31 20 7b 0a do_test 2.3.1 {.
0ed0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 execsql {.
0ee0: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 49 4e 53 BEGIN;. INS
0ef0: 45 52 54 20 49 4e 54 4f 20 74 32 28 72 6f 77 69 ERT INTO t2(rowi
0f00: 64 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53 28 d, a, b) VALUES(
0f10: 32 2c 20 27 6a 20 6b 20 6c 27 2c 20 27 6d 20 6e 2, 'j k l', 'm n
0f20: 20 6f 27 29 3b 0a 20 20 7d 20 64 62 57 0a 20 20 o');. } dbW.
0f30: 65 78 65 63 73 71 6c 20 42 45 47 49 4e 20 64 62 execsql BEGIN db
0f40: 52 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 32 R.} {}.do_test 2
0f50: 2e 33 2e 33 20 7b 20 63 61 74 63 68 73 71 6c 20 .3.3 { catchsql
0f60: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 "SELECT * FROM t
0f70: 32 20 57 48 45 52 45 20 74 32 20 4d 41 54 43 48 2 WHERE t2 MATCH
0f80: 20 27 61 27 22 20 20 20 20 20 64 62 52 20 7d 20 'a'" dbR }
0f90: 24 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 20 $LOCKED.do_test
0fa0: 32 2e 33 2e 34 20 7b 20 63 61 74 63 68 73 71 6c 2.3.4 { catchsql
0fb0: 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 "SELECT rowid F
0fc0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 20 ROM t2 WHERE t2
0fd0: 4d 41 54 43 48 20 27 61 27 22 20 64 62 52 20 7d MATCH 'a'" dbR }
0fe0: 20 24 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74 $LOCKED.do_test
0ff0: 20 32 2e 33 2e 36 20 7b 20 63 61 74 63 68 73 71 2.3.6 { catchsq
1000: 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d l "SELECT * FROM
1010: 20 74 32 61 75 78 22 20 20 20 20 20 20 20 20 20 t2aux"
1020: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 52 20 dbR
1030: 7d 20 24 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 } $LOCKED.do_tes
1040: 74 20 32 2e 33 2e 37 20 7b 20 65 78 65 63 73 71 t 2.3.7 { execsq
1050: 6c 20 43 4f 4d 4d 49 54 20 64 62 57 20 7d 20 7b l COMMIT dbW } {
1060: 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 33 2e 38 20 }.do_test 2.3.8
1070: 7b 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 { execsql COMMIT
1080: 20 64 62 52 20 7d 20 7b 7d 0a 0a 23 20 54 65 73 dbR } {}..# Tes
1090: 74 20 74 68 61 74 20 6f 6e 63 65 20 61 20 63 6f t that once a co
10a0: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 72 65 61 nnection has rea
10b0: 64 20 66 72 6f 6d 20 74 68 65 20 46 54 53 20 6f d from the FTS o
10c0: 72 20 66 74 73 34 61 75 78 20 74 61 62 6c 65 2c r fts4aux table,
10d0: 20 0a 23 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e .# another conn
10e0: 65 63 74 69 6f 6e 20 6d 61 79 20 6e 6f 74 20 77 ection may not w
10f0: 72 69 74 65 20 74 6f 20 74 68 65 20 46 54 53 20 rite to the FTS
1100: 74 61 62 6c 65 2e 0a 23 0a 66 6f 72 65 61 63 68 table..#.foreach
1110: 20 7b 74 6e 20 73 71 6c 7d 20 7b 0a 20 20 31 20 {tn sql} {. 1
1120: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 "SELECT * FROM t
1130: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 1 WHERE rowid=1"
1140: 0a 20 20 32 20 22 53 45 4c 45 43 54 20 2a 20 46 . 2 "SELECT * F
1150: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 ROM t1 WHERE t1
1160: 4d 41 54 43 48 20 27 61 27 22 20 0a 20 20 33 20 MATCH 'a'" . 3
1170: 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 "SELECT rowid FR
1180: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d OM t1 WHERE t1 M
1190: 41 54 43 48 20 27 61 27 22 0a 20 20 34 20 22 53 ATCH 'a'". 4 "S
11a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 22 ELECT * FROM t1"
11b0: 0a 20 20 35 20 22 53 45 4c 45 43 54 20 2a 20 46 . 5 "SELECT * F
11c0: 52 4f 4d 20 74 31 61 75 78 22 0a 7d 20 7b 0a 0a ROM t1aux".} {..
11d0: 20 20 64 6f 5f 74 65 73 74 20 32 2e 34 2e 24 74 do_test 2.4.$t
11e0: 6e 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 n {. execsql
11f0: 42 45 47 49 4e 20 64 62 52 0a 20 20 20 20 65 78 BEGIN dbR. ex
1200: 65 63 73 71 6c 20 24 3a 3a 73 71 6c 20 64 62 52 ecsql $::sql dbR
1210: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 42 45 47 . execsql BEG
1220: 49 4e 20 64 62 57 0a 20 20 20 20 63 61 74 63 68 IN dbW. catch
1230: 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f sql "INSERT INTO
1240: 20 74 31 20 56 41 4c 55 45 53 28 27 70 20 71 20 t1 VALUES('p q
1250: 72 27 29 22 20 64 62 57 0a 20 20 7d 20 24 4c 4f r')" dbW. } $LO
1260: 43 4b 45 44 0a 0a 20 20 65 78 65 63 73 71 6c 20 CKED.. execsql
1270: 52 4f 4c 4c 42 41 43 4b 20 64 62 52 20 0a 20 20 ROLLBACK dbR .
1280: 65 78 65 63 73 71 6c 20 52 4f 4c 4c 42 41 43 4b execsql ROLLBACK
1290: 20 64 62 57 20 0a 7d 0a 0a 23 20 53 61 6d 65 20 dbW .}..# Same
12a0: 74 65 73 74 20 61 73 20 32 2e 34 2e 2a 2c 20 65 test as 2.4.*, e
12b0: 78 63 65 70 74 20 77 69 74 68 20 61 20 63 6f 6e xcept with a con
12c0: 74 65 6e 74 3d 20 74 61 62 6c 65 2e 0a 23 0a 66 tent= table..#.f
12d0: 6f 72 65 61 63 68 20 7b 74 6e 20 73 71 6c 7d 20 oreach {tn sql}
12e0: 7b 0a 20 20 32 20 22 53 45 4c 45 43 54 20 2a 20 {. 2 "SELECT *
12f0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 FROM t2 WHERE t2
1300: 20 4d 41 54 43 48 20 27 61 27 22 20 0a 20 20 33 MATCH 'a'" . 3
1310: 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 "SELECT rowid F
1320: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 20 ROM t2 WHERE t2
1330: 4d 41 54 43 48 20 27 61 27 22 0a 20 20 35 20 22 MATCH 'a'". 5 "
1340: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 SELECT * FROM t2
1350: 61 75 78 22 0a 7d 20 7b 0a 0a 20 20 64 6f 5f 74 aux".} {.. do_t
1360: 65 73 74 20 32 2e 35 2e 24 74 6e 20 7b 0a 20 20 est 2.5.$tn {.
1370: 20 20 65 78 65 63 73 71 6c 20 42 45 47 49 4e 20 execsql BEGIN
1380: 64 62 52 0a 20 20 20 20 65 78 65 63 73 71 6c 20 dbR. execsql
1390: 24 3a 3a 73 71 6c 20 64 62 52 0a 20 20 20 20 65 $::sql dbR. e
13a0: 78 65 63 73 71 6c 20 42 45 47 49 4e 20 64 62 57 xecsql BEGIN dbW
13b0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 49 . catchsql "I
13c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 72 6f NSERT INTO t2(ro
13d0: 77 69 64 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 wid, a, b) VALUE
13e0: 53 28 33 2c 20 27 73 20 74 20 75 27 2c 20 27 76 S(3, 's t u', 'v
13f0: 20 77 20 78 27 29 22 20 64 62 57 0a 20 20 7d 20 w x')" dbW. }
1400: 24 4c 4f 43 4b 45 44 0a 0a 20 20 65 78 65 63 73 $LOCKED.. execs
1410: 71 6c 20 52 4f 4c 4c 42 41 43 4b 20 64 62 52 20 ql ROLLBACK dbR
1420: 0a 20 20 65 78 65 63 73 71 6c 20 52 4f 4c 4c 42 . execsql ROLLB
1430: 41 43 4b 20 64 62 57 20 0a 7d 0a 0a 64 62 57 20 ACK dbW .}..dbW
1440: 63 6c 6f 73 65 0a 64 62 52 20 63 6c 6f 73 65 0a close.dbR close.
1450: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 sqlite3_enable_s
1460: 68 61 72 65 64 5f 63 61 63 68 65 20 24 3a 3a 65 hared_cache $::e
1470: 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 nable_shared_cac
1480: 68 65 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a he.finish_test.