/ Hex Artifact Content
Login

Artifact 798e45af84be7978ca33d5bdc94246eb44724db24174b5d8e9b1ac46c57fb08d:


0000: 23 20 32 30 31 30 20 4a 75 6e 65 20 31 35 0a 23  # 2010 June 15.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  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 0a 23 0a 0a 73 65 74 20 74 65 73 74  ****.#..set test
0170: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0180: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0190: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
01a0: 2e 74 63 6c 0a 0a 73 65 74 20 3a 3a 74 65 73 74  .tcl..set ::test
01b0: 70 72 65 66 69 78 20 66 74 73 33 66 61 75 6c 74  prefix fts3fault
01c0: 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45 4e  ..# If SQLITE_EN
01d0: 41 42 4c 45 5f 46 54 53 33 20 69 73 20 6e 6f 74  ABLE_FTS3 is not
01e0: 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74   defined, omit t
01f0: 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70 61  his file..ifcapa
0200: 62 6c 65 20 21 66 74 73 33 20 7b 20 66 69 6e 69  ble !fts3 { fini
0210: 73 68 5f 74 65 73 74 20 3b 20 72 65 74 75 72 6e  sh_test ; return
0220: 20 7d 0a 0a 23 20 54 65 73 74 20 65 72 72 6f 72   }..# Test error
0230: 20 68 61 6e 64 6c 69 6e 67 20 69 6e 20 74 68 65   handling in the
0240: 20 73 71 6c 69 74 65 33 46 74 73 33 49 6e 69 74   sqlite3Fts3Init
0250: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69  () function. Thi
0260: 73 20 69 73 20 74 68 65 20 0a 23 20 66 75 6e 63  s is the .# func
0270: 74 69 6f 6e 20 74 68 61 74 20 72 65 67 69 73 74  tion that regist
0280: 65 72 73 20 74 68 65 20 46 54 53 33 20 6d 6f 64  ers the FTS3 mod
0290: 75 6c 65 20 61 6e 64 20 76 61 72 69 6f 75 73 20  ule and various 
02a0: 73 75 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e  support function
02b0: 73 0a 23 20 77 69 74 68 20 53 51 4c 69 74 65 2e  s.# with SQLite.
02c0: 0a 23 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74  .#.do_faultsim_t
02d0: 65 73 74 20 31 20 2d 62 6f 64 79 20 7b 20 0a 20  est 1 -body { . 
02e0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
02f0: 2e 64 62 20 0a 20 20 65 78 70 72 20 30 0a 7d 20  .db .  expr 0.} 
0300: 2d 74 65 73 74 20 7b 0a 20 20 63 61 74 63 68 20  -test {.  catch 
0310: 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 7d 0a 0a  { db close }.}..
0320: 23 20 54 65 73 74 20 65 72 72 6f 72 20 68 61 6e  # Test error han
0330: 64 6c 69 6e 67 20 69 6e 20 61 6e 20 22 41 4c 54  dling in an "ALT
0340: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 52 45 4e  ER TABLE ... REN
0350: 41 4d 45 20 54 4f 22 20 73 74 61 74 65 6d 65 6e  AME TO" statemen
0360: 74 20 6f 6e 20 61 6e 0a 23 20 46 54 53 33 20 74  t on an.# FTS3 t
0370: 61 62 6c 65 2e 20 53 70 65 63 69 66 69 63 61 6c  able. Specifical
0380: 6c 79 2c 20 74 65 73 74 20 72 65 6e 61 6d 69 6e  ly, test renamin
0390: 67 20 74 68 65 20 74 61 62 6c 65 20 77 69 74 68  g the table with
03a0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
03b0: 0a 23 20 61 66 74 65 72 20 69 74 20 68 61 73 20  .# after it has 
03c0: 62 65 65 6e 20 77 72 69 74 74 65 6e 20 74 6f 2e  been written to.
03d0: 0a 23 0a 66 61 75 6c 74 73 69 6d 5f 64 65 6c 65  .#.faultsim_dele
03e0: 74 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 64 6f  te_and_reopen.do
03f0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0400: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52  0 {.  CREATE VIR
0410: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
0420: 49 4e 47 20 66 74 73 33 3b 0a 20 20 49 4e 53 45  ING fts3;.  INSE
0430: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0440: 53 28 27 74 65 73 74 20 72 65 6e 61 6d 69 6e 67  S('test renaming
0450: 20 74 68 65 20 74 61 62 6c 65 27 29 3b 0a 20 20   the table');.  
0460: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0470: 41 4c 55 45 53 28 27 20 61 66 74 65 72 20 69 74  ALUES(' after it
0480: 20 68 61 73 20 62 65 65 6e 20 77 72 69 74 74 65   has been writte
0490: 6e 27 29 3b 0a 7d 0a 64 6f 5f 66 61 75 6c 74 73  n');.}.do_faults
04a0: 69 6d 5f 74 65 73 74 20 32 20 2d 70 72 65 70 20  im_test 2 -prep 
04b0: 7b 20 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  { .  sqlite3 db 
04c0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
04d0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
04e0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
04f0: 20 74 31 20 56 41 4c 55 45 53 28 27 72 65 67 69   t1 VALUES('regi
0500: 73 74 65 72 73 20 74 68 65 20 46 54 53 33 20 6d  sters the FTS3 m
0510: 6f 64 75 6c 65 27 29 3b 0a 20 20 20 20 20 20 49  odule');.      I
0520: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0530: 4c 55 45 53 28 27 76 61 72 69 6f 75 73 20 73 75  LUES('various su
0540: 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 27  pport functions'
0550: 29 3b 0a 20 20 7d 0a 7d 20 2d 62 6f 64 79 20 7b  );.  }.} -body {
0560: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 41 4c 54  .  execsql { ALT
0570: 45 52 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41  ER TABLE t1 RENA
0580: 4d 45 20 54 4f 20 74 32 20 7d 0a 7d 20 2d 74 65  ME TO t2 }.} -te
0590: 73 74 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f  st {.  faultsim_
05a0: 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b  test_result {0 {
05b0: 7d 7d 20 0a 7d 0a 0a 23 20 54 65 73 74 20 65 72  }} .}..# Test er
05c0: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 69 6e 20  ror handling in 
05d0: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
05e0: 20 77 68 65 72 65 20 61 20 73 69 6e 67 6c 65 20   where a single 
05f0: 70 72 65 66 69 78 20 71 75 65 72 79 20 0a 23 20  prefix query .# 
0600: 6d 61 74 63 68 65 73 20 74 65 72 6d 73 20 74 68  matches terms th
0610: 61 74 20 72 65 73 69 64 65 20 6f 6e 20 61 20 6c  at reside on a l
0620: 61 72 67 65 20 72 61 6e 67 65 20 6f 66 20 6c 65  arge range of le
0630: 61 66 20 6e 6f 64 65 73 2e 0a 23 0a 64 6f 5f 74  af nodes..#.do_t
0640: 65 73 74 20 66 74 73 33 66 61 75 6c 74 2d 33 2e  est fts3fault-3.
0650: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  0 {.  sqlite3 db
0660: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
0670: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
0680: 55 41 4c 20 54 41 42 4c 45 20 74 33 20 55 53 49  UAL TABLE t3 USI
0690: 4e 47 20 66 74 73 34 3b 20 7d 0a 20 20 65 78 65  NG fts4; }.  exe
06a0: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
06b0: 54 4f 20 74 33 28 74 33 29 20 56 41 4c 55 45 53  TO t3(t3) VALUES
06c0: 28 27 6e 6f 64 65 73 69 7a 65 3d 35 30 27 29 20  ('nodesize=50') 
06d0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 42 45  }.  execsql { BE
06e0: 47 49 4e 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  GIN }.  for {set
06f0: 20 69 20 30 7d 20 7b 24 69 20 3c 20 31 30 30 30   i 0} {$i < 1000
0700: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
0710: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
0720: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
0730: 28 27 61 61 61 27 20 7c 7c 20 24 69 29 20 7d 0a  ('aaa' || $i) }.
0740: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20    }.  execsql { 
0750: 43 4f 4d 4d 49 54 20 7d 0a 7d 20 7b 7d 0a 0a 64  COMMIT }.} {}..d
0760: 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20  o_faultsim_test 
0770: 33 20 2d 66 61 75 6c 74 73 20 6f 6f 6d 2d 74 72  3 -faults oom-tr
0780: 61 6e 73 69 65 6e 74 20 2d 70 72 65 70 20 7b 20  ansient -prep { 
0790: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
07a0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
07b0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
07c0: 74 33 20 57 48 45 52 45 20 74 33 20 4d 41 54 43  t3 WHERE t3 MATC
07d0: 48 20 27 78 27 20 7d 0a 7d 20 2d 62 6f 64 79 20  H 'x' }.} -body 
07e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
07f0: 4c 45 43 54 20 63 6f 75 6e 74 28 72 6f 77 69 64  LECT count(rowid
0800: 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  ) FROM t3 WHERE 
0810: 74 33 20 4d 41 54 43 48 20 27 61 61 2a 27 20 7d  t3 MATCH 'aa*' }
0820: 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61 75  .} -test {.  fau
0830: 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c  ltsim_test_resul
0840: 74 20 7b 30 20 31 30 30 30 7d 20 0a 7d 0a 0a 64  t {0 1000} .}..d
0850: 6f 5f 74 65 73 74 20 66 74 73 33 66 61 75 6c 74  o_test fts3fault
0860: 2d 34 2e 30 20 7b 0a 20 20 66 61 75 6c 74 73 69  -4.0 {.  faultsi
0870: 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f 72 65 6f  m_delete_and_reo
0880: 70 65 6e 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  pen.  execsql { 
0890: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
08a0: 55 41 4c 20 54 41 42 4c 45 20 74 34 20 55 53 49  UAL TABLE t4 USI
08b0: 4e 47 20 66 74 73 34 3b 20 0a 20 20 20 20 49 4e  NG fts4; .    IN
08c0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
08d0: 55 45 53 28 27 54 68 65 20 42 72 69 74 69 73 68  UES('The British
08e0: 20 47 6f 76 65 72 6e 6d 65 6e 74 20 63 61 6c 6c   Government call
08f0: 65 64 20 6f 6e 27 29 3b 0a 20 20 20 20 49 4e 53  ed on');.    INS
0900: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
0910: 45 53 28 27 61 73 20 70 65 73 65 74 61 73 20 74  ES('as pesetas t
0920: 68 65 6e 20 62 65 63 61 6d 65 20 6d 75 63 68 27  hen became much'
0930: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 66 61 75 6c  );.  }.} {}.faul
0940: 74 73 69 6d 5f 73 61 76 65 5f 61 6e 64 5f 63 6c  tsim_save_and_cl
0950: 6f 73 65 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f  ose.do_faultsim_
0960: 74 65 73 74 20 34 20 2d 70 72 65 70 20 7b 20 0a  test 4 -prep { .
0970: 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74 6f    faultsim_resto
0980: 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 20 20  re_and_reopen.  
0990: 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54  execsql { SELECT
09a0: 20 63 6f 6e 74 65 6e 74 20 46 52 4f 4d 20 74 34   content FROM t4
09b0: 20 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65   }.} -body {.  e
09c0: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
09d0: 6f 70 74 69 6d 69 7a 65 28 74 34 29 20 46 52 4f  optimize(t4) FRO
09e0: 4d 20 74 34 20 4c 49 4d 49 54 20 31 20 7d 0a 7d  M t4 LIMIT 1 }.}
09f0: 20 2d 74 65 73 74 20 7b 0a 20 20 66 61 75 6c 74   -test {.  fault
0a00: 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20  sim_test_result 
0a10: 7b 30 20 7b 7b 49 6e 64 65 78 20 6f 70 74 69 6d  {0 {{Index optim
0a20: 69 7a 65 64 7d 7d 7d 0a 7d 0a 0a 64 6f 5f 74 65  ized}}}.}..do_te
0a30: 73 74 20 66 74 73 33 66 61 75 6c 74 2d 35 2e 30  st fts3fault-5.0
0a40: 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 64 65   {.  faultsim_de
0a50: 6c 65 74 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a  lete_and_reopen.
0a60: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
0a70: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0a80: 54 41 42 4c 45 20 74 35 20 55 53 49 4e 47 20 66  TABLE t5 USING f
0a90: 74 73 34 3b 20 0a 20 20 20 20 49 4e 53 45 52 54  ts4; .    INSERT
0aa0: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
0ab0: 27 54 68 65 20 42 72 69 74 69 73 68 20 47 6f 76  'The British Gov
0ac0: 65 72 6e 6d 65 6e 74 20 63 61 6c 6c 65 64 20 6f  ernment called o
0ad0: 6e 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  n');.    INSERT 
0ae0: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27  INTO t5 VALUES('
0af0: 61 73 20 70 65 73 65 74 61 73 20 74 68 65 6e 20  as pesetas then 
0b00: 62 65 63 61 6d 65 20 6d 75 63 68 27 29 3b 0a 20  became much');. 
0b10: 20 7d 0a 7d 20 7b 7d 0a 66 61 75 6c 74 73 69 6d   }.} {}.faultsim
0b20: 5f 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a  _save_and_close.
0b30: 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74  do_faultsim_test
0b40: 20 35 20 2d 70 72 65 70 20 7b 20 0a 20 20 66 61   5 -prep { .  fa
0b50: 75 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61  ultsim_restore_a
0b60: 6e 64 5f 72 65 6f 70 65 6e 0a 20 20 65 78 65 63  nd_reopen.  exec
0b70: 73 71 6c 20 7b 20 0a 20 20 20 20 42 45 47 49 4e  sql { .    BEGIN
0b80: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
0b90: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27 69  NTO t5 VALUES('i
0ba0: 6e 66 6c 75 65 6e 74 69 61 6c 20 69 6e 20 73 68  nfluential in sh
0bb0: 61 70 69 6e 67 20 68 69 73 20 66 75 74 75 72 65  aping his future
0bc0: 20 6f 75 74 6c 6f 6f 6b 27 29 3b 0a 20 20 20 20   outlook');.    
0bd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
0be0: 20 56 41 4c 55 45 53 28 27 6d 69 67 68 74 20 62   VALUES('might b
0bf0: 65 20 61 63 63 65 70 74 61 62 6c 65 20 74 6f 20  e acceptable to 
0c00: 74 68 65 20 42 72 69 74 69 73 68 20 65 6c 65 63  the British elec
0c10: 74 6f 72 61 74 65 27 29 3b 0a 20 20 7d 0a 7d 20  torate');.  }.} 
0c20: 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65 63 73 71  -body {.  execsq
0c30: 6c 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69 64  l { SELECT rowid
0c40: 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 74   FROM t5 WHERE t
0c50: 35 20 4d 41 54 43 48 20 27 62 72 69 74 69 73 68  5 MATCH 'british
0c60: 27 20 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20  ' }.} -test {.  
0c70: 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65  faultsim_test_re
0c80: 73 75 6c 74 20 7b 30 20 7b 31 20 34 7d 7d 0a 7d  sult {0 {1 4}}.}
0c90: 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 66 61  ..do_test fts3fa
0ca0: 75 6c 74 2d 36 2e 30 20 7b 0a 20 20 66 61 75 6c  ult-6.0 {.  faul
0cb0: 74 73 69 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f  tsim_delete_and_
0cc0: 72 65 6f 70 65 6e 0a 20 20 65 78 65 63 73 71 6c  reopen.  execsql
0cd0: 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41   { CREATE VIRTUA
0ce0: 4c 20 54 41 42 4c 45 20 74 36 20 55 53 49 4e 47  L TABLE t6 USING
0cf0: 20 66 74 73 34 20 7d 0a 7d 20 7b 7d 0a 66 61 75   fts4 }.} {}.fau
0d00: 6c 74 73 69 6d 5f 73 61 76 65 5f 61 6e 64 5f 63  ltsim_save_and_c
0d10: 6c 6f 73 65 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  lose.do_faultsim
0d20: 5f 74 65 73 74 20 36 20 2d 70 72 65 70 20 7b 20  _test 6 -prep { 
0d30: 0a 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74  .  faultsim_rest
0d40: 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 20  ore_and_reopen. 
0d50: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0d60: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 36 20  T rowid FROM t6 
0d70: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78  }.} -body {.  ex
0d80: 65 63 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42  ecsql { DROP TAB
0d90: 4c 45 20 74 36 20 7d 0a 7d 20 2d 74 65 73 74 20  LE t6 }.} -test 
0da0: 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73  {.  faultsim_tes
0db0: 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b 7d 7d 0a  t_result {0 {}}.
0dc0: 7d 0a 0a 23 20 54 65 73 74 20 76 61 72 69 6f 75  }..# Test variou
0dd0: 73 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  s malloc failure
0de0: 73 20 77 68 69 6c 65 20 70 72 6f 63 65 73 73 69  s while processi
0df0: 6e 67 20 46 54 53 34 20 70 61 72 61 6d 65 74 65  ng FTS4 paramete
0e00: 72 73 2e 0a 23 0a 64 6f 5f 66 61 75 6c 74 73 69  rs..#.do_faultsi
0e10: 6d 5f 74 65 73 74 20 37 2e 31 20 2d 70 72 65 70  m_test 7.1 -prep
0e20: 20 7b 20 0a 20 20 66 61 75 6c 74 73 69 6d 5f 64   { .  faultsim_d
0e30: 65 6c 65 74 65 5f 61 6e 64 5f 72 65 6f 70 65 6e  elete_and_reopen
0e40: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65  .} -body {.  exe
0e50: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49  csql { CREATE VI
0e60: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55  RTUAL TABLE t1 U
0e70: 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62 2c 20  SING fts4(a, b, 
0e80: 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 33 29 20  matchinfo=fts3) 
0e90: 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61  }.} -test {.  fa
0ea0: 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75  ultsim_test_resu
0eb0: 6c 74 20 7b 30 20 7b 7d 7d 0a 7d 0a 64 6f 5f 66  lt {0 {}}.}.do_f
0ec0: 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 37 2e 32  aultsim_test 7.2
0ed0: 20 2d 70 72 65 70 20 7b 20 0a 20 20 66 61 75 6c   -prep { .  faul
0ee0: 74 73 69 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f  tsim_delete_and_
0ef0: 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b  reopen.} -body {
0f00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45  .  execsql { CRE
0f10: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0f20: 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 34 28  E t1 USING fts4(
0f30: 61 2c 20 62 2c 20 6d 61 74 63 68 69 6e 66 6f 3d  a, b, matchinfo=
0f40: 66 73 33 29 20 7d 0a 7d 20 2d 74 65 73 74 20 7b  fs3) }.} -test {
0f50: 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73 74  .  faultsim_test
0f60: 5f 72 65 73 75 6c 74 20 7b 31 20 7b 75 6e 72 65  _result {1 {unre
0f70: 63 6f 67 6e 69 7a 65 64 20 6d 61 74 63 68 69 6e  cognized matchin
0f80: 66 6f 3a 20 66 73 33 7d 7d 20 5c 0a 20 20 20 20  fo: fs3}} \.    
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 7b 31 20 7b 76 74 61 62 6c 65 20 63 6f     {1 {vtable co
0fb0: 6e 73 74 72 75 63 74 6f 72 20 66 61 69 6c 65 64  nstructor failed
0fc0: 3a 20 74 31 7d 7d 20 5c 0a 20 20 20 20 20 20 20  : t1}} \.       
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  {1 {SQL logic er
0ff0: 72 6f 72 7d 7d 0a 7d 0a 64 6f 5f 66 61 75 6c 74  ror}}.}.do_fault
1000: 73 69 6d 5f 74 65 73 74 20 37 2e 33 20 2d 70 72  sim_test 7.3 -pr
1010: 65 70 20 7b 20 0a 20 20 66 61 75 6c 74 73 69 6d  ep { .  faultsim
1020: 5f 64 65 6c 65 74 65 5f 61 6e 64 5f 72 65 6f 70  _delete_and_reop
1030: 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65  en.} -body {.  e
1040: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1050: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
1060: 20 55 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62   USING fts4(a, b
1070: 2c 20 6d 61 74 63 68 6e 66 6f 3d 66 74 73 33 29  , matchnfo=fts3)
1080: 20 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66   }.} -test {.  f
1090: 61 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73  aultsim_test_res
10a0: 75 6c 74 20 7b 31 20 7b 75 6e 72 65 63 6f 67 6e  ult {1 {unrecogn
10b0: 69 7a 65 64 20 70 61 72 61 6d 65 74 65 72 3a 20  ized parameter: 
10c0: 6d 61 74 63 68 6e 66 6f 3d 66 74 73 33 7d 7d 20  matchnfo=fts3}} 
10d0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
10e0: 20 20 20 20 20 20 20 20 20 7b 31 20 7b 76 74 61           {1 {vta
10f0: 62 6c 65 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  ble constructor 
1100: 66 61 69 6c 65 64 3a 20 74 31 7d 7d 20 5c 0a 20  failed: t1}} \. 
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1120: 20 20 20 20 20 20 7b 31 20 7b 53 51 4c 20 6c 6f        {1 {SQL lo
1130: 67 69 63 20 65 72 72 6f 72 7d 7d 0a 7d 0a 0a 0a  gic error}}.}...
1140: 70 72 6f 63 20 6d 69 74 20 7b 62 6c 6f 62 7d 20  proc mit {blob} 
1150: 7b 0a 20 20 73 65 74 20 73 63 61 6e 28 6c 69 74  {.  set scan(lit
1160: 74 6c 65 45 6e 64 69 61 6e 29 20 69 2a 0a 20 20  tleEndian) i*.  
1170: 73 65 74 20 73 63 61 6e 28 62 69 67 45 6e 64 69  set scan(bigEndi
1180: 61 6e 29 20 49 2a 0a 20 20 62 69 6e 61 72 79 20  an) I*.  binary 
1190: 73 63 61 6e 20 24 62 6c 6f 62 20 24 73 63 61 6e  scan $blob $scan
11a0: 28 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  ($::tcl_platform
11b0: 28 62 79 74 65 4f 72 64 65 72 29 29 20 72 0a 20  (byteOrder)) r. 
11c0: 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 64 6f   return $r.}..do
11d0: 5f 74 65 73 74 20 38 2e 30 20 7b 0a 20 20 66 61  _test 8.0 {.  fa
11e0: 75 6c 74 73 69 6d 5f 64 65 6c 65 74 65 5f 61 6e  ultsim_delete_an
11f0: 64 5f 72 65 6f 70 65 6e 0a 20 20 65 78 65 63 73  d_reopen.  execs
1200: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
1210: 55 41 4c 20 54 41 42 4c 45 20 74 38 20 55 53 49  UAL TABLE t8 USI
1220: 4e 47 20 66 74 73 34 20 7d 0a 20 20 65 78 65 63  NG fts4 }.  exec
1230: 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  sql "INSERT INTO
1240: 20 74 38 20 56 41 4c 55 45 53 28 27 61 20 62 20   t8 VALUES('a b 
1250: 63 27 29 22 0a 20 20 65 78 65 63 73 71 6c 20 22  c')".  execsql "
1260: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
1270: 41 4c 55 45 53 28 27 62 20 62 20 62 27 29 22 0a  ALUES('b b b')".
1280: 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52    execsql "INSER
1290: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
12a0: 28 27 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  ('[string repeat
12b0: 20 7b 63 20 7d 20 35 30 30 30 30 5d 27 29 22 0a   {c } 50000]')".
12c0: 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52    execsql "INSER
12d0: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
12e0: 28 27 64 20 64 20 64 27 29 22 0a 20 20 65 78 65  ('d d d')".  exe
12f0: 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  csql "INSERT INT
1300: 4f 20 74 38 20 56 41 4c 55 45 53 28 27 65 20 65  O t8 VALUES('e e
1310: 20 65 27 29 22 0a 20 20 65 78 65 63 73 71 6c 20   e')".  execsql 
1320: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 28  "INSERT INTO t8(
1330: 74 38 29 20 56 41 4c 55 45 53 28 27 6f 70 74 69  t8) VALUES('opti
1340: 6d 69 7a 65 27 29 22 0a 20 20 66 61 75 6c 74 73  mize')".  faults
1350: 69 6d 5f 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73  im_save_and_clos
1360: 65 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c  e.} {}..ifcapabl
1370: 65 20 66 74 73 34 5f 64 65 66 65 72 72 65 64 20  e fts4_deferred 
1380: 7b 0a 20 20 64 6f 5f 66 61 75 6c 74 73 69 6d 5f  {.  do_faultsim_
1390: 74 65 73 74 20 38 2e 31 20 2d 66 61 75 6c 74 73  test 8.1 -faults
13a0: 20 6f 6f 6d 2d 74 2a 20 2d 70 72 65 70 20 7b 20   oom-t* -prep { 
13b0: 0a 20 20 20 20 66 61 75 6c 74 73 69 6d 5f 72 65  .    faultsim_re
13c0: 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e  store_and_reopen
13d0: 0a 20 20 20 20 64 62 20 66 75 6e 63 20 6d 69 74  .    db func mit
13e0: 20 6d 69 74 0a 20 20 7d 20 2d 62 6f 64 79 20 7b   mit.  } -body {
13f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53  .    execsql { S
1400: 45 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69  ELECT mit(matchi
1410: 6e 66 6f 28 74 38 2c 20 27 78 27 29 29 20 46 52  nfo(t8, 'x')) FR
1420: 4f 4d 20 74 38 20 57 48 45 52 45 20 74 38 20 4d  OM t8 WHERE t8 M
1430: 41 54 43 48 20 27 61 20 62 20 63 27 20 7d 0a 20  ATCH 'a b c' }. 
1440: 20 7d 20 2d 74 65 73 74 20 7b 0a 20 20 20 20 66   } -test {.    f
1450: 61 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73  aultsim_test_res
1460: 75 6c 74 20 7b 30 20 7b 7b 31 20 31 20 31 20 31  ult {0 {{1 1 1 1
1470: 20 34 20 32 20 31 20 35 20 35 7d 7d 7d 0a 20 20   4 2 1 5 5}}}.  
1480: 7d 0a 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  }.}..do_faultsim
1490: 5f 74 65 73 74 20 38 2e 32 20 2d 66 61 75 6c 74  _test 8.2 -fault
14a0: 73 20 6f 6f 6d 2d 74 2a 20 2d 70 72 65 70 20 7b  s oom-t* -prep {
14b0: 20 0a 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73   .  faultsim_res
14c0: 74 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a  tore_and_reopen.
14d0: 20 20 64 62 20 66 75 6e 63 20 6d 69 74 20 6d 69    db func mit mi
14e0: 74 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78  t.} -body {.  ex
14f0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d  ecsql { SELECT m
1500: 69 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 38 2c  it(matchinfo(t8,
1510: 20 27 73 27 29 29 20 46 52 4f 4d 20 74 38 20 57   's')) FROM t8 W
1520: 48 45 52 45 20 74 38 20 4d 41 54 43 48 20 27 61  HERE t8 MATCH 'a
1530: 20 62 20 63 27 20 7d 0a 7d 20 2d 74 65 73 74 20   b c' }.} -test 
1540: 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73  {.  faultsim_tes
1550: 74 5f 72 65 73 75 6c 74 20 7b 30 20 33 7d 0a 7d  t_result {0 3}.}
1560: 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73  .do_faultsim_tes
1570: 74 20 38 2e 33 20 2d 70 72 65 70 20 7b 20 0a 20  t 8.3 -prep { . 
1580: 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74 6f 72   faultsim_restor
1590: 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 20 20 64  e_and_reopen.  d
15a0: 62 20 66 75 6e 63 20 6d 69 74 20 6d 69 74 0a 7d  b func mit mit.}
15b0: 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65 63 73   -body {.  execs
15c0: 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 74 28  ql { SELECT mit(
15d0: 6d 61 74 63 68 69 6e 66 6f 28 74 38 2c 20 27 61  matchinfo(t8, 'a
15e0: 27 29 29 20 46 52 4f 4d 20 74 38 20 57 48 45 52  ')) FROM t8 WHER
15f0: 45 20 74 38 20 4d 41 54 43 48 20 27 61 20 62 20  E t8 MATCH 'a b 
1600: 63 27 20 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20  c' }.} -test {. 
1610: 20 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72   faultsim_test_r
1620: 65 73 75 6c 74 20 7b 30 20 31 30 30 30 32 7d 0a  esult {0 10002}.
1630: 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65  }.do_faultsim_te
1640: 73 74 20 38 2e 34 20 2d 70 72 65 70 20 7b 20 0a  st 8.4 -prep { .
1650: 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74 6f    faultsim_resto
1660: 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 20 20  re_and_reopen.  
1670: 64 62 20 66 75 6e 63 20 6d 69 74 20 6d 69 74 0a  db func mit mit.
1680: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65 63  } -body {.  exec
1690: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 74  sql { SELECT mit
16a0: 28 6d 61 74 63 68 69 6e 66 6f 28 74 38 2c 20 27  (matchinfo(t8, '
16b0: 6c 27 29 29 20 46 52 4f 4d 20 74 38 20 57 48 45  l')) FROM t8 WHE
16c0: 52 45 20 74 38 20 4d 41 54 43 48 20 27 61 20 62  RE t8 MATCH 'a b
16d0: 20 63 27 20 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a   c' }.} -test {.
16e0: 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 5f    faultsim_test_
16f0: 72 65 73 75 6c 74 20 7b 30 20 33 7d 0a 7d 0a 0a  result {0 3}.}..
1700: 64 6f 5f 74 65 73 74 20 39 2e 30 20 7b 0a 20 20  do_test 9.0 {.  
1710: 66 61 75 6c 74 73 69 6d 5f 64 65 6c 65 74 65 5f  faultsim_delete_
1720: 61 6e 64 5f 72 65 6f 70 65 6e 0a 20 20 65 78 65  and_reopen.  exe
1730: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
1740: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1750: 74 39 20 55 53 49 4e 47 20 66 74 73 34 28 74 6f  t9 USING fts4(to
1760: 6b 65 6e 69 7a 65 3d 70 6f 72 74 65 72 29 3b 0a  kenize=porter);.
1770: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1780: 74 39 20 56 41 4c 55 45 53 28 0a 20 20 20 20 20  t9 VALUES(.     
1790: 20 27 74 68 69 73 20 72 65 63 6f 72 64 20 69 73   'this record is
17a0: 20 75 73 65 64 20 74 6f 6f 6f 6f 6f 6f 6f 6f 6f   used tooooooooo
17b0: 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f  oooooooooooooooo
17c0: 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 20 74 72  ooooooooooooo tr
17d0: 79 20 74 6f 27 0a 20 20 20 20 29 3b 0a 20 20 20  y to'.    );.   
17e0: 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74 73 28   SELECT offsets(
17f0: 74 39 29 20 46 52 4f 4d 20 74 39 20 57 48 45 52  t9) FROM t9 WHER
1800: 45 20 74 39 20 4d 41 54 43 48 20 27 74 6f 2a 27  E t9 MATCH 'to*'
1810: 3b 0a 20 20 7d 0a 20 20 66 61 75 6c 74 73 69 6d  ;.  }.  faultsim
1820: 5f 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a  _save_and_close.
1830: 7d 20 7b 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  } {}.do_faultsim
1840: 5f 74 65 73 74 20 39 2e 31 20 2d 70 72 65 70 20  _test 9.1 -prep 
1850: 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73  {.  faultsim_res
1860: 74 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a  tore_and_reopen.
1870: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65 63  } -body {.  exec
1880: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 6f 66 66  sql { SELECT off
1890: 73 65 74 73 28 74 39 29 20 46 52 4f 4d 20 74 39  sets(t9) FROM t9
18a0: 20 57 48 45 52 45 20 74 39 20 4d 41 54 43 48 20   WHERE t9 MATCH 
18b0: 27 74 6f 2a 27 20 7d 0a 7d 20 2d 74 65 73 74 20  'to*' }.} -test 
18c0: 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73  {.  faultsim_tes
18d0: 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b 7b 30 20  t_result {0 {{0 
18e0: 30 20 32 30 20 33 39 20 30 20 30 20 36 34 20 32  0 20 39 0 0 64 2
18f0: 7d 7d 7d 0a 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73  }}}.}..do_faults
1900: 69 6d 5f 74 65 73 74 20 31 30 2e 31 20 2d 70 72  im_test 10.1 -pr
1910: 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f  ep {.  faultsim_
1920: 64 65 6c 65 74 65 5f 61 6e 64 5f 72 65 6f 70 65  delete_and_reope
1930: 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78  n.} -body {.  ex
1940: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56  ecsql { CREATE V
1950: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20  IRTUAL TABLE t1 
1960: 55 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62 2c  USING fts4(a, b,
1970: 20 6c 61 6e 67 75 61 67 65 69 64 3d 64 29 20 7d   languageid=d) }
1980: 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61 75  .} -test {.  fau
1990: 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c  ltsim_test_resul
19a0: 74 20 7b 30 20 7b 7d 7d 0a 7d 0a 0a 23 2d 2d 2d  t {0 {}}.}..#---
19b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19f0: 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f 64 62 0a  ------.reset_db.
1a00: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1a10: 31 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20  11.0 {.  CREATE 
1a20: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
1a30: 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62   USING fts3(a, b
1a40: 29 3b 0a 7d 0a 66 61 75 6c 74 73 69 6d 5f 73 61  );.}.faultsim_sa
1a50: 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a 0a 64 6f  ve_and_close..do
1a60: 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 31  _faultsim_test 1
1a70: 31 20 2d 66 61 75 6c 74 73 20 6f 6f 6d 2a 20 2d  1 -faults oom* -
1a80: 70 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69  prep {.  faultsi
1a90: 6d 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72 65  m_restore_and_re
1aa0: 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  open.} -body {. 
1ab0: 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50 20   execsql { DROP 
1ac0: 54 41 42 4c 45 20 74 31 20 7d 0a 7d 20 2d 74 65  TABLE t1 }.} -te
1ad0: 73 74 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f  st {.  faultsim_
1ae0: 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b  test_result {0 {
1af0: 7d 7d 0a 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65  }}.}...finish_te
1b00: 73 74 0a                                         st.