]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the NEAR connector in FTS3 so that it can take ranges in excess of 9.
authordrh <drh@noemail.net>
Fri, 12 Sep 2008 18:25:30 +0000 (18:25 +0000)
committerdrh <drh@noemail.net>
Fri, 12 Sep 2008 18:25:30 +0000 (18:25 +0000)
The maximum range is now 32767. (CVS 5695)

FossilOrigin-Name: 8e9b9553115c42dae38cad0612d98d9a0c453a5c

ext/fts3/fts3.c
manifest
manifest.uuid
test/fts3near.test

index cc6dcd82d21e3f5845faf1aab3b3492a5b6271da..ae7e98c26d2ed461a2e5c73eb4391df4502a624a 100644 (file)
@@ -1824,7 +1824,7 @@ typedef struct QueryTerm {
   short int nPhrase; /* How many following terms are part of the same phrase */
   short int iPhrase; /* This is the i-th term of a phrase. */
   short int iColumn; /* Column of the index that must match this term */
-  signed char nNear; /* term followed by a NEAR operator with span=(nNear-1) */
+  short int nNear;   /* term followed by a NEAR operator with span=(nNear-1) */
   signed char isOr;  /* this term is preceded by "OR" */
   signed char isNot; /* this term is preceded by "-" */
   signed char isPrefix; /* this term is followed by "*" */
@@ -3805,10 +3805,10 @@ static int checkColumnSpecifier(
 }
 
 /*
-** Parse the text at pSegment[0..nSegment-1].  Add additional terms
+** Parse the text at zSegment[0..nSegment-1].  Add additional terms
 ** to the query being assemblied in pQuery.
 **
-** inPhrase is true if pSegment[0..nSegement-1] is contained within
+** inPhrase is true if zSegment[0..nSegement-1] is contained within
 ** double-quotes.  If inPhrase is true, then the first term
 ** is marked with the number of terms in the phrase less one and
 ** OR and "-" syntax is ignored.  If inPhrase is false, then every
@@ -3816,7 +3816,7 @@ static int checkColumnSpecifier(
 */
 static int tokenizeSegment(
   sqlite3_tokenizer *pTokenizer,          /* The tokenizer to use */
-  const char *pSegment, int nSegment,     /* Query expression being parsed */
+  const char *zSegment, int nSegment,     /* Query expression being parsed */
   int inPhrase,                           /* True if within "..." */
   Query *pQuery                           /* Append results here */
 ){
@@ -3826,49 +3826,45 @@ static int tokenizeSegment(
   int iCol;
   int nTerm = 1;
   
-  int rc = pModule->xOpen(pTokenizer, pSegment, nSegment, &pCursor);
+  int rc = pModule->xOpen(pTokenizer, zSegment, nSegment, &pCursor);
   if( rc!=SQLITE_OK ) return rc;
   pCursor->pTokenizer = pTokenizer;
 
   while( 1 ){
-    const char *pToken;
+    const char *zToken;
     int nToken, iBegin, iEnd, iPos;
 
     rc = pModule->xNext(pCursor,
-                        &pToken, &nToken,
+                        &zToken, &nToken,
                         &iBegin, &iEnd, &iPos);
     if( rc!=SQLITE_OK ) break;
     if( !inPhrase &&
-        pSegment[iEnd]==':' &&
-         (iCol = checkColumnSpecifier(pQuery->pFts, pToken, nToken))>=0 ){
+        zSegment[iEnd]==':' &&
+         (iCol = checkColumnSpecifier(pQuery->pFts, zToken, nToken))>=0 ){
       pQuery->nextColumn = iCol;
       continue;
     }
     if( !inPhrase && pQuery->nTerms>0 && nToken==2 
-     && pSegment[iBegin+0]=='O'
-     && pSegment[iBegin+1]=='R' 
+     && zSegment[iBegin+0]=='O'
+     && zSegment[iBegin+1]=='R' 
     ){
       pQuery->nextIsOr = 1;
       continue;
     }
     if( !inPhrase && pQuery->nTerms>0 && !pQuery->nextIsOr && nToken==4 
-      && pSegment[iBegin+0]=='N' 
-      && pSegment[iBegin+1]=='E' 
-      && pSegment[iBegin+2]=='A' 
-      && pSegment[iBegin+3]=='R' 
+      && memcmp(&zSegment[iBegin], "NEAR", 4)==0
     ){
       QueryTerm *pTerm = &pQuery->pTerms[pQuery->nTerms-1];
       if( (iBegin+6)<nSegment 
-       && pSegment[iBegin+4] == '/'
-       && pSegment[iBegin+5]>='0' && pSegment[iBegin+5]<='9'
+       && zSegment[iBegin+4] == '/'
+       && isdigit(zSegment[iBegin+5])
       ){
-        pTerm->nNear = (pSegment[iBegin+5] - '0');
-        nToken += 2;
-        if( pSegment[iBegin+6]>='0' && pSegment[iBegin+6]<=9 ){
-          pTerm->nNear = pTerm->nNear * 10 + (pSegment[iBegin+6] - '0');
-          iEnd++;
+        int k;
+        pTerm->nNear = 0;
+        for(k=5; (iBegin+k)<=nSegment && isdigit(zSegment[iBegin+k]); k++){
+          pTerm->nNear = pTerm->nNear*10 + (zSegment[iBegin+k] - '0');
         }
-        pModule->xNext(pCursor, &pToken, &nToken, &iBegin, &iEnd, &iPos);
+        pModule->xNext(pCursor, &zToken, &nToken, &iBegin, &iEnd, &iPos);
       } else {
         pTerm->nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM;
       }
@@ -3876,11 +3872,11 @@ static int tokenizeSegment(
       continue;
     }
 
-    queryAdd(pQuery, pToken, nToken);
-    if( !inPhrase && iBegin>0 && pSegment[iBegin-1]=='-' ){
+    queryAdd(pQuery, zToken, nToken);
+    if( !inPhrase && iBegin>0 && zSegment[iBegin-1]=='-' ){
       pQuery->pTerms[pQuery->nTerms-1].isNot = 1;
     }
-    if( iEnd<nSegment && pSegment[iEnd]=='*' ){
+    if( iEnd<nSegment && zSegment[iEnd]=='*' ){
       pQuery->pTerms[pQuery->nTerms-1].isPrefix = 1;
     }
     pQuery->pTerms[pQuery->nTerms-1].iPhrase = nTerm;
index 123346a94bd8ddb207a2586dd28c9f323b63f8fb..4cd164e64f21fa9d8ca90cb5d9a65fd206e2484d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Declare\sthe\sisInterrupted\sfield\sof\sthe\ssqlite3\sstructure\sto\sbe\svolatile.\nTicket\s#3369.\s(CVS\s5694)
-D 2008-09-12T16:03:48
+C Fix\sthe\sNEAR\sconnector\sin\sFTS3\sso\sthat\sit\scan\stake\sranges\sin\sexcess\sof\s9.\nThe\smaximum\srange\sis\snow\s32767.\s(CVS\s5695)
+D 2008-09-12T18:25:31
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in d15a7ebfe5e057a72a49805ffb302dbb601c8329
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -51,7 +51,7 @@ F ext/fts2/fts2_tokenizer1.c 8545ce12b41922004da46e91a7b023b92b76f94e
 F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0
 F ext/fts3/README.tokenizers 226644a0eab97724e8de83061912e8bb248461b6
 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c fa37048c369491ba6fb74e1732f24a8a8daaef65
+F ext/fts3/fts3.c e67453b6ac421b79e600385491ed7f038b3bb271
 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
 F ext/fts3/fts3_hash.c 83e7bb4042106b32811681dd2859b4577a7a6b35
 F ext/fts3/fts3_hash.h 004b759e1602ff16dfa02fea3ca1c77336ad6798
@@ -350,7 +350,7 @@ F test/fts3b.test b3a25180a633873d37d86e1ccd00ed690d37237a
 F test/fts3c.test 4c7ef29b37aca3e8ebb6a39b57910caa6506034e
 F test/fts3d.test d92a47fe8ed59c9e53d2d8e6d2685bb380aadadc
 F test/fts3e.test 1f6c6ac9cc8b772ca256e6b22aaeed50c9350851
-F test/fts3near.test 2d4dadcaac5025ab65bb87e66c45f39e92966194
+F test/fts3near.test e8a9b4e16c63a795918b334b74d4aec14815bf8b
 F test/func.test 628dc9b321fc66dd6d055fca6525e157004744e1
 F test/fuzz.test 62fc19dd36a427777fd671b569df07166548628a
 F test/fuzz2.test ea38692ce2da99ad79fe0be5eb1a452c1c4d37bb
@@ -635,7 +635,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 80bdaafa77ec5c967f633eaaf5ee6f493a6e5a56
-R 459f9fc431217cf781a414864860109b
+P 414da4ebcecbed37177aecf649ddd3d258af260d
+R 30fe40585fda84091e0ee18bc0941dc6
 U drh
-Z 0b8a274367e2088529ac83c60572b420
+Z a8f9df1c6b8baaa9d26a99abcbf57852
index 0e8751c32b627ce2b1171e1fec4dfbf61d8b8144..c1e9b6aa741710e1f8e7d7af0894b4b5ccfe5370 100644 (file)
@@ -1 +1 @@
-414da4ebcecbed37177aecf649ddd3d258af260d
\ No newline at end of file
+8e9b9553115c42dae38cad0612d98d9a0c453a5c
\ No newline at end of file
index 2a64762df4c659fbdd7bbdaa49f2bb739c11a0c6..9c3c49b52a82ca3af6c91bc4a96f1aeef5198b6c 100644 (file)
@@ -10,7 +10,7 @@
 #
 #*************************************************************************
 #
-# $Id: fts3near.test,v 1.1 2007/10/22 18:02:20 danielk1977 Exp $
+# $Id: fts3near.test,v 1.2 2008/09/12 18:25:31 drh Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -165,4 +165,401 @@ do_test fts3near-4.1 {
   }
 } {{<b>...</b> devices, handheld devices, etc. This <b>specification</b> also <b>supports</b> content positioning, downloadable fonts, <b>...</b>}}
 
+do_test fts3near-5.1 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification attach'
+  }
+} {2}
+do_test fts3near-5.2 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification NEAR attach'
+  }
+} {}
+do_test fts3near-5.3 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/18 attach'
+  }
+} {}
+do_test fts3near-5.4 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/19 attach'
+  }
+} {2}
+do_test fts3near-5.5 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/000018 attach'
+  }
+} {}
+do_test fts3near-5.6 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/000019 attach'
+  }
+} {2}
+
+db eval {
+  INSERT INTO t1 VALUES('
+      abbrev aberrations abjurations aboding abr abscesses absolutistic
+      abstention abuses acanthuses acceptance acclaimers accomplish
+      accoutring accusation acetonic acid acolytes acquitting acrylonitrile
+      actives acyclic addicted adenoid adjacently adjusting admissible
+      adoption adulated advantaging advertisers aedes aerogramme aetiology
+      affiliative afforest afterclap agamogenesis aggrade agings agonize
+      agron ailurophile airfreight airspeed alarmists alchemizing
+      alexandrines alien aliped all allergenic allocator allowances almost
+      alphabetizes altho alvine amaurosis ambles ameliorate amicability amnio
+      amour ampicillin amusement anadromous analogues anarchy anchormen
+      anecdota aneurin angst animating anlage announcements anodized
+      answerable antemeridian anthracene antiabortionist anticlimaxes
+      antifriction antimitotic antiphon antiques antithetic anviled
+      apatosaurus aphrodisia apodal aposiopesis apparatus appendectomies
+      applications appraisingly appropriate apteryx arabinose
+      arboricultural archdeaconates archipelago ardently arguers armadillo
+      arnicas arrayed arrowy arthroscope artisans ascensive ashier
+      aspersorium assail assentor assignees assonants astereognosis
+      astringency astutest atheistical atomize attachment attenuates
+      attrahent audibility augite auricle auteurists autobus autolysis
+      autosome avenge avidest aw awl ayes babirusa backbeats backgrounder
+      backseat backswings baddie bagnios baked balefuller ballista balmily
+      bandbox bandylegged bankruptcy baptism barbering bargain barneys
+      barracuda barterer bashes bassists bathers batterer bavardage
+      beachfront beanstalk beauteous become bedim bedtimes beermats begat
+      begun belabors bellarmine belongings bending benthos bereavements
+      besieger bestialized betide bevels biases bicarbonates bidentate bigger
+      bile billow bine biodynamics biomedicine biotites birding bisection
+      bitingly bkg blackheads blaeberry blanking blatherer bleeper blindage
+      blithefulness blockish bloodstreams bloused blubbing bluestocking
+      blurted boatbill bobtailed boffo bold boltrope bondservant bonks
+      bookbinding bookworm booting borating boscages botchers bougainvillea
+      bounty bowlegged boyhood bracketed brainstorm brandishes
+      braunschweigers brazilin breakneck breathlessness brewage bridesmaids
+      brighter brisker broader brokerages bronziest browband brunets bryology
+      bucking budlike bugleweed bulkily bulling bummer bunglers bureau burgs
+      burrito bushfire buss butlery buttressing bylines cabdriver cached
+      cadaverousnesses cafeterias cakewalk calcifies calendula callboy calms
+      calyptra camisoles camps candelabrum caned cannolis canoodling cantors
+      cape caponize capsuling caracoled carbolics carcase carditis caretakers
+      carnallite carousel carrageenan cartels carves cashbook castanets
+      casuistry catalyzer catchers categorizations cathexis caucuses
+      causeway cavetto cede cella cementite centenary centrals ceramics ceria
+      cervixes chafferer chalcopyrites chamfers change chaotically
+      characteristically charivari chases chatterer cheats cheeks chef
+      chemurgy chetah chickaree chigoes chillies chinning chirp chive
+      chloroforms chokebore choplogic chorioids chromatic chronically
+      chubbiest chunder chutzpah cimetidine cinque circulated circumscribe
+      cirrose citrin claddagh clamorousness clapperboards classicalism
+      clauses cleanse clemency clicker clinchers cliquiest clods closeting
+      cloudscape clucking cnidarian coalfish coatrack coca cockfights coddled
+      coeducation coexistence cognitively coiffed colatitude collage
+      collections collinear colonelcy colorimetric columelliform combos
+      comforters commence commercialist commit commorancy communized compar
+      compendiously complainers compliance composition comprised comradery
+      concelebrants concerted conciliation concourses condensate
+      condonations confab confessionals confirmed conforming congeal
+      congregant conjectured conjurers connoisseurs conscripting
+      conservator consolable conspired constricting consuls contagious
+      contemporaneity contesters continuities contractors contrarian
+      contrive convalescents convents convexly convulsed cooncan coparcenary
+      coprolite copyreader cordially corklike cornflour coroner corralling
+      corrigible corsages cosies cosmonauts costumer cottontails counselings
+      counterclaim counterpane countertenors courageously couth coveting
+      coworker cozier cracklings crampon crappies craved cream credenzas
+      crematoriums cresol cricoid crinkle criterion crocodile crore crossover
+      crowded cruelest crunch cruzeiros cryptomeria cubism cuesta culprit
+      cumquat cupped curdle curly cursoring curvy customized cutting cyclamens
+      cylindrical cytaster dachshund daikon damages damselfly dangling
+      darkest databanks dauphine dazzling deadpanned deathday debauchers
+      debunking decameter decedents decibel decisions declinations
+      decomposition decoratively decretive deduct deescalated defecating
+      deferentially definiendum defluxion defrocks degrade deice dekaliters
+      deli delinquencies deludedly demarcates demineralizers demodulating
+      demonstrabilities demurred deniabilities denouncement denudation
+      departure deplorable deposing depredatory deputizes derivational
+      desalinization descriptors desexes desisted despising destitute
+      detectability determiner detoxifying devalued devilries devotions
+      dextrous diagenesis dialling diaphoresis diazonium dickeys diddums
+      differencing dig dignified dildo dimetric dineric dinosaurs diplodocus
+      directer dirty disagrees disassembler disburses disclosures
+      disconcerts discountability discrete disembarrass disenthrone
+      disgruntled dishpans disintegrators dislodged disobedient
+      dispassionate dispiritednesses dispraised disqualifying
+      dissatisfying dissidence dissolvers distich distracting distrusts
+      ditto diverse divineness dizzily dockyard dodgers doggish doited dom
+      dominium doohickey doozie dorsum doubleheaders dourer downbeats
+      downshifted doyennes draftsman dramatic drawling dredge drifter
+      drivelines droopier drowsed drunkards dubiosities duding dulcifying
+      dumpcart duodecillion durable duteous dyed dysgenic eagles earplugs
+      earwitness ebonite echoers economical ectothermous edibility educates
+      effected effigies eggbeaters egresses ejaculates elasticize elector
+      electrodynamometer electrophorus elem eligibly eloped emaciating
+      embarcaderos embezzlers embosses embryectomy emfs emotionalizing
+      empiricist emu enamels enchained encoded encrusts endeavored endogamous
+      endothelioma energizes engager engrosses enl enologist enrolls ensphere
+      enters entirety entrap entryways envies eosinophil epicentral
+      epigrammatized episodic epochs equestrian equitably erect ernes
+      errorless escalated eschatology espaliers essonite estop eternity
+      ethnologically eudemonics euphonious euthenist evangelizations
+      eventuality evilest evulsion examinee exceptionably exciter
+      excremental execrably exemplars exhalant exhorter exocrine exothermic
+      expected expends explainable exploratory expostulatory expunges
+      extends externals extorts extrapolative extrorse eyebolt eyra
+      facetiously factor faeries fairings fallacies falsities fancifulness
+      fantasticalness farmhouse fascinate fatalistically fattener fave
+      fearlessly featly federates feints fellowman fencers ferny
+      fertilenesses feta feudality fibers fictionalize fiefs fightback
+      filefish filmier finaglers fingerboards finochio firefly firmament
+      fishmeal fitted fjords flagitiousnesses flamen flaps flatfooting
+      flauntier fleapit fleshes flickertail flints floaty floorboards
+      floristic flow fluffily fluorescein flutes flyspecks foetal folderols
+      followable foolhardier footlockers foppish forceless foredo foreknows
+      foreseeing foretaste forgather forlorn formidableness fortalice
+      forwarding founding foxhunting fragmentarily frangipani fray freeform
+      freezable freshening fridges frilliest frizzed frontbench frottages
+      fruitcake fryable fugleman fulminated functionalists fungoid furfuran
+      furtive fussy fwd gadolinium galabias gallinaceous galvanism gamers
+      gangland gaoling garganey garrisoning gasp gate gauger gayety geed
+      geminately generalissimos genii gentled geochronology geomorphic
+      geriatricians gesellschaft ghat gibbeting giggles gimps girdlers
+      glabella glaive glassfuls gleefully glistered globetrotted glorifier
+      gloving glutathione glyptodont goaled gobsmacked goggliest golliwog
+      goobers gooseberries gormandizer gouramis grabbier gradually grampuses
+      grandmothers granulated graptolite gratuitously gravitates greaten
+      greenmailer greys grills grippers groan gropingly grounding groveling
+      grueled grunter guardroom guggle guineas gummed gunnysacks gushingly
+      gutturals gynecoid gyrostabilizer habitudes haemophilia hailer hairs
+      halest hallow halters hamsters handhelds handsaw hangup haranguer
+      hardheartedness harlotry harps hashing hated hauntingly hayrack
+      headcases headphone headword heartbreakers heaters hebephrenia
+      hedonist heightening heliozoan helots hemelytron hemorrhagic hent
+      herbicides hereunto heroines heteroclitics heterotrophs hexers
+      hidebound hies hightails hindmost hippopotomonstrosesquipedalian
+      histologist hittable hobbledehoys hogans holdings holocrine homegirls
+      homesteader homogeneousness homopolar honeys hoodwinks hoovered
+      horizontally horridness horseshoers hospitalization hotdogging houri
+      housemate howitzers huffier humanist humid humors huntress husbandmen
+      hyaenas hydride hydrokinetics hydroponically hygrothermograph
+      hyperbolically hypersensitiveness hypnogogic hypodermically
+      hypothermia iatrochemistry ichthyological idealist ideograms idling
+      igniting illegal illuminatingly ilmenite imbibing immateriality
+      immigrating immortalizes immures imparts impeder imperfection
+      impersonated implant implying imposition imprecating imprimis
+      improvising impv inanenesses inaugurate incapably incentivize
+      incineration incloses incomparableness inconsequential incorporate
+      incrementing incumbered indecorous indentation indicative indignities
+      indistinguishably indoors indulges ineducation inerrable
+      inexperienced infants infestations infirmnesses inflicting
+      infracostal ingathered ingressions inheritances iniquity
+      injuriousnesses innervated inoculates inquisitionist insectile
+      insiders insolate inspirers instatement instr insulates intactness
+      intellects intensifies intercalations intercontinental interferon
+      interlarded intermarrying internalizing interpersonally
+      interrelatednesses intersperse interviewees intolerance
+      intransigents introducing intubates invades inventing inveterate
+      invocate iodides irenicism ironsmith irreducibly irresistibility
+      irriguous isobarisms isometrically issuable itineracies jackdaws
+      jaggery jangling javelins jeeringly jeremiad jeweler jigsawing jitter
+      jocosity jokester jot jowls judicative juicy jungly jurists juxtaposed
+      kalpa karstify keddah kendo kermesses keynote kibbutznik kidnaper
+      kilogram kindred kingpins kissers klatch kneads knobbed knowingest
+      kookaburras kruller labefaction labyrinths lacquer laddered lagoons
+      lambency laminates lancinate landscapist lankiness lapse larked lasso
+      laterite laudableness laundrywomen lawgiver laypersons leafhoppers
+      leapfrogs leaven leeches legated legislature leitmotifs lenients
+      leprous letterheads levelling lexicographically liberalists
+      librettist licorice lifesaving lightheadedly likelier limekiln limped
+      lines linkers lipoma liquidator listeners litharge litmus
+      liverishnesses loamier lobeline locative locutionary loggier loiterer
+      longevity loomed loping lotion louts lowboys luaus lucrativeness lulus
+      lumpier lungi lush luthern lymphangial lythraceous machinists maculate
+      maggot magnetochemistry maharani maimers majored malaprops malignants
+      maloti mammary manchineel manfully manicotti manipulativenesses
+      mansards manufactories maraschino margin markdown marooning marshland
+      mascaraing massaging masticate matchmark matings mattes mausoleum
+      mayflies mealworm meataxe medevaced medievalist meetings megavitamin
+      melded melodramatic memorableness mendaciousnesses mensurable
+      mercenaries mere meronymous mesmerizes mestee metallurgical
+      metastasize meterages meticulosity mewed microbe microcrystalline
+      micromanager microsporophyll midiron miffed milder militiamen
+      millesimal milometer mincing mingily minims minstrelsy mires
+      misanthropic miscalculate miscomprehended misdefines misery mishears
+      misled mispickel misrepresent misspending mistranslate miswriting
+      mixologists mobilizers moderators modulate mojo mollies momentum monde
+      monied monocles monographs monophyletic monotonousness moocher
+      moorages morality morion mortally moseyed motherly motorboat mouldering
+      mousers moveables mucky mudslides mulatto multicellularity
+      multipartite multivalences mundanities murkiest mushed muskiness
+      mutability mutisms mycelia myosotis mythicist nacred namable napkin
+      narghile nastiness nattering nauseations nearliest necessitate
+      necrophobia neg negotiators neologizes nephrotomy netiquette
+      neurophysiology newbie newspaper niccolite nielsbohriums nightlong
+      nincompoops nitpicked nix noddling nomadize nonadhesive noncandidates
+      nonconducting nondigestible nones nongreasy nonjoinder nonoccurrence
+      nonporousness nonrestrictive nonstaining nonuniform nooses northwards
+      nostalgic notepaper nourishment noyades nuclides numberless numskulls
+      nutmegged nymphaea oatmeal obis objurgators oblivious obsequiousness
+      obsoletism obtruding occlusions ocher octettes odeums offcuts
+      officiation ogival oilstone olestras omikron oncogenesis onsetting
+      oomphs openly ophthalmoscope opposites optimum orangutans
+      orchestrations ordn organophosphates origin ornithosis orthognathous
+      oscillatory ossuaries ostracized ounce outbreaks outearning outgrows
+      outlived outpoints outrunning outspends outwearing overabound
+      overbalance overcautious overcrowds overdubbing overexpanding
+      overgraze overindustrialize overlearning overoptimism overproducing
+      overripe overshadowing overspreading overstuff overtones overwind ow
+      oxidizing pacer packs paganish painstakingly palate palette pally
+      palsying pandemic panhandled pantheism papaws papped parading
+      parallelize paranoia parasitically pardners parietal parodied pars
+      participator partridgeberry passerines password pastors
+      paterfamiliases patination patrolman paunch pawnshops peacekeeper
+      peatbog peculator pedestrianism peduncles pegboard pellucidnesses
+      pendency penitentiary penstock pentylenetetrazol peptidase perched
+      perennial performing perigynous peripheralize perjurer permissively
+      perpetuals persistency perspicuously perturbingly pesky petcock
+      petrologists pfennige pharmacies phenformin philanderers
+      philosophically phonecards phosgenes photocomposer photogenic photons
+      phototype phylloid physiotherapeutics picadores pickup pieces pigging
+      pilaster pillion pimples pinioned pinpricks pipers pirogi pit
+      pitifullest pizza placental plainly planing plasmin platforming
+      playacts playwrights plectra pleurisy plopped plug plumule plussed
+      poaches poetasters pointless polarize policyholder polkaed
+      polyadelphous polygraphing polyphonous pomace ponderers pooch poplar
+      porcelains portableness portly positioning postage posthumously
+      postponed potages potholed poulard powdering practised pranksters
+      preadapt preassigning precentors precipitous preconditions predefined
+      predictors preengage prefers prehumans premedical prenotification
+      preplanning prepuberty presbytery presentation presidia prestissimo
+      preterites prevailer prewarmed priding primitively principalships
+      prisage privileged probed prochurch proctoscope products proficients
+      prognathism prohibiting proletarianisms prominence promulgates
+      proofreading property proportions prorate proselytize prosthesis
+      proteins prototypic provenances provitamin prudish pseudonymities
+      psychoanalysts psychoneuroses psychrometer publishable pufferies
+      pullet pulses punchy punkins purchased purities pursers pushover
+      putridity pylons pyrogenous pzazz quadricepses quaff qualmish quarriers
+      quasilinear queerness questionnaires quieten quintals quislings quoits
+      rabidness racketeers radiative radioisotope radiotherapists ragingly
+      rainband rakishness rampagers rands raped rare raspy ratiocinator
+      rattlebrain ravening razz reactivation readoption realm reapportioning
+      reasoning reattempts rebidding rebuts recapitulatory receptiveness
+      recipes reckonings recognizee recommendatory reconciled reconnoiters
+      recontaminated recoupments recruits recumbently redact redefine
+      redheaded redistributable redraw redwing reeled reenlistment reexports
+      refiles reflate reflowing refortified refried refuses regelate
+      registrant regretting rehabilitative reigning reinduced reinstalled
+      reinvesting rejoining relations relegates religiosities reluctivity
+      remastered reminisce remodifying remounted rends renovate reordered
+      repartee repel rephrase replicate repossessing reprint reprogramed
+      repugnantly requiter rescheduling resegregate resettled residually
+      resold resourcefulness respondent restating restrainedly resubmission
+      resurveyed retaliating retiarius retorsion retreated retrofitting
+      returning revanchism reverberated reverted revitalization
+      revolutionize rewind rhapsodizing rhizogenic rhythms ricketinesses
+      ridicule righteous rilles rinks rippliest ritualize riyals roast rockery
+      roguish romanizations rookiest roquelaure rotation rotundity rounder
+      routinizing rubberize rubricated ruefully ruining rummaged runic
+      russets ruttish sackers sacrosanctly safeguarding said salaciousness
+      salinity salsas salutatorians sampan sandbag saned santonin
+      saprophagous sarnies satem saturant savaged sawbucks scablike scalp
+      scant scared scatter schedulers schizophrenics schnauzers schoolmarms
+      scintillae scleroses scoped scotched scram scratchiness screwball
+      scripting scrubwomen scrutinizing scumbled scuttled seals seasickness
+      seccos secretions secularizing seditiousnesses seeking segregators
+      seize selfish semeiology seminarian semitropical sensate sensors
+      sentimo septicemic sequentially serener serine serums
+      sesquicentennials seventeen sexiest sforzandos shadowing shallot
+      shampooing sharking shearer sheered shelters shifter shiner shipper
+      shitted shoaled shofroth shorebirds shortsightedly showboated shrank
+      shrines shucking shuttlecocks sickeningly sideling sidewise sigil
+      signifiers siliceous silty simony simulative singled sinkings sirrah
+      situps skateboarder sketchpad skim skirmished skulkers skywalk slander
+      slating sleaziest sleepyheads slicking slink slitting slot slub
+      slumlords smallest smattered smilier smokers smriti snailfish snatch
+      snides snitching snooze snowblowers snub soapboxing socialite sockeyes
+      softest sold solicitings solleret sombreros somnolencies sons sopor
+      sorites soubrette soupspoon southpaw spaces spandex sparkers spatially
+      speccing specking spectroscopists speedsters spermatics sphincter
+      spiffied spindlings spirals spitball splayfeet splitter spokeswomen
+      spooled sportily spousals sprightliness sprogs spurner squalene
+      squattered squelches squirms stablish staggerings stalactitic stamp
+      stands starflower starwort stations stayed steamroll steeplebush
+      stemmatics stepfathers stereos steroid sticks stillage stinker
+      stirringly stockpiling stomaching stopcock stormers strabismuses
+      strainer strappado strawberries streetwise striae strikeouts strives
+      stroppiest stubbed study stunting style suavity subchloride subdeb
+      subfields subjoin sublittoral subnotebooks subprograms subside
+      substantial subtenants subtreasuries succeeding sucked sufferers
+      sugarier sulfaguanidine sulphating summerhouse sunbonnets sunned
+      superagency supercontinent superheroes supernatural superscribing
+      superthin supplest suppositive surcease surfs surprise survey
+      suspiration svelte swamplands swashes sweatshop swellhead swindling
+      switching sworn syllabuses sympathetics synchrocyclotron syndic
+      synonymously syringed tablatures tabulation tackling taiga takas talker
+      tamarisks tangential tans taproom tarpapers taskmaster tattiest
+      tautologically taxied teacup tearjerkers technocracies teepee
+      telegenic telephony telexed temperaments temptress tenderizing tensed
+      tenuring tergal terned terror testatrices tetherball textile thatched
+      their theorem thereof thermometers thewy thimerosal thirsty
+      thoroughwort threateningly thrived through thumbnails thwacks
+      ticketing tie til timekeepers timorousness tinkers tippers tisane
+      titrating toastmaster toff toking tomb tongs toolmakings topes topple
+      torose tortilla totalizing touchlines tousling townsmen trachea
+      tradeable tragedienne traitorous trances transcendentalists
+      transferrable tranship translating transmogrifying transportable
+      transvestism traumatize treachery treed trenail tressing tribeswoman
+      trichromatism triennials trikes trims triplicate tristich trivializes
+      trombonist trots trouts trued trunnion tryster tubes tulle tundras turban
+      turgescence turnround tutelar tweedinesses twill twit tympanum typists
+      tzarists ulcered ultramodern umbles unaccountability unamended
+      unassertivenesses unbanned unblocked unbundled uncertified unclaimed
+      uncoated unconcerns unconvinced uncrossing undefined underbodice
+      underemphasize undergrowth underpayment undershirts understudy
+      underwritten undissolved unearthed unentered unexpended unfeeling
+      unforeseen unfussy unhair unhinges unifilar unimproved uninvitingly
+      universalization unknowns unlimbering unman unmet unnaturalness
+      unornament unperturbed unprecedentedly unproportionate unread
+      unreflecting unreproducible unripe unsatisfying unseaworthiness
+      unsharable unsociable unstacking unsubtly untactfully untied untruest
+      unveils unwilled unyokes upheave upraised upstart upwind urethrae
+      urtexts usurers uvula vacillators vailed validation valvule vanities
+      varia variously vassaled vav veggies velours venerator ventrals
+      verbalizes verification vernacularized verticality vestigially via
+      vicariously victoriousness viewpoint villainies vines violoncellist
+      virtual viscus vital vitrify viviparous vocalizers voidable volleys
+      volutes vouches vulcanology wackos waggery wainwrights waling wallowing
+      wanking wardroom warmup wartiest washwoman watchman watermarks waverer
+      wayzgoose weariest weatherstripped weediness weevil welcomed
+      wentletrap whackers wheatworm whelp whf whinged whirl whistles whithers
+      wholesomeness whosoever widows wikiup willowier windburned windsail
+      wingspread winterkilled wisecracking witchgrass witling wobbliest
+      womanliness woodcut woodworking woozy working worldwide worthiest
+      wrappings wretched writhe wynd xylophone yardarm yea yelped yippee yoni
+      yuks zealotry zigzagger zitherists zoologists zygosis');
+}
+
+do_test fts3near-6.1 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'abbrev zygosis'
+  }
+} {3}
+do_test fts3near-6.2 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR zygosis'
+  }
+} {}
+do_test fts3near-6.3 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/100 zygosis'
+  }
+} {}
+do_test fts3near-6.4 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/1000 zygosis'
+  }
+} {}
+do_test fts3near-6.5 {
+  execsql {
+    SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/10000 zygosis'
+  }
+} {3}
+
+
 finish_test