/ Hex Artifact Content
Login

Artifact 1b22451d1f13f7c509baec620dc3a4a754885dd6:


0000: 23 20 32 30 30 37 20 4a 61 6e 75 61 72 79 20 31  # 2007 January 1
0010: 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  7.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 0a 23 0a 23 2a 2a 2a  rce code..#.#***
0050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0090: 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
00a0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
00b0: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
00c0: 6f 72 20 53 51 4c 69 74 65 20 66 74 73 32 20 6c  or SQLite fts2 l
00d0: 69 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66  ibrary.  The.# f
00e0: 6f 63 75 73 20 68 65 72 65 20 69 73 20 74 65 73  ocus here is tes
00f0: 74 69 6e 67 20 68 61 6e 64 6c 69 6e 67 20 6f 66  ting handling of
0100: 20 55 50 44 41 54 45 20 77 68 65 6e 20 75 73 69   UPDATE when usi
0110: 6e 67 20 55 54 46 2d 31 36 2d 65 6e 63 6f 64 65  ng UTF-16-encode
0120: 64 0a 23 20 64 61 74 61 62 61 73 65 73 2e 0a 23  d.# databases..#
0130: 0a 23 20 24 49 64 3a 20 66 74 73 32 69 2e 74 65  .# $Id: fts2i.te
0140: 73 74 2c 76 20 31 2e 32 20 32 30 30 37 2f 30 31  st,v 1.2 2007/01
0150: 2f 32 34 20 30 33 3a 34 36 3a 33 35 20 64 72 68  /24 03:46:35 drh
0160: 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65   Exp $.#..set te
0170: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0180: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0190: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
01a0: 65 72 2e 74 63 6c 0a 0a 23 20 49 66 20 53 51 4c  er.tcl..# If SQL
01b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 32 20  ITE_ENABLE_FTS2 
01c0: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  is defined, omit
01d0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
01e0: 70 61 62 6c 65 20 21 66 74 73 32 20 7b 0a 20 20  pable !fts2 {.  
01f0: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
0200: 74 75 72 6e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e  turn.}..# Return
0210: 20 74 68 65 20 55 54 46 2d 31 36 20 72 65 70 72   the UTF-16 repr
0220: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
0230: 65 20 73 75 70 70 6c 69 65 64 20 55 54 46 2d 38  e supplied UTF-8
0240: 20 73 74 72 69 6e 67 20 24 73 74 72 2e 0a 23 20   string $str..# 
0250: 49 66 20 24 6e 74 20 69 73 20 74 72 75 65 2c 20  If $nt is true, 
0260: 61 70 70 65 6e 64 20 74 77 6f 20 30 78 30 30 20  append two 0x00 
0270: 62 79 74 65 73 20 61 73 20 61 20 6e 75 6c 20 74  bytes as a nul t
0280: 65 72 6d 69 6e 61 74 6f 72 2e 0a 23 20 4e 4f 54  erminator..# NOT
0290: 45 28 73 68 65 73 73 29 20 43 6f 70 69 65 64 20  E(shess) Copied 
02a0: 66 72 6f 6d 20 63 61 70 69 33 2e 74 65 73 74 2e  from capi3.test.
02b0: 0a 70 72 6f 63 20 75 74 66 31 36 20 7b 73 74 72  .proc utf16 {str
02c0: 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20 73 65 74   {nt 1}} {.  set
02d0: 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e   r [encoding con
02e0: 76 65 72 74 74 6f 20 75 6e 69 63 6f 64 65 20 24  vertto unicode $
02f0: 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e 74 7d 20  str].  if {$nt} 
0300: 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 72 20 22  {.    append r "
0310: 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d 0a 20 20  \x00\x00".  }.  
0320: 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 64 62 20  return $r.}..db 
0330: 65 76 61 6c 20 7b 0a 20 20 50 52 41 47 4d 41 20  eval {.  PRAGMA 
0340: 65 6e 63 6f 64 69 6e 67 20 3d 20 22 55 54 46 2d  encoding = "UTF-
0350: 31 36 6c 65 22 3b 0a 20 20 43 52 45 41 54 45 20  16le";.  CREATE 
0360: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
0370: 20 55 53 49 4e 47 20 66 74 73 32 28 63 6f 6e 74   USING fts2(cont
0380: 65 6e 74 29 3b 0a 7d 0a 0a 64 6f 5f 74 65 73 74  ent);.}..do_test
0390: 20 66 74 73 32 69 2d 31 2e 30 20 7b 0a 20 20 65   fts2i-1.0 {.  e
03a0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  xecsql {PRAGMA e
03b0: 6e 63 6f 64 69 6e 67 7d 0a 7d 20 7b 55 54 46 2d  ncoding}.} {UTF-
03c0: 31 36 6c 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 66  16le}..do_test f
03d0: 74 73 32 69 2d 31 2e 31 20 7b 0a 20 20 65 78 65  ts2i-1.1 {.  exe
03e0: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
03f0: 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e  O t1 (rowid, con
0400: 74 65 6e 74 29 20 56 41 4c 55 45 53 28 31 2c 20  tent) VALUES(1, 
0410: 27 6f 6e 65 27 29 7d 0a 20 20 65 78 65 63 73 71  'one')}.  execsq
0420: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 6e 74 65 6e  l {SELECT conten
0430: 74 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  t FROM t1 WHERE 
0440: 72 6f 77 69 64 20 3d 20 31 7d 0a 7d 20 7b 6f 6e  rowid = 1}.} {on
0450: 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 32  e}..do_test fts2
0460: 69 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20 73 71  i-1.2 {.  set sq
0470: 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l "INSERT INTO t
0480: 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e  1 (rowid, conten
0490: 74 29 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  t) VALUES(2, 'tw
04a0: 6f 27 29 22 0a 20 20 73 65 74 20 53 54 4d 54 20  o')".  set STMT 
04b0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
04c0: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
04d0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
04e0: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
04f0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
0500: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0510: 43 54 20 63 6f 6e 74 65 6e 74 20 46 52 4f 4d 20  CT content FROM 
0520: 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d  t1 WHERE rowid =
0530: 20 32 7d 0a 7d 20 7b 74 77 6f 7d 0a 0a 64 6f 5f   2}.} {two}..do_
0540: 74 65 73 74 20 66 74 73 32 69 2d 31 2e 33 20 7b  test fts2i-1.3 {
0550: 0a 20 20 73 65 74 20 73 71 6c 20 22 49 4e 53 45  .  set sql "INSE
0560: 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69  RT INTO t1 (rowi
0570: 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55  d, content) VALU
0580: 45 53 28 33 2c 20 27 74 68 72 65 65 27 29 22 0a  ES(3, 'three')".
0590: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
05a0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
05b0: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
05c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
05d0: 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  MT.  sqlite3_fin
05e0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65  alize $STMT.  se
05f0: 74 20 73 71 6c 20 22 55 50 44 41 54 45 20 74 31  t sql "UPDATE t1
0600: 20 53 45 54 20 63 6f 6e 74 65 6e 74 20 3d 20 27   SET content = '
0610: 74 72 6f 69 73 27 20 57 48 45 52 45 20 72 6f 77  trois' WHERE row
0620: 69 64 20 3d 20 33 22 0a 20 20 73 65 74 20 53 54  id = 3".  set ST
0630: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
0640: 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20  are $DB $sql -1 
0650: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
0660: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c  step $STMT.  sql
0670: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
0680: 54 4d 54 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  TMT.  execsql {S
0690: 45 4c 45 43 54 20 63 6f 6e 74 65 6e 74 20 46 52  ELECT content FR
06a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69  OM t1 WHERE rowi
06b0: 64 20 3d 20 33 7d 0a 7d 20 7b 74 72 6f 69 73 7d  d = 3}.} {trois}
06c0: 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 69 2d  ..do_test fts2i-
06d0: 31 2e 34 20 7b 0a 20 20 73 65 74 20 73 71 6c 31  1.4 {.  set sql1
06e0: 36 20 5b 75 74 66 31 36 20 7b 49 4e 53 45 52 54  6 [utf16 {INSERT
06f0: 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c   INTO t1 (rowid,
0700: 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53   content) VALUES
0710: 28 34 2c 20 27 66 6f 75 72 27 29 7d 5d 0a 20 20  (4, 'four')}].  
0720: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
0730: 33 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20  3_prepare16 $DB 
0740: 24 73 71 6c 31 36 20 2d 31 20 54 41 49 4c 5d 0a  $sql16 -1 TAIL].
0750: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
0760: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 66  STMT.  sqlite3_f
0770: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
0780: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0790: 63 6f 6e 74 65 6e 74 20 46 52 4f 4d 20 74 31 20  content FROM t1 
07a0: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 34 7d  WHERE rowid = 4}
07b0: 0a 7d 20 7b 66 6f 75 72 7d 0a 0a 64 6f 5f 74 65  .} {four}..do_te
07c0: 73 74 20 66 74 73 32 69 2d 31 2e 35 20 7b 0a 20  st fts2i-1.5 {. 
07d0: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
07e0: 36 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  6 {INSERT INTO t
07f0: 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e  1 (rowid, conten
0800: 74 29 20 56 41 4c 55 45 53 28 35 2c 20 27 66 69  t) VALUES(5, 'fi
0810: 76 65 27 29 7d 5d 0a 20 20 73 65 74 20 53 54 4d  ve')}].  set STM
0820: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
0830: 72 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20  re16 $DB $sql16 
0840: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
0850: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
0860: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0870: 20 24 53 54 4d 54 0a 20 20 73 65 74 20 73 71 6c   $STMT.  set sql
0880: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
0890: 63 6f 6e 74 65 6e 74 20 3d 20 27 63 69 6e 71 27  content = 'cinq'
08a0: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 35   WHERE rowid = 5
08b0: 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  ".  set STMT [sq
08c0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
08d0: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
08e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
08f0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 66  STMT.  sqlite3_f
0900: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
0910: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0920: 63 6f 6e 74 65 6e 74 20 46 52 4f 4d 20 74 31 20  content FROM t1 
0930: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 35 7d  WHERE rowid = 5}
0940: 0a 7d 20 7b 63 69 6e 71 7d 0a 0a 66 69 6e 69 73  .} {cinq}..finis
0950: 68 5f 74 65 73 74 0a                             h_test.