diff options
author | drh <> | 2025-07-08 19:53:36 +0000 |
---|---|---|
committer | drh <> | 2025-07-08 19:53:36 +0000 |
commit | 9a13a21223bdfc123dfd537c999822ff3077cfa8 (patch) | |
tree | 51b5ecfae9ceb57f879fb478574d5589765897be /src/wherecode.c | |
parent | 9b91aac83b3db7a108ed203ee43b40e2e735ac0e (diff) | |
parent | 449b34571e9022333eb0cd0ce403a4636719194d (diff) | |
download | sqlite-9a13a21223bdfc123dfd537c999822ff3077cfa8.tar.gz sqlite-9a13a21223bdfc123dfd537c999822ff3077cfa8.zip |
New optimizations to detect early when queries return no rows due to
tables being empty. This includes the EXISTS-to-JOIN optimization that
tries to transform EXISTS constraints into additional terms of the FROM
clause.
FossilOrigin-Name: e33da6d5dc964db817d1bc63c9083aecd93d49ee14d5198600b47eaf7c5b9331
Diffstat (limited to 'src/wherecode.c')
-rw-r--r-- | src/wherecode.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/wherecode.c b/src/wherecode.c index 839304c11..43a669d81 100644 --- a/src/wherecode.c +++ b/src/wherecode.c @@ -126,7 +126,6 @@ void sqlite3WhereAddExplainText( #endif { VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe, addr); - SrcItem *pItem = &pTabList->a[pLevel->iFrom]; sqlite3 *db = pParse->db; /* Database handle */ int isSearch; /* True for a SEARCH. False for SCAN. */ @@ -149,7 +148,10 @@ void sqlite3WhereAddExplainText( sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); str.printfFlags = SQLITE_PRINTF_INTERNAL; - sqlite3_str_appendf(&str, "%s %S", isSearch ? "SEARCH" : "SCAN", pItem); + sqlite3_str_appendf(&str, "%s %S%s", + isSearch ? "SEARCH" : "SCAN", + pItem, + pItem->fg.fromExists ? " EXISTS" : ""); if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){ const char *zFmt = 0; Index *pIdx; |