/ Hex Artifact Content
Login

Artifact 08030168fc96fc278fa81f28654fb7e90566f33aff269c073e19b3ae9126b2f4:


0000: 23 20 32 30 31 37 20 41 75 67 75 73 74 20 31 37  # 2017 August 17
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 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 0a 0a 73 6f  ********.#....so
0170: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
0180: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69  [file dirname [i
0190: 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 66 74 73  nfo script]] fts
01a0: 35 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 5d 0a 73 65  5_common.tcl].se
01b0: 74 20 74 65 73 74 70 72 65 66 69 78 20 66 74 73  t testprefix fts
01c0: 35 63 6f 6e 6e 65 63 74 0a 0a 69 66 63 61 70 61  5connect..ifcapa
01d0: 62 6c 65 20 21 66 74 73 35 20 7b 0a 20 20 66 69  ble !fts5 {.  fi
01e0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
01f0: 72 6e 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  rn.}..#---------
0200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0240: 0a 23 20 54 68 65 20 74 65 73 74 73 20 69 6e 20  .# The tests in 
0250: 74 68 69 73 20 66 69 6c 65 20 74 65 73 74 20 74  this file test t
0260: 68 65 20 6f 75 74 63 6f 6d 65 20 6f 66 20 61 20  he outcome of a 
0270: 73 63 68 65 6d 61 2d 72 65 73 65 74 20 68 61 70  schema-reset hap
0280: 70 65 6e 69 6e 67 20 0a 23 20 77 69 74 68 69 6e  pening .# within
0290: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
02a0: 6d 65 74 68 6f 64 20 6f 66 20 61 6e 20 46 54 53  method of an FTS
02b0: 35 20 74 61 62 6c 65 2e 20 41 74 20 6f 6e 65 20  5 table. At one 
02c0: 70 6f 69 6e 74 20 74 68 69 73 0a 23 20 77 61 73  point this.# was
02d0: 20 63 61 75 73 69 6e 67 20 61 20 70 72 6f 62 6c   causing a probl
02e0: 65 6d 20 69 6e 20 53 51 4c 69 74 65 2e 20 45 61  em in SQLite. Ea
02f0: 63 68 20 74 65 73 74 20 70 72 6f 63 65 65 64 73  ch test proceeds
0300: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23   as follows:.#.#
0310: 20 20 20 31 2e 20 43 6f 6e 6e 65 63 74 69 6f 6e     1. Connection
0320: 20 5b 64 62 5d 20 6f 70 65 6e 73 20 74 68 65 20   [db] opens the 
0330: 64 62 20 61 6e 64 20 72 65 61 64 73 20 66 72 6f  db and reads fro
0340: 6d 20 73 6f 6d 65 20 75 6e 72 65 6c 61 74 65 64  m some unrelated
0350: 2c 20 6e 6f 6e 2d 46 54 53 35 0a 23 20 20 20 20  , non-FTS5.#    
0360: 20 20 74 61 62 6c 65 20 63 61 75 73 69 6e 67 20    table causing 
0370: 53 51 4c 69 74 65 20 74 6f 20 6c 6f 61 64 20 74  SQLite to load t
0380: 68 65 20 64 62 20 73 63 68 65 6d 61 20 69 6e 74  he db schema int
0390: 6f 20 6d 65 6d 6f 72 79 2e 0a 23 0a 23 20 20 20  o memory..#.#   
03a0: 32 2e 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 64  2. Connection [d
03b0: 62 32 5d 20 6f 70 65 6e 73 20 74 68 65 20 64 62  b2] opens the db
03c0: 20 61 6e 64 20 6d 6f 64 69 66 69 65 73 20 74 68   and modifies th
03d0: 65 20 64 62 20 73 63 68 65 6d 61 2e 0a 23 0a 23  e db schema..#.#
03e0: 20 20 20 33 2e 20 43 6f 6e 6e 65 63 74 69 6f 6e     3. Connection
03f0: 20 5b 64 62 5d 20 72 65 61 64 73 20 6f 72 20 77   [db] reads or w
0400: 72 69 74 65 73 20 61 6e 20 65 78 69 73 74 69 6e  rites an existin
0410: 67 20 66 74 73 35 20 74 61 62 6c 65 2e 20 54 68  g fts5 table. Th
0420: 61 74 20 74 68 65 0a 23 20 20 20 20 20 20 73 63  at the.#      sc
0430: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6d 6f  hema has been mo
0440: 64 69 66 69 65 64 20 69 73 20 64 65 74 65 63 74  dified is detect
0450: 65 64 20 69 6e 73 69 64 65 20 74 68 65 20 66 74  ed inside the ft
0460: 73 35 20 78 43 6f 6e 6e 65 63 74 28 29 20 0a 23  s5 xConnect() .#
0470: 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 20 74        callback t
0480: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 62  hat is invoked b
0490: 79 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  y sqlite3_prepar
04a0: 65 28 29 2e 20 0a 23 0a 23 20 20 20 34 2e 20 56  e(). .#.#   4. V
04b0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 73  erify that the s
04c0: 74 61 74 65 6d 65 6e 74 20 69 6e 20 33 20 68 61  tatement in 3 ha
04d0: 73 20 77 6f 72 6b 65 64 2e 20 53 51 4c 69 74 65  s worked. SQLite
04e0: 20 73 68 6f 75 6c 64 20 64 65 74 65 63 74 0a 23   should detect.#
04f0: 20 20 20 20 20 20 74 68 61 74 20 74 68 65 20 73        that the s
0500: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
0510: 64 20 61 6e 64 20 73 75 63 63 65 73 73 66 75 6c  d and successful
0520: 6c 79 20 70 72 65 70 61 72 65 20 74 68 65 20 0a  ly prepare the .
0530: 23 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  #      statement
0540: 20 61 67 61 69 6e 73 74 20 74 68 65 20 6e 65 77   against the new
0550: 20 73 63 68 65 6d 61 2e 0a 23 0a 23 20 54 65 73   schema..#.# Tes
0560: 74 20 70 6c 61 6e 3a 0a 23 0a 23 20 20 20 31 2e  t plan:.#.#   1.
0570: 2a 3a 20 54 72 69 67 67 65 72 20 74 68 65 20 78  *: Trigger the x
0580: 43 6f 6e 6e 65 63 74 28 29 2f 73 63 68 65 6d 61  Connect()/schema
0590: 2d 72 65 73 65 74 20 75 73 69 6e 67 20 73 74 61  -reset using sta
05a0: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
05b0: 0a 23 20 20 20 20 20 20 20 20 64 69 72 65 63 74  .#        direct
05c0: 6c 79 20 61 67 61 69 6e 73 74 20 61 6e 20 46 54  ly against an FT
05d0: 53 35 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20  S5 table..#.#   
05e0: 32 2e 2a 3a 20 55 73 69 6e 67 20 76 61 72 69 6f  2.*: Using vario
05f0: 75 73 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78  us statements ex
0600: 65 63 75 74 65 64 20 62 79 20 76 61 72 69 6f 75  ecuted by variou
0610: 73 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  s BEFORE trigger
0620: 73 2e 0a 23 0a 23 20 20 20 33 2e 2a 3a 20 55 73  s..#.#   3.*: Us
0630: 69 6e 67 20 76 61 72 69 6f 75 73 20 73 74 61 74  ing various stat
0640: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
0650: 62 79 20 76 61 72 69 6f 75 73 20 41 46 54 45 52  by various AFTER
0660: 20 74 72 69 67 67 65 72 73 2e 0a 23 0a 23 20 20   triggers..#.#  
0670: 20 34 2e 2a 3a 20 55 73 69 6e 67 20 76 61 72 69   4.*: Using vari
0680: 6f 75 73 20 73 74 61 74 65 6d 65 6e 74 73 20 65  ous statements e
0690: 78 65 63 75 74 65 64 20 62 79 20 76 61 72 69 6f  xecuted by vario
06a0: 75 73 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  us INSTEAD OF tr
06b0: 69 67 67 65 72 73 2e 0a 23 0a 0a 0a 0a 64 6f 5f  iggers..#....do_
06c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30  execsql_test 1.0
06d0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
06e0: 55 41 4c 20 54 41 42 4c 45 20 66 74 31 20 55 53  UAL TABLE ft1 US
06f0: 49 4e 47 20 66 74 73 35 28 61 2c 20 62 29 3b 0a  ING fts5(a, b);.
0700: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
0710: 62 63 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  bc(x INTEGER PRI
0720: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 43 52 45  MARY KEY);.  CRE
0730: 41 54 45 20 54 41 42 4c 45 20 74 31 28 69 20 49  ATE TABLE t1(i I
0740: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0750: 45 59 2c 20 61 2c 20 62 29 3b 0a 0a 20 20 49 4e  EY, a, b);..  IN
0760: 53 45 52 54 20 49 4e 54 4f 20 66 74 31 20 56 41  SERT INTO ft1 VA
0770: 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f  LUES('one', 'two
0780: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0790: 4f 20 66 74 31 20 56 41 4c 55 45 53 28 27 74 68  O ft1 VALUES('th
07a0: 72 65 65 27 2c 20 27 66 6f 75 72 27 29 3b 0a 7d  ree', 'four');.}
07b0: 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73 71  ..foreach {tn sq
07c0: 6c 20 72 65 73 7d 20 7b 0a 20 20 31 20 22 53 45  l res} {.  1 "SE
07d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 31 22  LECT * FROM ft1"
07e0: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
07f0: 66 6f 75 72 7d 0a 20 20 32 20 22 52 45 50 4c 41  four}.  2 "REPLA
0800: 43 45 20 49 4e 54 4f 20 66 74 31 28 72 6f 77 69  CE INTO ft1(rowi
0810: 64 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53 28  d, a, b) VALUES(
0820: 31 2c 20 27 66 69 76 65 27 2c 20 27 73 69 78 27  1, 'five', 'six'
0830: 29 22 20 7b 7d 0a 20 20 33 20 22 53 45 4c 45 43  )" {}.  3 "SELEC
0840: 54 20 2a 20 46 52 4f 4d 20 66 74 31 22 20 7b 66  T * FROM ft1" {f
0850: 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66 6f  ive six three fo
0860: 75 72 7d 0a 20 20 34 20 22 49 4e 53 45 52 54 20  ur}.  4 "INSERT 
0870: 49 4e 54 4f 20 66 74 31 20 56 41 4c 55 45 53 28  INTO ft1 VALUES(
0880: 27 73 65 76 65 6e 27 2c 20 27 65 69 67 68 74 27  'seven', 'eight'
0890: 29 22 20 7b 7d 0a 20 20 35 20 22 53 45 4c 45 43  )" {}.  5 "SELEC
08a0: 54 20 2a 20 46 52 4f 4d 20 66 74 31 22 20 7b 66  T * FROM ft1" {f
08b0: 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66 6f  ive six three fo
08c0: 75 72 20 73 65 76 65 6e 20 65 69 67 68 74 7d 0a  ur seven eight}.
08d0: 20 20 36 20 22 44 45 4c 45 54 45 20 46 52 4f 4d    6 "DELETE FROM
08e0: 20 66 74 31 20 57 48 45 52 45 20 72 6f 77 69 64   ft1 WHERE rowid
08f0: 3d 32 22 20 7b 7d 0a 20 20 37 20 22 55 50 44 41  =2" {}.  7 "UPDA
0900: 54 45 20 66 74 31 20 53 45 54 20 62 3d 27 6e 69  TE ft1 SET b='ni
0910: 6e 65 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d  ne' WHERE rowid=
0920: 31 22 20 7b 7d 0a 20 20 38 20 22 53 45 4c 45 43  1" {}.  8 "SELEC
0930: 54 20 2a 20 46 52 4f 4d 20 66 74 31 22 20 7b 66  T * FROM ft1" {f
0940: 69 76 65 20 6e 69 6e 65 20 73 65 76 65 6e 20 65  ive nine seven e
0950: 69 67 68 74 7d 0a 7d 20 7b 0a 0a 20 20 63 61 74  ight}.} {..  cat
0960: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
0970: 20 20 63 61 74 63 68 20 7b 20 64 62 32 20 63 6c    catch { db2 cl
0980: 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20  ose }.  sqlite3 
0990: 64 62 20 20 74 65 73 74 2e 64 62 0a 20 20 73 71  db  test.db.  sq
09a0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
09b0: 62 0a 0a 20 20 64 6f 5f 74 65 73 74 20 31 2e 24  b..  do_test 1.$
09c0: 74 6e 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76  tn.1 {.    db ev
09d0: 61 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  al { INSERT INTO
09e0: 20 61 62 63 20 44 45 46 41 55 4c 54 20 56 41 4c   abc DEFAULT VAL
09f0: 55 45 53 20 7d 0a 20 20 20 20 64 62 32 20 65 76  UES }.    db2 ev
0a00: 61 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  al { CREATE TABL
0a10: 45 20 6e 65 77 74 61 62 6c 65 28 78 2c 79 29 3b  E newtable(x,y);
0a20: 20 44 52 4f 50 20 54 41 42 4c 45 20 6e 65 77 74   DROP TABLE newt
0a30: 61 62 6c 65 20 7d 0a 20 20 7d 20 7b 7d 0a 0a 20  able }.  } {}.. 
0a40: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
0a50: 20 31 2e 24 74 6e 2e 32 20 24 73 71 6c 20 24 72   1.$tn.2 $sql $r
0a60: 65 73 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  es..  do_execsql
0a70: 5f 74 65 73 74 20 31 2e 24 74 6e 2e 33 20 7b 0a  _test 1.$tn.3 {.
0a80: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0a90: 66 74 31 28 66 74 31 29 20 56 41 4c 55 45 53 28  ft1(ft1) VALUES(
0aa0: 27 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b  'integrity-check
0ab0: 27 29 3b 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78  ');.  }.}..do_ex
0ac0: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 30 20 7b  ecsql_test 2.0 {
0ad0: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
0ae0: 4c 20 54 41 42 4c 45 20 66 74 32 20 55 53 49 4e  L TABLE ft2 USIN
0af0: 47 20 66 74 73 35 28 61 2c 20 62 29 3b 0a 20 20  G fts5(a, b);.  
0b00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
0b10: 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20  a, b);.  CREATE 
0b20: 54 41 42 4c 45 20 6c 6f 67 28 74 78 74 29 3b 0a  TABLE log(txt);.
0b30: 0a 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45  .  CREATE TRIGGE
0b40: 52 20 74 32 5f 61 69 20 41 46 54 45 52 20 49 4e  R t2_ai AFTER IN
0b50: 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49 4e  SERT ON t2 BEGIN
0b60: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0b70: 20 66 74 32 28 72 6f 77 69 64 2c 20 61 2c 20 62   ft2(rowid, a, b
0b80: 29 20 56 41 4c 55 45 53 28 6e 65 77 2e 72 6f 77  ) VALUES(new.row
0b90: 69 64 2c 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62  id, new.a, new.b
0ba0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0bb0: 54 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28 27 69  TO log VALUES('i
0bc0: 6e 73 65 72 74 27 29 3b 0a 20 20 45 4e 44 3b 0a  nsert');.  END;.
0bd0: 0a 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45  .  CREATE TRIGGE
0be0: 52 20 74 32 5f 61 64 20 41 46 54 45 52 20 44 45  R t2_ad AFTER DE
0bf0: 4c 45 54 45 20 4f 4e 20 74 32 20 42 45 47 49 4e  LETE ON t2 BEGIN
0c00: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
0c10: 20 66 74 32 20 57 48 45 52 45 20 72 6f 77 69 64   ft2 WHERE rowid
0c20: 20 3d 20 6f 6c 64 2e 72 6f 77 69 64 3b 0a 20 20   = old.rowid;.  
0c30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f    INSERT INTO lo
0c40: 67 20 56 41 4c 55 45 53 28 27 64 65 6c 65 74 65  g VALUES('delete
0c50: 27 29 3b 0a 20 20 45 4e 44 3b 0a 0a 20 20 43 52  ');.  END;..  CR
0c60: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 32 5f  EATE TRIGGER t2_
0c70: 61 75 20 41 46 54 45 52 20 55 50 44 41 54 45 20  au AFTER UPDATE 
0c80: 4f 4e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  ON t2 BEGIN.    
0c90: 55 50 44 41 54 45 20 66 74 32 20 53 45 54 20 61  UPDATE ft2 SET a
0ca0: 3d 6e 65 77 2e 61 2c 20 62 3d 6e 65 77 2e 62 20  =new.a, b=new.b 
0cb0: 57 48 45 52 45 20 72 6f 77 69 64 3d 6e 65 77 2e  WHERE rowid=new.
0cc0: 72 6f 77 69 64 3b 0a 20 20 20 20 49 4e 53 45 52  rowid;.    INSER
0cd0: 54 20 49 4e 54 4f 20 6c 6f 67 20 56 41 4c 55 45  T INTO log VALUE
0ce0: 53 28 27 75 70 64 61 74 65 27 29 3b 0a 20 20 45  S('update');.  E
0cf0: 4e 44 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ND;..  INSERT IN
0d00: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 6f 6e  TO t2 VALUES('on
0d10: 65 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  e', 'two');.  IN
0d20: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0d30: 55 45 53 28 27 74 68 72 65 65 27 2c 20 27 66 6f  UES('three', 'fo
0d40: 75 72 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68  ur');.}..foreach
0d50: 20 7b 74 6e 20 73 71 6c 20 72 65 73 7d 20 7b 0a   {tn sql res} {.
0d60: 20 20 31 20 22 53 45 4c 45 43 54 20 2a 20 46 52    1 "SELECT * FR
0d70: 4f 4d 20 74 32 22 20 7b 6f 6e 65 20 74 77 6f 20  OM t2" {one two 
0d80: 74 68 72 65 65 20 66 6f 75 72 7d 0a 20 20 32 20  three four}.  2 
0d90: 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 32  "REPLACE INTO t2
0da0: 28 72 6f 77 69 64 2c 20 61 2c 20 62 29 20 56 41  (rowid, a, b) VA
0db0: 4c 55 45 53 28 31 2c 20 27 66 69 76 65 27 2c 20  LUES(1, 'five', 
0dc0: 27 73 69 78 27 29 22 20 7b 7d 0a 20 20 33 20 22  'six')" {}.  3 "
0dd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74  SELECT * FROM ft
0de0: 32 22 20 7b 66 69 76 65 20 73 69 78 20 74 68 72  2" {five six thr
0df0: 65 65 20 66 6f 75 72 7d 0a 20 20 34 20 22 49 4e  ee four}.  4 "IN
0e00: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0e10: 55 45 53 28 27 73 65 76 65 6e 27 2c 20 27 65 69  UES('seven', 'ei
0e20: 67 68 74 27 29 22 20 7b 7d 0a 20 20 35 20 22 53  ght')" {}.  5 "S
0e30: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 32  ELECT * FROM ft2
0e40: 22 20 7b 66 69 76 65 20 73 69 78 20 74 68 72 65  " {five six thre
0e50: 65 20 66 6f 75 72 20 73 65 76 65 6e 20 65 69 67  e four seven eig
0e60: 68 74 7d 0a 20 20 36 20 22 44 45 4c 45 54 45 20  ht}.  6 "DELETE 
0e70: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 72 6f  FROM t2 WHERE ro
0e80: 77 69 64 3d 32 22 20 7b 7d 0a 20 20 37 20 22 55  wid=2" {}.  7 "U
0e90: 50 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 27  PDATE t2 SET b='
0ea0: 6e 69 6e 65 27 20 57 48 45 52 45 20 72 6f 77 69  nine' WHERE rowi
0eb0: 64 3d 31 22 20 7b 7d 0a 20 20 38 20 22 53 45 4c  d=1" {}.  8 "SEL
0ec0: 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 32 22 20  ECT * FROM ft2" 
0ed0: 7b 66 69 76 65 20 6e 69 6e 65 20 73 65 76 65 6e  {five nine seven
0ee0: 20 65 69 67 68 74 7d 0a 7d 20 7b 0a 0a 20 20 63   eight}.} {..  c
0ef0: 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20  atch { db close 
0f00: 7d 0a 20 20 63 61 74 63 68 20 7b 20 64 62 32 20  }.  catch { db2 
0f10: 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65  close }.  sqlite
0f20: 33 20 64 62 20 20 74 65 73 74 2e 64 62 0a 20 20  3 db  test.db.  
0f30: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
0f40: 2e 64 62 0a 0a 20 20 64 6f 5f 74 65 73 74 20 32  .db..  do_test 2
0f50: 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 64 62 20  .$tn.1 {.    db 
0f60: 65 76 61 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  eval { INSERT IN
0f70: 54 4f 20 61 62 63 20 44 45 46 41 55 4c 54 20 56  TO abc DEFAULT V
0f80: 41 4c 55 45 53 20 7d 0a 20 20 20 20 64 62 32 20  ALUES }.    db2 
0f90: 65 76 61 6c 20 7b 20 43 52 45 41 54 45 20 54 41  eval { CREATE TA
0fa0: 42 4c 45 20 6e 65 77 74 61 62 6c 65 28 78 2c 79  BLE newtable(x,y
0fb0: 29 3b 20 44 52 4f 50 20 54 41 42 4c 45 20 6e 65  ); DROP TABLE ne
0fc0: 77 74 61 62 6c 65 20 7d 0a 20 20 7d 20 7b 7d 0a  wtable }.  } {}.
0fd0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
0fe0: 73 74 20 32 2e 24 74 6e 2e 32 20 24 73 71 6c 20  st 2.$tn.2 $sql 
0ff0: 24 72 65 73 0a 0a 20 20 64 6f 5f 65 78 65 63 73  $res..  do_execs
1000: 71 6c 5f 74 65 73 74 20 32 2e 24 74 6e 2e 33 20  ql_test 2.$tn.3 
1010: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1020: 4f 20 66 74 32 28 66 74 32 29 20 56 41 4c 55 45  O ft2(ft2) VALUE
1030: 53 28 27 69 6e 74 65 67 72 69 74 79 2d 63 68 65  S('integrity-che
1040: 63 6b 27 29 3b 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  ck');.  }.}..do_
1050: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 30  execsql_test 3.0
1060: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
1070: 55 41 4c 20 54 41 42 4c 45 20 66 74 33 20 55 53  UAL TABLE ft3 US
1080: 49 4e 47 20 66 74 73 35 28 61 2c 20 62 29 3b 0a  ING fts5(a, b);.
1090: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
10a0: 33 28 61 2c 20 62 29 3b 0a 0a 20 20 43 52 45 41  3(a, b);..  CREA
10b0: 54 45 20 54 52 49 47 47 45 52 20 74 33 5f 61 69  TE TRIGGER t3_ai
10c0: 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20 4f   BEFORE INSERT O
10d0: 4e 20 74 33 20 42 45 47 49 4e 0a 20 20 20 20 49  N t3 BEGIN.    I
10e0: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28 72  NSERT INTO ft3(r
10f0: 6f 77 69 64 2c 20 61 2c 20 62 29 20 56 41 4c 55  owid, a, b) VALU
1100: 45 53 28 6e 65 77 2e 72 6f 77 69 64 2c 20 6e 65  ES(new.rowid, ne
1110: 77 2e 61 2c 20 6e 65 77 2e 62 29 3b 0a 20 20 20  w.a, new.b);.   
1120: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67   INSERT INTO log
1130: 20 56 41 4c 55 45 53 28 27 69 6e 73 65 72 74 27   VALUES('insert'
1140: 29 3b 0a 20 20 45 4e 44 3b 0a 0a 20 20 43 52 45  );.  END;..  CRE
1150: 41 54 45 20 54 52 49 47 47 45 52 20 74 33 5f 61  ATE TRIGGER t3_a
1160: 64 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  d BEFORE DELETE 
1170: 4f 4e 20 74 33 20 42 45 47 49 4e 0a 20 20 20 20  ON t3 BEGIN.    
1180: 44 45 4c 45 54 45 20 46 52 4f 4d 20 66 74 33 20  DELETE FROM ft3 
1190: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 6f 6c  WHERE rowid = ol
11a0: 64 2e 72 6f 77 69 64 3b 0a 20 20 20 20 49 4e 53  d.rowid;.    INS
11b0: 45 52 54 20 49 4e 54 4f 20 6c 6f 67 20 56 41 4c  ERT INTO log VAL
11c0: 55 45 53 28 27 64 65 6c 65 74 65 27 29 3b 0a 20  UES('delete');. 
11d0: 20 45 4e 44 3b 0a 0a 20 20 43 52 45 41 54 45 20   END;..  CREATE 
11e0: 54 52 49 47 47 45 52 20 74 33 5f 61 75 20 42 45  TRIGGER t3_au BE
11f0: 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
1200: 33 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41  3 BEGIN.    UPDA
1210: 54 45 20 66 74 33 20 53 45 54 20 61 3d 6e 65 77  TE ft3 SET a=new
1220: 2e 61 2c 20 62 3d 6e 65 77 2e 62 20 57 48 45 52  .a, b=new.b WHER
1230: 45 20 72 6f 77 69 64 3d 6e 65 77 2e 72 6f 77 69  E rowid=new.rowi
1240: 64 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  d;.    INSERT IN
1250: 54 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28 27 75  TO log VALUES('u
1260: 70 64 61 74 65 27 29 3b 0a 20 20 45 4e 44 3b 0a  pdate');.  END;.
1270: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1280: 33 28 72 6f 77 69 64 2c 20 61 2c 20 62 29 20 56  3(rowid, a, b) V
1290: 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 2c 20  ALUES(1, 'one', 
12a0: 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54  'two');.  INSERT
12b0: 20 49 4e 54 4f 20 74 33 28 72 6f 77 69 64 2c 20   INTO t3(rowid, 
12c0: 61 2c 20 62 29 20 56 41 4c 55 45 53 28 32 2c 20  a, b) VALUES(2, 
12d0: 27 74 68 72 65 65 27 2c 20 27 66 6f 75 72 27 29  'three', 'four')
12e0: 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e  ;.}..foreach {tn
12f0: 20 73 71 6c 20 72 65 73 7d 20 7b 0a 20 20 31 20   sql res} {.  1 
1300: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1310: 33 22 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65  3" {one two thre
1320: 65 20 66 6f 75 72 7d 0a 20 20 32 20 22 52 45 50  e four}.  2 "REP
1330: 4c 41 43 45 20 49 4e 54 4f 20 74 33 28 72 6f 77  LACE INTO t3(row
1340: 69 64 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53  id, a, b) VALUES
1350: 28 31 2c 20 27 66 69 76 65 27 2c 20 27 73 69 78  (1, 'five', 'six
1360: 27 29 22 20 7b 7d 0a 20 20 33 20 22 53 45 4c 45  ')" {}.  3 "SELE
1370: 43 54 20 2a 20 46 52 4f 4d 20 66 74 33 22 20 7b  CT * FROM ft3" {
1380: 66 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66  five six three f
1390: 6f 75 72 7d 0a 20 20 34 20 22 49 4e 53 45 52 54  our}.  4 "INSERT
13a0: 20 49 4e 54 4f 20 74 33 28 72 6f 77 69 64 2c 20   INTO t3(rowid, 
13b0: 61 2c 20 62 29 20 56 41 4c 55 45 53 28 33 2c 20  a, b) VALUES(3, 
13c0: 27 73 65 76 65 6e 27 2c 20 27 65 69 67 68 74 27  'seven', 'eight'
13d0: 29 22 20 7b 7d 0a 20 20 35 20 22 53 45 4c 45 43  )" {}.  5 "SELEC
13e0: 54 20 2a 20 46 52 4f 4d 20 66 74 33 22 20 7b 66  T * FROM ft3" {f
13f0: 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66 6f  ive six three fo
1400: 75 72 20 73 65 76 65 6e 20 65 69 67 68 74 7d 0a  ur seven eight}.
1410: 20 20 36 20 22 44 45 4c 45 54 45 20 46 52 4f 4d    6 "DELETE FROM
1420: 20 74 33 20 57 48 45 52 45 20 72 6f 77 69 64 3d   t3 WHERE rowid=
1430: 32 22 20 7b 7d 0a 20 20 37 20 22 55 50 44 41 54  2" {}.  7 "UPDAT
1440: 45 20 74 33 20 53 45 54 20 62 3d 27 6e 69 6e 65  E t3 SET b='nine
1450: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22  ' WHERE rowid=1"
1460: 20 7b 7d 0a 20 20 38 20 22 53 45 4c 45 43 54 20   {}.  8 "SELECT 
1470: 2a 20 46 52 4f 4d 20 66 74 33 22 20 7b 66 69 76  * FROM ft3" {fiv
1480: 65 20 6e 69 6e 65 20 73 65 76 65 6e 20 65 69 67  e nine seven eig
1490: 68 74 7d 0a 7d 20 7b 0a 0a 20 20 63 61 74 63 68  ht}.} {..  catch
14a0: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20   { db close }.  
14b0: 63 61 74 63 68 20 7b 20 64 62 32 20 63 6c 6f 73  catch { db2 clos
14c0: 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62  e }.  sqlite3 db
14d0: 20 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69    test.db.  sqli
14e0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
14f0: 0a 20 20 64 6f 5f 74 65 73 74 20 33 2e 24 74 6e  .  do_test 3.$tn
1500: 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  .1 {.    db eval
1510: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61   { INSERT INTO a
1520: 62 63 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  bc DEFAULT VALUE
1530: 53 20 7d 0a 20 20 20 20 64 62 32 20 65 76 61 6c  S }.    db2 eval
1540: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
1550: 6e 65 77 74 61 62 6c 65 28 78 2c 79 29 3b 20 44  newtable(x,y); D
1560: 52 4f 50 20 54 41 42 4c 45 20 6e 65 77 74 61 62  ROP TABLE newtab
1570: 6c 65 20 7d 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64  le }.  } {}..  d
1580: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
1590: 2e 24 74 6e 2e 32 20 24 73 71 6c 20 24 72 65 73  .$tn.2 $sql $res
15a0: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
15b0: 65 73 74 20 33 2e 24 74 6e 2e 33 20 7b 0a 20 20  est 3.$tn.3 {.  
15c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
15d0: 33 28 66 74 33 29 20 56 41 4c 55 45 53 28 27 69  3(ft3) VALUES('i
15e0: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 27 29  ntegrity-check')
15f0: 3b 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63  ;.  }.}..do_exec
1600: 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a 20  sql_test 4.0 {. 
1610: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
1620: 54 41 42 4c 45 20 66 74 34 20 55 53 49 4e 47 20  TABLE ft4 USING 
1630: 66 74 73 35 28 61 2c 20 62 29 3b 0a 20 20 43 52  fts5(a, b);.  CR
1640: 45 41 54 45 20 56 49 45 57 20 76 34 20 41 53 20  EATE VIEW v4 AS 
1650: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
1660: 46 52 4f 4d 20 66 74 34 3b 0a 0a 20 20 43 52 45  FROM ft4;..  CRE
1670: 41 54 45 20 54 52 49 47 47 45 52 20 74 34 5f 61  ATE TRIGGER t4_a
1680: 69 20 49 4e 53 54 45 41 44 20 4f 46 20 49 4e 53  i INSTEAD OF INS
1690: 45 52 54 20 4f 4e 20 76 34 20 42 45 47 49 4e 0a  ERT ON v4 BEGIN.
16a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
16b0: 66 74 34 28 72 6f 77 69 64 2c 20 61 2c 20 62 29  ft4(rowid, a, b)
16c0: 20 56 41 4c 55 45 53 28 6e 65 77 2e 72 6f 77 69   VALUES(new.rowi
16d0: 64 2c 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 29  d, new.a, new.b)
16e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
16f0: 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28 27 69 6e  O log VALUES('in
1700: 73 65 72 74 27 29 3b 0a 20 20 45 4e 44 3b 0a 0a  sert');.  END;..
1710: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1720: 20 74 34 5f 61 64 20 49 4e 53 54 45 41 44 20 4f   t4_ad INSTEAD O
1730: 46 20 44 45 4c 45 54 45 20 4f 4e 20 76 34 20 42  F DELETE ON v4 B
1740: 45 47 49 4e 0a 20 20 20 20 44 45 4c 45 54 45 20  EGIN.    DELETE 
1750: 46 52 4f 4d 20 66 74 34 20 57 48 45 52 45 20 72  FROM ft4 WHERE r
1760: 6f 77 69 64 20 3d 20 6f 6c 64 2e 72 6f 77 69 64  owid = old.rowid
1770: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1780: 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28 27 64 65  O log VALUES('de
1790: 6c 65 74 65 27 29 3b 0a 20 20 45 4e 44 3b 0a 0a  lete');.  END;..
17a0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
17b0: 20 74 34 5f 61 75 20 49 4e 53 54 45 41 44 20 4f   t4_au INSTEAD O
17c0: 46 20 55 50 44 41 54 45 20 4f 4e 20 76 34 20 42  F UPDATE ON v4 B
17d0: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
17e0: 66 74 34 20 53 45 54 20 61 3d 6e 65 77 2e 61 2c  ft4 SET a=new.a,
17f0: 20 62 3d 6e 65 77 2e 62 20 57 48 45 52 45 20 72   b=new.b WHERE r
1800: 6f 77 69 64 3d 6e 65 77 2e 72 6f 77 69 64 3b 0a  owid=new.rowid;.
1810: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1820: 6c 6f 67 20 56 41 4c 55 45 53 28 27 75 70 64 61  log VALUES('upda
1830: 74 65 27 29 3b 0a 20 20 45 4e 44 3b 0a 0a 20 20  te');.  END;..  
1840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 34 28  INSERT INTO ft4(
1850: 72 6f 77 69 64 2c 20 61 2c 20 62 29 20 56 41 4c  rowid, a, b) VAL
1860: 55 45 53 28 31 2c 20 27 6f 6e 65 27 2c 20 27 74  UES(1, 'one', 't
1870: 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  wo');.  INSERT I
1880: 4e 54 4f 20 66 74 34 28 72 6f 77 69 64 2c 20 61  NTO ft4(rowid, a
1890: 2c 20 62 29 20 56 41 4c 55 45 53 28 32 2c 20 27  , b) VALUES(2, '
18a0: 74 68 72 65 65 27 2c 20 27 66 6f 75 72 27 29 3b  three', 'four');
18b0: 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  .}..foreach {tn 
18c0: 73 71 6c 20 72 65 73 7d 20 7b 0a 20 20 31 20 22  sql res} {.  1 "
18d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74  SELECT * FROM ft
18e0: 34 22 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65  4" {one two thre
18f0: 65 20 66 6f 75 72 7d 0a 20 20 32 20 22 52 45 50  e four}.  2 "REP
1900: 4c 41 43 45 20 49 4e 54 4f 20 76 34 28 72 6f 77  LACE INTO v4(row
1910: 69 64 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53  id, a, b) VALUES
1920: 28 31 2c 20 27 66 69 76 65 27 2c 20 27 73 69 78  (1, 'five', 'six
1930: 27 29 22 20 7b 7d 0a 20 20 33 20 22 53 45 4c 45  ')" {}.  3 "SELE
1940: 43 54 20 2a 20 46 52 4f 4d 20 66 74 34 22 20 7b  CT * FROM ft4" {
1950: 66 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66  five six three f
1960: 6f 75 72 7d 0a 20 20 34 20 22 49 4e 53 45 52 54  our}.  4 "INSERT
1970: 20 49 4e 54 4f 20 76 34 28 72 6f 77 69 64 2c 20   INTO v4(rowid, 
1980: 61 2c 20 62 29 20 56 41 4c 55 45 53 28 33 2c 20  a, b) VALUES(3, 
1990: 27 73 65 76 65 6e 27 2c 20 27 65 69 67 68 74 27  'seven', 'eight'
19a0: 29 22 20 7b 7d 0a 20 20 35 20 22 53 45 4c 45 43  )" {}.  5 "SELEC
19b0: 54 20 2a 20 46 52 4f 4d 20 66 74 34 22 20 7b 66  T * FROM ft4" {f
19c0: 69 76 65 20 73 69 78 20 74 68 72 65 65 20 66 6f  ive six three fo
19d0: 75 72 20 73 65 76 65 6e 20 65 69 67 68 74 7d 0a  ur seven eight}.
19e0: 20 20 36 20 22 44 45 4c 45 54 45 20 46 52 4f 4d    6 "DELETE FROM
19f0: 20 76 34 20 57 48 45 52 45 20 72 6f 77 69 64 3d   v4 WHERE rowid=
1a00: 32 22 20 7b 7d 0a 20 20 37 20 22 55 50 44 41 54  2" {}.  7 "UPDAT
1a10: 45 20 76 34 20 53 45 54 20 62 3d 27 6e 69 6e 65  E v4 SET b='nine
1a20: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22  ' WHERE rowid=1"
1a30: 20 7b 7d 0a 20 20 38 20 22 53 45 4c 45 43 54 20   {}.  8 "SELECT 
1a40: 2a 20 46 52 4f 4d 20 66 74 34 22 20 7b 66 69 76  * FROM ft4" {fiv
1a50: 65 20 6e 69 6e 65 20 73 65 76 65 6e 20 65 69 67  e nine seven eig
1a60: 68 74 7d 0a 7d 20 7b 0a 0a 20 20 63 61 74 63 68  ht}.} {..  catch
1a70: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20   { db close }.  
1a80: 63 61 74 63 68 20 7b 20 64 62 32 20 63 6c 6f 73  catch { db2 clos
1a90: 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62  e }.  sqlite3 db
1aa0: 20 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69    test.db.  sqli
1ab0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
1ac0: 0a 20 20 64 6f 5f 74 65 73 74 20 34 2e 24 74 6e  .  do_test 4.$tn
1ad0: 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  .1 {.    db eval
1ae0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61   { INSERT INTO a
1af0: 62 63 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  bc DEFAULT VALUE
1b00: 53 20 7d 0a 20 20 20 20 64 62 32 20 65 76 61 6c  S }.    db2 eval
1b10: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
1b20: 6e 65 77 74 61 62 6c 65 28 78 2c 79 29 3b 20 44  newtable(x,y); D
1b30: 52 4f 50 20 54 41 42 4c 45 20 6e 65 77 74 61 62  ROP TABLE newtab
1b40: 6c 65 20 7d 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64  le }.  } {}..  d
1b50: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
1b60: 2e 24 74 6e 2e 32 20 24 73 71 6c 20 24 72 65 73  .$tn.2 $sql $res
1b70: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
1b80: 65 73 74 20 34 2e 24 74 6e 2e 33 20 7b 0a 20 20  est 4.$tn.3 {.  
1b90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
1ba0: 33 28 66 74 33 29 20 56 41 4c 55 45 53 28 27 69  3(ft3) VALUES('i
1bb0: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 27 29  ntegrity-check')
1bc0: 3b 0a 20 20 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f  ;.  }.}..finish_
1bd0: 74 65 73 74 0a                                   test.