diff --git a/Makefile.msc b/Makefile.msc index 70c16b11c3..c17b89d526 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -827,6 +827,7 @@ LIBOBJS0 = vdbe.lo parse.lo alter.lo analyze.lo attach.lo auth.lo \ fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo \ fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo \ fts3_tokenize_vtab.lo fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \ + fts5.lo \ func.lo global.lo hash.lo \ icu.lo insert.lo journal.lo legacy.lo loadext.lo \ main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \ @@ -1078,6 +1079,8 @@ TESTEXT = \ $(TOP)\ext\misc\eval.c \ $(TOP)\ext\misc\fileio.c \ $(TOP)\ext\misc\fuzzer.c \ + fts5.c \ + $(TOP)\ext\fts5\fts5_tcl.c \ $(TOP)\ext\misc\ieee754.c \ $(TOP)\ext\misc\nextchar.c \ $(TOP)\ext\misc\percentile.c \ @@ -1653,6 +1656,47 @@ fts3_write.lo: $(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR) rtree.lo: $(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR) $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c +# FTS5 things +# +FTS5_SRC = \ + $(TOP)\ext\fts5\fts5.h \ + $(TOP)\ext\fts5\fts5Int.h \ + $(TOP)\ext\fts5\fts5_aux.c \ + $(TOP)\ext\fts5\fts5_buffer.c \ + $(TOP)\ext\fts5\fts5_main.c \ + $(TOP)\ext\fts5\fts5_config.c \ + $(TOP)\ext\fts5\fts5_expr.c \ + $(TOP)\ext\fts5\fts5_hash.c \ + $(TOP)\ext\fts5\fts5_index.c \ + fts5parse.c fts5parse.h \ + $(TOP)\ext\fts5\fts5_storage.c \ + $(TOP)\ext\fts5\fts5_tokenize.c \ + $(TOP)\ext\fts5\fts5_unicode2.c \ + $(TOP)\ext\fts5\fts5_varint.c \ + $(TOP)\ext\fts5\fts5_vocab.c + +fts5parse.c: $(TOP)\ext\fts5\fts5parse.y lemon.exe + copy $(TOP)\ext\fts5\fts5parse.y . + del /Q fts5parse.h 2>NUL + .\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(OPTS) fts5parse.y + move fts5parse.c fts5parse.c.orig + echo #ifdef SQLITE_ENABLE_FTS5 > $@ + type fts5parse.c.orig \ + | $(NAWK) "/.*/ { gsub(/yy/,\"fts5yy\");print }" \ + | $(NAWK) "/.*/ { gsub(/YY/,\"fts5YY\");print }" \ + | $(NAWK) "/.*/ { gsub(/TOKEN/,\"FTS5TOKEN\");print }" >> $@ + echo #endif /* SQLITE_ENABLE_FTS5 */ >> $@ + +fts5parse.h: fts5parse.c + +fts5.c: $(FTS5_SRC) + $(TCLSH_CMD) $(TOP)\ext\fts5\tool\mkfts5c.tcl + +fts5.lo: fts5.c $(HDR) $(EXTHDR) + $(LTCOMPILE) $(NO_WARN) -DSQLITE_ENABLE_FTS5 -c fts5.c + +fts5.dll: fts5.lo + $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ fts5.lo # Rules to build the 'testfixture' application. # @@ -1792,6 +1836,7 @@ clean: del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL del /Q sqlite-*-output.vsix 2>NUL del /Q fuzzershell.exe fuzzcheck.exe sqldiff.exe 2>NUL + del /Q fts5.c fts5parse.* 2>NUL # Dynamic link library section. # diff --git a/ext/fts5/fts5Int.h b/ext/fts5/fts5Int.h index 07d1e4fecb..7b8066ef34 100644 --- a/ext/fts5/fts5Int.h +++ b/ext/fts5/fts5Int.h @@ -204,7 +204,7 @@ void sqlite3Fts5BufferSet(int*, Fts5Buffer*, int, const u8*); void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...); void sqlite3Fts5BufferAppend32(int*, Fts5Buffer*, int); -char *sqlite3Fts5Mprintf(int *pRc, char *zFmt, ...); +char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...); #define fts5BufferZero(x) sqlite3Fts5BufferZero(x) #define fts5BufferGrow(a,b,c) sqlite3Fts5BufferGrow(a,b,c) diff --git a/ext/fts5/fts5_buffer.c b/ext/fts5/fts5_buffer.c index b900ada744..33e648a931 100644 --- a/ext/fts5/fts5_buffer.c +++ b/ext/fts5/fts5_buffer.c @@ -125,7 +125,7 @@ void sqlite3Fts5BufferAppendPrintf( } } -char *sqlite3Fts5Mprintf(int *pRc, char *zFmt, ...){ +char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...){ char *zRet = 0; if( *pRc==SQLITE_OK ){ va_list ap; diff --git a/ext/fts5/fts5_config.c b/ext/fts5/fts5_config.c index 4c478d79c9..6342b92cb0 100644 --- a/ext/fts5/fts5_config.c +++ b/ext/fts5/fts5_config.c @@ -602,7 +602,6 @@ int sqlite3Fts5ConfigDeclareVtab(Fts5Config *pConfig){ int i; int rc = SQLITE_OK; char *zSql; - char *zOld; zSql = sqlite3Fts5Mprintf(&rc, "CREATE TABLE x("); for(i=0; zSql && inCol; i++){ diff --git a/ext/fts5/fts5_expr.c b/ext/fts5/fts5_expr.c index 9707e517aa..b29684561c 100644 --- a/ext/fts5/fts5_expr.c +++ b/ext/fts5/fts5_expr.c @@ -1046,7 +1046,7 @@ static int fts5ExprNodeNext( case FTS5_OR: { int i; - int iLast = pNode->iRowid; + i64 iLast = pNode->iRowid; for(i=0; rc==SQLITE_OK && inChild; i++){ Fts5ExprNode *p1 = pNode->apChild[i]; @@ -1915,7 +1915,7 @@ static void fts5ExprFunction( sqlite3_result_error_code(pCtx, rc); } } - sqlite3_free(azConfig); + sqlite3_free((void *)azConfig); sqlite3Fts5ConfigFree(pConfig); sqlite3Fts5ExprFree(pExpr); } diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index ec930f1a3b..d82d194a52 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -3549,15 +3549,15 @@ static void fts5IndexAutomerge( ){ if( p->rc==SQLITE_OK && p->pConfig->nAutomerge>0 ){ Fts5Structure *pStruct = *ppStruct; - i64 nWrite; /* Initial value of write-counter */ + u64 nWrite; /* Initial value of write-counter */ int nWork; /* Number of work-quanta to perform */ int nRem; /* Number of leaf pages left to write */ /* Update the write-counter. While doing so, set nWork. */ nWrite = pStruct->nWriteCounter; - nWork = ((nWrite + nLeaf) / p->nWorkUnit) - (nWrite / p->nWorkUnit); + nWork = (int)(((nWrite + nLeaf) / p->nWorkUnit) - (nWrite / p->nWorkUnit)); pStruct->nWriteCounter += nLeaf; - nRem = p->nWorkUnit * nWork * pStruct->nLevel; + nRem = (int)(p->nWorkUnit * nWork * pStruct->nLevel); fts5IndexMerge(p, ppStruct, nRem); } @@ -4552,11 +4552,11 @@ int sqlite3Fts5IndexSetCookie(Fts5Index *p, int iNew){ int rc; /* Return code */ Fts5Config *pConfig = p->pConfig; /* Configuration object */ u8 aCookie[4]; /* Binary representation of iNew */ + sqlite3_blob *pBlob = 0; assert( p->rc==SQLITE_OK ); - sqlite3Fts5Put32(aCookie, iNew); - sqlite3_blob *pBlob = 0; + rc = sqlite3_blob_open(pConfig->db, pConfig->zDb, p->zDataTbl, "block", FTS5_STRUCTURE_ROWID, 1, &pBlob ); @@ -4787,7 +4787,7 @@ static void fts5TestTerm( fts5BufferSet(&rc, pPrev, n, (const u8*)z); }else if( rc==SQLITE_OK && (pPrev->n!=n || memcmp(pPrev->p, z, n)) ){ - u32 cksum3 = *pCksum; + u64 cksum3 = *pCksum; const char *zTerm = (const char*)&pPrev->p[1]; /* term sans prefix-byte */ int nTerm = pPrev->n-1; /* Size of zTerm in bytes */ int iIdx = (pPrev->p[0] - FTS5_MAIN_PREFIX); diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index 3b8241f132..a598f1cfce 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -1387,8 +1387,8 @@ static int fts5UpdateMethod( rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel); } }else{ - assert( nArg>1 ); sqlite3_value *pCmd = apVal[2 + pConfig->nCol]; + assert( nArg>1 ); if( SQLITE_NULL!=sqlite3_value_type(pCmd) ){ const char *z = (const char*)sqlite3_value_text(pCmd); if( pConfig->eContent!=FTS5_CONTENT_NORMAL @@ -2224,7 +2224,7 @@ static void fts5Fts5Func( sqlite3_result_blob(pCtx, buf, sizeof(pGlobal), SQLITE_TRANSIENT); } -#ifdef _WIN32_ +#ifdef _WIN32 __declspec(dllexport) #endif int sqlite3_fts5_init( diff --git a/ext/fts5/fts5_storage.c b/ext/fts5/fts5_storage.c index 60c6401716..f57c2e2620 100644 --- a/ext/fts5/fts5_storage.c +++ b/ext/fts5/fts5_storage.c @@ -158,8 +158,10 @@ static int fts5ExecPrintf( ){ int rc; va_list ap; /* ... printf arguments */ + char *zSql; + va_start(ap, zFormat); - char *zSql = sqlite3_vmprintf(zFormat, ap); + zSql = sqlite3_vmprintf(zFormat, ap); if( zSql==0 ){ rc = SQLITE_NOMEM; diff --git a/ext/fts5/fts5_tcl.c b/ext/fts5/fts5_tcl.c index 387e8a9920..d93213a9d0 100644 --- a/ext/fts5/fts5_tcl.c +++ b/ext/fts5/fts5_tcl.c @@ -529,7 +529,7 @@ static void xF5tFunction( static void xF5tDestroy(void *pCtx){ F5tFunction *p = (F5tFunction*)pCtx; Tcl_DecrRefCount(p->pScript); - ckfree(p); + ckfree((char *)p); } /* @@ -724,7 +724,8 @@ static int f5tTokenizerCreate( Tcl_DecrRefCount(pEval); if( rc==TCL_OK ){ - F5tTokenizerInstance *pInst = ckalloc(sizeof(F5tTokenizerInstance)); + F5tTokenizerInstance *pInst; + pInst = (F5tTokenizerInstance*)ckalloc(sizeof(F5tTokenizerInstance)); memset(pInst, 0, sizeof(F5tTokenizerInstance)); pInst->interp = pMod->interp; pInst->pScript = Tcl_GetObjResult(pMod->interp); @@ -740,7 +741,7 @@ static int f5tTokenizerCreate( static void f5tTokenizerDelete(Fts5Tokenizer *p){ F5tTokenizerInstance *pInst = (F5tTokenizerInstance*)p; Tcl_DecrRefCount(pInst->pScript); - ckfree(pInst); + ckfree((char *)pInst); } static int f5tTokenizerTokenize( @@ -816,7 +817,7 @@ static int f5tTokenizerReturn( static void f5tDelTokenizer(void *pCtx){ F5tTokenizerModule *pMod = (F5tTokenizerModule*)pCtx; Tcl_DecrRefCount(pMod->pScript); - ckfree(pMod); + ckfree((char *)pMod); } /* @@ -964,7 +965,7 @@ int Fts5tcl_Init(Tcl_Interp *interp){ int i; F5tTokenizerContext *pContext; - pContext = ckalloc(sizeof(F5tTokenizerContext)); + pContext = (F5tTokenizerContext*)ckalloc(sizeof(F5tTokenizerContext)); memset(pContext, 0, sizeof(*pContext)); for(i=0; i