Simplify the way position lists are copied when merging data.

FossilOrigin-Name: 9f8d678a0ea75e169daf8b3f00bd05f52a050ea6
This commit is contained in:
dan 2014-08-11 20:26:34 +00:00
parent c7fe7a969b
commit 1a669f84a1
3 changed files with 39 additions and 21 deletions

View File

@ -2813,6 +2813,34 @@ static void fts5WriteAppendPoslistInt(
}
}
static void fts5WriteAppendPoslistData(
Fts5Index *p,
Fts5SegWriter *pWriter,
const u8 *aData,
int nData
){
Fts5PageWriter *pPage = &pWriter->aWriter[0];
const u8 *a = aData;
int n = nData;
while( p->rc==SQLITE_OK && (pPage->buf.n + n)>=p->pgsz ){
int nReq = p->pgsz - pPage->buf.n;
int nCopy = 0;
while( nCopy<nReq ){
i64 dummy;
nCopy += getVarint(&a[nCopy], (u64*)&dummy);
}
fts5BufferAppendBlob(&p->rc, &pPage->buf, nCopy, a);
a += nCopy;
n -= nCopy;
fts5WriteFlushLeaf(p, pWriter);
pWriter->bFirstRowidInPage = 1;
}
if( n>0 ){
fts5BufferAppendBlob(&p->rc, &pPage->buf, n, a);
}
}
static void fts5WriteAppendZerobyte(Fts5Index *p, Fts5SegWriter *pWriter){
fts5BufferAppendVarint(&p->rc, &pWriter->aWriter[0].buf, 0);
}
@ -3041,12 +3069,7 @@ fflush(stdout);
/* Copy the position list from input to output */
fts5WriteAppendPoslistInt(p, &writer, sPos.nRem);
for(/* noop */; !fts5ChunkIterEof(p, &sPos); fts5ChunkIterNext(p, &sPos)){
int iOff = 0;
while( iOff<sPos.n ){
int iVal;
iOff += getVarint32(&sPos.p[iOff], iVal);
fts5WriteAppendPoslistInt(p, &writer, iVal);
}
fts5WriteAppendPoslistData(p, &writer, sPos.p, sPos.n);
}
}
@ -3180,9 +3203,9 @@ static int fts5FlushNewEntry(
const u8 *aPoslist,
int nPoslist
){
Fts5Buffer *pBuf;
Fts5FlushCtx *p = (Fts5FlushCtx*)pCtx;
int rc = SQLITE_OK;
int i = 0;
/* Append the rowid itself */
fts5WriteAppendRowid(p->pIdx, &p->writer, iRowid);
@ -3190,13 +3213,8 @@ static int fts5FlushNewEntry(
/* Append the size of the position list in bytes */
fts5WriteAppendPoslistInt(p->pIdx, &p->writer, nPoslist);
/* Copy the position list to the output segment */
while( i<nPoslist ){
int iVal;
i += getVarint32(&aPoslist[i], iVal);
fts5WriteAppendPoslistInt(p->pIdx, &p->writer, iVal);
}
/* And the poslist data */
fts5WriteAppendPoslistData(p->pIdx, &p->writer, aPoslist, nPoslist);
return rc;
}

View File

@ -1,5 +1,5 @@
C Replace\sthe\shash\stable\sborrowed\sfrom\sfts3.
D 2014-08-11T19:44:52.686
C Simplify\sthe\sway\sposition\slists\sare\scopied\swhen\smerging\sdata.
D 2014-08-11T20:26:34.077
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in b03432313a3aad96c706f8164fb9f5307eaf19f5
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -111,7 +111,7 @@ F ext/fts5/fts5_buffer.c 248c61ac9fec001602efc72a45704f3b8d367c00
F ext/fts5/fts5_config.c f4ebf143e141b8c77355e3b15aba81b7be51d710
F ext/fts5/fts5_expr.c 7b8e380233176053841904a86006696ee8f6cd24
F ext/fts5/fts5_hash.c 2af412d00f65ad427f18acbe421c113413cdef06
F ext/fts5/fts5_index.c ccef8703b6228a39090b0a03b83f163e69627ff2
F ext/fts5/fts5_index.c 687736cba90a735ecd3cf9bf0e4174e7e5cc3f60
F ext/fts5/fts5_storage.c fa3c8fc4766d850a4977bf1d4b71c37e7b07ab8b
F ext/fts5/fts5parse.y 777da8e5819f75c217982c79c29d014c293acac9
F ext/icu/README.txt d9fbbad0c2f647c3fdf715fc9fd64af53aedfc43
@ -1202,7 +1202,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P a14fa876f0eb66028e302b908967cc4a05ede9fc
R b81a5fabd4e838059b5d12635ffcd939
P 617e2fac1c128212254f71b1a8fddaf0d1d90262
R b29d729688c110acdf84d0128dad3fdf
U dan
Z 39c621bf94a400035f58731d1ee0f6cd
Z 772c48dd1029e003fed3d46062572012

View File

@ -1 +1 @@
617e2fac1c128212254f71b1a8fddaf0d1d90262
9f8d678a0ea75e169daf8b3f00bd05f52a050ea6