/ Hex Artifact Content
Login

Artifact d29cee6ed653e30de478066881cec8aa766531b2:


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 33 20 6c  or SQLite fts3 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 33 61 69 2e 74  .# $Id: fts3ai.t
0140: 65 73 74 2c 76 20 31 2e 31 20 32 30 30 37 2f 30  est,v 1.1 2007/0
0150: 38 2f 32 30 20 31 37 3a 33 38 3a 34 32 20 73 68  8/20 17:38:42 sh
0160: 65 73 73 20 45 78 70 20 24 0a 23 0a 0a 73 65 74  ess Exp $.#..set
0170: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0180: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0190: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
01a0: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66 20  ester.tcl..# If 
01b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
01c0: 53 33 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  S3 is defined, o
01d0: 6d 69 74 20 74 68 69 73 20 66 69 6c 65 2e 0a 69  mit this file..i
01e0: 66 63 61 70 61 62 6c 65 20 21 66 74 73 33 20 7b  fcapable !fts3 {
01f0: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0200: 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 52 65 74   return.}..# Ret
0210: 75 72 6e 20 74 68 65 20 55 54 46 2d 31 36 20 72  urn the UTF-16 r
0220: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
0230: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 55 54   the supplied UT
0240: 46 2d 38 20 73 74 72 69 6e 67 20 24 73 74 72 2e  F-8 string $str.
0250: 0a 23 20 49 66 20 24 6e 74 20 69 73 20 74 72 75  .# If $nt is tru
0260: 65 2c 20 61 70 70 65 6e 64 20 74 77 6f 20 30 78  e, append two 0x
0270: 30 30 20 62 79 74 65 73 20 61 73 20 61 20 6e 75  00 bytes as a nu
0280: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a 23 20  l terminator..# 
0290: 4e 4f 54 45 28 73 68 65 73 73 29 20 43 6f 70 69  NOTE(shess) Copi
02a0: 65 64 20 66 72 6f 6d 20 63 61 70 69 33 2e 74 65  ed from capi3.te
02b0: 73 74 2e 0a 70 72 6f 63 20 75 74 66 31 36 20 7b  st..proc utf16 {
02c0: 73 74 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20  str {nt 1}} {.  
02d0: 73 65 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20  set r [encoding 
02e0: 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64  convertto unicod
02f0: 65 20 24 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e  e $str].  if {$n
0300: 74 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20  t} {.    append 
0310: 72 20 22 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d  r "\x00\x00".  }
0320: 0a 20 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a  .  return $r.}..
0330: 64 62 20 65 76 61 6c 20 7b 0a 20 20 50 52 41 47  db eval {.  PRAG
0340: 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 55  MA encoding = "U
0350: 54 46 2d 31 36 6c 65 22 3b 0a 20 20 43 52 45 41  TF-16le";.  CREA
0360: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
0370: 20 74 31 20 55 53 49 4e 47 20 66 74 73 33 28 63   t1 USING fts3(c
0380: 6f 6e 74 65 6e 74 29 3b 0a 7d 0a 0a 64 6f 5f 74  ontent);.}..do_t
0390: 65 73 74 20 66 74 73 33 61 69 2d 31 2e 30 20 7b  est fts3ai-1.0 {
03a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47  .  execsql {PRAG
03b0: 4d 41 20 65 6e 63 6f 64 69 6e 67 7d 0a 7d 20 7b  MA encoding}.} {
03c0: 55 54 46 2d 31 36 6c 65 7d 0a 0a 64 6f 5f 74 65  UTF-16le}..do_te
03d0: 73 74 20 66 74 73 33 61 69 2d 31 2e 31 20 7b 0a  st fts3ai-1.1 {.
03e0: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
03f0: 54 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64  T INTO t1 (rowid
0400: 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45  , content) VALUE
0410: 53 28 31 2c 20 27 6f 6e 65 27 29 7d 0a 20 20 65  S(1, 'one')}.  e
0420: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
0430: 6f 6e 74 65 6e 74 20 46 52 4f 4d 20 74 31 20 57  ontent FROM t1 W
0440: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 7d 0a  HERE rowid = 1}.
0450: 7d 20 7b 6f 6e 65 7d 0a 0a 64 6f 5f 74 65 73 74  } {one}..do_test
0460: 20 66 74 73 33 61 69 2d 31 2e 32 20 7b 0a 20 20   fts3ai-1.2 {.  
0470: 73 65 74 20 73 71 6c 20 22 49 4e 53 45 52 54 20  set sql "INSERT 
0480: 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c 20  INTO t1 (rowid, 
0490: 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28  content) VALUES(
04a0: 32 2c 20 27 74 77 6f 27 29 22 0a 20 20 73 65 74  2, 'two')".  set
04b0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
04c0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
04d0: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
04e0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
04f0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0500: 20 24 53 54 4d 54 0a 20 20 65 78 65 63 73 71 6c   $STMT.  execsql
0510: 20 7b 53 45 4c 45 43 54 20 63 6f 6e 74 65 6e 74   {SELECT content
0520: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72   FROM t1 WHERE r
0530: 6f 77 69 64 20 3d 20 32 7d 0a 7d 20 7b 74 77 6f  owid = 2}.} {two
0540: 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  }..do_test fts3a
0550: 69 2d 31 2e 33 20 7b 0a 20 20 73 65 74 20 73 71  i-1.3 {.  set sq
0560: 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l "INSERT INTO t
0570: 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e  1 (rowid, conten
0580: 74 29 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68  t) VALUES(3, 'th
0590: 72 65 65 27 29 22 0a 20 20 73 65 74 20 53 54 4d  ree')".  set STM
05a0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
05b0: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
05c0: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  AIL].  sqlite3_s
05d0: 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69  tep $STMT.  sqli
05e0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
05f0: 4d 54 0a 20 20 73 65 74 20 73 71 6c 20 22 55 50  MT.  set sql "UP
0600: 44 41 54 45 20 74 31 20 53 45 54 20 63 6f 6e 74  DATE t1 SET cont
0610: 65 6e 74 20 3d 20 27 74 72 6f 69 73 27 20 57 48  ent = 'trois' WH
0620: 45 52 45 20 72 6f 77 69 64 20 3d 20 33 22 0a 20  ERE rowid = 3". 
0630: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
0640: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
0650: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
0660: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
0670: 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  T.  sqlite3_fina
0680: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 65  lize $STMT.  exe
0690: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 6e  csql {SELECT con
06a0: 74 65 6e 74 20 46 52 4f 4d 20 74 31 20 57 48 45  tent FROM t1 WHE
06b0: 52 45 20 72 6f 77 69 64 20 3d 20 33 7d 0a 7d 20  RE rowid = 3}.} 
06c0: 7b 74 72 6f 69 73 7d 0a 0a 64 6f 5f 74 65 73 74  {trois}..do_test
06d0: 20 66 74 73 33 61 69 2d 31 2e 34 20 7b 0a 20 20   fts3ai-1.4 {.  
06e0: 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31 36  set sql16 [utf16
06f0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   {INSERT INTO t1
0700: 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74   (rowid, content
0710: 29 20 56 41 4c 55 45 53 28 34 2c 20 27 66 6f 75  ) VALUES(4, 'fou
0720: 72 27 29 7d 5d 0a 20 20 73 65 74 20 53 54 4d 54  r')}].  set STMT
0730: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0740: 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20 2d  e16 $DB $sql16 -
0750: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
0760: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
0770: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0780: 24 53 54 4d 54 0a 20 20 65 78 65 63 73 71 6c 20  $STMT.  execsql 
0790: 7b 53 45 4c 45 43 54 20 63 6f 6e 74 65 6e 74 20  {SELECT content 
07a0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f  FROM t1 WHERE ro
07b0: 77 69 64 20 3d 20 34 7d 0a 7d 20 7b 66 6f 75 72  wid = 4}.} {four
07c0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  }..do_test fts3a
07d0: 69 2d 31 2e 35 20 7b 0a 20 20 73 65 74 20 73 71  i-1.5 {.  set sq
07e0: 6c 31 36 20 5b 75 74 66 31 36 20 7b 49 4e 53 45  l16 [utf16 {INSE
07f0: 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69  RT INTO t1 (rowi
0800: 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55  d, content) VALU
0810: 45 53 28 35 2c 20 27 66 69 76 65 27 29 7d 5d 0a  ES(5, 'five')}].
0820: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
0830: 74 65 33 5f 70 72 65 70 61 72 65 31 36 20 24 44  te3_prepare16 $D
0840: 42 20 24 73 71 6c 31 36 20 2d 31 20 54 41 49 4c  B $sql16 -1 TAIL
0850: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
0860: 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33   $STMT.  sqlite3
0870: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
0880: 20 20 73 65 74 20 73 71 6c 20 22 55 50 44 41 54    set sql "UPDAT
0890: 45 20 74 31 20 53 45 54 20 63 6f 6e 74 65 6e 74  E t1 SET content
08a0: 20 3d 20 27 63 69 6e 71 27 20 57 48 45 52 45 20   = 'cinq' WHERE 
08b0: 72 6f 77 69 64 20 3d 20 35 22 0a 20 20 73 65 74  rowid = 5".  set
08c0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
08d0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
08e0: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
08f0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
0900: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0910: 20 24 53 54 4d 54 0a 20 20 65 78 65 63 73 71 6c   $STMT.  execsql
0920: 20 7b 53 45 4c 45 43 54 20 63 6f 6e 74 65 6e 74   {SELECT content
0930: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72   FROM t1 WHERE r
0940: 6f 77 69 64 20 3d 20 35 7d 0a 7d 20 7b 63 69 6e  owid = 5}.} {cin
0950: 71 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  q}..finish_test.