1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +03:00

The ".selecttrace 0x2000" command causes just the top-level parse tree to

be displayed, after all transformations, and showing the EQP iSelectId at
each level.

FossilOrigin-Name: ca34c2dd20ee071e6f8d60f91dbf474515a688ba57949143483da1641246cb25
This commit is contained in:
drh
2018-04-23 17:43:35 +00:00
parent e2243d26f3
commit f20609d107
5 changed files with 23 additions and 13 deletions

View File

@@ -5343,6 +5343,9 @@ int sqlite3Select(
#ifndef SQLITE_OMIT_EXPLAIN
int iRestoreSelectId = pParse->iSelectId;
pParse->iSelectId = pParse->iNextSelectId++;
#if SELECTTRACE_ENABLED
p->iSelectId = pParse->iSelectId;
#endif
#endif
db = pParse->db;
@@ -5486,7 +5489,10 @@ int sqlite3Select(
if( p->pPrior ){
rc = multiSelect(pParse, p, pDest);
#if SELECTTRACE_ENABLED
SELECTTRACE(1,pParse,p,("end compound-select processing\n"));
SELECTTRACE(0x1,pParse,p,("end compound-select processing\n"));
if( pParse->iSelectId==0 && (sqlite3SelectTrace & 0x2000)!=0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
explainSetInteger(pParse->iSelectId, iRestoreSelectId);
return rc;
@@ -6277,7 +6283,10 @@ select_end:
sqlite3DbFree(db, sAggInfo.aCol);
sqlite3DbFree(db, sAggInfo.aFunc);
#if SELECTTRACE_ENABLED
SELECTTRACE(1,pParse,p,("end processing\n"));
SELECTTRACE(0x1,pParse,p,("end processing\n"));
if( pParse->iSelectId==0 && (sqlite3SelectTrace & 0x2000)!=0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
explainSetInteger(pParse->iSelectId, iRestoreSelectId);
return rc;

View File

@@ -2781,6 +2781,7 @@ struct Select {
int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
#if SELECTTRACE_ENABLED
char zSelName[12]; /* Symbolic name of this SELECT use for debugging */
u32 iSelectId; /* EXPLAIN QUERY PLAN select ID */
#endif
int addrOpenEphm[2]; /* OP_OpenEphem opcodes related to this select */
SrcList *pSrc; /* The FROM clause */

View File

@@ -139,10 +139,10 @@ void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){
do{
#if SELECTTRACE_ENABLED
sqlite3TreeViewLine(pView,
"SELECT%s%s (%s/%p) selFlags=0x%x nSelectRow=%d",
"SELECT%s%s (%s/%d/%p) selFlags=0x%x nSelectRow=%d",
((p->selFlags & SF_Distinct) ? " DISTINCT" : ""),
((p->selFlags & SF_Aggregate) ? " agg_flag" : ""),
p->zSelName, p, p->selFlags,
p->zSelName, p->iSelectId, p, p->selFlags,
(int)p->nSelectRow
);
#else