Index: src/expr.c ================================================================== --- src/expr.c +++ src/expr.c @@ -2611,10 +2611,16 @@ char *zMsg = sqlite3MPrintf(pParse->db, "EXECUTE %s%s SUBQUERY %d", jmpIfDynamic>=0?"":"CORRELATED ", pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId ); +#if SELECTTRACE_ENABLED + if( ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pSelect!=0 ){ + zMsg = sqlite3MPrintf(pParse->db, "%z (%s)", zMsg, + pExpr->x.pSelect->zSelName); + } +#endif sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC); } #endif switch( pExpr->op ){ Index: src/wherecode.c ================================================================== --- src/wherecode.c +++ src/wherecode.c @@ -151,11 +151,16 @@ || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX)); sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); sqlite3StrAccumAppendAll(&str, isSearch ? "SEARCH" : "SCAN"); if( pItem->pSelect ){ +#if SELECTTRACE_ENABLED + sqlite3XPrintf(&str, " SUBQUERY %d (%s)", + pItem->iSelectId, pItem->pSelect->zSelName); +#else sqlite3XPrintf(&str, " SUBQUERY %d", pItem->iSelectId); +#endif }else{ sqlite3XPrintf(&str, " TABLE %s", pItem->zName); } if( pItem->zAlias ){