aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/select.c1
-rw-r--r--src/where.c12
2 files changed, 8 insertions, 5 deletions
diff --git a/src/select.c b/src/select.c
index 0bb033785..9fcf30ff4 100644
--- a/src/select.c
+++ b/src/select.c
@@ -7863,6 +7863,7 @@ int sqlite3Select(
pItem->fg.viaCoroutine = 1;
pSubq->regResult = dest.iSdst;
sqlite3VdbeEndCoroutine(v, pSubq->regReturn);
+ VdbeComment((v, "end %!S", pItem));
sqlite3VdbeJumpHere(v, addrTop-1);
sqlite3ClearTempRegCache(pParse);
}else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){
diff --git a/src/where.c b/src/where.c
index c9f6b97c9..6e494850c 100644
--- a/src/where.c
+++ b/src/where.c
@@ -7122,15 +7122,17 @@ WhereInfo *sqlite3WhereBegin(
pSrc = &pTabList->a[pLevel->iFrom];
if( pSrc->fg.isMaterialized ){
Subquery *pSubq;
+ int iOnce = 0;
assert( pSrc->fg.isSubquery );
pSubq = pSrc->u4.pSubq;
- if( pSrc->fg.isCorrelated ){
- sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub);
+ if( pSrc->fg.isCorrelated==0 ){
+ iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
}else{
- int iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub);
- sqlite3VdbeJumpHere(v, iOnce);
+ iOnce = 0;
}
+ sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub);
+ VdbeComment((v, "materialize %!S", pSrc));
+ if( iOnce ) sqlite3VdbeJumpHere(v, iOnce);
}
assert( pTabList == pWInfo->pTabList );
if( (wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))!=0 ){