diff options
author | drh <drh@noemail.net> | 2018-04-24 01:10:12 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2018-04-24 01:10:12 +0000 |
commit | 8349c11d023e813fdcf16d8b6719c064b9ad867c (patch) | |
tree | 5e9758fd54df4bf66ff961514af0a691b2e4c944 /src | |
parent | 5279af80612d12b2d8db5586ee206d506110f282 (diff) | |
download | sqlite-8349c11d023e813fdcf16d8b6719c064b9ad867c.tar.gz sqlite-8349c11d023e813fdcf16d8b6719c064b9ad867c.zip |
In EXPLAIN QUERY PLAN output, do not show an EXECUTE LIST SUBQUERY line for
IN operators where the RHS is a list and not a subquery, since in that case
there is no SUBQUERY to execute.
FossilOrigin-Name: 8bc0207abdeeb3ffac003703e78826759f07994698f6cdf40c89c3443ba22a47
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/src/expr.c b/src/expr.c index 670da0367..6513c5ec7 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2609,17 +2609,6 @@ int sqlite3CodeSubselect( jmpIfDynamic = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); } -#ifndef SQLITE_OMIT_EXPLAIN - if( pParse->explain==2 ){ - char *zMsg = sqlite3MPrintf(pParse->db, "EXECUTE %s%s SUBQUERY %d", - jmpIfDynamic>=0?"":"CORRELATED ", - pExpr->op==TK_IN?"LIST":"SCALAR", - pParse->iNextSelectId - ); - sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC); - } -#endif - switch( pExpr->op ){ case TK_IN: { int addr; /* Address of OP_OpenEphemeral instruction */ @@ -2657,6 +2646,17 @@ int sqlite3CodeSubselect( Select *pSelect = pExpr->x.pSelect; ExprList *pEList = pSelect->pEList; +#ifndef SQLITE_OMIT_EXPLAIN + if( pParse->explain==2 ){ + char *zMsg = sqlite3MPrintf(pParse->db, "EXECUTE %sLIST SUBQUERY %d", + jmpIfDynamic>=0?"":"CORRELATED ", + pParse->iNextSelectId + ); + sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, + P4_DYNAMIC); + } +#endif + assert( !isRowid ); /* If the LHS and RHS of the IN operator do not match, that ** error will have been caught long before we reach this point. */ @@ -2698,7 +2698,6 @@ int sqlite3CodeSubselect( ExprList *pList = pExpr->x.pList; struct ExprList_item *pItem; int r1, r2, r3; - affinity = sqlite3ExprAffinity(pLeft); if( !affinity ){ affinity = SQLITE_AFF_BLOB; @@ -2778,6 +2777,17 @@ int sqlite3CodeSubselect( assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT ); assert( ExprHasProperty(pExpr, EP_xIsSelect) ); +#ifndef SQLITE_OMIT_EXPLAIN + if( pParse->explain==2 ){ + char *zMsg = sqlite3MPrintf(pParse->db, "EXECUTE %sSCALAR SUBQUERY %d", + jmpIfDynamic>=0?"":"CORRELATED ", + pParse->iNextSelectId + ); + sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, + P4_DYNAMIC); + } +#endif + pSel = pExpr->x.pSelect; nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1; sqlite3SelectDestInit(&dest, 0, pParse->nMem+1); |