From 413b94af8931eceb52b329ee0019628eb059e217 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 10 Jul 2020 19:09:40 +0000 Subject: [PATCH 1/4] An attempt to get the Min/Max optimization working with IN constraints. Not currently working. FossilOrigin-Name: 4a64c16fb7a07431e534fb9bbcf778646be8a1c718d5d10873fbccb0c867aac7 --- manifest | 18 +++++++++++------- manifest.uuid | 2 +- src/select.c | 5 ----- src/where.c | 13 ++++++++++++- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index a80c023d2c..550c4e40bc 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\shandling\sof\sanother\scorrupt\sdatabase\scase\sin\sfts3. -D 2020-07-09T21:29:34.103 +C An\sattempt\sto\sget\sthe\sMin/Max\soptimization\sworking\swith\sIN\sconstraints.\nNot\scurrently\sworking. +D 2020-07-10T19:09:40.123 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -21,7 +21,7 @@ F src/parse.y b6b4b02f8cc8f94ac1d93a922543e0344dbb30b04877898736c01ec7ec03eaaa F src/pragma.c ae499b5ab8f4e833f67e28bf2322500e9aa612aadf12581d1324333f848d8b51 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/resolve.c 79cee37182fea66703f90365b8b0a646ed7e9bfa9238b91fa90dfc74258b940e -F src/select.c 860daa05592ed1b38f6266f067fa020b539548ab929aa60fa59e7681e7f3f8cb +F src/select.c 14d212b94088cf06f0074f080e46f858b36bf55a772029a7d006a16b305fe5a8 F src/shell.c.in 81fa23ac1a3d6ac9ed13e9ae711a3d8806396ca7cc12c5d6a2e2536f70b0c7ad F src/sqliteInt.h f89ed824bc55b6bd90ca692518f85eeb22f8962d46e0e12cad989d4aee1e7b8c F src/test1.c fe56c4bcaa2685ca9aa25d817a0ee9345e189aff4a5a71a3d8ba946c7776feb8 @@ -29,6 +29,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef +F src/where.c a485bc1ec23b04ef6e7868abc559b8adc4c3fdc3314222386928b2e47f1e4505 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 @@ -46,7 +47,10 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 610ee8d5dc855fd163daa3c93b44db7874463d69df5a01ab4113b725a031b9d4 -R f506df3e64449a71a2d48ebddc1578d7 -U dan -Z 1f24dc1574d5c512fe643a8c300eaca2 +P ccff8cb8267d4c5605484f7a35c1836937f20b3d6879fe84cd84dc24bbbffc77 +R 35d6b9743e23c38e933ae2f7f81185b9 +T *branch * minmax-opt-exp +T *sym-minmax-opt-exp * +T -sym-trunk * +U drh +Z 4df4fe61b85919c997c14bcb75af2a60 diff --git a/manifest.uuid b/manifest.uuid index 83875f548d..ddb1bc4f91 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ccff8cb8267d4c5605484f7a35c1836937f20b3d6879fe84cd84dc24bbbffc77 \ No newline at end of file +4a64c16fb7a07431e534fb9bbcf778646be8a1c718d5d10873fbccb0c867aac7 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 2df58fccd0..fcaf5aaee6 100644 --- a/src/select.c +++ b/src/select.c @@ -6769,11 +6769,6 @@ int sqlite3Select( } updateAccumulator(pParse, regAcc, pAggInfo); if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); - if( sqlite3WhereIsOrdered(pWInfo)>0 ){ - sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); - VdbeComment((v, "%s() by index", - (minMaxFlag==WHERE_ORDERBY_MIN?"min":"max"))); - } sqlite3WhereEnd(pWInfo); finalizeAggFunctions(pParse, pAggInfo); } diff --git a/src/where.c b/src/where.c index a7df4b9b80..b88afc1097 100644 --- a/src/where.c +++ b/src/where.c @@ -3740,7 +3740,9 @@ static i8 wherePathSatisfiesOrderBy( orderDistinctMask = 0; ready = 0; eqOpMask = WO_EQ | WO_IS | WO_ISNULL; - if( wctrlFlags & WHERE_ORDERBY_LIMIT ) eqOpMask |= WO_IN; + if( wctrlFlags & (WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MAX|WHERE_ORDERBY_MIN) ){ + eqOpMask |= WO_IN; + } for(iLoop=0; isOrderDistinct && obSat0 ) ready |= pLoop->maskSelf; if( iLoopnOBSat==1 + && (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0 + ){ + pFrom->aLoop[nLoop-1]->wsFlags |= WHERE_ONEROW; } } if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP) @@ -5328,6 +5334,11 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ #endif }else{ sqlite3VdbeResolveLabel(v, pLevel->addrCont); + if( pLevel->regBignull ){ + sqlite3VdbeResolveLabel(v, pLevel->addrBignull); + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, pLevel->regBignull, pLevel->p2-1); + VdbeCoverage(v); + } } if( pLoop->wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){ struct InLoop *pIn; From 6e4b140e94eeee1d2607a23d92388b47ac570fc9 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 14 Jul 2020 01:51:53 +0000 Subject: [PATCH 2/4] Fix an obsolete assert(). FossilOrigin-Name: 221e021077e2bbce693a89a16361418ced20f4e8f5a27e8c461648cff663a2c5 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index ba21d1f1c1..3e5c8bb1a8 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Merge\slatest\schanges\sfrom\strunk.\s\sThis\sbranch\sstill\sdoes\snot\swork. -D 2020-07-14T01:03:05.378 +C Fix\san\sobsolete\sassert(). +D 2020-07-14T01:51:53.828 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -31,7 +31,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef -F src/where.c a485bc1ec23b04ef6e7868abc559b8adc4c3fdc3314222386928b2e47f1e4505 +F src/where.c 101a366c2bea8a92780e65fe8e6d7946bfb450fba3151815e8685e6f9434102e F src/window.c 0dec178bfa541c757d15a2be78f34aea36393a0966600366810e5f8739ccf370 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 @@ -52,7 +52,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 4a64c16fb7a07431e534fb9bbcf778646be8a1c718d5d10873fbccb0c867aac7 9cb03beae42d814a1b1b69f72865fde502d3f443313ec29edd010d1de40225eb -R b5d39bb30ff84871e9397d6d2ffce041 +P 6144387238c03b8b33ae98d624f7ffa44a7829d3e0d4a0a01b5528e71ab4f08b +R 09e6c9be30ecf43ad00b05e365a92997 U drh -Z cf6e9dd9fd5e835801e651e2c806ed31 +Z 06ab4065cbe25e9b13e8388937cdaf63 diff --git a/manifest.uuid b/manifest.uuid index 67d0f7a6d0..878314846a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6144387238c03b8b33ae98d624f7ffa44a7829d3e0d4a0a01b5528e71ab4f08b \ No newline at end of file +221e021077e2bbce693a89a16361418ced20f4e8f5a27e8c461648cff663a2c5 \ No newline at end of file diff --git a/src/where.c b/src/where.c index b88afc1097..b716494f2d 100644 --- a/src/where.c +++ b/src/where.c @@ -3778,7 +3778,8 @@ static i8 wherePathSatisfiesOrderBy( /* IN terms are only valid for sorting in the ORDER BY LIMIT ** optimization, and then only if they are actually used ** by the query plan */ - assert( wctrlFlags & WHERE_ORDERBY_LIMIT ); + assert( wctrlFlags & + (WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ); for(j=0; jnLTerm && pTerm!=pLoop->aLTerm[j]; j++){} if( j>=pLoop->nLTerm ) continue; } From 751a44ed24b5a877564d89977b228d77394644cd Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 14 Jul 2020 02:03:35 +0000 Subject: [PATCH 3/4] Fix a crash. Not all tests pass, but tests do at least run to completion now. FossilOrigin-Name: b5d38e28c62dbc4f5f0e1b2590c9d6c2de9a140cc3528cae1968fd741e337fb0 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 3e5c8bb1a8..9c93d84296 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\san\sobsolete\sassert(). -D 2020-07-14T01:51:53.828 +C Fix\sa\scrash.\s\sNot\sall\stests\spass,\sbut\stests\sdo\sat\sleast\srun\sto\scompletion\snow. +D 2020-07-14T02:03:35.734 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -31,7 +31,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef -F src/where.c 101a366c2bea8a92780e65fe8e6d7946bfb450fba3151815e8685e6f9434102e +F src/where.c 63d8cdbfc31ad06cfa4425dd315188b99e08fcb6830831591387b386b8bc8368 F src/window.c 0dec178bfa541c757d15a2be78f34aea36393a0966600366810e5f8739ccf370 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 @@ -52,7 +52,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 6144387238c03b8b33ae98d624f7ffa44a7829d3e0d4a0a01b5528e71ab4f08b -R 09e6c9be30ecf43ad00b05e365a92997 +P 221e021077e2bbce693a89a16361418ced20f4e8f5a27e8c461648cff663a2c5 +R 03cf3055552c9116f3d2ae51d09e55c1 U drh -Z 06ab4065cbe25e9b13e8388937cdaf63 +Z d0e31887101317936a03df831aee09d5 diff --git a/manifest.uuid b/manifest.uuid index 878314846a..6397d042f1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -221e021077e2bbce693a89a16361418ced20f4e8f5a27e8c461648cff663a2c5 \ No newline at end of file +b5d38e28c62dbc4f5f0e1b2590c9d6c2de9a140cc3528cae1968fd741e337fb0 \ No newline at end of file diff --git a/src/where.c b/src/where.c index b716494f2d..1afbb20992 100644 --- a/src/where.c +++ b/src/where.c @@ -4427,7 +4427,8 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ } } } - }else if( pWInfo->nOBSat==1 + }else if( nLoop + && pWInfo->nOBSat==1 && (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0 ){ pFrom->aLoop[nLoop-1]->wsFlags |= WHERE_ONEROW; From 19543b9b7b5200927e810eac06c0be3a010bc635 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 14 Jul 2020 22:20:26 +0000 Subject: [PATCH 4/4] Now appears to work. All legacy tests pass. Need to add new tests, however. FossilOrigin-Name: 81e6450980ee745686aee5e2b84672d3c8404a041c82c658aa562013294b8628 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 5 +++++ src/where.c | 7 +------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 47e306dfad..4a626a1618 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Merge\sfixes\sfrom\strunk. -D 2020-07-14T13:02:30.804 +C Now\sappears\sto\swork.\s\sAll\slegacy\stests\spass.\s\sNeed\sto\sadd\snew\stests,\showever. +D 2020-07-14T22:20:26.394 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -23,7 +23,7 @@ F src/parse.y b6b4b02f8cc8f94ac1d93a922543e0344dbb30b04877898736c01ec7ec03eaaa F src/pragma.c ae499b5ab8f4e833f67e28bf2322500e9aa612aadf12581d1324333f848d8b51 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/resolve.c 79cee37182fea66703f90365b8b0a646ed7e9bfa9238b91fa90dfc74258b940e -F src/select.c d9f067b2dda2202d1f80f820449acbd3f423010f29a453ce4e4a517a4bd679cb +F src/select.c 5293c60dd32c87a599b16e6f4acaf2827b7f60fca317b614a7cfccfb0beecba9 F src/shell.c.in 81fa23ac1a3d6ac9ed13e9ae711a3d8806396ca7cc12c5d6a2e2536f70b0c7ad F src/sqliteInt.h 8366e482a1330e9c103c9c9053c53894e373daf1fb9dd65bd953ffc0b3ad7a8b F src/test1.c fe56c4bcaa2685ca9aa25d817a0ee9345e189aff4a5a71a3d8ba946c7776feb8 @@ -31,7 +31,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef -F src/where.c 63d8cdbfc31ad06cfa4425dd315188b99e08fcb6830831591387b386b8bc8368 +F src/where.c 93d8a4317735a5a39af8fefc16db852da9fffd7b1946647e9b00a8f19575b6fc F src/window.c 0dec178bfa541c757d15a2be78f34aea36393a0966600366810e5f8739ccf370 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 @@ -52,7 +52,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P b5d38e28c62dbc4f5f0e1b2590c9d6c2de9a140cc3528cae1968fd741e337fb0 f25a56c26e28abd44373230c6b5763aed35c9a7648abede8a53409dccc0bee1d -R 7d63caad10b289fd88b705df244223bf +P 2af372f59ea250ccf9ab7c30fe4bf8376a5da6e35c401edf643b9a193a38d33d +R 88bbf706fac90aa9a3fe891a30d11418 U drh -Z 6ff44f5cef953a51b304c32568d26b12 +Z d59f0956f8a39b2804fc5a23cc402e01 diff --git a/manifest.uuid b/manifest.uuid index 80ebd5b4dd..8bbdd0d23b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2af372f59ea250ccf9ab7c30fe4bf8376a5da6e35c401edf643b9a193a38d33d \ No newline at end of file +81e6450980ee745686aee5e2b84672d3c8404a041c82c658aa562013294b8628 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 16a79ab292..966c5d208d 100644 --- a/src/select.c +++ b/src/select.c @@ -6706,6 +6706,7 @@ int sqlite3Select( explainSimpleCount(pParse, pTab, pBest); }else{ int regAcc = 0; /* "populate accumulators" flag */ + int addrSkip; /* If there are accumulator registers but no min() or max() functions ** without FILTER clauses, allocate register regAcc. Register regAcc @@ -6754,6 +6755,10 @@ int sqlite3Select( } updateAccumulator(pParse, regAcc, pAggInfo); if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); + addrSkip = sqlite3WhereOrderByLimitOptLabel(pWInfo); + if( addrSkip!=sqlite3WhereContinueLabel(pWInfo) ){ + sqlite3VdbeGoto(v, addrSkip); + } sqlite3WhereEnd(pWInfo); finalizeAggFunctions(pParse, pAggInfo); } diff --git a/src/where.c b/src/where.c index 1afbb20992..960531e07d 100644 --- a/src/where.c +++ b/src/where.c @@ -4431,7 +4431,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ && pWInfo->nOBSat==1 && (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0 ){ - pFrom->aLoop[nLoop-1]->wsFlags |= WHERE_ONEROW; + pWInfo->bOrderedInnerLoop = 1; } } if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP) @@ -5336,11 +5336,6 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ #endif }else{ sqlite3VdbeResolveLabel(v, pLevel->addrCont); - if( pLevel->regBignull ){ - sqlite3VdbeResolveLabel(v, pLevel->addrBignull); - sqlite3VdbeAddOp2(v, OP_DecrJumpZero, pLevel->regBignull, pLevel->p2-1); - VdbeCoverage(v); - } } if( pLoop->wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){ struct InLoop *pIn;