Fix various compiler warnings and other problems with the new code on this branch.
FossilOrigin-Name: 3a623cfa173b4035c759cb84985d11d8727053beb383648503987d6ab15c0ef0
This commit is contained in:
+1
-1
@@ -281,7 +281,7 @@ struct Fts5PhraseIter {
|
||||
** includes any embedded 0x00 and trailing data.
|
||||
**
|
||||
** This API can be quite slow if used with an FTS5 table created with the
|
||||
** "detail=none" or "detail=column" option.
|
||||
** "detail=none" or "detail=column" option.
|
||||
*/
|
||||
struct Fts5ExtensionApi {
|
||||
int iVersion; /* Currently always set to 3 */
|
||||
|
||||
+3
-2
@@ -467,7 +467,7 @@ void sqlite3Fts5StructureRelease(void*);
|
||||
int sqlite3Fts5StructureTest(Fts5Index*, void*);
|
||||
|
||||
/*
|
||||
** Used by xInstToken() and xPhraseToken().
|
||||
** Used by xInstToken():
|
||||
*/
|
||||
int sqlite3Fts5IterToken(Fts5IndexIter*, i64, int, int, const char**, int*);
|
||||
|
||||
@@ -547,8 +547,9 @@ int sqlite3Fts5IndexLoadConfig(Fts5Index *p);
|
||||
int sqlite3Fts5IndexGetOrigin(Fts5Index *p, i64 *piOrigin);
|
||||
int sqlite3Fts5IndexContentlessDelete(Fts5Index *p, i64 iOrigin, i64 iRowid);
|
||||
|
||||
/* Used to populate hash tables for xInstToken in detail=none/column mode. */
|
||||
void sqlite3Fts5IndexIterClearTokendata(Fts5IndexIter*);
|
||||
|
||||
/* Used to populate hash tables for xInstToken in detail=none/column mode. */
|
||||
int sqlite3Fts5IndexIterWriteTokendata(
|
||||
Fts5IndexIter*, const char*, int, i64 iRowid, int iCol, int iOff
|
||||
);
|
||||
|
||||
@@ -2985,6 +2985,11 @@ static int fts5ExprColsetTest(Fts5Colset *pColset, int iCol){
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** pToken is a buffer nToken bytes in size that may or may not contain
|
||||
** an embedded 0x00 byte. If it does, return the number of bytes in
|
||||
** the buffer before the 0x00. If it does not, return nToken.
|
||||
*/
|
||||
static int fts5QueryTerm(const char *pToken, int nToken){
|
||||
int ii;
|
||||
for(ii=0; ii<nToken && pToken[ii]; ii++){}
|
||||
@@ -3189,6 +3194,9 @@ int sqlite3Fts5ExprQueryToken(
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** Does the work of the fts5_api.xInstToken() API method.
|
||||
*/
|
||||
int sqlite3Fts5ExprInstToken(
|
||||
Fts5Expr *pExpr,
|
||||
int iPhrase,
|
||||
|
||||
+80
-12
@@ -324,6 +324,7 @@ typedef struct Fts5Structure Fts5Structure;
|
||||
typedef struct Fts5StructureLevel Fts5StructureLevel;
|
||||
typedef struct Fts5StructureSegment Fts5StructureSegment;
|
||||
typedef struct Fts5TokenDataIter Fts5TokenDataIter;
|
||||
typedef struct Fts5TokenDataMap Fts5TokenDataMap;
|
||||
typedef struct Fts5TombstoneArray Fts5TombstoneArray;
|
||||
|
||||
struct Fts5Data {
|
||||
@@ -548,6 +549,9 @@ struct Fts5SegIter {
|
||||
u8 bDel; /* True if the delete flag is set */
|
||||
};
|
||||
|
||||
/*
|
||||
** Array of tombstone pages. Reference counted.
|
||||
*/
|
||||
struct Fts5TombstoneArray {
|
||||
int nRef; /* Number of pointers to this object */
|
||||
int nTombstone;
|
||||
@@ -1923,9 +1927,9 @@ static void fts5SegIterSetNext(Fts5Index *p, Fts5SegIter *pIter){
|
||||
}
|
||||
|
||||
/*
|
||||
** Allocate a tombstone hash page array (pIter->apTombstone) for the
|
||||
** iterator passed as the second argument. If an OOM error occurs, leave
|
||||
** an error in the Fts5Index object.
|
||||
** Allocate a tombstone hash page array object (pIter->pTombArray) for
|
||||
** the iterator passed as the second argument. If an OOM error occurs,
|
||||
** leave an error in the Fts5Index object.
|
||||
*/
|
||||
static void fts5SegIterAllocTombstone(Fts5Index *p, Fts5SegIter *pIter){
|
||||
const int nTomb = pIter->pSeg->nPgTombstone;
|
||||
@@ -2748,6 +2752,7 @@ static void fts5SegIterNextInit(
|
||||
bDlidx = (val & 0x0001);
|
||||
}
|
||||
p->rc = sqlite3_reset(pSel);
|
||||
sqlite3_bind_null(pSel, 2);
|
||||
if( p->rc ) return;
|
||||
}
|
||||
|
||||
@@ -2772,7 +2777,7 @@ static void fts5SegIterNextInit(
|
||||
if( bDlidx ) fts5SegIterLoadDlidx(p, pIter);
|
||||
|
||||
assert( p->rc!=SQLITE_OK ||
|
||||
fts5BufferCompareBlob(&pIter->term, pTerm, nTerm)>0
|
||||
fts5BufferCompareBlob(&pIter->term, (const u8*)pTerm, nTerm)>0
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2862,6 +2867,10 @@ static void fts5IndexFreeArray(Fts5Data **ap, int n){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Decrement the ref-count of the object passed as the only argument. If it
|
||||
** reaches 0, free it and its contents.
|
||||
*/
|
||||
static void fts5TombstoneArrayDelete(Fts5TombstoneArray *p){
|
||||
if( p ){
|
||||
p->nRef--;
|
||||
@@ -3828,6 +3837,10 @@ static void fts5IterSetOutputCb(int *pRc, Fts5Iter *pIter){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** All the component segment-iterators of pIter have been set up. This
|
||||
** functions finishes setup for iterator pIter itself.
|
||||
*/
|
||||
static void fts5MultiIterFinishSetup(Fts5Index *p, Fts5Iter *pIter){
|
||||
int iIter;
|
||||
for(iIter=pIter->nSeg-1; iIter>0; iIter--){
|
||||
@@ -6566,13 +6579,25 @@ static void fts5SegIterSetEOF(Fts5SegIter *pSeg){
|
||||
pSeg->pLeaf = 0;
|
||||
}
|
||||
|
||||
typedef struct Fts5TokenDataMap Fts5TokenDataMap;
|
||||
/*
|
||||
** Usually, a tokendata=1 iterator (struct Fts5TokenDataIter) accumulates an
|
||||
** array of these for each row it visits. Or, for an iterator used by an
|
||||
** "ORDER BY rank" query, it accumulates an array of these for the entire
|
||||
** query.
|
||||
**
|
||||
** Each instance in the array indicates the iterator (and therefore term)
|
||||
** associated with position iPos of rowid iRowid. This is used by the
|
||||
** xInstToken() API.
|
||||
*/
|
||||
struct Fts5TokenDataMap {
|
||||
i64 iRowid;
|
||||
i64 iPos;
|
||||
int iIter;
|
||||
i64 iRowid; /* Row this token is located in */
|
||||
i64 iPos; /* Position of token */
|
||||
int iIter; /* Iterator token was read from */
|
||||
};
|
||||
|
||||
/*
|
||||
** An object used to supplement Fts5Iter for tokendata=1 iterators.
|
||||
*/
|
||||
struct Fts5TokenDataIter {
|
||||
int nIter;
|
||||
int nIterAlloc;
|
||||
@@ -6585,10 +6610,14 @@ struct Fts5TokenDataIter {
|
||||
Fts5Iter *apIter[1];
|
||||
};
|
||||
|
||||
/*
|
||||
** This function appends iterator pAppend to Fts5TokenDataIter pIn and
|
||||
** returns the result.
|
||||
*/
|
||||
static Fts5TokenDataIter *fts5AppendTokendataIter(
|
||||
Fts5Index *p,
|
||||
Fts5TokenDataIter *pIn,
|
||||
Fts5Iter *pAppend
|
||||
Fts5Index *p, /* Index object (for error code) */
|
||||
Fts5TokenDataIter *pIn, /* Current Fts5TokenDataIter struct */
|
||||
Fts5Iter *pAppend /* Append this iterator */
|
||||
){
|
||||
Fts5TokenDataIter *pRet = pIn;
|
||||
|
||||
@@ -6617,6 +6646,9 @@ static Fts5TokenDataIter *fts5AppendTokendataIter(
|
||||
return pRet;
|
||||
}
|
||||
|
||||
/*
|
||||
** Delete an Fts5TokenDataIter structure and its contents.
|
||||
*/
|
||||
static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){
|
||||
if( pSet ){
|
||||
int ii;
|
||||
@@ -6629,6 +6661,13 @@ static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** The iterator passed as the first argument must be a tokendata=1 iterator
|
||||
** (pIter->pTokenDataIter!=0). This function is used to access the token
|
||||
** instance located at offset iOff of column iCol of row iRowid. It is
|
||||
** returned via output pointers *ppOut and *pnOut. This is used by the
|
||||
** xInstToken() API.
|
||||
*/
|
||||
static int fts5TokendataIterToken(
|
||||
Fts5Iter *pIter,
|
||||
i64 iRowid,
|
||||
@@ -6673,6 +6712,9 @@ static int fts5TokendataIterToken(
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** Append a mapping to the token-map belonging to object pT.
|
||||
*/
|
||||
static void fts5TokendataIterAppendMap(
|
||||
Fts5Index *p,
|
||||
Fts5TokenDataIter *pT,
|
||||
@@ -6703,6 +6745,12 @@ static void fts5TokendataIterAppendMap(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** The iterator passed as the only argument must be a tokendata=1 iterator
|
||||
** (pIter->pTokenDataIter!=0). This function sets the iterator output
|
||||
** variables (pIter->base.*) according to the contents of the current
|
||||
** row.
|
||||
*/
|
||||
static void fts5IterSetOutputsTokendata(Fts5Iter *pIter){
|
||||
int ii;
|
||||
int nHit = 0;
|
||||
@@ -6819,6 +6867,13 @@ static void fts5IterSetOutputsTokendata(Fts5Iter *pIter){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** The iterator passed as the only argument must be a tokendata=1 iterator
|
||||
** (pIter->pTokenDataIter!=0). This function advances the iterator. If
|
||||
** argument bFrom is false, then the iterator is advanced to the next
|
||||
** entry. Or, if bFrom is true, it is advanced to the first entry with
|
||||
** a rowid of iFrom or greater.
|
||||
*/
|
||||
static void fts5TokendataIterNext(Fts5Iter *pIter, int bFrom, i64 iFrom){
|
||||
int ii;
|
||||
Fts5TokenDataIter *pT = pIter->pTokenDataIter;
|
||||
@@ -6841,6 +6896,10 @@ static void fts5TokendataIterNext(Fts5Iter *pIter, int bFrom, i64 iFrom){
|
||||
fts5IterSetOutputsTokendata(pIter);
|
||||
}
|
||||
|
||||
/*
|
||||
** If the segment-iterator passed as the first argument is at EOF, then
|
||||
** set pIter->term to a copy of buffer pTerm.
|
||||
*/
|
||||
static void fts5TokendataSetTermIfEof(Fts5Iter *pIter, Fts5Buffer *pTerm){
|
||||
if( pIter && pIter->aSeg[0].pLeaf==0 ){
|
||||
fts5BufferSet(&pIter->pIndex->rc, &pIter->aSeg[0].term, pTerm->n, pTerm->p);
|
||||
@@ -7144,7 +7203,9 @@ const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){
|
||||
}
|
||||
|
||||
/*
|
||||
**
|
||||
** This is used by xInstToken() to access the token at offset iOff, column
|
||||
** iCol of row iRowid. The token is returned via output variables *ppOut
|
||||
** and *pnOut.
|
||||
*/
|
||||
int sqlite3Fts5IterToken(
|
||||
Fts5IndexIter *pIndexIter,
|
||||
@@ -7173,6 +7234,13 @@ void sqlite3Fts5IndexIterClearTokendata(Fts5IndexIter *pIndexIter){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Set a token-mapping for the iterator passed as the first argument. This
|
||||
** is used in detail=column or detail=none mode when a token is requested
|
||||
** using the xInstToken() API. In this case the caller tokenizers the
|
||||
** current row and configures the token-mapping via multiple calls to this
|
||||
** function.
|
||||
*/
|
||||
int sqlite3Fts5IndexIterWriteTokendata(
|
||||
Fts5IndexIter *pIndexIter,
|
||||
const char *pToken, int nToken,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
C When\stokendata=1\squeries\srequire\smultiple\ssegment-cursors,\sallow\sthose\scursors\sto\sshare\sa\ssingle\sarray\sof\sin-memory\stombstone\spages.
|
||||
D 2023-12-02T18:14:07.393
|
||||
C Fix\svarious\scompiler\swarnings\sand\sother\sproblems\swith\sthe\snew\scode\son\sthis\sbranch.
|
||||
D 2023-12-02T20:35:04.768
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@@ -89,14 +89,14 @@ F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7
|
||||
F ext/fts3/unicode/mkunicode.tcl d5aebf022fa4577ee8cdf27468f0d847879993959101f6dbd6348ef0cfc324a7
|
||||
F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb
|
||||
F ext/fts5/extract_api_docs.tcl a36e54ec777172ddd3f9a88daf593b00848368e0
|
||||
F ext/fts5/fts5.h 5e5630fc81e212f658afaa5b2650dac939d2729d0723aef1eeaff908f1725648
|
||||
F ext/fts5/fts5Int.h 285118aa6dfccb382e84eaeb9f7bec334e4f7104efa9303240605447003445c9
|
||||
F ext/fts5/fts5.h ff90acaa97f8e865b66d1177d1b56b8c110fd5548ab5863bab43f055a1d745fe
|
||||
F ext/fts5/fts5Int.h 1fdbf3d16bdd481fe2ee99927919e4c3db835efae00f8efd7efb5e6a93277459
|
||||
F ext/fts5/fts5_aux.c ee770eec0af8646db9e18fc01a0dad7345b5f5e8cbba236704cfae2d777022ad
|
||||
F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b729225eeaf6a5
|
||||
F ext/fts5/fts5_config.c 8072a207034b51ae9b7694121d1b5715c794e94b275e088f70ae532378ca5cdf
|
||||
F ext/fts5/fts5_expr.c f83259b52b7b3e76768b835fe155cb7e345affdfafb96574372b4127d5f5496a
|
||||
F ext/fts5/fts5_expr.c 5619c3fab45a78eb5ed3021e3b40ec3b435ef3669293e8700354aa8dd3e6c796
|
||||
F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1
|
||||
F ext/fts5/fts5_index.c 21f8f449666ac44c12d5051e153ad84a886a729cb2f5d6ad02a113095c3f8ec6
|
||||
F ext/fts5/fts5_index.c b31bf4f0fb51a15cc1aa54c2f337197740f4f8898347266781ca6970ca751302
|
||||
F ext/fts5/fts5_main.c 075995302198fe6f591fdbbedd415dfac564a9bfc20aea81e6fa0503b2d94af0
|
||||
F ext/fts5/fts5_storage.c 5d10b9bdcce5b90656cad13c7d12ad4148677d4b9e3fca0481fca56d6601426d
|
||||
F ext/fts5/fts5_tcl.c cf0fd0dbe64ec272491b749e0d594f563cda03336aeb60900129e6d18b0aefb8
|
||||
@@ -2149,8 +2149,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 7bda09ab404a110d57449e149a3281fca8dc4cacf7bd9832ea2a1356ad20fe8e
|
||||
R 1ce6343b4aa590c869e9b9aa51095415
|
||||
P e0175d07e4094db5ea4b0378a5ff480dafb6ba9da86a113fa767c4c89c3c866f
|
||||
R a72f98879c56fe0b2489dc56b6289649
|
||||
U dan
|
||||
Z 8664660cde606ab1a6fdc20b18622c4a
|
||||
Z 6a8664529c8f348c40cce12fb229aa10
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
e0175d07e4094db5ea4b0378a5ff480dafb6ba9da86a113fa767c4c89c3c866f
|
||||
3a623cfa173b4035c759cb84985d11d8727053beb383648503987d6ab15c0ef0
|
||||
Reference in New Issue
Block a user