/ Hex Artifact Content
Login

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.