From: drh Date: Wed, 13 Nov 2013 23:48:46 +0000 (+0000) Subject: Make sure the progress callback is invoked prior to an SQLITE_ROW return if X-Git-Tag: version-3.8.2~93 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e6400b9901cdcc13578b4e3901f8eb1c36216f4e;p=thirdparty%2Fsqlite.git Make sure the progress callback is invoked prior to an SQLITE_ROW return if it is overdue to be called. FossilOrigin-Name: 21f59b04f74738d08ebad693646bbaea24dc45ef --- diff --git a/manifest b/manifest index 581e75d42a..03e87575ae 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\sskip-scan\senhancement\sinto\strunk. -D 2013-11-13T20:46:11.977 +C Make\ssure\sthe\sprogress\scallback\sis\sinvoked\sprior\sto\san\sSQLITE_ROW\sreturn\sif\nit\sis\soverdue\sto\sbe\scalled. +D 2013-11-13T23:48:46.535 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 8a07bebafbfda0eb67728f4bd15a36201662d1a1 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -280,7 +280,7 @@ F src/update.c 3de7e657b98ac67338d775c114a4068faf732402 F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269 F src/util.c 2fa6c821d28bbdbeec1b2a7b091a281c9ef8f918 F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 -F src/vdbe.c 3d73013b4ef54061e768443fb35a36b3dd289663 +F src/vdbe.c 0057612c2678b08812fc4a9d5019351cbeb9ee97 F src/vdbe.h c06f0813f853566457ce9cfb1a4a4bc39a5da644 F src/vdbeInt.h 62eb680327011f3a4b0336642b0ca9d6ecc6eb91 F src/vdbeapi.c 93a22a9ba2abe292d5c2cf304d7eb2e894dde0ed @@ -1139,7 +1139,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P e7d34ec6814ed4606a6d5d7f68c218ae4d25e666 f668616a29686f3ce532731c534b168e536adbb5 -R 0f42dd23f60246e0b55a84d51974156a +P b0bb975c0986fe01f1184c1d4888fe397174ad0f +R 51ebd76e04274e826e1e2a1145d2a6ab U drh -Z e8f824146c4a7790bef9ac829b4cd088 +Z c57556eaf40c3f587321800fb5d2a1a5 diff --git a/manifest.uuid b/manifest.uuid index a213e48cb9..4387c022e5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b0bb975c0986fe01f1184c1d4888fe397174ad0f \ No newline at end of file +21f59b04f74738d08ebad693646bbaea24dc45ef \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index c73bf59639..6c5735b77a 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -1186,6 +1186,18 @@ case OP_ResultRow: { assert( pOp->p1>0 ); assert( pOp->p1+pOp->p2<=(p->nMem-p->nCursor)+1 ); +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + /* Run the progress counter just before returning. + */ + if( db->xProgress!=0 + && nVmStep>=nProgressLimit + && db->xProgress(db->pProgressArg)!=0 + ){ + rc = SQLITE_INTERRUPT; + goto vdbe_error_halt; + } +#endif + /* If this statement has violated immediate foreign key constraints, do ** not return the number of rows modified. And do not RELEASE the statement ** transaction. It needs to be rolled back. */