i64 iRowid;
u8 *aPoslist;
int nPoslist;
+ int nSize;
};
/*
Fts5Index *p,
Fts5IndexIter *pMulti,
Fts5Colset *pColset,
- int bSz, /* Append a size field before the data */
Fts5Buffer *pBuf
){
if( p->rc==SQLITE_OK ){
Fts5SegIter *pSeg = &pMulti->aSeg[ pMulti->aFirst[1].iFirst ];
assert( fts5MultiIterEof(p, pMulti)==0 );
- if( bSz ){
- /* WRITEPOSLISTSIZE */
- iSz = pBuf->n;
- fts5BufferAppendVarint(&p->rc, pBuf, pSeg->nPos*2);
- iData = pBuf->n;
- }
+ /* WRITEPOSLISTSIZE */
+ iSz = pBuf->n;
+ fts5BufferSafeAppendVarint(pBuf, pSeg->nPos*2);
+ iData = pBuf->n;
fts5SegiterPoslist(p, pSeg, pColset, pBuf);
- if( bSz && pColset ){
+ if( pColset ){
int nActual = pBuf->n - iData;
if( nActual!=pSeg->nPos ){
/* WRITEPOSLISTSIZE */
}
static void fts5DoclistIterNext(Fts5DoclistIter *pIter){
- u8 *p = pIter->aPoslist + pIter->nPoslist;
+ u8 *p = pIter->aPoslist + pIter->nSize + pIter->nPoslist;
assert( pIter->aPoslist );
if( p>=pIter->aEof ){
/* Read position list size */
if( p[0] & 0x80 ){
int nPos;
- p += fts5GetVarint32(p, nPos);
+ pIter->nSize = fts5GetVarint32(p, nPos);
pIter->nPoslist = (nPos>>1);
}else{
pIter->nPoslist = ((int)(p[0])) >> 1;
- p++;
+ pIter->nSize = 1;
}
pIter->aPoslist = p;
if( i2.aPoslist==0 || (i1.aPoslist && i1.iRowid<i2.iRowid) ){
/* Copy entry from i1 */
fts5MergeAppendDocid(&out, iLastRowid, i1.iRowid);
- /* WRITEPOSLISTSIZE */
- fts5BufferSafeAppendVarint(&out, i1.nPoslist * 2);
- fts5BufferSafeAppendBlob(&out, i1.aPoslist, i1.nPoslist);
+ fts5BufferSafeAppendBlob(&out, i1.aPoslist, i1.nPoslist+i1.nSize);
fts5DoclistIterNext(&i1);
}
else if( i1.aPoslist==0 || i2.iRowid!=i1.iRowid ){
/* Copy entry from i2 */
fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
- /* WRITEPOSLISTSIZE */
- fts5BufferSafeAppendVarint(&out, i2.nPoslist * 2);
- fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.nPoslist);
+ fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.nPoslist+i2.nSize);
fts5DoclistIterNext(&i2);
}
else{
i64 iPos2 = 0;
int iOff1 = 0;
int iOff2 = 0;
+ u8 *a1 = &i1.aPoslist[i1.nSize];
+ u8 *a2 = &i2.aPoslist[i2.nSize];
Fts5PoslistWriter writer;
memset(&writer, 0, sizeof(writer));
fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
fts5BufferZero(&tmp);
- sqlite3Fts5PoslistNext64(i1.aPoslist, i1.nPoslist, &iOff1, &iPos1);
- sqlite3Fts5PoslistNext64(i2.aPoslist, i2.nPoslist, &iOff2, &iPos2);
+ sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
+ sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
while( p->rc==SQLITE_OK && (iPos1>=0 || iPos2>=0) ){
i64 iNew;
if( iPos2<0 || (iPos1>=0 && iPos1<iPos2) ){
iNew = iPos1;
- sqlite3Fts5PoslistNext64(i1.aPoslist, i1.nPoslist, &iOff1, &iPos1);
+ sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
}else{
iNew = iPos2;
- sqlite3Fts5PoslistNext64(i2.aPoslist, i2.nPoslist, &iOff2, &iPos2);
+ sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
if( iPos1==iPos2 ){
- sqlite3Fts5PoslistNext64(i1.aPoslist, i1.nPoslist, &iOff1,&iPos1);
+ sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1,&iPos1);
}
}
p->rc = sqlite3Fts5PoslistWriterAppend(&tmp, &writer, iNew);
int iSave = doclist.n;
assert( doclist.n!=0 || iLastRowid==0 );
fts5BufferSafeAppendVarint(&doclist, iRowid - iLastRowid);
- if( fts5MultiIterPoslist(p, p1, pColset, 1, &doclist) ){
+ if( fts5MultiIterPoslist(p, p1, pColset, &doclist) ){
doclist.n = iSave;
}else{
iLastRowid = iRowid;
fts5TestTerm(p, &term, z, n, cksum2, &cksum3);
poslist.n = 0;
- fts5MultiIterPoslist(p, pIter, 0, 0, &poslist);
+ fts5SegiterPoslist(p, &pIter->aSeg[pIter->aFirst[1].iFirst] , 0, &poslist);
while( 0==sqlite3Fts5PoslistNext64(poslist.p, poslist.n, &iOff, &iPos) ){
int iCol = FTS5_POS2COLUMN(iPos);
int iTokOff = FTS5_POS2OFFSET(iPos);
-C Fix\sharmless\scompiler\swarning\sin\sFTS5.
-D 2015-10-07T17:06:17.479
+C Further\soptimizations\sfor\sfts5\sprefix\squeries\swithout\sa\sprefix\sindex.
+D 2015-10-07T19:06:21.871
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2143eeef6d0cc26006ae5fc4bb242a4a8b973412
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/fts5/fts5_config.c 57ee5fe71578cb494574fc0e6e51acb9a22a8695
F ext/fts5/fts5_expr.c 2054e550e75cffa117557c9416210c425934436d
F ext/fts5/fts5_hash.c 4bf4b99708848357b8a2b5819e509eb6d3df9246
-F ext/fts5/fts5_index.c 6b818dd5b68237d5d0f7723795a329f0fb2e9987
+F ext/fts5/fts5_index.c e03217c37f344f79673be385de6b03f732291000
F ext/fts5/fts5_main.c aa96828990274927e2b404e0b6e60f9ae1274254
F ext/fts5/fts5_storage.c df061a5caf9e50fbbd43113009b5b248362f4995
F ext/fts5/fts5_tcl.c 6da58d6e8f42a93c4486b5ba9b187a7f995dee37
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P baec1b96cb64a6a6317143a8df841e502afe3914
-R 450be658799fba4e5ff2cf0a8c0976d8
-U mistachkin
-Z d352d6bcf527145b85d125184e9bb23e
+P 13adcd038fc20dd1b6f344f79b449b4034f8f8f2
+R daa87d323013657b7e115de7ca0f256c
+U dan
+Z 2a38bec14f47e4ff1536197bd0ad1f10