/ Hex Artifact Content
Login

Artifact 07d64326e79bbdbab20ee87fc3328fbf01641c9f:


0000: 23 20 32 30 30 37 20 4d 61 72 63 68 20 32 38 0a  # 2007 March 28.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  e 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 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
00a0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
00b0: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
00c0: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
00d0: 20 20 54 68 65 20 66 6f 63 75 73 0a 23 20 6f 66    The focus.# of
00e0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
00f0: 74 65 73 74 69 6e 67 20 69 73 73 70 61 63 65 2f  testing isspace/
0100: 69 73 61 6c 6e 75 6d 2f 74 6f 6c 6f 77 65 72 20  isalnum/tolower 
0110: 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 20 74 68  problems with th
0120: 65 0a 23 20 46 54 53 33 20 6d 6f 64 75 6c 65 2e  e.# FTS3 module.
0130: 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c    Unfortunately,
0140: 20 74 68 69 73 20 63 6f 64 65 20 69 73 6e 27 74   this code isn't
0150: 20 61 20 72 65 61 6c 6c 79 20 70 72 69 6e 63 69   a really princi
0160: 70 6c 65 64 20 73 65 74 0a 23 20 6f 66 20 74 65  pled set.# of te
0170: 73 74 73 2c 20 62 65 63 61 75 73 65 20 69 74 20  sts, because it 
0180: 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f  is impossible to
0190: 20 6b 6e 6f 77 20 77 68 65 72 65 20 6e 65 77 20   know where new 
01a0: 75 73 65 73 20 6f 66 20 74 68 65 73 65 0a 23 20  uses of these.# 
01b0: 66 75 6e 63 74 69 6f 6e 73 20 6d 69 67 68 74 20  functions might 
01c0: 61 70 70 65 61 72 2e 0a 23 0a 23 20 24 49 64 3a  appear..#.# $Id:
01d0: 20 66 74 73 33 61 6c 2e 74 65 73 74 2c 76 20 31   fts3al.test,v 1
01e0: 2e 32 20 32 30 30 37 2f 31 32 2f 31 33 20 32 31  .2 2007/12/13 21
01f0: 3a 35 34 3a 31 31 20 64 72 68 20 45 78 70 20 24  :54:11 drh Exp $
0200: 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20  .#..set testdir 
0210: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0220: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0230: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0240: 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45 4e  ..# If SQLITE_EN
0250: 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64 65 66  ABLE_FTS3 is def
0260: 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20  ined, omit this 
0270: 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20  file..ifcapable 
0280: 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69 73 68  !fts3 {.  finish
0290: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
02a0: 0a 0a 23 20 54 65 73 74 73 20 74 68 61 74 20 73  ..# Tests that s
02b0: 74 61 72 74 73 57 69 74 68 28 29 20 28 63 61 6c  tartsWith() (cal
02c0: 6c 73 20 69 73 73 70 61 63 65 2c 20 74 6f 6c 6f  ls isspace, tolo
02d0: 77 65 72 2c 20 69 73 61 6c 6e 75 6d 29 20 63 61  wer, isalnum) ca
02e0: 6e 20 68 61 6e 64 6c 65 0a 23 20 68 69 2d 62 69  n handle.# hi-bi
02f0: 74 20 63 68 61 72 73 2e 20 20 70 61 72 73 65 53  t chars.  parseS
0300: 70 65 63 28 29 20 61 6c 73 6f 20 63 61 6c 6c 73  pec() also calls
0310: 20 69 73 61 6c 6e 75 6d 20 68 65 72 65 2e 0a 64   isalnum here..d
0320: 6f 5f 74 65 73 74 20 66 74 73 33 61 6c 2d 31 2e  o_test fts3al-1.
0330: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 43  1 {.  execsql "C
0340: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0350: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
0360: 33 28 63 6f 6e 74 65 6e 74 2c 20 5c 78 38 30 29  3(content, \x80)
0370: 22 0a 7d 20 7b 7d 0a 0a 23 20 41 64 64 69 74 69  ".} {}..# Additi
0380: 6f 6e 61 6c 6c 79 20 74 65 73 74 73 20 69 73 73  onally tests iss
0390: 70 61 63 65 28 29 20 63 61 6c 6c 20 69 6e 20 67  pace() call in g
03a0: 65 74 54 6f 6b 65 6e 28 29 2c 20 61 6e 64 20 69  etToken(), and i
03b0: 73 61 6c 6e 75 6d 28 29 20 63 61 6c 6c 0a 23 20  salnum() call.# 
03c0: 69 6e 20 74 6f 6b 65 6e 4c 69 73 74 54 6f 49 64  in tokenListToId
03d0: 4c 69 73 74 28 29 2e 0a 64 6f 5f 74 65 73 74 20  List()..do_test 
03e0: 66 74 73 33 61 6c 2d 31 2e 32 20 7b 0a 20 20 63  fts3al-1.2 {.  c
03f0: 61 74 63 68 20 7b 0a 20 20 20 20 65 78 65 63 73  atch {.    execs
0400: 71 6c 20 22 43 52 45 41 54 45 20 56 49 52 54 55  ql "CREATE VIRTU
0410: 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e  AL TABLE t2 USIN
0420: 47 20 66 74 73 33 28 63 6f 6e 74 65 6e 74 2c 20  G fts3(content, 
0430: 74 6f 6b 65 6e 69 7a 65 20 5c 78 38 30 29 22 0a  tokenize \x80)".
0440: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72    }.  sqlite3_er
0450: 72 6d 73 67 20 24 44 42 0a 7d 20 22 75 6e 6b 6e  rmsg $DB.} "unkn
0460: 6f 77 6e 20 74 6f 6b 65 6e 69 7a 65 72 3a 20 5c  own tokenizer: \
0470: 78 38 30 22 0a 0a 23 20 41 64 64 69 74 69 6f 6e  x80"..# Addition
0480: 61 6c 6c 79 20 74 65 73 74 20 66 69 6e 61 6c 20  ally test final 
0490: 69 73 61 6c 6e 75 6d 28 29 20 69 6e 20 73 74 61  isalnum() in sta
04a0: 72 74 73 57 69 74 68 28 29 2e 0a 64 6f 5f 74 65  rtsWith()..do_te
04b0: 73 74 20 66 74 73 33 61 6c 2d 31 2e 33 20 7b 0a  st fts3al-1.3 {.
04c0: 20 20 65 78 65 63 73 71 6c 20 22 43 52 45 41 54    execsql "CREAT
04d0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
04e0: 74 33 20 55 53 49 4e 47 20 66 74 73 33 28 63 6f  t3 USING fts3(co
04f0: 6e 74 65 6e 74 2c 20 74 6f 6b 65 6e 69 7a 65 5c  ntent, tokenize\
0500: 78 38 30 29 22 0a 7d 20 7b 7d 0a 0a 23 20 54 68  x80)".} {}..# Th
0510: 65 20 73 6e 69 70 70 65 74 2d 67 65 6e 65 72 61  e snippet-genera
0520: 74 69 6f 6e 20 63 6f 64 65 20 68 61 73 20 63 61  tion code has ca
0530: 6c 6c 73 20 74 6f 20 69 73 73 70 61 63 65 28 29  lls to isspace()
0540: 20 77 68 69 63 68 20 61 72 65 20 73 6f 72 74 20   which are sort 
0550: 6f 66 0a 23 20 68 61 72 64 20 74 6f 20 67 65 74  of.# hard to get
0560: 20 74 6f 2e 20 20 49 74 20 66 69 6e 64 73 20 63   to.  It finds c
0570: 6f 6e 76 65 6e 69 65 6e 74 20 62 72 65 61 6b 70  onvenient breakp
0580: 6f 69 6e 74 73 20 62 79 20 73 74 61 72 74 69 6e  oints by startin
0590: 67 20 7e 34 30 0a 23 20 63 68 61 72 73 20 62 65  g ~40.# chars be
05a0: 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74  fore and after t
05b0: 68 65 20 6d 61 74 63 68 65 64 20 74 65 72 6d 2c  he matched term,
05c0: 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67 20 7e 31   and scanning ~1
05d0: 30 20 63 68 61 72 73 0a 23 20 61 72 6f 75 6e 64  0 chars.# around
05e0: 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 20 66   that position f
05f0: 6f 72 20 69 73 73 70 61 63 65 28 29 20 63 68 61  or isspace() cha
0600: 72 61 63 74 65 72 73 2e 20 20 54 68 65 20 6c 6f  racters.  The lo
0610: 6e 67 20 77 6f 72 64 20 77 69 74 68 0a 23 20 65  ng word with.# e
0620: 6d 62 65 64 64 65 64 20 68 69 2d 62 69 74 20 63  mbedded hi-bit c
0630: 68 61 72 73 20 63 61 75 73 65 73 20 6f 6e 65 20  hars causes one 
0640: 6f 66 20 74 68 65 73 65 20 69 73 73 70 61 63 65  of these isspace
0650: 28 29 20 63 61 6c 6c 73 20 74 6f 20 62 65 0a 23  () calls to be.#
0660: 20 65 78 65 72 63 69 73 65 64 2e 20 20 54 68 65   exercised.  The
0670: 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 61 20   version with a 
0680: 63 6f 75 70 6c 65 20 65 78 74 72 61 20 73 70 61  couple extra spa
0690: 63 65 73 20 73 68 6f 75 6c 64 20 63 61 75 73 65  ces should cause
06a0: 20 74 68 65 0a 23 20 6f 74 68 65 72 20 69 73 73   the.# other iss
06b0: 70 61 63 65 28 29 20 63 61 6c 6c 20 74 6f 20 62  pace() call to b
06c0: 65 20 65 78 65 72 63 69 73 65 64 2e 20 20 5b 42  e exercised.  [B
06d0: 6f 74 68 20 63 61 73 65 73 20 68 61 76 65 20 62  oth cases have b
06e0: 65 65 6e 20 74 65 73 74 65 64 0a 23 20 69 6e 20  een tested.# in 
06f0: 74 68 65 20 64 65 62 75 67 67 65 72 2c 20 62 75  the debugger, bu
0700: 74 20 49 27 6d 20 68 6f 70 69 6e 67 20 74 6f 20  t I'm hoping to 
0710: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 63 61 74 63  continue to catc
0720: 68 20 69 74 20 69 66 20 73 69 6d 70 6c 65 0a 23  h it if simple.#
0730: 20 63 6f 6e 73 74 61 6e 74 20 63 68 61 6e 67 65   constant change
0740: 73 20 63 68 61 6e 67 65 20 74 68 69 6e 67 73 20  s change things 
0750: 73 6c 69 67 68 74 6c 79 2e 0a 23 0a 23 20 54 68  slightly..#.# Th
0760: 65 20 74 72 61 69 6c 69 6e 67 20 61 6e 64 20 6c  e trailing and l
0770: 65 61 64 69 6e 67 20 68 69 2d 62 69 74 20 63 68  eading hi-bit ch
0780: 61 72 73 20 68 65 6c 70 20 77 69 74 68 20 63 6f  ars help with co
0790: 64 65 20 77 68 69 63 68 20 74 65 73 74 73 20 66  de which tests f
07a0: 6f 72 0a 23 20 69 73 73 70 61 63 65 28 29 20 74  or.# isspace() t
07b0: 6f 20 63 6f 61 6c 65 73 63 65 20 6d 75 6c 74 69  o coalesce multi
07c0: 70 6c 65 20 73 70 61 63 65 73 2e 0a 23 0a 23 20  ple spaces..#.# 
07d0: 55 50 44 41 54 45 3a 20 54 68 65 20 61 62 6f 76  UPDATE: The abov
07e0: 65 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 74  e is no longer t
07f0: 72 75 65 3b 20 74 68 65 72 65 20 69 73 20 6e 6f  rue; there is no
0800: 20 73 75 63 68 20 63 6f 64 65 20 69 6e 20 66 74   such code in ft
0810: 73 33 2e 0a 23 20 42 75 74 20 6c 65 61 76 65 20  s3..# But leave 
0820: 74 68 65 20 74 65 73 74 20 69 6e 20 6a 75 73 74  the test in just
0830: 20 74 68 65 20 73 61 6d 65 2e 0a 23 20 0a 0a 73   the same..# ..s
0840: 65 74 20 77 6f 72 64 20 22 5c 78 38 30 78 78 78  et word "\x80xxx
0850: 78 78 5c 78 38 30 78 78 78 78 78 5c 78 38 30 78  xx\x80xxxxx\x80x
0860: 78 78 78 78 5c 78 38 30 78 78 78 78 78 5c 78 38  xxxx\x80xxxxx\x8
0870: 30 78 78 78 78 78 5c 78 38 30 78 78 78 78 78 5c  0xxxxx\x80xxxxx\
0880: 78 38 30 22 0a 73 65 74 20 70 68 72 61 73 65 31  x80".set phrase1
0890: 20 22 24 77 6f 72 64 20 24 77 6f 72 64 20 24 77   "$word $word $w
08a0: 6f 72 64 20 74 61 72 67 65 74 20 24 77 6f 72 64  ord target $word
08b0: 20 24 77 6f 72 64 20 24 77 6f 72 64 22 0a 73 65   $word $word".se
08c0: 74 20 70 68 72 61 73 65 32 20 22 24 77 6f 72 64  t phrase2 "$word
08d0: 20 24 77 6f 72 64 20 24 77 6f 72 64 20 20 20 20   $word $word    
08e0: 74 61 72 67 65 74 20 20 20 20 24 77 6f 72 64 20  target    $word 
08f0: 24 77 6f 72 64 20 24 77 6f 72 64 22 0a 0a 64 62  $word $word"..db
0900: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 56 49   eval {CREATE VI
0910: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 34 20 55  RTUAL TABLE t4 U
0920: 53 49 4e 47 20 66 74 73 33 28 63 6f 6e 74 65 6e  SING fts3(conten
0930: 74 29 7d 0a 64 62 20 65 76 61 6c 20 22 49 4e 53  t)}.db eval "INS
0940: 45 52 54 20 49 4e 54 4f 20 74 34 20 28 63 6f 6e  ERT INTO t4 (con
0950: 74 65 6e 74 29 20 56 41 4c 55 45 53 20 28 27 24  tent) VALUES ('$
0960: 70 68 72 61 73 65 31 27 29 22 0a 64 62 20 65 76  phrase1')".db ev
0970: 61 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  al "INSERT INTO 
0980: 74 34 20 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c  t4 (content) VAL
0990: 55 45 53 20 28 27 24 70 68 72 61 73 65 32 27 29  UES ('$phrase2')
09a0: 22 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  "..do_test fts3a
09b0: 6c 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  l-1.4 {.  execsq
09c0: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
09d0: 20 6c 65 6e 67 74 68 28 73 6e 69 70 70 65 74 28   length(snippet(
09e0: 74 34 29 29 20 46 52 4f 4d 20 74 34 20 57 48 45  t4)) FROM t4 WHE
09f0: 52 45 20 74 34 20 4d 41 54 43 48 20 27 74 61 72  RE t4 MATCH 'tar
0a00: 67 65 74 27 7d 0a 7d 20 7b 31 20 32 34 31 20 32  get'}.} {1 241 2
0a10: 20 32 34 37 7d 0a 0a 66 69 6e 69 73 68 5f 74 65   247}..finish_te
0a20: 73 74 0a                                         st.