| Index: third_party/sqlite/src/ext/fts5/fts5.h
|
| diff --git a/third_party/sqlite/src/ext/fts5/fts5.h b/third_party/sqlite/src/ext/fts5/fts5.h
|
| index 5f528af7933fce0bfc527ac55e9548b63d447a15..a45c145d38b9ca86cd515c07f439e3c7f32a4eeb 100644
|
| --- a/third_party/sqlite/src/ext/fts5/fts5.h
|
| +++ b/third_party/sqlite/src/ext/fts5/fts5.h
|
| @@ -84,6 +84,9 @@ struct Fts5PhraseIter {
|
| ** an OOM condition or IO error), an appropriate SQLite error code is
|
| ** returned.
|
| **
|
| +** This function may be quite inefficient if used with an FTS5 table
|
| +** created with the "columnsize=0" option.
|
| +**
|
| ** xColumnText:
|
| ** This function attempts to retrieve the text of column iCol of the
|
| ** current document. If successful, (*pz) is set to point to a buffer
|
| @@ -104,15 +107,29 @@ struct Fts5PhraseIter {
|
| ** the query within the current row. Return SQLITE_OK if successful, or
|
| ** an error code (i.e. SQLITE_NOMEM) if an error occurs.
|
| **
|
| +** This API can be quite slow if used with an FTS5 table created with the
|
| +** "detail=none" or "detail=column" option. If the FTS5 table is created
|
| +** with either "detail=none" or "detail=column" and "content=" option
|
| +** (i.e. if it is a contentless table), then this API always returns 0.
|
| +**
|
| ** xInst:
|
| ** Query for the details of phrase match iIdx within the current row.
|
| ** Phrase matches are numbered starting from zero, so the iIdx argument
|
| ** should be greater than or equal to zero and smaller than the value
|
| ** output by xInstCount().
|
| **
|
| +** Usually, output parameter *piPhrase is set to the phrase number, *piCol
|
| +** to the column in which it occurs and *piOff the token offset of the
|
| +** first token of the phrase. The exception is if the table was created
|
| +** with the offsets=0 option specified. In this case *piOff is always
|
| +** set to -1.
|
| +**
|
| ** Returns SQLITE_OK if successful, or an error code (i.e. SQLITE_NOMEM)
|
| ** if an error occurs.
|
| **
|
| +** This API can be quite slow if used with an FTS5 table created with the
|
| +** "detail=none" or "detail=column" option.
|
| +**
|
| ** xRowid:
|
| ** Returns the rowid of the current row.
|
| **
|
| @@ -126,11 +143,13 @@ struct Fts5PhraseIter {
|
| ** ... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid
|
| **
|
| ** with $p set to a phrase equivalent to the phrase iPhrase of the
|
| -** current query is executed. For each row visited, the callback function
|
| -** passed as the fourth argument is invoked. The context and API objects
|
| -** passed to the callback function may be used to access the properties of
|
| -** each matched row. Invoking Api.xUserData() returns a copy of the pointer
|
| -** passed as the third argument to pUserData.
|
| +** current query is executed. Any column filter that applies to
|
| +** phrase iPhrase of the current query is included in $p. For each
|
| +** row visited, the callback function passed as the fourth argument
|
| +** is invoked. The context and API objects passed to the callback
|
| +** function may be used to access the properties of each matched row.
|
| +** Invoking Api.xUserData() returns a copy of the pointer passed as
|
| +** the third argument to pUserData.
|
| **
|
| ** If the callback function returns any value other than SQLITE_OK, the
|
| ** query is abandoned and the xQueryPhrase function returns immediately.
|
| @@ -196,7 +215,7 @@ struct Fts5PhraseIter {
|
| ** Fts5PhraseIter iter;
|
| ** int iCol, iOff;
|
| ** for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff);
|
| -** iOff>=0;
|
| +** iCol>=0;
|
| ** pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
|
| ** ){
|
| ** // An instance of phrase iPhrase at offset iOff of column iCol
|
| @@ -204,13 +223,51 @@ struct Fts5PhraseIter {
|
| **
|
| ** The Fts5PhraseIter structure is defined above. Applications should not
|
| ** modify this structure directly - it should only be used as shown above
|
| -** with the xPhraseFirst() and xPhraseNext() API methods.
|
| +** with the xPhraseFirst() and xPhraseNext() API methods (and by
|
| +** xPhraseFirstColumn() and xPhraseNextColumn() as illustrated below).
|
| +**
|
| +** This API can be quite slow if used with an FTS5 table created with the
|
| +** "detail=none" or "detail=column" option. If the FTS5 table is created
|
| +** with either "detail=none" or "detail=column" and "content=" option
|
| +** (i.e. if it is a contentless table), then this API always iterates
|
| +** through an empty set (all calls to xPhraseFirst() set iCol to -1).
|
| **
|
| ** xPhraseNext()
|
| ** See xPhraseFirst above.
|
| +**
|
| +** xPhraseFirstColumn()
|
| +** This function and xPhraseNextColumn() are similar to the xPhraseFirst()
|
| +** and xPhraseNext() APIs described above. The difference is that instead
|
| +** of iterating through all instances of a phrase in the current row, these
|
| +** APIs are used to iterate through the set of columns in the current row
|
| +** that contain one or more instances of a specified phrase. For example:
|
| +**
|
| +** Fts5PhraseIter iter;
|
| +** int iCol;
|
| +** for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol);
|
| +** iCol>=0;
|
| +** pApi->xPhraseNextColumn(pFts, &iter, &iCol)
|
| +** ){
|
| +** // Column iCol contains at least one instance of phrase iPhrase
|
| +** }
|
| +**
|
| +** This API can be quite slow if used with an FTS5 table created with the
|
| +** "detail=none" option. If the FTS5 table is created with either
|
| +** "detail=none" "content=" option (i.e. if it is a contentless table),
|
| +** then this API always iterates through an empty set (all calls to
|
| +** xPhraseFirstColumn() set iCol to -1).
|
| +**
|
| +** The information accessed using this API and its companion
|
| +** xPhraseFirstColumn() may also be obtained using xPhraseFirst/xPhraseNext
|
| +** (or xInst/xInstCount). The chief advantage of this API is that it is
|
| +** significantly more efficient than those alternatives when used with
|
| +** "detail=column" tables.
|
| +**
|
| +** xPhraseNextColumn()
|
| +** See xPhraseFirstColumn above.
|
| */
|
| struct Fts5ExtensionApi {
|
| - int iVersion; /* Currently always set to 1 */
|
| + int iVersion; /* Currently always set to 3 */
|
|
|
| void *(*xUserData)(Fts5Context*);
|
|
|
| @@ -240,8 +297,11 @@ struct Fts5ExtensionApi {
|
| int (*xSetAuxdata)(Fts5Context*, void *pAux, void(*xDelete)(void*));
|
| void *(*xGetAuxdata)(Fts5Context*, int bClear);
|
|
|
| - void (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*);
|
| + int (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*);
|
| void (*xPhraseNext)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff);
|
| +
|
| + int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*);
|
| + void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol);
|
| };
|
|
|
| /*
|
| @@ -258,7 +318,7 @@ struct Fts5ExtensionApi {
|
| ** behaviour. The structure methods are expected to function as follows:
|
| **
|
| ** xCreate:
|
| -** This function is used to allocate and inititalize a tokenizer instance.
|
| +** This function is used to allocate and initialize a tokenizer instance.
|
| ** A tokenizer instance is required to actually tokenize text.
|
| **
|
| ** The first argument passed to this function is a copy of the (void*)
|
| @@ -517,4 +577,3 @@ struct fts5_api {
|
| #endif
|
|
|
| #endif /* _FTS5_H */
|
| -
|
|
|