From: dan Date: Fri, 10 Dec 2010 17:06:48 +0000 (+0000) Subject: Fix a performance regression in matchinfo(). X-Git-Tag: version-3.7.5~73 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3842765aeb04b2cd1edf6fd72bdf432c80bb435;p=thirdparty%2Fsqlite.git Fix a performance regression in matchinfo(). FossilOrigin-Name: fa37d8eb7cd8049689068af2a80fe2cbb4a603f1 --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 8d517219a2..072e12e2fe 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -3106,9 +3106,16 @@ char *sqlite3Fts3FindPositions( assert( pExpr->isLoaded ); if( pExpr->aDoclist ){ char *pEnd = &pExpr->aDoclist[pExpr->nDoclist]; - char *pCsr = pExpr->pCurrent; + char *pCsr; + if( pExpr->pCurrent==0 ){ + pExpr->pCurrent = pExpr->aDoclist; + pExpr->iCurrent = 0; + pExpr->pCurrent += sqlite3Fts3GetVarint(pExpr->pCurrent,&pExpr->iCurrent); + } + pCsr = pExpr->pCurrent; assert( pCsr ); + while( pCsriCurrentaDoclist ){ - pExpr->pCurrent = pExpr->aDoclist; - pExpr->iCurrent = 0; - pExpr->pCurrent += sqlite3Fts3GetVarint(pExpr->pCurrent, &pExpr->iCurrent); - } - return SQLITE_OK; -} - /* ** Load the doclists for each phrase in the query associated with FTS3 cursor ** pCsr. @@ -280,10 +264,7 @@ static int fts3ExprLoadDoclists( int rc; /* Return Code */ LoadDoclistCtx sCtx = {0,0,0}; /* Context for fts3ExprIterate() */ sCtx.pCsr = pCsr; - rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb1, (void *)&sCtx); - if( rc==SQLITE_OK ){ - (void)fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb2, 0); - } + rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx); if( pnPhrase ) *pnPhrase = sCtx.nPhrase; if( pnToken ) *pnToken = sCtx.nToken; return rc; diff --git a/manifest b/manifest index e8e5f88473..0a63041a09 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,5 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - -C Add\ssupport\sfor\sthe\sSQLITE_DEFAULT_FOREIGN_KEYS\scompile-time\soption. -D 2010-12-09T19:15:17 +C Fix\sa\sperformance\sregression\sin\smatchinfo(). +D 2010-12-10T17:06:48 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 4547616ad2286053af6ccccefa242dc925e49bf0 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -64,7 +61,7 @@ F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c 44f998657ec849362484bb389c5728e821fc8c59 +F ext/fts3/fts3.c 28ada7d1c700e57b072b2c95d70565b05925fa46 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h a6c69c1c5e2c8c19172ddff42d262c087dcd7337 F ext/fts3/fts3_expr.c 5f49e0deaf723724b08100bb3ff40aab02ad0c93 @@ -72,7 +69,7 @@ F ext/fts3/fts3_hash.c 3c8f6387a4a7f5305588b203fa7c887d753e1f1c F ext/fts3/fts3_hash.h 8331fb2206c609f9fc4c4735b9ab5ad6137c88ec F ext/fts3/fts3_icu.c ac494aed69835008185299315403044664bda295 F ext/fts3/fts3_porter.c d61cfd81fb0fd8fbcb25adcaee0ba671aefaa5c2 -F ext/fts3/fts3_snippet.c 6c87b55965124920d6461d79ea44b22cc3f307aa +F ext/fts3/fts3_snippet.c 3a26a835732619b62f3af1b73f96d017f8651f9f F ext/fts3/fts3_tokenizer.c 055f3dc7369585350b28db1ee0f3b214dca6724d F ext/fts3/fts3_tokenizer.h 13ffd9fcb397fec32a05ef5cd9e0fa659bf3dbd3 F ext/fts3/fts3_tokenizer1.c 6e5cbaa588924ac578263a598e4fb9f5c9bb179d @@ -897,14 +894,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 5a52dd59ff577b071b4ed9316dc3bc753a18c8da -R f77079846f4aaed873cf9f6ceda77529 -U drh -Z 52a27da9ef768b0e16942ded7463031d ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.6 (GNU/Linux) - -iD8DBQFNASrIoxKgR168RlERAqlaAJ9aEPuysxoQS1x9hi1oYTyTN055FACfbx1X -aPAgBUJmi1Z0CWWDapob82w= -=QBYv ------END PGP SIGNATURE----- +P c959945ab7129b67eb2364befb9bf5cc88a8b0bf +R ecceeedfad0e31364c78a099c74496b6 +U dan +Z 880171407a74a3cc3ca171dd325c20ce diff --git a/manifest.uuid b/manifest.uuid index 727165bc7a..632e91e631 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c959945ab7129b67eb2364befb9bf5cc88a8b0bf \ No newline at end of file +fa37d8eb7cd8049689068af2a80fe2cbb4a603f1 \ No newline at end of file