From: drh Date: Fri, 12 Sep 2008 18:25:30 +0000 (+0000) Subject: Fix the NEAR connector in FTS3 so that it can take ranges in excess of 9. X-Git-Tag: version-3.6.10~482 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8578611b951e7cf6402f24712c4ae5ffcc6072f2;p=thirdparty%2Fsqlite.git Fix the NEAR connector in FTS3 so that it can take ranges in excess of 9. The maximum range is now 32767. (CVS 5695) FossilOrigin-Name: 8e9b9553115c42dae38cad0612d98d9a0c453a5c --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index cc6dcd82d2..ae7e98c26d 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -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)='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( iEndpTerms[pQuery->nTerms-1].isPrefix = 1; } pQuery->pTerms[pQuery->nTerms-1].iPhrase = nTerm; diff --git a/manifest b/manifest index 123346a94b..4cd164e64f 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 0e8751c32b..c1e9b6aa74 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -414da4ebcecbed37177aecf649ddd3d258af260d \ No newline at end of file +8e9b9553115c42dae38cad0612d98d9a0c453a5c \ No newline at end of file diff --git a/test/fts3near.test b/test/fts3near.test index 2a64762df4..9c3c49b52a 100644 --- a/test/fts3near.test +++ b/test/fts3near.test @@ -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 { } } {{... devices, handheld devices, etc. This specification also supports content positioning, downloadable fonts, ...}} +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