| Index: third_party/sqlite/src/ext/fts5/fts5Int.h
|
| diff --git a/third_party/sqlite/src/ext/fts5/fts5Int.h b/third_party/sqlite/src/ext/fts5/fts5Int.h
|
| index 83a71723ff9b78dc5da80b911d121171d4793dc5..9ef338e8215d8a000df9430a7b9aa7dc7d5583aa 100644
|
| --- a/third_party/sqlite/src/ext/fts5/fts5Int.h
|
| +++ b/third_party/sqlite/src/ext/fts5/fts5Int.h
|
| @@ -26,10 +26,11 @@ SQLITE_EXTENSION_INIT1
|
| typedef unsigned char u8;
|
| typedef unsigned int u32;
|
| typedef unsigned short u16;
|
| +typedef short i16;
|
| typedef sqlite3_int64 i64;
|
| typedef sqlite3_uint64 u64;
|
|
|
| -#define ArraySize(x) (sizeof(x) / sizeof(x[0]))
|
| +#define ArraySize(x) ((int)(sizeof(x) / sizeof(x[0])))
|
|
|
| #define testcase(x)
|
| #define ALWAYS(x) 1
|
| @@ -46,6 +47,10 @@ typedef sqlite3_uint64 u64;
|
|
|
| #endif
|
|
|
| +/* Truncate very long tokens to this many bytes. Hard limit is
|
| +** (65536-1-1-4-9)==65521 bytes. The limiting factor is the 16-bit offset
|
| +** field that occurs at the start of each leaf page (see fts5_index.c). */
|
| +#define FTS5_MAX_TOKEN_SIZE 32768
|
|
|
| /*
|
| ** Maximum number of prefix indexes on single FTS5 table. This must be
|
| @@ -80,6 +85,16 @@ extern int sqlite3_fts5_may_be_corrupt;
|
| # define assert_nc(x) assert(x)
|
| #endif
|
|
|
| +/* Mark a function parameter as unused, to suppress nuisance compiler
|
| +** warnings. */
|
| +#ifndef UNUSED_PARAM
|
| +# define UNUSED_PARAM(X) (void)(X)
|
| +#endif
|
| +
|
| +#ifndef UNUSED_PARAM2
|
| +# define UNUSED_PARAM2(X, Y) (void)(X), (void)(Y)
|
| +#endif
|
| +
|
| typedef struct Fts5Global Fts5Global;
|
| typedef struct Fts5Colset Fts5Colset;
|
|
|
| @@ -151,6 +166,7 @@ struct Fts5Config {
|
| char *zContent; /* content table */
|
| char *zContentRowid; /* "content_rowid=" option value */
|
| int bColumnsize; /* "columnsize=" option value (dflt==1) */
|
| + int eDetail; /* FTS5_DETAIL_XXX value */
|
| char *zContentExprlist;
|
| Fts5Tokenizer *pTok;
|
| fts5_tokenizer *pTokApi;
|
| @@ -160,6 +176,7 @@ struct Fts5Config {
|
| int pgsz; /* Approximate page size used in %_data */
|
| int nAutomerge; /* 'automerge' setting */
|
| int nCrisisMerge; /* Maximum allowed segments per level */
|
| + int nUsermerge; /* 'usermerge' setting */
|
| int nHashSize; /* Bytes of memory for in-memory hash */
|
| char *zRank; /* Name of rank function */
|
| char *zRankArgs; /* Arguments to rank function */
|
| @@ -179,6 +196,9 @@ struct Fts5Config {
|
| #define FTS5_CONTENT_NONE 1
|
| #define FTS5_CONTENT_EXTERNAL 2
|
|
|
| +#define FTS5_DETAIL_FULL 0
|
| +#define FTS5_DETAIL_NONE 1
|
| +#define FTS5_DETAIL_COLUMNS 2
|
|
|
|
|
|
|
| @@ -225,9 +245,9 @@ struct Fts5Buffer {
|
| int nSpace;
|
| };
|
|
|
| -int sqlite3Fts5BufferSize(int*, Fts5Buffer*, int);
|
| +int sqlite3Fts5BufferSize(int*, Fts5Buffer*, u32);
|
| void sqlite3Fts5BufferAppendVarint(int*, Fts5Buffer*, i64);
|
| -void sqlite3Fts5BufferAppendBlob(int*, Fts5Buffer*, int, const u8*);
|
| +void sqlite3Fts5BufferAppendBlob(int*, Fts5Buffer*, u32, const u8*);
|
| void sqlite3Fts5BufferAppendString(int *, Fts5Buffer*, const char*);
|
| void sqlite3Fts5BufferFree(Fts5Buffer*);
|
| void sqlite3Fts5BufferZero(Fts5Buffer*);
|
| @@ -243,7 +263,7 @@ char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...);
|
| #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d)
|
|
|
| #define fts5BufferGrow(pRc,pBuf,nn) ( \
|
| - (pBuf)->n + (nn) <= (pBuf)->nSpace ? 0 : \
|
| + (u32)((pBuf)->n) + (u32)(nn) <= (u32)((pBuf)->nSpace) ? 0 : \
|
| sqlite3Fts5BufferSize((pRc),(pBuf),(nn)+(pBuf)->n) \
|
| )
|
|
|
| @@ -278,6 +298,7 @@ struct Fts5PoslistWriter {
|
| i64 iPrev;
|
| };
|
| int sqlite3Fts5PoslistWriterAppend(Fts5Buffer*, Fts5PoslistWriter*, i64);
|
| +void sqlite3Fts5PoslistSafeAppend(Fts5Buffer*, i64*, i64);
|
|
|
| int sqlite3Fts5PoslistNext64(
|
| const u8 *a, int n, /* Buffer containing poslist */
|
| @@ -292,6 +313,13 @@ char *sqlite3Fts5Strndup(int *pRc, const char *pIn, int nIn);
|
| /* Character set tests (like isspace(), isalpha() etc.) */
|
| int sqlite3Fts5IsBareword(char t);
|
|
|
| +
|
| +/* Bucket of terms object used by the integrity-check in offsets=0 mode. */
|
| +typedef struct Fts5Termset Fts5Termset;
|
| +int sqlite3Fts5TermsetNew(Fts5Termset**);
|
| +int sqlite3Fts5TermsetAdd(Fts5Termset*, int, const char*, int, int *pbPresent);
|
| +void sqlite3Fts5TermsetFree(Fts5Termset*);
|
| +
|
| /*
|
| ** End of interface to code in fts5_buffer.c.
|
| **************************************************************************/
|
| @@ -304,6 +332,15 @@ int sqlite3Fts5IsBareword(char t);
|
| typedef struct Fts5Index Fts5Index;
|
| typedef struct Fts5IndexIter Fts5IndexIter;
|
|
|
| +struct Fts5IndexIter {
|
| + i64 iRowid;
|
| + const u8 *pData;
|
| + int nData;
|
| + u8 bEof;
|
| +};
|
| +
|
| +#define sqlite3Fts5IterEof(x) ((x)->bEof)
|
| +
|
| /*
|
| ** Values used as part of the flags argument passed to IndexQuery().
|
| */
|
| @@ -312,6 +349,12 @@ typedef struct Fts5IndexIter Fts5IndexIter;
|
| #define FTS5INDEX_QUERY_TEST_NOIDX 0x0004 /* Do not use prefix index */
|
| #define FTS5INDEX_QUERY_SCAN 0x0008 /* Scan query (fts5vocab) */
|
|
|
| +/* The following are used internally by the fts5_index.c module. They are
|
| +** defined here only to make it easier to avoid clashes with the flags
|
| +** above. */
|
| +#define FTS5INDEX_QUERY_SKIPEMPTY 0x0010
|
| +#define FTS5INDEX_QUERY_NOOUTPUT 0x0020
|
| +
|
| /*
|
| ** Create/destroy an Fts5Index object.
|
| */
|
| @@ -319,14 +362,27 @@ int sqlite3Fts5IndexOpen(Fts5Config *pConfig, int bCreate, Fts5Index**, char**);
|
| int sqlite3Fts5IndexClose(Fts5Index *p);
|
|
|
| /*
|
| -** for(
|
| -** sqlite3Fts5IndexQuery(p, "token", 5, 0, 0, &pIter);
|
| -** 0==sqlite3Fts5IterEof(pIter);
|
| -** sqlite3Fts5IterNext(pIter)
|
| -** ){
|
| -** i64 iRowid = sqlite3Fts5IterRowid(pIter);
|
| -** }
|
| +** Return a simple checksum value based on the arguments.
|
| */
|
| +u64 sqlite3Fts5IndexEntryCksum(
|
| + i64 iRowid,
|
| + int iCol,
|
| + int iPos,
|
| + int iIdx,
|
| + const char *pTerm,
|
| + int nTerm
|
| +);
|
| +
|
| +/*
|
| +** Argument p points to a buffer containing utf-8 text that is n bytes in
|
| +** size. Return the number of bytes in the nChar character prefix of the
|
| +** buffer, or 0 if there are less than nChar characters in total.
|
| +*/
|
| +int sqlite3Fts5IndexCharlenToBytelen(
|
| + const char *p,
|
| + int nByte,
|
| + int nChar
|
| +);
|
|
|
| /*
|
| ** Open a new iterator to iterate though all rowids that match the
|
| @@ -344,12 +400,8 @@ int sqlite3Fts5IndexQuery(
|
| ** The various operations on open token or token prefix iterators opened
|
| ** using sqlite3Fts5IndexQuery().
|
| */
|
| -int sqlite3Fts5IterEof(Fts5IndexIter*);
|
| int sqlite3Fts5IterNext(Fts5IndexIter*);
|
| int sqlite3Fts5IterNextFrom(Fts5IndexIter*, i64 iMatch);
|
| -i64 sqlite3Fts5IterRowid(Fts5IndexIter*);
|
| -int sqlite3Fts5IterPoslist(Fts5IndexIter*,Fts5Colset*, const u8**, int*, i64*);
|
| -int sqlite3Fts5IterPoslistBuffer(Fts5IndexIter *pIter, Fts5Buffer *pBuf);
|
|
|
| /*
|
| ** Close an iterator opened by sqlite3Fts5IndexQuery().
|
| @@ -413,7 +465,6 @@ int sqlite3Fts5IndexSetAverages(Fts5Index *p, const u8*, int);
|
| /*
|
| ** Functions called by the storage module as part of integrity-check.
|
| */
|
| -u64 sqlite3Fts5IndexCksum(Fts5Config*,i64,int,int,const char*,int);
|
| int sqlite3Fts5IndexIntegrityCheck(Fts5Index*, u64 cksum);
|
|
|
| /*
|
| @@ -433,6 +484,7 @@ int sqlite3Fts5IndexReads(Fts5Index *p);
|
| int sqlite3Fts5IndexReinit(Fts5Index *p);
|
| int sqlite3Fts5IndexOptimize(Fts5Index *p);
|
| int sqlite3Fts5IndexMerge(Fts5Index *p, int nMerge);
|
| +int sqlite3Fts5IndexReset(Fts5Index *p);
|
|
|
| int sqlite3Fts5IndexLoadConfig(Fts5Index *p);
|
|
|
| @@ -492,7 +544,7 @@ typedef struct Fts5Hash Fts5Hash;
|
| /*
|
| ** Create a hash table, free a hash table.
|
| */
|
| -int sqlite3Fts5HashNew(Fts5Hash**, int *pnSize);
|
| +int sqlite3Fts5HashNew(Fts5Config*, Fts5Hash**, int *pnSize);
|
| void sqlite3Fts5HashFree(Fts5Hash*);
|
|
|
| int sqlite3Fts5HashWrite(
|
| @@ -551,7 +603,7 @@ int sqlite3Fts5StorageRename(Fts5Storage*, const char *zName);
|
| int sqlite3Fts5DropAll(Fts5Config*);
|
| int sqlite3Fts5CreateTable(Fts5Config*, const char*, const char*, int, char **);
|
|
|
| -int sqlite3Fts5StorageDelete(Fts5Storage *p, i64);
|
| +int sqlite3Fts5StorageDelete(Fts5Storage *p, i64, sqlite3_value**);
|
| int sqlite3Fts5StorageContentInsert(Fts5Storage *p, sqlite3_value**, i64*);
|
| int sqlite3Fts5StorageIndexInsert(Fts5Storage *p, sqlite3_value**, i64);
|
|
|
| @@ -571,12 +623,11 @@ int sqlite3Fts5StorageConfigValue(
|
| Fts5Storage *p, const char*, sqlite3_value*, int
|
| );
|
|
|
| -int sqlite3Fts5StorageSpecialDelete(Fts5Storage *p, i64 iDel, sqlite3_value**);
|
| -
|
| int sqlite3Fts5StorageDeleteAll(Fts5Storage *p);
|
| int sqlite3Fts5StorageRebuild(Fts5Storage *p);
|
| int sqlite3Fts5StorageOptimize(Fts5Storage *p);
|
| int sqlite3Fts5StorageMerge(Fts5Storage *p, int nMerge);
|
| +int sqlite3Fts5StorageReset(Fts5Storage *p);
|
|
|
| /*
|
| ** End of interface to code in fts5_storage.c.
|
| @@ -629,7 +680,16 @@ int sqlite3Fts5ExprPhraseCount(Fts5Expr*);
|
| int sqlite3Fts5ExprPhraseSize(Fts5Expr*, int iPhrase);
|
| int sqlite3Fts5ExprPoslist(Fts5Expr*, int, const u8 **);
|
|
|
| -int sqlite3Fts5ExprClonePhrase(Fts5Config*, Fts5Expr*, int, Fts5Expr**);
|
| +typedef struct Fts5PoslistPopulator Fts5PoslistPopulator;
|
| +Fts5PoslistPopulator *sqlite3Fts5ExprClearPoslists(Fts5Expr*, int);
|
| +int sqlite3Fts5ExprPopulatePoslists(
|
| + Fts5Config*, Fts5Expr*, Fts5PoslistPopulator*, int, const char*, int
|
| +);
|
| +void sqlite3Fts5ExprCheckPoslists(Fts5Expr*, i64);
|
| +
|
| +int sqlite3Fts5ExprClonePhrase(Fts5Expr*, int, Fts5Expr**);
|
| +
|
| +int sqlite3Fts5ExprPhraseCollist(Fts5Expr *, int, const u8 **, int *);
|
|
|
| /*******************************************
|
| ** The fts5_expr.c API above this point is used by the other hand-written
|
| @@ -646,6 +706,12 @@ Fts5ExprNode *sqlite3Fts5ParseNode(
|
| Fts5ExprNearset *pNear
|
| );
|
|
|
| +Fts5ExprNode *sqlite3Fts5ParseImplicitAnd(
|
| + Fts5Parse *pParse,
|
| + Fts5ExprNode *pLeft,
|
| + Fts5ExprNode *pRight
|
| +);
|
| +
|
| Fts5ExprPhrase *sqlite3Fts5ParseTerm(
|
| Fts5Parse *pParse,
|
| Fts5ExprPhrase *pPhrase,
|
| @@ -671,6 +737,7 @@ void sqlite3Fts5ParseNodeFree(Fts5ExprNode*);
|
|
|
| void sqlite3Fts5ParseSetDistance(Fts5Parse*, Fts5ExprNearset*, Fts5Token*);
|
| void sqlite3Fts5ParseSetColset(Fts5Parse*, Fts5ExprNearset*, Fts5Colset*);
|
| +Fts5Colset *sqlite3Fts5ParseColsetInvert(Fts5Parse*, Fts5Colset*);
|
| void sqlite3Fts5ParseFinished(Fts5Parse *pParse, Fts5ExprNode *p);
|
| void sqlite3Fts5ParseNear(Fts5Parse *pParse, Fts5Token*);
|
|
|
|
|