]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a performance regression in matchinfo().
authordan <dan@noemail.net>
Fri, 10 Dec 2010 17:06:48 +0000 (17:06 +0000)
committerdan <dan@noemail.net>
Fri, 10 Dec 2010 17:06:48 +0000 (17:06 +0000)
FossilOrigin-Name: fa37d8eb7cd8049689068af2a80fe2cbb4a603f1

ext/fts3/fts3.c
ext/fts3/fts3_snippet.c
manifest
manifest.uuid

index 8d517219a2fefc5c2fa41a0666c09a47b5a76d6c..072e12e2fe91290986736e6fac848b6fae253c1e 100644 (file)
@@ -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( pCsr<pEnd ){
       if( pExpr->iCurrent<iDocid ){
         fts3PoslistCopy(0, &pCsr);
index 94dcad5fbc16356940524c494c085c806bd6f0c6..9fac359840789e4ca2d09e2fc7da6b9ab500f46f 100644 (file)
@@ -226,7 +226,7 @@ static int fts3ExprNearTrim(Fts3Expr *pExpr){
 ** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
 ** fts3ExprLoadDoclists().
 */
-static int fts3ExprLoadDoclistsCb1(Fts3Expr *pExpr, int iPhrase, void *ctx){
+static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
   int rc = SQLITE_OK;
   LoadDoclistCtx *p = (LoadDoclistCtx *)ctx;
 
@@ -246,22 +246,6 @@ static int fts3ExprLoadDoclistsCb1(Fts3Expr *pExpr, int iPhrase, void *ctx){
   return rc;
 }
 
-/*
-** This is an fts3ExprIterate() callback used while loading the doclists
-** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
-** fts3ExprLoadDoclists().
-*/
-static int fts3ExprLoadDoclistsCb2(Fts3Expr *pExpr, int iPhrase, void *ctx){
-  UNUSED_PARAMETER(iPhrase);
-  UNUSED_PARAMETER(ctx);
-  if( pExpr->aDoclist ){
-    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;
index e8e5f88473b714513f69702188b79ecca377d87e..0a63041a0959845a8ec691ca053fa05a274fe299 100644 (file)
--- 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
index 727165bc7ad9f27d53c3e65a619f9a14bbaecf54..632e91e631ff9698dd6cd04314e236c5bbf78fb8 100644 (file)
@@ -1 +1 @@
-c959945ab7129b67eb2364befb9bf5cc88a8b0bf
\ No newline at end of file
+fa37d8eb7cd8049689068af2a80fe2cbb4a603f1
\ No newline at end of file