/ Hex Artifact Content
Login

Artifact 5dea9e119ed39e0923b423dc2b3eaaef2ec3abd3:


0000: 23 20 32 30 31 34 20 4a 75 6e 65 20 31 37 0a 23  # 2014 June 17.#
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 2a 2a 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
01b0: 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20 69  of this script i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 46 54  s testing the FT
01d0: 53 35 20 6d 6f 64 75 6c 65 2e 0a 23 0a 23 0a 0a  S5 module..#.#..
01e0: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  source [file joi
01f0: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  n [file dirname 
0200: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 66  [info script]] f
0210: 74 73 35 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 5d 0a  ts5_common.tcl].
0220: 73 65 74 20 74 65 73 74 70 72 65 66 69 78 20 66  set testprefix f
0230: 74 73 35 61 63 0a 0a 23 20 49 66 20 53 51 4c 49  ts5ac..# If SQLI
0240: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 20 69  TE_ENABLE_FTS5 i
0250: 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  s defined, omit 
0260: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
0270: 61 62 6c 65 20 21 66 74 73 35 20 7b 0a 20 20 66  able !fts5 {.  f
0280: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0290: 75 72 6e 0a 7d 0a 0a 73 65 74 20 64 61 74 61 20  urn.}..set data 
02a0: 7b 0a 20 20 20 20 30 20 20 20 7b 70 20 6f 20 71  {.    0   {p o q
02b0: 20 65 20 7a 20 6b 20 7a 20 70 20 6e 20 66 20 79   e z k z p n f y
02c0: 20 75 20 7a 20 79 20 6e 20 79 7d 20 20 20 7b 6c   u z y n y}   {l
02d0: 20 6f 20 6f 20 6c 20 76 20 76 20 6b 7d 0a 20 20   o o l v v k}.  
02e0: 20 20 31 20 20 20 7b 70 20 6b 20 68 20 68 20 70    1   {p k h h p
02f0: 20 79 20 6c 20 6c 20 68 20 69 20 70 20 76 20 6e   y l l h i p v n
0300: 7d 20 20 20 20 20 20 20 20 20 7b 70 20 70 20 6c  }         {p p l
0310: 20 75 20 72 20 69 20 66 20 61 20 6a 20 67 20 65   u r i f a j g e
0320: 20 72 20 72 20 78 20 77 7d 0a 20 20 20 20 32 20   r r x w}.    2 
0330: 20 20 7b 6c 20 73 20 7a 20 6a 20 6b 20 69 20 6d    {l s z j k i m
0340: 20 70 20 73 7d 20 20 20 20 20 20 20 20 20 20 20   p s}           
0350: 20 20 20 20 20 20 7b 6c 20 77 20 65 20 6a 20 74        {l w e j t
0360: 20 6a 20 65 20 65 20 69 20 74 20 77 20 72 20 6f   j e e i t w r o
0370: 20 70 20 6f 7d 0a 20 20 20 20 33 20 20 20 7b 78   p o}.    3   {x
0380: 20 67 20 79 20 6d 20 79 20 6d 20 68 20 70 7d 20   g y m y m h p} 
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03a0: 20 20 7b 6b 20 6a 20 6a 20 62 20 72 20 65 20 79    {k j j b r e y
03b0: 20 79 20 61 20 6b 20 79 7d 0a 20 20 20 20 34 20   y a k y}.    4 
03c0: 20 20 7b 71 20 6d 20 61 20 69 20 79 20 69 20 7a    {q m a i y i z
03d0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
03e0: 20 20 20 20 20 20 7b 6f 20 77 20 61 20 67 20 6b        {o w a g k
03f0: 20 78 20 67 20 6a 20 6d 20 77 20 65 20 75 20 6b   x g j m w e u k
0400: 7d 0a 20 20 20 20 35 20 20 20 7b 6b 20 6f 20 61  }.    5   {k o a
0410: 20 77 20 79 20 62 20 73 20 7a 7d 20 20 20 20 20   w y b s z}     
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 73                {s
0430: 20 67 20 6c 20 6d 20 6d 20 6c 20 6d 20 67 20 70   g l m m l m g p
0440: 7d 0a 20 20 20 20 36 20 20 20 7b 64 20 61 20 71  }.    6   {d a q
0450: 20 69 20 7a 20 68 20 62 20 6c 20 63 20 70 20 6b   i z h b l c p k
0460: 20 6a 20 67 20 6b 7d 20 20 20 20 20 20 20 7b 70   j g k}       {p
0470: 20 78 20 75 20 6a 20 78 20 74 20 76 20 63 20 7a   x u j x t v c z
0480: 7d 0a 20 20 20 20 37 20 20 20 7b 66 20 64 20 61  }.    7   {f d a
0490: 20 67 20 6f 20 63 20 74 20 69 7d 20 20 20 20 20   g o c t i}     
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 77                {w
04b0: 20 66 20 63 20 78 20 6c 20 64 20 72 20 6b 20 69   f c x l d r k i
04c0: 20 6a 7d 0a 20 20 20 20 38 20 20 20 7b 79 20 67   j}.    8   {y g
04d0: 20 77 20 75 20 62 20 71 20 70 20 6f 20 6d 20 6a   w u b q p o m j
04e0: 20 79 20 62 20 70 20 61 20 65 20 6b 7d 20 20 20   y b p a e k}   
04f0: 7b 72 20 69 20 64 20 6b 20 79 20 77 20 6f 20 7a  {r i d k y w o z
0500: 20 71 20 6d 20 61 20 74 20 70 7d 0a 20 20 20 20   q m a t p}.    
0510: 39 20 20 20 7b 72 20 6b 20 6f 20 6d 20 63 20 63  9   {r k o m c c
0520: 20 6a 20 73 20 78 20 6d 20 78 20 6d 20 78 20 6d   j s x m x m x m
0530: 20 71 20 72 7d 20 20 20 7b 79 20 72 20 63 20 61   q r}   {y r c a
0540: 20 71 20 64 20 7a 20 6b 20 6e 20 78 20 6e 7d 0a   q d z k n x n}.
0550: 20 20 20 20 31 30 20 20 7b 6b 20 6a 20 71 20 6d      10  {k j q m
0560: 20 67 20 71 20 61 20 6a 20 64 7d 20 20 20 20 20   g q a j d}     
0570: 20 20 20 20 20 20 20 20 20 20 20 20 7b 64 20 64              {d d
0580: 20 65 20 7a 20 67 20 77 20 68 20 63 20 64 20 6f   e z g w h c d o
0590: 20 6f 20 67 20 78 20 64 7d 0a 20 20 20 20 31 31   o g x d}.    11
05a0: 20 20 7b 6a 20 7a 20 75 20 6d 20 6f 20 79 20 71    {j z u m o y q
05b0: 20 6a 20 66 20 77 20 65 20 65 20 77 20 74 20 72   j f w e e w t r
05c0: 20 6a 20 77 7d 20 7b 67 20 6d 20 6f 20 72 20 78   j w} {g m o r x
05d0: 20 6e 20 74 20 6e 20 77 20 69 20 66 20 67 20 6c   n t n w i f g l
05e0: 20 7a 20 66 7d 0a 20 20 20 20 31 32 20 20 7b 73   z f}.    12  {s
05f0: 20 79 20 77 20 61 20 77 20 64 20 6f 20 68 20 78   y w a w d o h x
0600: 20 6d 20 6b 7d 20 20 20 20 20 20 20 20 20 20 20   m k}           
0610: 20 20 7b 63 20 77 20 6b 20 7a 20 62 20 70 20 6f    {c w k z b p o
0620: 20 72 20 61 7d 0a 20 20 20 20 31 33 20 20 7b 75   r a}.    13  {u
0630: 20 74 20 68 20 78 20 65 20 67 20 73 20 6b 20 6e   t h x e g s k n
0640: 20 67 20 69 7d 20 20 20 20 20 20 20 20 20 20 20   g i}           
0650: 20 20 7b 66 20 6a 20 77 20 67 20 63 20 73 20 72    {f j w g c s r
0660: 7d 0a 20 20 20 20 31 34 20 20 7b 62 20 66 20 69  }.    14  {b f i
0670: 20 63 20 73 20 75 20 7a 20 74 20 6b 7d 20 20 20   c s u z t k}   
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 63                {c
0690: 20 6b 20 71 20 73 20 6a 20 75 20 69 20 7a 20 6f   k q s j u i z o
06a0: 7d 0a 20 20 20 20 31 35 20 20 7b 6e 20 61 20 66  }.    15  {n a f
06b0: 20 6e 20 75 20 73 20 77 20 68 20 79 20 6e 20 73   n u s w h y n s
06c0: 20 69 20 71 20 65 20 77 7d 20 20 20 20 20 7b 78   i q e w}     {x
06d0: 20 67 20 65 20 67 20 61 20 73 20 73 20 68 20 6e   g e g a s s h n
06e0: 7d 0a 20 20 20 20 31 36 20 20 7b 6b 20 73 20 71  }.    16  {k s q
06f0: 20 65 20 6a 20 6e 20 70 7d 20 20 20 20 20 20 20   e j n p}       
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 74                {t
0710: 20 72 20 6a 20 66 20 74 20 6f 20 65 20 6b 20 6b   r j f t o e k k
0720: 20 6c 20 6d 20 69 7d 0a 20 20 20 20 31 37 20 20   l m i}.    17  
0730: 7b 67 20 64 20 74 20 75 20 77 20 72 20 6f 20 70  {g d t u w r o p
0740: 20 6d 20 6e 20 6d 20 6e 20 70 20 68 20 62 20 6f   m n m n p h b o
0750: 20 75 7d 20 7b 68 20 73 20 77 20 6f 20 73 20 6c   u} {h s w o s l
0760: 20 6a 20 65 7d 0a 20 20 20 20 31 38 20 20 7b 66   j e}.    18  {f
0770: 20 6c 20 71 20 79 20 71 20 71 20 67 20 65 20 65   l q y q q g e e
0780: 20 78 20 6a 20 72 7d 20 20 20 20 20 20 20 20 20   x j r}         
0790: 20 20 7b 6e 20 62 20 72 20 72 20 67 20 65 20 69    {n b r r g e i
07a0: 20 72 20 74 20 78 20 71 20 6b 7d 0a 20 20 20 20   r t x q k}.    
07b0: 31 39 20 20 7b 66 20 69 20 72 20 67 20 6f 20 61  19  {f i r g o a
07c0: 20 77 20 65 20 70 20 69 20 6c 20 6f 20 61 20 77   w e p i l o a w
07d0: 7d 20 20 20 20 20 20 20 7b 65 20 6b 20 72 20 7a  }       {e k r z
07e0: 20 74 20 64 20 67 20 68 20 67 20 69 20 62 20 64   t d g h g i b d
07f0: 20 69 20 65 20 6d 7d 0a 20 20 20 20 32 30 20 20   i e m}.    20  
0800: 7b 6c 20 64 20 75 20 75 20 66 20 70 20 79 7d 20  {l d u u f p y} 
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0820: 20 20 20 20 7b 67 20 6f 20 6d 20 6d 20 75 20 78      {g o m m u x
0830: 20 6d 20 67 20 6c 20 6a 20 74 20 74 20 78 20 78   m g l j t t x x
0840: 20 75 7d 0a 20 20 20 20 32 31 20 20 7b 6d 20 63   u}.    21  {m c
0850: 20 64 20 6b 20 78 20 69 20 63 20 7a 20 6c 7d 20   d k x i c z l} 
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 7b 6d 20 69 20 61 20 69 20 65 20 75 20 68 7d 0a  {m i a i e u h}.
0880: 20 20 20 20 32 32 20 20 7b 77 20 62 20 66 20 6f      22  {w b f o
0890: 20 63 20 67 20 78 20 79 20 6a 7d 20 20 20 20 20   c g x y j}     
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7a 20 64              {z d
08b0: 20 77 20 78 20 64 20 66 20 68 20 69 20 70 7d 0a   w x d f h i p}.
08c0: 20 20 20 20 32 33 20 20 7b 77 20 75 20 69 20 75      23  {w u i u
08d0: 20 78 20 74 20 63 20 68 20 6b 20 69 20 62 7d 20   x t c h k i b} 
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 62 20 79              {b y
08f0: 20 6b 20 68 20 62 20 76 20 72 20 74 20 67 20 6a   k h b v r t g j
0900: 7d 0a 20 20 20 20 32 34 20 20 7b 68 20 66 20 64  }.    24  {h f d
0910: 20 6a 20 73 20 77 20 73 20 62 20 61 20 70 20 6b   j s w s b a p k
0920: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61  }             {a
0930: 20 71 20 79 20 75 20 7a 20 65 20 79 20 6d 20 6d   q y u z e y m m
0940: 20 6a 20 71 20 72 7d 0a 20 20 20 20 32 35 20 20   j q r}.    25  
0950: 7b 64 20 69 20 78 20 79 20 78 20 78 20 6b 20 69  {d i x y x x k i
0960: 20 79 20 66 20 73 20 64 20 6a 20 68 20 7a 20 70   y f s d j h z p
0970: 20 6e 7d 20 7b 6c 20 6c 20 71 20 6d 20 65 20 74   n} {l l q m e t
0980: 20 63 20 77 20 67 20 79 20 68 20 74 20 73 20 76   c w g y h t s v
0990: 20 67 7d 0a 20 20 20 20 32 36 20 20 7b 67 20 73   g}.    26  {g s
09a0: 20 71 20 77 20 74 20 64 20 6b 20 78 20 67 20 66   q w t d k x g f
09b0: 20 6d 20 6a 20 70 20 6b 20 79 7d 20 20 20 20 20   m j p k y}     
09c0: 7b 72 20 6d 20 62 20 78 20 65 20 6c 20 74 20 64  {r m b x e l t d
09d0: 7d 0a 20 20 20 20 32 37 20 20 7b 6a 20 6c 20 73  }.    27  {j l s
09e0: 20 71 20 75 20 67 20 79 20 76 20 65 20 63 20 6c   q u g y v e c l
09f0: 20 6f 7d 20 20 20 20 20 20 20 20 20 20 20 7b 6d   o}           {m
0a00: 20 66 20 6c 20 6d 20 6d 20 6d 20 68 20 67 20 78   f l m m m h g x
0a10: 20 78 20 6c 20 6e 20 63 7d 0a 20 20 20 20 32 38   x l n c}.    28
0a20: 20 20 7b 63 20 74 20 6a 20 67 20 76 20 72 20 73    {c t j g v r s
0a30: 20 62 20 7a 20 6a 7d 20 20 20 20 20 20 20 20 20   b z j}         
0a40: 20 20 20 20 20 20 7b 6c 20 63 20 66 20 79 20 64        {l c f y d
0a50: 20 74 20 71 20 6e 7d 0a 20 20 20 20 32 39 20 20   t q n}.    29  
0a60: 7b 65 20 78 20 7a 20 79 20 77 20 69 20 68 20 6c  {e x z y w i h l
0a70: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0a80: 20 20 20 20 7b 62 20 6e 20 62 20 78 20 65 20 79      {b n b x e y
0a90: 20 71 20 65 20 6e 20 75 20 6d 7d 0a 20 20 20 20   q e n u m}.    
0aa0: 33 30 20 20 7b 67 20 79 20 79 20 68 20 6a 20 62  30  {g y y h j b
0ab0: 20 77 20 72 7d 20 20 20 20 20 20 20 20 20 20 20   w r}           
0ac0: 20 20 20 20 20 20 20 20 7b 71 20 62 20 71 20 66          {q b q f
0ad0: 20 75 20 73 20 6b 20 63 20 6b 20 67 20 72 7d 0a   u s k c k g r}.
0ae0: 20 20 20 20 33 31 20 20 7b 67 20 75 20 6c 20 78      31  {g u l x
0af0: 20 6c 20 62 20 72 20 63 20 6d 20 7a 20 62 20 75   l b r c m z b u
0b00: 20 63 7d 20 20 20 20 20 20 20 20 20 7b 6b 20 67   c}         {k g
0b10: 20 74 20 62 20 78 20 6b 20 78 20 6e 20 74 20 65   t b x k x n t e
0b20: 20 7a 20 64 20 68 20 6f 7d 0a 20 20 20 20 33 32   z d h o}.    32
0b30: 20 20 7b 77 20 67 20 76 20 6c 20 7a 20 66 20 62    {w g v l z f b
0b40: 20 7a 20 68 20 70 20 73 20 63 20 76 20 68 7d 20   z h p s c v h} 
0b50: 20 20 20 20 20 20 7b 67 20 65 20 77 20 76 20 6d        {g e w v m
0b60: 20 68 20 6b 20 72 20 67 20 77 20 61 20 72 20 66   h k r g w a r f
0b70: 20 71 7d 0a 20 20 20 20 33 33 20 20 7b 63 20 67   q}.    33  {c g
0b80: 20 6e 20 66 20 75 20 64 20 6f 20 79 20 6f 20 62   n f u d o y o b
0b90: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0ba0: 7b 65 20 79 20 6f 20 68 20 78 20 78 20 79 20 79  {e y o h x x y y
0bb0: 20 69 20 7a 20 73 20 62 20 68 20 61 20 6a 7d 0a   i z s b h a j}.
0bc0: 20 20 20 20 33 34 20 20 7b 76 20 79 20 68 20 63      34  {v y h c
0bd0: 20 71 20 75 20 75 20 73 20 71 20 79 20 78 20 78   q u u s q y x x
0be0: 20 6b 20 73 20 71 7d 20 20 20 20 20 7b 64 20 6e   k s q}     {d n
0bf0: 20 72 20 6d 20 79 20 6b 20 6e 20 74 20 69 20 72   r m y k n t i r
0c00: 20 6e 20 77 20 65 7d 0a 20 20 20 20 33 35 20 20   n w e}.    35  
0c10: 7b 6f 20 75 20 63 20 78 20 6c 20 65 20 62 20 74  {o u c x l e b t
0c20: 20 61 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   a}             
0c30: 20 20 20 20 7b 79 20 62 20 61 20 78 20 79 20 66      {y b a x y f
0c40: 20 7a 20 78 20 72 7d 0a 20 20 20 20 33 36 20 20   z x r}.    36  
0c50: 7b 78 20 70 20 68 20 6c 20 6a 20 61 20 61 20 75  {x p h l j a a u
0c60: 20 75 20 6a 20 68 7d 20 20 20 20 20 20 20 20 20   u j h}         
0c70: 20 20 20 20 7b 78 20 6f 20 66 20 73 20 7a 20 6d      {x o f s z m
0c80: 20 62 20 63 20 71 20 70 7d 0a 20 20 20 20 33 37   b c q p}.    37
0c90: 20 20 7b 6b 20 71 20 74 20 69 20 63 20 61 20 71    {k q t i c a q
0ca0: 20 6e 20 6d 20 76 20 76 7d 20 20 20 20 20 20 20   n m v v}       
0cb0: 20 20 20 20 20 20 7b 76 20 72 20 7a 20 65 20 66        {v r z e f
0cc0: 20 6d 20 79 20 6f 7d 0a 20 20 20 20 33 38 20 20   m y o}.    38  
0cd0: 7b 72 20 77 20 74 20 74 20 74 20 74 20 72 20 76  {r w t t t t r v
0ce0: 20 76 20 6f 20 65 20 70 20 67 20 68 7d 20 20 20   v o e p g h}   
0cf0: 20 20 20 20 7b 6c 20 77 20 78 20 61 20 67 20 61      {l w x a g a
0d00: 20 75 20 68 20 79 7d 0a 20 20 20 20 33 39 20 20   u h y}.    39  
0d10: 7b 6f 20 70 20 76 20 67 20 76 20 62 20 61 20 67  {o p v g v b a g
0d20: 20 6f 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   o}             
0d30: 20 20 20 20 7b 6a 20 74 20 71 20 63 20 72 20 62      {j t q c r b
0d40: 20 62 20 67 20 79 20 7a 7d 0a 20 20 20 20 34 30   b g y z}.    40
0d50: 20 20 7b 66 20 73 20 6f 20 72 20 6f 20 64 20 74    {f s o r o d t
0d60: 20 68 20 71 20 66 20 78 20 6c 7d 20 20 20 20 20   h q f x l}     
0d70: 20 20 20 20 20 20 7b 72 20 64 20 62 20 6d 20 6b        {r d b m k
0d80: 20 69 20 66 20 73 20 74 20 64 20 6c 20 6d 20 79   i f s t d l m y
0d90: 20 78 20 6a 20 77 7d 0a 20 20 20 20 34 31 20 20   x j w}.    41  
0da0: 7b 74 20 6d 20 6f 20 74 20 6d 20 66 20 6d 20 66  {t m o t m f m f
0db0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0dc0: 20 20 20 20 7b 69 20 70 20 69 20 71 20 6a 20 76      {i p i q j v
0dd0: 20 6e 20 76 20 6d 20 62 20 71 7d 0a 20 20 20 20   n v m b q}.    
0de0: 34 32 20 20 7b 74 20 78 20 77 20 61 20 72 20 6c  42  {t x w a r l
0df0: 20 77 20 64 20 74 20 62 20 63 20 6f 20 64 20 6f   w d t b c o d o
0e00: 7d 20 20 20 20 20 20 20 7b 61 20 68 20 66 20 68  }       {a h f h
0e10: 20 77 20 7a 20 64 20 6e 20 73 7d 0a 20 20 20 20   w z d n s}.    
0e20: 34 33 20 20 7b 74 20 75 20 71 20 63 20 64 20 67  43  {t u q c d g
0e30: 20 70 20 71 20 78 20 6a 20 6f 20 6c 20 63 20 78   p q x j o l c x
0e40: 20 63 7d 20 20 20 20 20 7b 6d 20 6e 20 74 20 6f   c}     {m n t o
0e50: 20 7a 20 7a 20 6a 20 61 20 79 7d 0a 20 20 20 20   z z j a y}.    
0e60: 34 34 20 20 7b 76 20 64 20 69 20 69 20 6b 20 62  44  {v d i i k b
0e70: 20 66 20 73 20 7a 20 72 20 76 20 72 20 7a 20 79   f s z r v r z y
0e80: 7d 20 20 20 20 20 20 20 7b 67 20 6e 20 71 20 79  }       {g n q y
0e90: 20 73 20 78 20 78 20 6d 20 62 20 78 20 63 20 6c   s x x m b x c l
0ea0: 20 77 7d 0a 20 20 20 20 34 35 20 20 7b 70 20 76   w}.    45  {p v
0eb0: 20 76 20 61 20 63 20 73 20 7a 20 79 20 65 20 6f   v a c s z y e o
0ec0: 20 6c 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   l}             
0ed0: 7b 6d 20 76 20 74 20 75 20 64 20 6b 20 6d 20 6b  {m v t u d k m k
0ee0: 20 71 20 62 20 64 20 63 20 76 20 7a 20 72 7d 0a   q b d c v z r}.
0ef0: 20 20 20 20 34 36 20 20 7b 66 20 79 20 6b 20 6c      46  {f y k l
0f00: 20 64 20 72 20 71 20 77 20 72 20 73 20 74 20 72   d r q w r s t r
0f10: 20 65 7d 20 20 20 20 20 20 20 20 20 7b 68 20 6d   e}         {h m
0f20: 20 76 20 72 20 72 20 6c 20 72 20 72 20 74 20 66   v r r l r r t f
0f30: 20 71 20 65 20 78 20 79 7d 0a 20 20 20 20 34 37   q e x y}.    47
0f40: 20 20 7b 77 20 6c 20 6e 20 6c 20 74 20 79 20 78    {w l n l t y x
0f50: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0f60: 20 20 20 20 20 20 7b 6e 20 68 20 73 20 6c 20 61        {n h s l a
0f70: 20 66 20 63 20 68 20 75 20 66 20 6c 20 78 20 78   f c h u f l x x
0f80: 20 6d 20 76 20 6e 20 6f 7d 0a 20 20 20 20 34 38   m v n o}.    48
0f90: 20 20 7b 74 20 6e 20 76 20 69 20 6b 20 65 20 62    {t n v i k e b
0fa0: 20 70 20 7a 20 70 20 64 20 6a 20 6a 20 6c 20 69   p z p d j j l i
0fb0: 20 6f 7d 20 20 20 7b 69 20 76 20 7a 20 70 20 67   o}   {i v z p g
0fc0: 20 75 20 65 20 6a 20 73 20 69 20 6b 20 6e 20 68   u e j s i k n h
0fd0: 20 77 20 64 20 63 7d 0a 20 20 20 20 34 39 20 20   w d c}.    49  
0fe0: 7b 7a 20 76 20 78 20 70 20 6e 20 6c 20 74 20 61  {z v x p n l t a
0ff0: 20 6a 20 63 7d 20 20 20 20 20 20 20 20 20 20 20   j c}           
1000: 20 20 20 20 7b 65 20 6a 20 6c 20 65 20 6e 20 63      {e j l e n c
1010: 20 65 20 74 20 61 20 64 7d 0a 20 20 20 20 35 30   e t a d}.    50
1020: 20 20 7b 77 20 75 20 62 20 78 20 75 20 69 20 76    {w u b x u i v
1030: 20 68 20 61 20 69 20 79 20 6d 20 6d 20 72 20 70   h a i y m m r p
1040: 20 6d 20 73 7d 20 7b 73 20 72 20 68 20 64 20 6f   m s} {s r h d o
1050: 20 67 20 7a 20 79 20 66 20 66 20 78 20 65 7d 0a   g z y f f x e}.
1060: 20 20 20 20 35 31 20 20 7b 64 20 63 20 63 20 78      51  {d c c x
1070: 20 62 20 63 20 61 20 78 20 67 7d 20 20 20 20 20   b c a x g}     
1080: 20 20 20 20 20 20 20 20 20 20 20 20 7b 70 20 72              {p r
1090: 20 61 20 6a 20 76 20 75 20 79 7d 0a 20 20 20 20   a j v u y}.    
10a0: 35 32 20 20 7b 66 20 77 20 67 20 72 20 63 20 6f  52  {f w g r c o
10b0: 20 64 20 6c 20 74 20 75 20 65 20 7a 20 68 20 69   d l t u e z h i
10c0: 7d 20 20 20 20 20 20 20 7b 6a 20 6c 20 6c 20 73  }       {j l l s
10d0: 20 73 20 62 20 6a 20 6d 7d 0a 20 20 20 20 35 33   s b j m}.    53
10e0: 20 20 7b 70 20 6d 20 74 20 66 20 6b 20 69 20 78    {p m t f k i x
10f0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1100: 20 20 20 20 20 20 7b 75 20 76 20 79 20 61 20 7a        {u v y a z
1110: 20 67 20 77 20 76 20 76 20 6d 20 78 20 68 20 69   g w v v m x h i
1120: 7d 0a 20 20 20 20 35 34 20 20 7b 6c 20 63 20 7a  }.    54  {l c z
1130: 20 67 20 6c 20 6f 20 6a 20 69 20 63 20 64 20 65   g l o j i c d e
1140: 20 62 7d 20 20 20 20 20 20 20 20 20 20 20 7b 62   b}           {b
1150: 20 66 20 76 20 79 20 77 20 75 20 69 20 62 20 65   f v y w u i b e
1160: 20 69 20 79 7d 0a 20 20 20 20 35 35 20 20 7b 72   i y}.    55  {r
1170: 20 68 20 63 20 78 20 66 20 78 20 61 20 64 20 73   h c x f x a d s
1180: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1190: 20 20 7b 7a 20 78 20 79 20 6b 20 66 20 6c 20 72    {z x y k f l r
11a0: 20 62 20 71 20 63 20 76 7d 0a 20 20 20 20 35 36   b q c v}.    56
11b0: 20 20 7b 76 20 78 20 78 20 63 20 79 20 68 20 7a    {v x x c y h z
11c0: 20 78 20 62 20 67 20 6d 20 6f 20 71 20 6e 20 63   x b g m o q n c
11d0: 7d 20 20 20 20 20 7b 68 20 6e 20 62 20 69 20 74  }     {h n b i t
11e0: 20 67 20 68 20 61 20 71 20 62 20 63 20 6f 20 72   g h a q b c o r
11f0: 20 75 7d 0a 20 20 20 20 35 37 20 20 7b 64 20 67   u}.    57  {d g
1200: 20 6c 20 6f 20 68 20 74 20 62 20 73 20 62 20 72   l o h t b s b r
1210: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1220: 7b 6e 20 75 20 65 20 70 20 74 20 69 20 6d 20 75  {n u e p t i m u
1230: 7d 0a 20 20 20 20 35 38 20 20 7b 74 20 64 20 79  }.    58  {t d y
1240: 20 65 20 74 20 64 20 63 20 77 20 75 20 6f 20 73   e t d c w u o s
1250: 20 77 20 78 20 66 20 63 20 68 7d 20 20 20 7b 69   w x f c h}   {i
1260: 20 6f 20 73 20 76 20 79 20 62 20 72 20 64 20 72   o s v y b r d r
1270: 7d 0a 20 20 20 20 35 39 20 20 7b 6c 20 62 20 61  }.    59  {l b a
1280: 20 70 20 71 20 6e 20 64 20 72 7d 20 20 20 20 20   p q n d r}     
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6b                {k
12a0: 20 64 20 63 20 63 20 64 20 6e 20 79 20 71 20 68   d c c d n y q h
12b0: 20 67 20 61 20 6f 20 70 20 65 20 78 7d 0a 20 20   g a o p e x}.  
12c0: 20 20 36 30 20 20 7b 66 20 72 20 7a 20 76 20 6d    60  {f r z v m
12d0: 20 70 20 6b 20 72 7d 20 20 20 20 20 20 20 20 20   p k r}         
12e0: 20 20 20 20 20 20 20 20 20 20 7b 78 20 78 20 72            {x x r
12f0: 20 69 20 73 20 62 20 61 20 67 20 66 20 63 7d 0a   i s b a g f c}.
1300: 20 20 20 20 36 31 20 20 7b 73 20 61 20 7a 20 69      61  {s a z i
1310: 20 65 20 72 20 66 20 69 20 77 20 63 20 6e 20 79   e r f i w c n y
1320: 20 76 20 7a 20 74 20 6b 20 73 7d 20 7b 79 20 79   v z t k s} {y y
1330: 20 69 20 72 20 79 20 6e 20 6c 20 73 20 62 20 77   i r y n l s b w
1340: 20 69 20 65 20 6b 20 6e 7d 0a 20 20 20 20 36 32   i e k n}.    62
1350: 20 20 7b 6e 20 78 20 70 20 72 20 65 20 78 20 71    {n x p r e x q
1360: 20 72 20 6d 20 76 20 69 20 62 20 79 7d 20 20 20   r m v i b y}   
1370: 20 20 20 20 20 20 7b 66 20 6f 20 6f 20 7a 20 6e        {f o o z n
1380: 20 62 20 73 20 72 20 71 20 6a 7d 0a 20 20 20 20   b s r q j}.    
1390: 36 33 20 20 7b 79 20 6a 20 73 20 75 20 6a 20 78  63  {y j s u j x
13a0: 20 6f 20 6e 20 72 20 71 20 74 20 66 7d 20 20 20   o n r q t f}   
13b0: 20 20 20 20 20 20 20 20 7b 66 20 76 20 6b 20 6e          {f v k n
13c0: 20 76 20 78 20 75 20 73 20 6f 20 61 20 64 20 65   v x u s o a d e
13d0: 20 66 20 65 7d 0a 20 20 20 20 36 34 20 20 7b 75   f e}.    64  {u
13e0: 20 73 20 69 20 6c 20 79 20 63 20 78 20 71 7d 20   s i l y c x q} 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 7b 72 20 6b 20 63 20 68 20 70 20 63 20 68    {r k c h p c h
1410: 20 62 20 6f 20 73 20 73 20 75 20 73 20 70 20 62   b o s s u s p b
1420: 7d 0a 20 20 20 20 36 35 20 20 7b 6d 20 70 20 69  }.    65  {m p i
1430: 20 6f 20 73 20 68 20 6f 7d 20 20 20 20 20 20 20   o s h o}       
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 73                {s
1450: 20 77 20 68 20 75 20 6e 20 64 20 6d 20 6e 20 71   w h u n d m n q
1460: 20 74 20 79 20 6b 20 62 20 77 20 63 7d 0a 20 20   t y k b w c}.  
1470: 20 20 36 36 20 20 7b 6c 20 64 20 66 20 67 20 6d    66  {l d f g m
1480: 20 78 20 78 20 78 20 6f 7d 20 20 20 20 20 20 20   x x x o}       
1490: 20 20 20 20 20 20 20 20 20 20 7b 73 20 77 20 64            {s w d
14a0: 20 64 20 66 20 62 20 79 20 6a 20 6a 20 68 20 68   d f b y j j h h
14b0: 20 74 20 69 20 79 20 70 20 6a 20 6f 7d 0a 20 20   t i y p j o}.  
14c0: 20 20 36 37 20 20 7b 63 20 62 20 6d 20 68 20 66    67  {c b m h f
14d0: 20 6e 20 76 20 77 20 6e 20 68 7d 20 20 20 20 20   n v w n h}     
14e0: 20 20 20 20 20 20 20 20 20 20 7b 69 20 72 20 77            {i r w
14f0: 20 69 20 65 20 78 20 72 20 77 20 6c 20 7a 20 70   i e x r w l z p
1500: 20 78 20 75 20 67 20 75 20 6c 20 73 7d 0a 20 20   x u g u l s}.  
1510: 20 20 36 38 20 20 7b 79 20 61 20 68 20 75 20 68    68  {y a h u h
1520: 20 69 20 6d 20 61 20 79 20 71 7d 20 20 20 20 20   i m a y q}     
1530: 20 20 20 20 20 20 20 20 20 20 7b 64 20 64 20 72            {d d r
1540: 20 78 20 68 20 65 20 76 20 71 20 6e 20 7a 20 79   x h e v q n z y
1550: 20 63 20 6a 7d 0a 20 20 20 20 36 39 20 20 7b 63   c j}.    69  {c
1560: 20 78 20 66 20 64 20 78 20 6f 20 6e 20 70 20 6f   x f d x o n p o
1570: 20 62 20 72 20 74 20 62 20 6c 20 70 20 6c 7d 20   b r t b l p l} 
1580: 20 20 7b 6d 20 69 20 74 20 6b 20 62 20 78 20 76    {m i t k b x v
1590: 20 66 20 70 20 74 20 6d 20 6c 20 6c 20 79 20 72   f p t m l l y r
15a0: 20 6f 7d 0a 20 20 20 20 37 30 20 20 7b 75 20 74   o}.    70  {u t
15b0: 20 6c 20 77 20 77 20 6d 20 73 7d 20 20 20 20 20   l w w m s}     
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d0: 7b 6d 20 66 20 6d 20 6f 20 6c 20 74 20 6b 20 6f  {m f m o l t k o
15e0: 20 70 20 65 7d 0a 20 20 20 20 37 31 20 20 7b 66   p e}.    71  {f
15f0: 20 67 20 71 20 65 20 6c 20 6e 20 64 20 6d 20 7a   g q e l n d m z
1600: 20 78 20 71 7d 20 20 20 20 20 20 20 20 20 20 20   x q}           
1610: 20 20 7b 7a 20 73 20 69 20 69 20 69 20 6d 20 66    {z s i i i m f
1620: 20 77 20 77 20 66 20 6e 20 67 20 70 20 65 20 71   w w f n g p e q
1630: 7d 0a 20 20 20 20 37 32 20 20 7b 6e 20 6c 20 68  }.    72  {n l h
1640: 20 61 20 76 20 75 20 6f 20 64 20 66 20 6a 20 64   a v u o d f j d
1650: 20 65 20 78 7d 20 20 20 20 20 20 20 20 20 7b 76   e x}         {v
1660: 20 76 20 73 20 6c 20 66 20 67 20 64 20 67 20 72   v s l f g d g r
1670: 20 61 20 6a 20 78 20 69 20 66 20 7a 20 78 7d 0a   a j x i f z x}.
1680: 20 20 20 20 37 33 20 20 7b 78 20 76 20 6d 20 76      73  {x v m v
1690: 20 66 20 69 20 67 20 71 20 65 20 77 7d 20 20 20   f i g q e w}   
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 72 20 79              {r y
16b0: 20 73 20 6a 20 69 20 6b 20 6d 20 6a 20 6a 20 65   s j i k m j j e
16c0: 20 64 20 67 20 72 20 6e 20 6f 20 69 20 66 7d 0a   d g r n o i f}.
16d0: 20 20 20 20 37 34 20 20 7b 67 20 64 20 79 20 6e      74  {g d y n
16e0: 20 6f 20 68 20 70 20 73 20 79 20 71 20 7a 20 6a   o h p s y q z j
16f0: 20 64 20 77 20 6e 20 68 20 77 7d 20 7b 78 20 6f   d w n h w} {x o
1700: 20 64 20 6c 20 74 20 6a 20 69 20 62 20 72 20 64   d l t j i b r d
1710: 20 6f 20 72 20 79 7d 0a 20 20 20 20 37 35 20 20   o r y}.    75  
1720: 7b 70 20 67 20 62 20 69 20 75 20 72 20 62 20 65  {p g b i u r b e
1730: 20 71 20 64 20 76 20 6f 20 61 20 67 20 77 20 6d   q d v o a g w m
1740: 20 6b 7d 20 7b 71 20 79 20 7a 20 73 20 66 20 71   k} {q y z s f q
1750: 20 6f 20 68 7d 0a 20 20 20 20 37 36 20 20 7b 75   o h}.    76  {u
1760: 20 7a 20 61 20 71 20 75 20 66 20 69 20 66 20 66   z a q u f i f f
1770: 20 62 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   b}             
1780: 20 20 7b 62 20 73 20 70 20 62 20 61 20 61 20 64    {b s p b a a d
1790: 20 78 20 72 20 72 20 69 20 71 20 66 7d 0a 20 20   x r r i q f}.  
17a0: 20 20 37 37 20 20 7b 77 20 68 20 68 20 7a 20 74    77  {w h h z t
17b0: 20 68 20 70 20 6f 20 61 20 68 20 68 20 65 20 65   h p o a h h e e
17c0: 7d 20 20 20 20 20 20 20 20 20 7b 68 20 77 20 72  }         {h w r
17d0: 20 70 20 68 20 6b 20 7a 20 76 20 79 20 66 20 72   p h k z v y f r
17e0: 20 78 7d 0a 20 20 20 20 37 38 20 20 7b 63 20 61   x}.    78  {c a
17f0: 20 72 20 6b 20 69 20 61 20 70 20 75 20 78 7d 20   r k i a p u x} 
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1810: 7b 66 20 77 20 6c 20 70 20 74 20 65 20 6d 20 6c  {f w l p t e m l
1820: 7d 0a 20 20 20 20 37 39 20 20 7b 71 20 71 20 75  }.    79  {q q u
1830: 20 6b 20 6f 20 74 20 72 20 6b 20 7a 7d 20 20 20   k o t r k z}   
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 66                {f
1850: 20 62 20 6d 20 63 20 77 20 70 20 73 20 73 20 6f   b m c w p s s o
1860: 20 7a 7d 0a 20 20 20 20 38 30 20 20 7b 74 20 69   z}.    80  {t i
1870: 20 67 20 76 20 79 20 71 20 73 20 72 20 78 20 6d   g v y q s r x m
1880: 20 72 20 78 20 7a 20 65 20 66 7d 20 20 20 20 20   r x z e f}     
1890: 7b 78 20 6f 20 6a 20 77 20 61 20 75 20 65 20 79  {x o j w a u e y
18a0: 20 73 20 6a 20 63 20 62 20 75 20 70 20 70 20 72   s j c b u p p r
18b0: 20 6f 7d 0a 20 20 20 20 38 31 20 20 7b 6e 20 6a   o}.    81  {n j
18c0: 20 6e 20 68 20 72 20 6c 20 61 20 72 20 65 20 6f   n h r l a r e o
18d0: 20 7a 20 77 20 65 7d 20 20 20 20 20 20 20 20 20   z w e}         
18e0: 7b 76 20 6f 20 72 20 72 20 6a 20 61 20 76 20 62  {v o r r j a v b
18f0: 7d 0a 20 20 20 20 38 32 20 20 7b 69 20 66 20 69  }.    82  {i f i
1900: 20 64 20 6b 20 77 20 64 20 6e 20 68 7d 20 20 20   d k w d n h}   
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f                {o
1920: 20 69 20 64 20 7a 20 69 20 7a 20 6c 20 6d 20 77   i d z i z l m w
1930: 20 73 20 62 20 71 20 76 20 75 7d 0a 20 20 20 20   s b q v u}.    
1940: 38 33 20 20 7b 6d 20 64 20 67 20 71 20 71 20 62  83  {m d g q q b
1950: 20 6b 20 62 20 77 20 66 20 71 20 71 20 70 20 70   k b w f q q p p
1960: 7d 20 20 20 20 20 20 20 7b 6a 20 6d 20 71 20 66  }       {j m q f
1970: 20 62 20 79 20 63 20 69 20 7a 20 6b 20 79 20 71   b y c i z k y q
1980: 20 70 20 6c 20 65 20 61 7d 0a 20 20 20 20 38 34   p l e a}.    84
1990: 20 20 7b 6d 20 78 20 6f 20 6e 20 79 20 66 20 67    {m x o n y f g
19a0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
19b0: 20 20 20 20 20 20 7b 79 20 63 20 6e 20 78 20 6e        {y c n x n
19c0: 20 71 20 6a 20 69 20 79 20 63 20 6c 20 68 20 62   q j i y c l h b
19d0: 20 72 20 71 20 7a 7d 0a 20 20 20 20 38 35 20 20   r q z}.    85  
19e0: 7b 76 20 6f 20 7a 20 6c 20 6e 20 70 20 63 7d 20  {v o z l n p c} 
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a00: 20 20 20 20 7b 67 20 6e 20 6a 20 6e 20 74 20 62      {g n j n t b
1a10: 20 62 20 78 20 6e 20 63 20 6c 20 64 20 61 20 67   b x n c l d a g
1a20: 20 6a 20 76 7d 0a 20 20 20 20 38 36 20 20 7b 7a   j v}.    86  {z
1a30: 20 6e 20 61 20 79 20 66 20 62 20 74 20 6b 20 6b   n a y f b t k k
1a40: 20 74 20 64 20 62 20 7a 20 61 20 76 7d 20 20 20   t d b z a v}   
1a50: 20 20 7b 72 20 70 20 63 20 6e 20 72 20 75 20 6b    {r p c n r u k
1a60: 20 75 7d 0a 20 20 20 20 38 37 20 20 7b 62 20 71   u}.    87  {b q
1a70: 20 74 20 78 20 7a 20 65 20 63 20 77 7d 20 20 20   t x z e c w}   
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 7b 71 20 61 20 6f 20 61 20 6c 20 6f 20 61 20 68  {q a o a l o a h
1aa0: 20 69 20 6d 20 6a 20 72 7d 0a 20 20 20 20 38 38   i m j r}.    88
1ab0: 20 20 7b 6a 20 66 20 68 20 6f 20 78 20 78 20 61    {j f h o x x a
1ac0: 20 7a 20 67 20 62 20 61 20 66 20 61 20 6d 20 69   z g b a f a m i
1ad0: 20 62 7d 20 20 20 7b 6a 20 7a 20 63 20 7a 20 79   b}   {j z c z y
1ae0: 20 78 20 65 20 78 20 77 20 74 7d 0a 20 20 20 20   x e x w t}.    
1af0: 38 39 20 20 7b 74 20 63 20 74 20 70 20 72 20 73  89  {t c t p r s
1b00: 20 75 20 63 20 71 20 6e 7d 20 20 20 20 20 20 20   u c q n}       
1b10: 20 20 20 20 20 20 20 20 7b 7a 20 78 20 6c 20 69          {z x l i
1b20: 20 6b 20 6e 20 66 20 71 20 6c 20 6e 20 74 7d 0a   k n f q l n t}.
1b30: 20 20 20 20 39 30 20 20 7b 77 20 74 20 64 20 71      90  {w t d q
1b40: 20 6a 20 67 20 6d 20 72 20 66 20 6b 20 6e 7d 20   j g m r f k n} 
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 20 65              {l e
1b60: 20 77 20 66 20 77 20 77 20 61 20 6c 20 79 20 71   w f w w a l y q
1b70: 20 6b 20 69 20 71 20 74 20 70 20 63 20 74 7d 0a   k i q t p c t}.
1b80: 20 20 20 20 39 31 20 20 7b 63 20 62 20 6f 20 6b      91  {c b o k
1b90: 20 6c 20 69 20 63 20 62 20 73 20 6a 20 6e 20 6d   l i c b s j n m
1ba0: 20 62 20 6c 7d 20 20 20 20 20 20 20 7b 79 20 66   b l}       {y f
1bb0: 20 70 20 71 20 6f 20 77 20 67 7d 0a 20 20 20 20   p q o w g}.    
1bc0: 39 32 20 20 7b 66 20 79 20 64 20 6a 20 6f 20 71  92  {f y d j o q
1bd0: 20 74 20 63 20 63 20 71 20 6d 20 66 20 6a 20 73   t c c q m f j s
1be0: 20 74 7d 20 20 20 20 20 7b 66 20 68 20 65 20 64   t}     {f h e d
1bf0: 20 79 20 6d 20 6f 20 6b 7d 0a 20 20 20 20 39 33   y m o k}.    93
1c00: 20 20 7b 6b 20 78 20 6a 20 72 20 6d 20 61 20 64    {k x j r m a d
1c10: 20 6f 20 69 20 7a 20 6a 7d 20 20 20 20 20 20 20   o i z j}       
1c20: 20 20 20 20 20 20 7b 72 20 74 20 74 20 74 20 66        {r t t t f
1c30: 20 65 20 62 20 72 20 78 20 69 20 76 20 6a 20 76   e b r x i v j v
1c40: 20 67 20 6f 7d 0a 20 20 20 20 39 34 20 20 7b 73   g o}.    94  {s
1c50: 20 66 20 65 20 61 20 65 20 74 20 69 20 68 20 68   f e a e t i h h
1c60: 20 64 20 71 20 70 20 7a 20 74 20 71 7d 20 20 20   d q p z t q}   
1c70: 20 20 7b 62 20 6b 20 6d 20 6b 20 77 20 68 20 63    {b k m k w h c
1c80: 7d 0a 20 20 20 20 39 35 20 20 7b 68 20 62 20 6e  }.    95  {h b n
1c90: 20 6a 20 74 20 6b 20 69 20 68 20 6f 20 71 20 75   j t k i h o q u
1ca0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 77  }             {w
1cb0: 20 6e 20 67 20 69 20 74 20 6f 20 6b 20 63 20 61   n g i t o k c a
1cc0: 20 6d 20 79 20 70 20 66 20 6c 20 78 20 63 20 70   m y p f l x c p
1cd0: 7d 0a 20 20 20 20 39 36 20 20 7b 66 20 63 20 78  }.    96  {f c x
1ce0: 20 70 20 79 20 72 20 62 20 6d 20 6f 20 6c 20 6d   p y r b m o l m
1cf0: 20 6f 20 61 7d 20 20 20 20 20 20 20 20 20 7b 70   o a}         {p
1d00: 20 63 20 61 20 71 20 73 20 75 20 6e 20 6e 20 78   c a q s u n n x
1d10: 20 64 20 63 20 66 20 61 20 6f 7d 0a 20 20 20 20   d c f a o}.    
1d20: 39 37 20 20 7b 75 20 68 20 68 20 6b 20 6d 20 6e  97  {u h h k m n
1d30: 20 6b 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   k}             
1d40: 20 20 20 20 20 20 20 20 7b 75 20 62 20 76 20 6e          {u b v n
1d50: 20 75 20 61 20 6f 20 63 7d 0a 20 20 20 20 39 38   u a o c}.    98
1d60: 20 20 7b 73 20 70 20 65 20 74 20 63 20 7a 20 64    {s p e t c z d
1d70: 20 66 20 6e 20 77 20 66 7d 20 20 20 20 20 20 20   f n w f}       
1d80: 20 20 20 20 20 20 7b 6c 20 73 20 66 20 6a 20 62        {l s f j b
1d90: 20 6c 20 63 20 65 20 73 20 68 7d 0a 20 20 20 20   l c e s h}.    
1da0: 39 39 20 20 7b 72 20 63 20 76 20 77 20 69 20 76  99  {r c v w i v
1db0: 20 68 20 61 20 74 20 61 20 63 20 76 20 63 20 72   h a t a c v c r
1dc0: 20 65 7d 20 20 20 20 20 7b 68 20 68 20 75 20 6d   e}     {h h u m
1dd0: 20 67 20 6f 20 66 20 62 20 61 20 65 20 6f 7d 0a   g o f b a e o}.
1de0: 7d 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20 24 65  }..# Argument $e
1df0: 78 70 72 20 69 73 20 61 6e 20 46 54 53 35 20 6d  xpr is an FTS5 m
1e00: 61 74 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  atch expression 
1e10: 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 65  designed to be e
1e20: 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74 0a  xecuted against.
1e30: 23 20 61 6e 20 46 54 53 35 20 74 61 62 6c 65 20  # an FTS5 table 
1e40: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
1e50: 6e 67 20 73 63 68 65 6d 61 3a 0a 23 20 0a 23 20  ng schema:.# .# 
1e60: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1e70: 20 54 41 42 4c 45 20 78 79 20 55 53 49 4e 47 20   TABLE xy USING 
1e80: 66 74 73 35 28 78 2c 20 79 29 3b 0a 23 0a 23 20  fts5(x, y);.#.# 
1e90: 41 73 73 75 6d 69 6e 67 20 74 68 65 20 74 61 62  Assuming the tab
1ea0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  le contains the 
1eb0: 73 61 6d 65 20 72 65 63 6f 72 64 73 20 61 73 20  same records as 
1ec0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 67 6c  stored in the gl
1ed0: 6f 62 61 6c 20 0a 23 20 24 3a 3a 64 61 74 61 20  obal .# $::data 
1ee0: 61 72 72 61 79 20 28 73 65 65 20 61 62 6f 76 65  array (see above
1ef0: 29 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ), this function
1f00: 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20   returns a list 
1f10: 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 0a 23  containing one.#
1f20: 20 65 6c 65 6d 65 6e 74 20 66 6f 72 20 65 61 63   element for eac
1f30: 68 20 6d 61 74 63 68 20 69 6e 20 74 68 65 20 64  h match in the d
1f40: 61 74 61 73 65 74 2e 20 54 68 65 20 65 6c 65 6d  ataset. The elem
1f50: 65 6e 74 73 20 61 72 65 20 74 68 65 6d 73 65 6c  ents are themsel
1f60: 76 65 73 20 6c 69 73 74 73 0a 23 20 66 6f 72 6d  ves lists.# form
1f70: 61 74 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  atted as follows
1f80: 3a 0a 23 0a 23 20 20 20 3c 72 6f 77 69 64 3e 20  :.#.#   <rowid> 
1f90: 7b 3c 70 68 72 61 73 65 20 30 20 6d 61 74 63 68  {<phrase 0 match
1fa0: 65 73 3e 20 3c 70 68 72 61 73 65 20 31 20 6d 61  es> <phrase 1 ma
1fb0: 74 63 68 65 73 3e 2e 2e 2e 7d 0a 23 0a 23 20 77  tches>...}.#.# w
1fc0: 68 65 72 65 20 65 61 63 68 20 3c 70 68 72 61 73  here each <phras
1fd0: 65 20 58 20 6d 61 74 63 68 65 73 3e 20 65 6c 65  e X matches> ele
1fe0: 6d 65 6e 74 20 69 73 20 61 20 6c 69 73 74 20 6f  ment is a list o
1ff0: 66 20 70 68 72 61 73 65 20 6d 61 74 63 68 65 73  f phrase matches
2000: 20 69 6e 20 74 68 65 0a 23 20 73 61 6d 65 20 66   in the.# same f
2010: 6f 72 6d 20 61 73 20 72 65 74 75 72 6e 65 64 20  orm as returned 
2020: 62 79 20 61 75 78 69 6c 69 61 72 79 20 73 63 61  by auxiliary sca
2030: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 66 74 73  lar function fts
2040: 35 5f 74 65 73 74 28 29 2e 0a 23 0a 70 72 6f 63  5_test()..#.proc
2050: 20 6d 61 74 63 68 64 61 74 61 20 7b 62 50 6f 73   matchdata {bPos
2060: 20 65 78 70 72 20 7b 62 41 73 63 20 31 7d 7d 20   expr {bAsc 1}} 
2070: 7b 0a 0a 20 20 73 65 74 20 74 63 6c 65 78 70 72  {..  set tclexpr
2080: 20 5b 64 62 20 6f 6e 65 20 7b 0a 20 20 20 20 53   [db one {.    S
2090: 45 4c 45 43 54 20 66 74 73 35 5f 65 78 70 72 5f  ELECT fts5_expr_
20a0: 74 63 6c 28 24 65 78 70 72 2c 20 27 6e 65 61 72  tcl($expr, 'near
20b0: 73 65 74 20 24 63 6f 6c 73 20 2d 70 63 20 3a 3a  set $cols -pc ::
20c0: 70 63 27 2c 20 27 78 27 2c 20 27 79 27 29 0a 20  pc', 'x', 'y'). 
20d0: 20 7d 5d 0a 20 20 73 65 74 20 72 65 73 20 5b 6c   }].  set res [l
20e0: 69 73 74 5d 0a 0a 20 20 23 70 75 74 73 20 24 74  ist]..  #puts $t
20f0: 63 6c 65 78 70 72 0a 20 20 66 6f 72 65 61 63 68  clexpr.  foreach
2100: 20 7b 69 64 20 78 20 79 7d 20 24 3a 3a 64 61 74   {id x y} $::dat
2110: 61 20 7b 0a 20 20 20 20 73 65 74 20 63 6f 6c 73  a {.    set cols
2120: 20 5b 6c 69 73 74 20 24 78 20 24 79 5d 0a 20 20   [list $x $y].  
2130: 20 20 73 65 74 20 3a 3a 70 63 20 30 0a 20 20 20    set ::pc 0.   
2140: 20 23 73 65 74 20 68 69 74 73 20 5b 6c 73 6f 72   #set hits [lsor
2150: 74 20 2d 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 63  t -command instc
2160: 6f 6d 70 61 72 65 20 5b 65 76 61 6c 20 24 74 63  ompare [eval $tc
2170: 6c 65 78 70 72 5d 5d 0a 20 20 20 20 73 65 74 20  lexpr]].    set 
2180: 68 69 74 73 20 5b 65 76 61 6c 20 24 74 63 6c 65  hits [eval $tcle
2190: 78 70 72 5d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c  xpr].    if {[ll
21a0: 65 6e 67 74 68 20 24 68 69 74 73 5d 3e 30 7d 20  ength $hits]>0} 
21b0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 62 50 6f  {.      if {$bPo
21c0: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  s} {.        lap
21d0: 70 65 6e 64 20 72 65 73 20 5b 6c 69 73 74 20 24  pend res [list $
21e0: 69 64 20 24 68 69 74 73 5d 0a 20 20 20 20 20 20  id $hits].      
21f0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2200: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 69 64   lappend res $id
2210: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2220: 20 7d 0a 0a 20 20 69 66 20 7b 24 62 41 73 63 7d   }..  if {$bAsc}
2230: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 5b   {.    set res [
2240: 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 2d  lsort -integer -
2250: 69 6e 63 72 65 61 73 69 6e 67 20 2d 69 6e 64 65  increasing -inde
2260: 78 20 30 20 24 72 65 73 5d 0a 20 20 7d 20 65 6c  x 0 $res].  } el
2270: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73  se {.    set res
2280: 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72   [lsort -integer
2290: 20 2d 64 65 63 72 65 61 73 69 6e 67 20 2d 69 6e   -decreasing -in
22a0: 64 65 78 20 30 20 24 72 65 73 5d 0a 20 20 7d 0a  dex 0 $res].  }.
22b0: 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61  .  return [conca
22c0: 74 20 7b 2a 7d 24 72 65 73 5d 0a 7d 0a 0a 23 0a  t {*}$res].}..#.
22d0: 23 20 45 6e 64 20 6f 66 20 74 65 73 74 20 63 6f  # End of test co
22e0: 64 65 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  de.#------------
22f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a  -------------...
2330: 66 6f 72 65 61 63 68 20 7b 74 6e 32 20 73 71 6c  foreach {tn2 sql
2340: 7d 20 7b 0a 20 20 31 20 20 7b 7d 0a 20 20 32 20  } {.  1  {}.  2 
2350: 20 7b 42 45 47 49 4e 7d 0a 7d 20 7b 0a 20 20 72   {BEGIN}.} {.  r
2360: 65 73 65 74 5f 64 62 0a 20 20 66 74 73 35 5f 61  eset_db.  fts5_a
2370: 75 78 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ux_test_function
2380: 73 20 64 62 0a 0a 20 20 64 6f 5f 65 78 65 63 73  s db..  do_execs
2390: 71 6c 5f 74 65 73 74 20 31 2e 24 74 6e 32 2e 30  ql_test 1.$tn2.0
23a0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49   {.    CREATE VI
23b0: 52 54 55 41 4c 20 54 41 42 4c 45 20 78 78 20 55  RTUAL TABLE xx U
23c0: 53 49 4e 47 20 66 74 73 35 28 78 2c 79 29 3b 0a  SING fts5(x,y);.
23d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
23e0: 78 78 28 78 78 2c 20 72 61 6e 6b 29 20 56 41 4c  xx(xx, rank) VAL
23f0: 55 45 53 28 27 70 67 73 7a 27 2c 20 33 32 29 3b  UES('pgsz', 32);
2400: 0a 20 20 7d 0a 0a 20 20 65 78 65 63 73 71 6c 20  .  }..  execsql 
2410: 24 73 71 6c 0a 0a 20 20 64 6f 5f 74 65 73 74 20  $sql..  do_test 
2420: 31 2e 24 74 6e 32 2e 31 2e 31 20 7b 0a 20 20 20  1.$tn2.1.1 {.   
2430: 20 66 6f 72 65 61 63 68 20 7b 69 64 20 78 20 79   foreach {id x y
2440: 7d 20 24 64 61 74 61 20 7b 0a 20 20 20 20 20 20  } $data {.      
2450: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
2460: 20 49 4e 54 4f 20 78 78 28 72 6f 77 69 64 2c 20   INTO xx(rowid, 
2470: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 24 69 64  x, y) VALUES($id
2480: 2c 20 24 78 2c 20 24 79 29 20 7d 0a 20 20 20 20  , $x, $y) }.    
2490: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  }.    execsql { 
24a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 78 28 78  INSERT INTO xx(x
24b0: 78 29 20 56 41 4c 55 45 53 28 27 69 6e 74 65 67  x) VALUES('integ
24c0: 72 69 74 79 2d 63 68 65 63 6b 27 29 20 7d 0a 20  rity-check') }. 
24d0: 20 7d 20 7b 7d 0a 0a 0a 20 20 23 2d 2d 2d 2d 2d   } {}...  #-----
24e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2520: 2d 2d 2d 2d 0a 20 20 23 20 54 65 73 74 20 70 68  ----.  # Test ph
2530: 72 61 73 65 20 71 75 65 72 69 65 73 2e 0a 20 20  rase queries..  
2540: 23 0a 20 20 66 6f 72 65 61 63 68 20 7b 74 6e 20  #.  foreach {tn 
2550: 70 68 72 61 73 65 7d 20 7b 0a 20 20 20 20 31 20  phrase} {.    1 
2560: 22 6f 22 0a 20 20 20 20 32 20 22 62 20 71 22 0a  "o".    2 "b q".
2570: 20 20 20 20 33 20 22 65 20 61 20 65 22 0a 20 20      3 "e a e".  
2580: 20 20 34 20 22 6d 20 64 20 67 20 71 20 71 20 62    4 "m d g q q b
2590: 20 6b 20 62 20 77 20 66 20 71 20 71 20 70 20 70   k b w f q q p p
25a0: 22 0a 20 20 20 20 35 20 22 6c 20 6f 20 6f 20 6c  ".    5 "l o o l
25b0: 20 76 20 76 20 6b 22 0a 20 20 20 20 36 20 22 61   v v k".    6 "a
25c0: 22 0a 20 20 20 20 37 20 22 62 22 0a 20 20 20 20  ".    7 "b".    
25d0: 38 20 22 63 22 0a 20 20 20 20 39 20 22 6e 6f 22  8 "c".    9 "no"
25e0: 0a 20 20 20 20 31 30 20 22 4c 20 4f 20 4f 20 4c  .    10 "L O O L
25f0: 20 56 20 56 20 4b 22 0a 20 20 7d 20 7b 0a 20 20   V V K".  } {.  
2600: 20 20 73 65 74 20 65 78 70 72 20 22 5c 22 24 70    set expr "\"$p
2610: 68 72 61 73 65 5c 22 22 0a 20 20 20 20 73 65 74  hrase\"".    set
2620: 20 72 65 73 20 5b 6d 61 74 63 68 64 61 74 61 20   res [matchdata 
2630: 31 20 24 65 78 70 72 5d 0a 0a 20 20 20 20 64 6f  1 $expr]..    do
2640: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
2650: 24 74 6e 32 2e 31 2e 32 2e 24 74 6e 2e 5b 6c 6c  $tn2.1.2.$tn.[ll
2660: 65 6e 67 74 68 20 24 72 65 73 5d 20 7b 20 0a 20  ength $res] { . 
2670: 20 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69       SELECT rowi
2680: 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 70 6f 73  d, fts5_test_pos
2690: 6c 69 73 74 28 78 78 29 20 46 52 4f 4d 20 78 78  list(xx) FROM xx
26a0: 20 57 48 45 52 45 20 78 78 20 6d 61 74 63 68 20   WHERE xx match 
26b0: 24 65 78 70 72 0a 20 20 20 20 7d 20 24 72 65 73  $expr.    } $res
26c0: 0a 20 20 7d 0a 0a 20 20 23 2d 2d 2d 2d 2d 2d 2d  .  }..  #-------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2710: 2d 2d 0a 20 20 23 20 54 65 73 74 20 73 6f 6d 65  --.  # Test some
2720: 20 41 4e 44 20 61 6e 64 20 4f 52 20 71 75 65 72   AND and OR quer
2730: 69 65 73 2e 0a 20 20 23 0a 20 20 66 6f 72 65 61  ies..  #.  forea
2740: 63 68 20 7b 74 6e 20 65 78 70 72 7d 20 7b 0a 20  ch {tn expr} {. 
2750: 20 20 20 31 2e 31 20 22 61 20 20 20 41 4e 44 20     1.1 "a   AND 
2760: 62 22 0a 20 20 20 20 31 2e 32 20 22 61 2b 62 20  b".    1.2 "a+b 
2770: 41 4e 44 20 63 22 0a 20 20 20 20 31 2e 33 20 22  AND c".    1.3 "
2780: 64 2b 63 20 41 4e 44 20 75 22 0a 20 20 20 20 31  d+c AND u".    1
2790: 2e 34 20 22 64 2b 63 20 41 4e 44 20 75 2b 64 22  .4 "d+c AND u+d"
27a0: 0a 0a 20 20 20 20 32 2e 31 20 22 61 20 20 20 4f  ..    2.1 "a   O
27b0: 52 20 62 22 0a 20 20 20 20 32 2e 32 20 22 61 2b  R b".    2.2 "a+
27c0: 62 20 4f 52 20 63 22 0a 20 20 20 20 32 2e 33 20  b OR c".    2.3 
27d0: 22 64 2b 63 20 4f 52 20 75 22 0a 20 20 20 20 32  "d+c OR u".    2
27e0: 2e 34 20 22 64 2b 63 20 4f 52 20 75 2b 64 22 0a  .4 "d+c OR u+d".
27f0: 0a 20 20 20 20 33 2e 31 20 7b 20 61 20 41 4e 44  .    3.1 { a AND
2800: 20 62 20 41 4e 44 20 63 20 7d 0a 20 20 7d 20 7b   b AND c }.  } {
2810: 0a 20 20 20 20 73 65 74 20 72 65 73 20 5b 6d 61  .    set res [ma
2820: 74 63 68 64 61 74 61 20 31 20 24 65 78 70 72 5d  tchdata 1 $expr]
2830: 0a 20 20 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  .    do_execsql_
2840: 74 65 73 74 20 31 2e 24 74 6e 32 2e 32 2e 24 74  test 1.$tn2.2.$t
2850: 6e 2e 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 5d  n.[llength $res]
2860: 20 7b 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54   { .      SELECT
2870: 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73   rowid, fts5_tes
2880: 74 5f 70 6f 73 6c 69 73 74 28 78 78 29 20 46 52  t_poslist(xx) FR
2890: 4f 4d 20 78 78 20 57 48 45 52 45 20 78 78 20 6d  OM xx WHERE xx m
28a0: 61 74 63 68 20 24 65 78 70 72 0a 20 20 20 20 7d  atch $expr.    }
28b0: 20 24 72 65 73 0a 20 20 7d 0a 0a 20 20 23 2d 2d   $res.  }..  #--
28c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2900: 2d 2d 2d 2d 2d 2d 2d 0a 20 20 23 20 51 75 65 72  -------.  # Quer
2910: 69 65 73 20 6f 6e 20 61 20 73 70 65 63 69 66 69  ies on a specifi
2920: 63 20 63 6f 6c 75 6d 6e 2e 0a 20 20 23 0a 20 20  c column..  #.  
2930: 66 6f 72 65 61 63 68 20 7b 74 6e 20 65 78 70 72  foreach {tn expr
2940: 7d 20 7b 0a 20 20 20 20 31 2e 31 20 22 78 3a 61  } {.    1.1 "x:a
2950: 22 0a 20 20 20 20 31 2e 32 20 22 79 3a 61 22 0a  ".    1.2 "y:a".
2960: 20 20 20 20 31 2e 33 20 22 78 3a 62 22 0a 20 20      1.3 "x:b".  
2970: 20 20 31 2e 34 20 22 79 3a 62 22 0a 20 20 20 20    1.4 "y:b".    
2980: 32 2e 31 20 22 7b 78 7d 3a 61 22 0a 20 20 20 20  2.1 "{x}:a".    
2990: 32 2e 32 20 22 7b 79 7d 3a 61 22 0a 20 20 20 20  2.2 "{y}:a".    
29a0: 32 2e 33 20 22 7b 78 7d 3a 62 22 0a 20 20 20 20  2.3 "{x}:b".    
29b0: 32 2e 34 20 22 7b 79 7d 3a 62 22 0a 0a 20 20 20  2.4 "{y}:b"..   
29c0: 20 33 2e 31 20 22 7b 78 20 79 7d 3a 61 22 0a 20   3.1 "{x y}:a". 
29d0: 20 20 20 33 2e 32 20 22 7b 79 20 78 7d 3a 61 22     3.2 "{y x}:a"
29e0: 0a 20 20 20 20 33 2e 33 20 22 7b 78 20 78 7d 3a  .    3.3 "{x x}:
29f0: 62 22 0a 20 20 20 20 33 2e 34 20 22 7b 79 20 79  b".    3.4 "{y y
2a00: 7d 3a 62 22 0a 0a 20 20 20 20 34 2e 31 20 7b 7b  }:b"..    4.1 {{
2a10: 22 78 22 20 22 79 22 7d 3a 61 7d 0a 20 20 20 20  "x" "y"}:a}.    
2a20: 34 2e 32 20 7b 7b 22 79 22 20 78 7d 3a 61 7d 0a  4.2 {{"y" x}:a}.
2a30: 20 20 20 20 34 2e 33 20 7b 7b 78 20 22 78 22 7d      4.3 {{x "x"}
2a40: 3a 62 7d 0a 20 20 20 20 34 2e 34 20 7b 7b 22 79  :b}.    4.4 {{"y
2a50: 22 20 79 7d 3a 62 7d 0a 20 20 7d 20 7b 0a 20 20  " y}:b}.  } {.  
2a60: 20 20 73 65 74 20 72 65 73 20 5b 6d 61 74 63 68    set res [match
2a70: 64 61 74 61 20 31 20 24 65 78 70 72 5d 0a 20 20  data 1 $expr].  
2a80: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
2a90: 74 20 31 2e 24 74 6e 32 2e 33 2e 24 74 6e 2e 5b  t 1.$tn2.3.$tn.[
2aa0: 6c 6c 65 6e 67 74 68 20 24 72 65 73 5d 20 7b 20  llength $res] { 
2ab0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 72 6f  .      SELECT ro
2ac0: 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 70  wid, fts5_test_p
2ad0: 6f 73 6c 69 73 74 28 78 78 29 20 46 52 4f 4d 20  oslist(xx) FROM 
2ae0: 78 78 20 57 48 45 52 45 20 78 78 20 6d 61 74 63  xx WHERE xx matc
2af0: 68 20 24 65 78 70 72 0a 20 20 20 20 7d 20 24 72  h $expr.    } $r
2b00: 65 73 0a 20 20 7d 0a 0a 20 20 23 2d 2d 2d 2d 2d  es.  }..  #-----
2b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b50: 2d 2d 2d 2d 0a 20 20 23 20 53 6f 6d 65 20 4e 45  ----.  # Some NE
2b60: 41 52 20 71 75 65 72 69 65 73 2e 0a 20 20 23 0a  AR queries..  #.
2b70: 20 20 66 6f 72 65 61 63 68 20 7b 74 6e 20 65 78    foreach {tn ex
2b80: 70 72 7d 20 7b 0a 20 20 20 20 31 20 22 4e 45 41  pr} {.    1 "NEA
2b90: 52 28 61 20 62 29 22 0a 20 20 20 20 32 20 22 4e  R(a b)".    2 "N
2ba0: 45 41 52 28 72 20 63 29 22 0a 20 20 20 20 32 20  EAR(r c)".    2 
2bb0: 7b 20 4e 45 41 52 28 72 20 63 2c 20 35 29 20 7d  { NEAR(r c, 5) }
2bc0: 0a 20 20 20 20 33 20 7b 20 4e 45 41 52 28 72 20  .    3 { NEAR(r 
2bd0: 63 2c 20 33 29 20 7d 0a 20 20 20 20 34 20 7b 20  c, 3) }.    4 { 
2be0: 4e 45 41 52 28 72 20 63 2c 20 32 29 20 7d 0a 20  NEAR(r c, 2) }. 
2bf0: 20 20 20 35 20 7b 20 4e 45 41 52 28 72 20 63 2c     5 { NEAR(r c,
2c00: 20 30 29 20 7d 0a 20 20 20 20 36 20 7b 20 4e 45   0) }.    6 { NE
2c10: 41 52 28 61 20 62 20 63 29 20 7d 0a 20 20 20 20  AR(a b c) }.    
2c20: 37 20 7b 20 4e 45 41 52 28 61 20 62 20 63 2c 20  7 { NEAR(a b c, 
2c30: 38 29 20 7d 0a 20 20 20 20 38 20 20 7b 20 78 20  8) }.    8  { x 
2c40: 3a 20 4e 45 41 52 28 72 20 63 29 20 7d 0a 20 20  : NEAR(r c) }.  
2c50: 20 20 39 20 20 7b 20 79 20 3a 20 4e 45 41 52 28    9  { y : NEAR(
2c60: 72 20 63 29 20 7d 0a 20 20 7d 20 7b 0a 20 20 20  r c) }.  } {.   
2c70: 20 73 65 74 20 72 65 73 20 5b 6d 61 74 63 68 64   set res [matchd
2c80: 61 74 61 20 31 20 24 65 78 70 72 5d 0a 20 20 20  ata 1 $expr].   
2c90: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
2ca0: 20 31 2e 24 74 6e 32 2e 34 2e 31 2e 24 74 6e 2e   1.$tn2.4.1.$tn.
2cb0: 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 5d 20 7b  [llength $res] {
2cc0: 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 72   .      SELECT r
2cd0: 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f  owid, fts5_test_
2ce0: 70 6f 73 6c 69 73 74 28 78 78 29 20 46 52 4f 4d  poslist(xx) FROM
2cf0: 20 78 78 20 57 48 45 52 45 20 78 78 20 6d 61 74   xx WHERE xx mat
2d00: 63 68 20 24 65 78 70 72 0a 20 20 20 20 7d 20 24  ch $expr.    } $
2d10: 72 65 73 0a 20 20 7d 0a 0a 20 20 64 6f 5f 74 65  res.  }..  do_te
2d20: 73 74 20 24 74 6e 32 2e 34 2e 31 20 20 7b 20 6e  st $tn2.4.1  { n
2d30: 65 61 72 73 65 74 20 7b 7b 61 20 62 20 63 7d 7d  earset {{a b c}}
2d40: 20 2d 2d 20 61 20 7d 20 7b 30 2e 30 2e 30 7d 0a   -- a } {0.0.0}.
2d50: 20 20 64 6f 5f 74 65 73 74 20 24 74 6e 32 2e 34    do_test $tn2.4
2d60: 2e 32 20 20 7b 20 6e 65 61 72 73 65 74 20 7b 7b  .2  { nearset {{
2d70: 61 20 62 20 63 7d 7d 20 2d 2d 20 63 20 7d 20 7b  a b c}} -- c } {
2d80: 30 2e 30 2e 32 7d 0a 0a 20 20 66 6f 72 65 61 63  0.0.2}..  foreac
2d90: 68 20 7b 74 6e 20 65 78 70 72 20 74 63 6c 65 78  h {tn expr tclex
2da0: 70 72 7d 20 7b 0a 20 20 20 20 31 20 7b 61 20 62  pr} {.    1 {a b
2db0: 7d 20 7b 41 4e 44 20 5b 4e 20 24 78 20 2d 2d 20  } {AND [N $x -- 
2dc0: 7b 61 7d 5d 20 5b 4e 20 24 78 20 2d 2d 20 7b 62  {a}] [N $x -- {b
2dd0: 7d 5d 7d 0a 20 20 7d 20 7b 0a 20 20 20 20 64 6f  }]}.  } {.    do
2de0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
2df0: 24 74 6e 32 2e 35 2e 24 74 6e 20 7b 0a 20 20 20  $tn2.5.$tn {.   
2e00: 20 20 20 53 45 4c 45 43 54 20 66 74 73 35 5f 65     SELECT fts5_e
2e10: 78 70 72 5f 74 63 6c 28 24 65 78 70 72 2c 20 27  xpr_tcl($expr, '
2e20: 4e 20 24 78 27 29 0a 20 20 20 20 7d 20 5b 6c 69  N $x').    } [li
2e30: 73 74 20 24 74 63 6c 65 78 70 72 5d 0a 20 20 7d  st $tclexpr].  }
2e40: 0a 0a 20 20 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..  #-----------
2e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
2e90: 20 23 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   #.  do_execsql_
2ea0: 74 65 73 74 20 31 2e 24 74 6e 32 2e 36 2e 69 6e  test 1.$tn2.6.in
2eb0: 74 65 67 72 69 74 79 20 7b 0a 20 20 20 20 49 4e  tegrity {.    IN
2ec0: 53 45 52 54 20 49 4e 54 4f 20 78 78 28 78 78 29  SERT INTO xx(xx)
2ed0: 20 56 41 4c 55 45 53 28 27 69 6e 74 65 67 72 69   VALUES('integri
2ee0: 74 79 2d 63 68 65 63 6b 27 29 3b 0a 20 20 7d 0a  ty-check');.  }.
2ef0: 20 20 23 64 62 20 65 76 61 6c 20 7b 53 45 4c 45    #db eval {SELE
2f00: 43 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 64  CT rowid, fts5_d
2f10: 65 63 6f 64 65 28 72 6f 77 69 64 2c 20 62 6c 6f  ecode(rowid, blo
2f20: 63 6b 29 20 61 53 20 72 20 46 52 4f 4d 20 78 78  ck) aS r FROM xx
2f30: 5f 64 61 74 61 7d 20 7b 70 75 74 73 20 24 72 7d  _data} {puts $r}
2f40: 0a 20 20 66 6f 72 65 61 63 68 20 7b 62 41 73 63  .  foreach {bAsc
2f50: 20 73 71 6c 7d 20 7b 0a 20 20 20 20 31 20 7b 53   sql} {.    1 {S
2f60: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
2f70: 20 78 78 20 57 48 45 52 45 20 78 78 20 4d 41 54   xx WHERE xx MAT
2f80: 43 48 20 24 65 78 70 72 7d 0a 20 20 20 20 30 20  CH $expr}.    0 
2f90: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52  {SELECT rowid FR
2fa0: 4f 4d 20 78 78 20 57 48 45 52 45 20 78 78 20 4d  OM xx WHERE xx M
2fb0: 41 54 43 48 20 24 65 78 70 72 20 4f 52 44 45 52  ATCH $expr ORDER
2fc0: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a   BY rowid DESC}.
2fd0: 20 20 7d 20 7b 0a 20 20 20 20 66 6f 72 65 61 63    } {.    foreac
2fe0: 68 20 7b 74 6e 20 65 78 70 72 7d 20 7b 0a 20 20  h {tn expr} {.  
2ff0: 20 20 20 20 30 2e 31 20 78 0a 20 20 20 20 20 20      0.1 x.      
3000: 31 20 7b 20 4e 45 41 52 28 72 20 63 29 20 7d 0a  1 { NEAR(r c) }.
3010: 20 20 20 20 20 20 32 20 7b 20 4e 45 41 52 28 72        2 { NEAR(r
3020: 20 63 2c 20 35 29 20 7d 0a 20 20 20 20 20 20 33   c, 5) }.      3
3030: 20 7b 20 4e 45 41 52 28 72 20 63 2c 20 33 29 20   { NEAR(r c, 3) 
3040: 7d 0a 20 20 20 20 20 20 34 20 7b 20 4e 45 41 52  }.      4 { NEAR
3050: 28 72 20 63 2c 20 32 29 20 7d 0a 20 20 20 20 20  (r c, 2) }.     
3060: 20 35 20 7b 20 4e 45 41 52 28 72 20 63 2c 20 30   5 { NEAR(r c, 0
3070: 29 20 7d 0a 20 20 20 20 20 20 36 20 7b 20 4e 45  ) }.      6 { NE
3080: 41 52 28 61 20 62 20 63 29 20 7d 0a 20 20 20 20  AR(a b c) }.    
3090: 20 20 37 20 7b 20 4e 45 41 52 28 61 20 62 20 63    7 { NEAR(a b c
30a0: 2c 20 38 29 20 7d 0a 20 20 20 20 20 20 38 20 20  , 8) }.      8  
30b0: 7b 20 78 20 3a 20 4e 45 41 52 28 72 20 63 29 20  { x : NEAR(r c) 
30c0: 7d 0a 20 20 20 20 20 20 39 20 20 7b 20 79 20 3a  }.      9  { y :
30d0: 20 4e 45 41 52 28 72 20 63 29 20 7d 0a 20 20 20   NEAR(r c) }.   
30e0: 20 20 20 31 30 20 7b 20 78 20 3a 20 22 72 20 63     10 { x : "r c
30f0: 22 20 7d 0a 20 20 20 20 20 20 31 31 20 7b 20 79  " }.      11 { y
3100: 20 3a 20 22 72 20 63 22 20 7d 0a 20 20 20 20 20   : "r c" }.     
3110: 20 31 32 20 7b 20 61 20 41 4e 44 20 62 20 7d 0a   12 { a AND b }.
3120: 20 20 20 20 20 20 31 33 20 7b 20 61 20 41 4e 44        13 { a AND
3130: 20 62 20 41 4e 44 20 63 20 7d 0a 20 20 20 20 20   b AND c }.     
3140: 20 31 34 61 20 7b 20 61 20 7d 0a 20 20 20 20 20   14a { a }.     
3150: 20 31 34 62 20 7b 20 61 20 4f 52 20 62 20 7d 0a   14b { a OR b }.
3160: 20 20 20 20 20 20 31 35 20 7b 20 61 20 4f 52 20        15 { a OR 
3170: 62 20 41 4e 44 20 63 20 7d 0a 20 20 20 20 20 20  b AND c }.      
3180: 31 36 20 7b 20 63 20 41 4e 44 20 62 20 4f 52 20  16 { c AND b OR 
3190: 61 20 7d 0a 20 20 20 20 20 20 31 37 20 7b 20 63  a }.      17 { c
31a0: 20 41 4e 44 20 28 62 20 4f 52 20 61 29 20 7d 0a   AND (b OR a) }.
31b0: 20 20 20 20 20 20 31 38 20 7b 20 63 20 4e 4f 54        18 { c NOT
31c0: 20 28 62 20 4f 52 20 61 29 20 7d 0a 20 20 20 20   (b OR a) }.    
31d0: 20 20 31 39 20 7b 20 63 20 4e 4f 54 20 62 20 4f    19 { c NOT b O
31e0: 52 20 61 20 41 4e 44 20 64 20 7d 0a 20 20 20 20  R a AND d }.    
31f0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 72 65  } {.      set re
3200: 73 20 5b 6d 61 74 63 68 64 61 74 61 20 30 20 24  s [matchdata 0 $
3210: 65 78 70 72 20 24 62 41 73 63 5d 0a 20 20 20 20  expr $bAsc].    
3220: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
3230: 74 20 31 2e 24 74 6e 32 2e 36 2e 24 62 41 73 63  t 1.$tn2.6.$bAsc
3240: 2e 24 74 6e 2e 5b 6c 6c 65 6e 67 74 68 20 24 72  .$tn.[llength $r
3250: 65 73 5d 20 24 73 71 6c 20 24 72 65 73 0a 20 20  es] $sql $res.  
3260: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78    }.  }.}..do_ex
3270: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b  ecsql_test 2.1 {
3280: 0a 20 20 53 45 4c 45 43 54 20 66 74 73 35 5f 65  .  SELECT fts5_e
3290: 78 70 72 5f 74 63 6c 28 27 61 20 41 4e 44 20 62  xpr_tcl('a AND b
32a0: 27 29 3b 0a 7d 20 7b 7b 41 4e 44 20 5b 6e 65 61  ');.} {{AND [nea
32b0: 72 73 65 74 20 2d 2d 20 7b 61 7d 5d 20 5b 6e 65  rset -- {a}] [ne
32c0: 61 72 73 65 74 20 2d 2d 20 7b 62 7d 5d 7d 7d 0a  arset -- {b}]}}.
32d0: 0a 23 20 53 6f 6d 65 20 74 65 73 74 73 20 66 6f  .# Some tests fo
32e0: 72 20 64 65 74 61 69 6c 3d 63 6f 6c 20 74 61 62  r detail=col tab
32f0: 6c 65 73 20 61 6e 64 20 64 65 74 61 69 6c 3d 6e  les and detail=n
3300: 6f 6e 65 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b  one..#.foreach {
3310: 74 6e 32 20 73 71 6c 7d 20 7b 0a 20 20 31 20 20  tn2 sql} {.  1  
3320: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  {.    CREATE VIR
3330: 54 55 41 4c 20 54 41 42 4c 45 20 78 78 20 55 53  TUAL TABLE xx US
3340: 49 4e 47 20 66 74 73 35 28 78 2c 20 79 2c 20 64  ING fts5(x, y, d
3350: 65 74 61 69 6c 3d 63 6f 6c 29 3b 0a 20 20 7d 0a  etail=col);.  }.
3360: 20 20 32 20 20 7b 0a 20 20 20 20 43 52 45 41 54    2  {.    CREAT
3370: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
3380: 78 78 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  xx USING fts5(x,
3390: 20 79 2c 20 64 65 74 61 69 6c 3d 63 6f 6c 29 3b   y, detail=col);
33a0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a  .    BEGIN;.  }.
33b0: 20 20 33 20 20 7b 0a 20 20 20 20 43 52 45 41 54    3  {.    CREAT
33c0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
33d0: 78 78 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  xx USING fts5(x,
33e0: 20 79 2c 20 64 65 74 61 69 6c 3d 6e 6f 6e 65 29   y, detail=none)
33f0: 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d  ;.    BEGIN;.  }
3400: 0a 20 20 34 20 20 7b 0a 20 20 20 20 43 52 45 41  .  4  {.    CREA
3410: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
3420: 20 78 78 20 55 53 49 4e 47 20 66 74 73 35 28 78   xx USING fts5(x
3430: 2c 20 79 2c 20 64 65 74 61 69 6c 3d 6e 6f 6e 65  , y, detail=none
3440: 29 3b 0a 20 20 7d 0a 7d 20 7b 0a 20 20 72 65 73  );.  }.} {.  res
3450: 65 74 5f 64 62 0a 20 20 66 74 73 35 5f 61 75 78  et_db.  fts5_aux
3460: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 20  _test_functions 
3470: 64 62 0a 0a 20 20 65 78 65 63 73 71 6c 20 24 73  db..  execsql $s
3480: 71 6c 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  ql..  do_execsql
3490: 5f 74 65 73 74 20 33 2e 24 74 6e 32 2e 30 20 7b  _test 3.$tn2.0 {
34a0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
34b0: 20 78 78 28 78 78 2c 20 72 61 6e 6b 29 20 56 41   xx(xx, rank) VA
34c0: 4c 55 45 53 28 27 70 67 73 7a 27 2c 20 33 32 29  LUES('pgsz', 32)
34d0: 3b 0a 20 20 7d 0a 0a 0a 20 20 64 6f 5f 74 65 73  ;.  }...  do_tes
34e0: 74 20 33 2e 24 74 6e 32 2e 31 2e 31 20 7b 0a 20  t 3.$tn2.1.1 {. 
34f0: 20 20 20 66 6f 72 65 61 63 68 20 7b 69 64 20 78     foreach {id x
3500: 20 79 7d 20 24 64 61 74 61 20 7b 0a 20 20 20 20   y} $data {.    
3510: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
3520: 52 54 20 49 4e 54 4f 20 78 78 28 72 6f 77 69 64  RT INTO xx(rowid
3530: 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 24  , x, y) VALUES($
3540: 69 64 2c 20 24 78 2c 20 24 79 29 20 7d 0a 20 20  id, $x, $y) }.  
3550: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
3560: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 78  { INSERT INTO xx
3570: 28 78 78 29 20 56 41 4c 55 45 53 28 27 69 6e 74  (xx) VALUES('int
3580: 65 67 72 69 74 79 2d 63 68 65 63 6b 27 29 20 7d  egrity-check') }
3590: 0a 20 20 7d 20 7b 7d 0a 0a 20 20 66 6f 72 65 61  .  } {}..  forea
35a0: 63 68 20 7b 74 6e 20 71 7d 20 7b 0a 20 20 20 20  ch {tn q} {.    
35b0: 31 20 22 6f 22 20 32 20 22 62 22 20 33 20 22 65  1 "o" 2 "b" 3 "e
35c0: 22 20 34 20 22 6d 22 20 35 20 22 6c 22 20 36 20  " 4 "m" 5 "l" 6 
35d0: 22 61 22 20 37 20 22 62 22 20 38 20 22 63 22 20  "a" 7 "b" 8 "c" 
35e0: 39 20 22 6e 6f 22 20 31 30 20 22 4c 22 0a 20 20  9 "no" 10 "L".  
35f0: 20 20 31 31 20 22 6f 20 61 22 20 31 32 20 22 63    11 "o a" 12 "c
3600: 20 41 4e 44 20 64 22 20 31 33 20 22 6f 20 4f 52   AND d" 13 "o OR
3610: 20 61 22 20 31 32 20 22 63 20 4f 52 20 64 22 0a   a" 12 "c OR d".
3620: 20 20 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65    } {.    set re
3630: 73 20 5b 6d 61 74 63 68 64 61 74 61 20 31 20 24  s [matchdata 1 $
3640: 71 5d 0a 0a 20 20 20 20 64 6f 5f 65 78 65 63 73  q]..    do_execs
3650: 71 6c 5f 74 65 73 74 20 33 2e 24 74 6e 32 2e 31  ql_test 3.$tn2.1
3660: 2e 32 2e 24 74 6e 2e 5b 6c 6c 65 6e 67 74 68 20  .2.$tn.[llength 
3670: 24 72 65 73 5d 20 7b 20 0a 20 20 20 20 20 20 53  $res] { .      S
3680: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66 74 73  ELECT rowid, fts
3690: 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74 28 78  5_test_poslist(x
36a0: 78 29 20 46 52 4f 4d 20 78 78 20 57 48 45 52 45  x) FROM xx WHERE
36b0: 20 78 78 20 6d 61 74 63 68 20 24 71 0a 20 20 20   xx match $q.   
36c0: 20 7d 20 24 72 65 73 0a 20 20 7d 0a 0a 7d 0a 0a   } $res.  }..}..
36d0: 66 69 6e 69 73 68 5f 74 65 73 74 0a 0a           finish_test..