#include "fts3.h"
#include "fts3_hash.h"
#include "fts3_tokenizer.h"
-#include "sqlite3.h"
#ifndef SQLITE_CORE
#include "sqlite3ext.h"
SQLITE_EXTENSION_INIT1
*/
#if 0
-# define TRACE(A) printf A; fflush(stdout)
+# define FTSTRACE(A) printf A; fflush(stdout)
#else
-# define TRACE(A)
+# define FTSTRACE(A)
#endif
/*
/* Write a 64-bit variable-length integer to memory starting at p[0].
* The length of data written will be between 1 and VARINT_MAX bytes.
* The number of bytes written is returned. */
-static int putVarint(char *p, sqlite_int64 v){
+static int fts3PutVarint(char *p, sqlite_int64 v){
unsigned char *q = (unsigned char *) p;
sqlite_uint64 vu = v;
do{
/* Read a 64-bit variable-length integer from memory starting at p[0].
* Return the number of bytes read, or 0 on error.
* The value is stored in *v. */
-static int getVarint(const char *p, sqlite_int64 *v){
+static int fts3GetVarint(const char *p, sqlite_int64 *v){
const unsigned char *q = (const unsigned char *) p;
sqlite_uint64 x = 0, y = 1;
while( (*q & 0x80) == 0x80 ){
return (int) (q - (unsigned char *)p);
}
-static int getVarint32(const char *p, int *pi){
+static int fts3GetVarint32(const char *p, int *pi){
sqlite_int64 i;
- int ret = getVarint(p, &i);
+ int ret = fts3GetVarint(p, &i);
*pi = (int) i;
assert( *pi==i );
return ret;
*/
static const char *dlrPosData(DLReader *pReader){
sqlite_int64 iDummy;
- int n = getVarint(pReader->pData, &iDummy);
+ int n = fts3GetVarint(pReader->pData, &iDummy);
assert( !dlrAtEnd(pReader) );
return pReader->pData+n;
}
static int dlrPosDataLen(DLReader *pReader){
sqlite_int64 iDummy;
- int n = getVarint(pReader->pData, &iDummy);
+ int n = fts3GetVarint(pReader->pData, &iDummy);
assert( !dlrAtEnd(pReader) );
return pReader->nElement-n;
}
/* If there is more data, read the next doclist element. */
if( pReader->nData!=0 ){
sqlite_int64 iDocidDelta;
- int iDummy, n = getVarint(pReader->pData, &iDocidDelta);
+ int iDummy, n = fts3GetVarint(pReader->pData, &iDocidDelta);
pReader->iDocid += iDocidDelta;
if( pReader->iType>=DL_POSITIONS ){
assert( n<pReader->nData );
while( 1 ){
- n += getVarint32(pReader->pData+n, &iDummy);
+ n += fts3GetVarint32(pReader->pData+n, &iDummy);
assert( n<=pReader->nData );
if( iDummy==POS_END ) break;
if( iDummy==POS_COLUMN ){
- n += getVarint32(pReader->pData+n, &iDummy);
+ n += fts3GetVarint32(pReader->pData+n, &iDummy);
assert( n<pReader->nData );
}else if( pReader->iType==DL_POSITIONS_OFFSETS ){
- n += getVarint32(pReader->pData+n, &iDummy);
- n += getVarint32(pReader->pData+n, &iDummy);
+ n += fts3GetVarint32(pReader->pData+n, &iDummy);
+ n += fts3GetVarint32(pReader->pData+n, &iDummy);
assert( n<pReader->nData );
}
}
assert( pData+nData>pData );
while( nData!=0 ){
sqlite_int64 iDocidDelta;
- int n = getVarint(pData, &iDocidDelta);
+ int n = fts3GetVarint(pData, &iDocidDelta);
iPrevDocid += iDocidDelta;
if( iType>DL_DOCIDS ){
int iDummy;
while( 1 ){
- n += getVarint32(pData+n, &iDummy);
+ n += fts3GetVarint32(pData+n, &iDummy);
if( iDummy==POS_END ) break;
if( iDummy==POS_COLUMN ){
- n += getVarint32(pData+n, &iDummy);
+ n += fts3GetVarint32(pData+n, &iDummy);
}else if( iType>DL_POSITIONS ){
- n += getVarint32(pData+n, &iDummy);
- n += getVarint32(pData+n, &iDummy);
+ n += fts3GetVarint32(pData+n, &iDummy);
+ n += fts3GetVarint32(pData+n, &iDummy);
}
assert( n<=nData );
}
#endif
/* Recode the initial docid as delta from iPrevDocid. */
- nFirstOld = getVarint(pData, &iDocid);
+ nFirstOld = fts3GetVarint(pData, &iDocid);
assert( nFirstOld<nData || (nFirstOld==nData && pWriter->iType==DL_DOCIDS) );
- nFirstNew = putVarint(c, iFirstDocid-pWriter->iPrevDocid);
+ nFirstNew = fts3PutVarint(c, iFirstDocid-pWriter->iPrevDocid);
/* Verify that the incoming doclist is valid AND that it ends with
** the expected docid. This is essential because we'll trust this
}
static void dlwAdd(DLWriter *pWriter, sqlite_int64 iDocid){
char c[VARINT_MAX];
- int n = putVarint(c, iDocid-pWriter->iPrevDocid);
+ int n = fts3PutVarint(c, iDocid-pWriter->iPrevDocid);
/* Docids must ascend. */
assert( !pWriter->has_iPrevDocid || iDocid>pWriter->iPrevDocid );
return;
}
- n = getVarint32(pReader->pData, &i);
+ n = fts3GetVarint32(pReader->pData, &i);
if( i==POS_COLUMN ){
- n += getVarint32(pReader->pData+n, &pReader->iColumn);
+ n += fts3GetVarint32(pReader->pData+n, &pReader->iColumn);
pReader->iPosition = 0;
pReader->iStartOffset = 0;
- n += getVarint32(pReader->pData+n, &i);
+ n += fts3GetVarint32(pReader->pData+n, &i);
}
/* Should never see adjacent column changes. */
assert( i!=POS_COLUMN );
pReader->iPosition += i-POS_BASE;
if( pReader->iType==DL_POSITIONS_OFFSETS ){
- n += getVarint32(pReader->pData+n, &i);
+ n += fts3GetVarint32(pReader->pData+n, &i);
pReader->iStartOffset += i;
- n += getVarint32(pReader->pData+n, &i);
+ n += fts3GetVarint32(pReader->pData+n, &i);
pReader->iEndOffset = pReader->iStartOffset+i;
}
assert( n<=pReader->nData );
if( pWriter->dlw->iType==DL_DOCIDS ) return;
if( iColumn!=pWriter->iColumn ){
- n += putVarint(c+n, POS_COLUMN);
- n += putVarint(c+n, iColumn);
+ n += fts3PutVarint(c+n, POS_COLUMN);
+ n += fts3PutVarint(c+n, iColumn);
pWriter->iColumn = iColumn;
pWriter->iPos = 0;
pWriter->iOffset = 0;
}
assert( iPos>=pWriter->iPos );
- n += putVarint(c+n, POS_BASE+(iPos-pWriter->iPos));
+ n += fts3PutVarint(c+n, POS_BASE+(iPos-pWriter->iPos));
pWriter->iPos = iPos;
if( pWriter->dlw->iType==DL_POSITIONS_OFFSETS ){
assert( iStartOffset>=pWriter->iOffset );
- n += putVarint(c+n, iStartOffset-pWriter->iOffset);
+ n += fts3PutVarint(c+n, iStartOffset-pWriter->iOffset);
pWriter->iOffset = iStartOffset;
assert( iEndOffset>=iStartOffset );
- n += putVarint(c+n, iEndOffset-iStartOffset);
+ n += fts3PutVarint(c+n, iEndOffset-iStartOffset);
}
dataBufferAppend(pWriter->dlw->b, c, n);
}
/* Docids must ascend. */
assert( !pWriter->dlw->has_iPrevDocid || iDocid>pWriter->dlw->iPrevDocid );
- n = putVarint(c, iDocid-pWriter->dlw->iPrevDocid);
+ n = fts3PutVarint(c, iDocid-pWriter->dlw->iPrevDocid);
dataBufferAppend(pWriter->dlw->b, c, n);
pWriter->dlw->iPrevDocid = iDocid;
#ifndef NDEBUG
static void plwTerminate(PLWriter *pWriter){
if( pWriter->dlw->iType>DL_DOCIDS ){
char c[VARINT_MAX];
- int n = putVarint(c, POS_END);
+ int n = fts3PutVarint(c, POS_END);
dataBufferAppend(pWriter->dlw->b, c, n);
}
#ifndef NDEBUG
static void dlcAddDoclist(DLCollector *pCollector, DataBuffer *b){
if( pCollector->dlw.iType>DL_DOCIDS ){
char c[VARINT_MAX];
- int n = putVarint(c, POS_END);
+ int n = fts3PutVarint(c, POS_END);
dataBufferAppend2(b, pCollector->b.pData, pCollector->b.nData, c, n);
}else{
dataBufferAppend(b, pCollector->b.pData, pCollector->b.nData);
const char *zFormat){
char *zCommand = string_format(zFormat, zDb, zName);
int rc;
- TRACE(("FTS3 sql: %s\n", zCommand));
+ FTSTRACE(("FTS3 sql: %s\n", zCommand));
rc = sqlite3_exec(db, zCommand, NULL, 0, NULL);
sqlite3_free(zCommand);
return rc;
sqlite3_stmt **ppStmt, const char *zFormat){
char *zCommand = string_format(zFormat, zDb, zName);
int rc;
- TRACE(("FTS3 prepare: %s\n", zCommand));
+ FTSTRACE(("FTS3 prepare: %s\n", zCommand));
rc = sqlite3_prepare_v2(db, zCommand, -1, ppStmt, NULL);
sqlite3_free(zCommand);
return rc;
static void fulltext_vtab_destroy(fulltext_vtab *v){
int iStmt, i;
- TRACE(("FTS3 Destroy %p\n", v));
+ FTSTRACE(("FTS3 Destroy %p\n", v));
for( iStmt=0; iStmt<MAX_STMT; iStmt++ ){
if( v->pFulltextStatements[iStmt]!=NULL ){
sqlite3_finalize(v->pFulltextStatements[iStmt]);
/*
** If X is a character that can be used in an identifier then
-** IdChar(X) will be true. Otherwise it is false.
+** ftsIdChar(X) will be true. Otherwise it is false.
**
** For ASCII, any character with the high-order bit set is
** allowed in an identifier. For 7-bit characters,
-** sqlite3IsIdChar[X] must be 1.
+** isFtsIdChar[X] must be 1.
**
** Ticket #1066. the SQL standard does not allow '$' in the
** middle of identfiers. But many SQL implementations do.
** SQLite will allow '$' in identifiers for compatibility.
** But the feature is undocumented.
*/
-static const char isIdChar[] = {
+static const char isFtsIdChar[] = {
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */
};
-#define IdChar(C) (((c=C)&0x80)!=0 || (c>0x1f && isIdChar[c-0x20]))
+#define ftsIdChar(C) (((c=C)&0x80)!=0 || (c>0x1f && isFtsIdChar[c-0x20]))
/*
** Return the length of the token that begins at z[0].
** Store the token type in *tokenType before returning.
*/
-static int getToken(const char *z, int *tokenType){
+static int ftsGetToken(const char *z, int *tokenType){
int i, c;
switch( *z ){
case 0: {
return i;
}
default: {
- if( !IdChar(*z) ){
+ if( !ftsIdChar(*z) ){
break;
}
- for(i=1; IdChar(z[i]); i++){}
+ for(i=1; ftsIdChar(z[i]); i++){}
*tokenType = TOKEN_ID;
return i;
}
** A token extracted from a string is an instance of the following
** structure.
*/
-typedef struct Token {
+typedef struct FtsToken {
const char *z; /* Pointer to token text. Not '\000' terminated */
short int n; /* Length of the token text in bytes. */
-} Token;
+} FtsToken;
/*
** Given a input string (which is really one of the argv[] parameters
*/
static char **tokenizeString(const char *z, int *pnToken){
int nToken = 0;
- Token *aToken = sqlite3_malloc( strlen(z) * sizeof(aToken[0]) );
+ FtsToken *aToken = sqlite3_malloc( strlen(z) * sizeof(aToken[0]) );
int n = 1;
int e, i;
int totalSize = 0;
char **azToken;
char *zCopy;
while( n>0 ){
- n = getToken(z, &e);
+ n = ftsGetToken(z, &e);
if( e!=TOKEN_SPACE ){
aToken[nToken].z = z;
aToken[nToken].n = n;
static char *firstToken(char *zIn, char **pzTail){
int n, ttype;
while(1){
- n = getToken(zIn, &ttype);
+ n = ftsGetToken(zIn, &ttype);
if( ttype==TOKEN_SPACE ){
zIn += n;
}else if( ttype==TOKEN_EOF ){
v->nPendingData = -1;
*ppVTab = &v->base;
- TRACE(("FTS3 Connect %p\n", v));
+ FTSTRACE(("FTS3 Connect %p\n", v));
return rc;
int rc;
TableSpec spec;
StringBuffer schema;
- TRACE(("FTS3 Create\n"));
+ FTSTRACE(("FTS3 Create\n"));
rc = parseSpec(&spec, argc, argv, pzErr);
if( rc!=SQLITE_OK ) return rc;
static int fulltextBestIndex(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
fulltext_vtab *v = (fulltext_vtab *)pVTab;
int i;
- TRACE(("FTS3 BestIndex\n"));
+ FTSTRACE(("FTS3 BestIndex\n"));
for(i=0; i<pInfo->nConstraint; ++i){
const struct sqlite3_index_constraint *pConstraint;
if( (pConstraint->iColumn==-1 || pConstraint->iColumn==v->nColumn+1) &&
pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){
pInfo->idxNum = QUERY_DOCID; /* lookup by docid */
- TRACE(("FTS3 QUERY_DOCID\n"));
+ FTSTRACE(("FTS3 QUERY_DOCID\n"));
} else if( pConstraint->iColumn>=0 && pConstraint->iColumn<=v->nColumn &&
pConstraint->op==SQLITE_INDEX_CONSTRAINT_MATCH ){
/* full-text search */
pInfo->idxNum = QUERY_FULLTEXT + pConstraint->iColumn;
- TRACE(("FTS3 QUERY_FULLTEXT %d\n", pConstraint->iColumn));
+ FTSTRACE(("FTS3 QUERY_FULLTEXT %d\n", pConstraint->iColumn));
} else continue;
pInfo->aConstraintUsage[i].argvIndex = 1;
}
static int fulltextDisconnect(sqlite3_vtab *pVTab){
- TRACE(("FTS3 Disconnect %p\n", pVTab));
+ FTSTRACE(("FTS3 Disconnect %p\n", pVTab));
fulltext_vtab_destroy((fulltext_vtab *)pVTab);
return SQLITE_OK;
}
fulltext_vtab *v = (fulltext_vtab *)pVTab;
int rc;
- TRACE(("FTS3 Destroy %p\n", pVTab));
+ FTSTRACE(("FTS3 Destroy %p\n", pVTab));
rc = sql_exec(v->db, v->zDb, v->zName,
"drop table if exists %_content;"
"drop table if exists %_segments;"
memset(c, 0, sizeof(fulltext_cursor));
/* sqlite will initialize c->base */
*ppCursor = &c->base;
- TRACE(("FTS3 Open %p: %p\n", pVTab, c));
+ FTSTRACE(("FTS3 Open %p: %p\n", pVTab, c));
return SQLITE_OK;
}else{
return SQLITE_NOMEM;
*/
static int fulltextClose(sqlite3_vtab_cursor *pCursor){
fulltext_cursor *c = (fulltext_cursor *) pCursor;
- TRACE(("FTS3 Close %p\n", c));
+ FTSTRACE(("FTS3 Close %p\n", c));
sqlite3_finalize(c->pStmt);
queryClear(&c->q);
snippetClear(&c->snippet);
fulltext_cursor *c = (fulltext_cursor *) pCursor;
int rc;
- TRACE(("FTS3 Next %p\n", pCursor));
+ FTSTRACE(("FTS3 Next %p\n", pCursor));
snippetClear(&c->snippet);
if( c->iCursorType < QUERY_FULLTEXT ){
/* TODO(shess) Handle SQLITE_SCHEMA AND SQLITE_BUSY. */
int rc;
StringBuffer sb;
- TRACE(("FTS3 Filter %p\n",pCursor));
+ FTSTRACE(("FTS3 Filter %p\n",pCursor));
initStringBuffer(&sb);
append(&sb, "SELECT docid, ");
dataBufferInit(&block->term, 0);
dataBufferReplace(&block->term, pTerm, nTerm);
- n = putVarint(c, iHeight);
- n += putVarint(c+n, iChildBlock);
+ n = fts3PutVarint(c, iHeight);
+ n += fts3PutVarint(c+n, iChildBlock);
dataBufferInit(&block->data, INTERIOR_MAX);
dataBufferReplace(&block->data, c, n);
}
assert( pData+nData>pData );
/* Must lead with height of node as a varint(n), n>0 */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n<nData );
nData -= n;
/* Must contain iBlockid. */
- n = getVarint(pData, &iBlockid);
+ n = fts3GetVarint(pData, &iBlockid);
assert( n>0 );
assert( n<=nData );
pData += n;
/* Zero or more terms of positive length */
if( nData!=0 ){
/* First term is not delta-encoded. */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0);
/* Following terms delta-encoded. */
while( nData!=0 ){
/* Length of shared prefix. */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>=0 );
assert( n<nData );
nData -= n;
/* Length and data of distinct suffix. */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0);
** at 0.
*/
if( pWriter->term.nData==0 ){
- n = putVarint(c, nTerm);
+ n = fts3PutVarint(c, nTerm);
}else{
while( nPrefix<pWriter->term.nData &&
pTerm[nPrefix]==pWriter->term.pData[nPrefix] ){
nPrefix++;
}
- n = putVarint(c, nPrefix);
- n += putVarint(c+n, nTerm-nPrefix);
+ n = fts3PutVarint(c, nPrefix);
+ n += fts3PutVarint(c+n, nTerm-nPrefix);
}
#ifndef NDEBUG
CLEAR(pReader);
/* Decode the base blockid, and set the cursor to the first term. */
- n = getVarint(pData+1, &pReader->iBlockid);
+ n = fts3GetVarint(pData+1, &pReader->iBlockid);
assert( 1+n<=nData );
pReader->pData = pData+1+n;
pReader->nData = nData-(1+n);
if( pReader->nData==0 ){
dataBufferInit(&pReader->term, 0);
}else{
- n = getVarint32(pReader->pData, &nTerm);
+ n = fts3GetVarint32(pReader->pData, &nTerm);
dataBufferInit(&pReader->term, nTerm);
dataBufferReplace(&pReader->term, pReader->pData+n, nTerm);
assert( n+nTerm<=pReader->nData );
}else{
int n, nPrefix, nSuffix;
- n = getVarint32(pReader->pData, &nPrefix);
- n += getVarint32(pReader->pData+n, &nSuffix);
+ n = fts3GetVarint32(pReader->pData, &nPrefix);
+ n += fts3GetVarint32(pReader->pData+n, &nSuffix);
/* Truncate the current term and append suffix data. */
pReader->term.nData = nPrefix;
assert( pData+nData>pData );
/* Must lead with a varint(0) */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( iDummy==0 );
assert( n>0 );
assert( n<nData );
nData -= n;
/* Leading term length and data must fit in buffer. */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0 );
nData -= n+iDummy;
/* Leading term's doclist length and data must fit. */
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0 );
/* Verify that trailing terms and doclists also are readable. */
while( nData!=0 ){
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>=0 );
assert( n<nData );
pData += n;
nData -= n;
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0 );
pData += n+iDummy;
nData -= n+iDummy;
- n = getVarint32(pData, &iDummy);
+ n = fts3GetVarint32(pData, &iDummy);
assert( n>0 );
assert( iDummy>0 );
assert( n+iDummy>0 );
/* Reconstruct the first term in the leaf for purposes of building
** the interior node.
*/
- n = getVarint32(pWriter->data.pData+iData+1, &nStartingTerm);
+ n = fts3GetVarint32(pWriter->data.pData+iData+1, &nStartingTerm);
pStartingTerm = pWriter->data.pData+iData+1+n;
assert( pWriter->data.nData>iData+1+n+nStartingTerm );
assert( pWriter->nTermDistinct>0 );
** varint(nTerm)
** char pTerm[nTerm]
*/
- n = putVarint(c, '\0');
- n += putVarint(c+n, nTerm);
+ n = fts3PutVarint(c, '\0');
+ n += fts3PutVarint(c+n, nTerm);
dataBufferAppend2(&pWriter->data, c, n, pTerm, nTerm);
}else{
/* Delta-encode the term as:
** varint(nSuffix)
** char pTermSuffix[nSuffix]
*/
- n = putVarint(c, nPrefix);
- n += putVarint(c+n, nTerm-nPrefix);
+ n = fts3PutVarint(c, nPrefix);
+ n += fts3PutVarint(c+n, nTerm-nPrefix);
dataBufferAppend2(&pWriter->data, c, n, pTerm+nPrefix, nTerm-nPrefix);
}
dataBufferReplace(&pWriter->term, pTerm, nTerm);
const char *pTerm, int nTerm,
int iDoclistData){
char c[VARINT_MAX+VARINT_MAX];
- int iData, n = putVarint(c, 0);
- n += putVarint(c+n, nTerm);
+ int iData, n = fts3PutVarint(c, 0);
+ n += fts3PutVarint(c+n, nTerm);
/* There should always be room for the header. Even if pTerm shared
** a substantial prefix with the previous term, the entire prefix
for(i=0, nData=0; i<nReaders; i++){
nData += dlrAllDataBytes(&pReaders[i]);
}
- n = putVarint(c, nData);
+ n = fts3PutVarint(c, nData);
dataBufferAppend(&pWriter->data, c, n);
docListMerge(&pWriter->data, pReaders, nReaders);
** not a big deal, we can just use memmove() to adjust things.
*/
nActualData = pWriter->data.nData-(iDoclistData+n);
- nActual = putVarint(c, nActualData);
+ nActual = fts3PutVarint(c, nActualData);
assert( nActualData<=nData );
assert( nActual<=n );
pWriter->nTermDistinct = nTermDistinct;
/* Rebuild header using the current term */
- n = putVarint(pWriter->data.pData, 0);
- n += putVarint(pWriter->data.pData+n, nTerm);
+ n = fts3PutVarint(pWriter->data.pData, 0);
+ n += fts3PutVarint(pWriter->data.pData+n, nTerm);
memcpy(pWriter->data.pData+n, pTerm, nTerm);
n += nTerm;
static int leafReaderDataBytes(LeafReader *pReader){
int nData;
assert( pReader->term.nData>0 );
- getVarint32(pReader->pData, &nData);
+ fts3GetVarint32(pReader->pData, &nData);
return nData;
}
static const char *leafReaderData(LeafReader *pReader){
int n, nData;
assert( pReader->term.nData>0 );
- n = getVarint32(pReader->pData, &nData);
+ n = fts3GetVarint32(pReader->pData, &nData);
return pReader->pData+n;
}
CLEAR(pReader);
/* Read the first term, skipping the header byte. */
- n = getVarint32(pData+1, &nTerm);
+ n = fts3GetVarint32(pData+1, &nTerm);
dataBufferInit(&pReader->term, nTerm);
dataBufferReplace(&pReader->term, pData+1+n, nTerm);
assert( !leafReaderAtEnd(pReader) );
/* Skip previous entry's data block. */
- n = getVarint32(pReader->pData, &nData);
+ n = fts3GetVarint32(pReader->pData, &nData);
assert( n+nData<=pReader->nData );
pReader->pData += n+nData;
pReader->nData -= n+nData;
/* Construct the new term using a prefix from the old term plus a
** suffix from the leaf data.
*/
- n = getVarint32(pReader->pData, &nPrefix);
- n += getVarint32(pReader->pData+n, &nSuffix);
+ n = fts3GetVarint32(pReader->pData, &nPrefix);
+ n += fts3GetVarint32(pReader->pData+n, &nSuffix);
assert( n+nSuffix<pReader->nData );
pReader->term.nData = nPrefix;
dataBufferAppend(&pReader->term, pReader->pData+n, nSuffix);
fulltext_vtab *v = (fulltext_vtab *) pVtab;
int rc;
- TRACE(("FTS3 Update %p\n", pVtab));
+ FTSTRACE(("FTS3 Update %p\n", pVtab));
if( nArg<2 ){
rc = index_delete(v, sqlite3_value_int64(ppArg[0]));
}
static int fulltextSync(sqlite3_vtab *pVtab){
- TRACE(("FTS3 xSync()\n"));
+ FTSTRACE(("FTS3 xSync()\n"));
return flushPendingTerms((fulltext_vtab *)pVtab);
}
static int fulltextBegin(sqlite3_vtab *pVtab){
fulltext_vtab *v = (fulltext_vtab *) pVtab;
- TRACE(("FTS3 xBegin()\n"));
+ FTSTRACE(("FTS3 xBegin()\n"));
/* Any buffered updates should have been cleared by the previous
** transaction.
static int fulltextCommit(sqlite3_vtab *pVtab){
fulltext_vtab *v = (fulltext_vtab *) pVtab;
- TRACE(("FTS3 xCommit()\n"));
+ FTSTRACE(("FTS3 xCommit()\n"));
/* Buffered updates should have been cleared by fulltextSync(). */
assert( v->nPendingData<0 );
}
static int fulltextRollback(sqlite3_vtab *pVtab){
- TRACE(("FTS3 xRollback()\n"));
+ FTSTRACE(("FTS3 xRollback()\n"));
return clearPendingTerms((fulltext_vtab *)pVtab);
}