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
This commit is contained in:
drh 2008-09-12 18:25:30 +00:00
parent 39001e7525
commit 8578611b95
4 changed files with 428 additions and 35 deletions

View 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;

View File

@ -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

View File

@ -1 +1 @@
414da4ebcecbed37177aecf649ddd3d258af260d
8e9b9553115c42dae38cad0612d98d9a0c453a5c

View 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