diff options
author | drh <> | 2025-07-08 17:28:09 +0000 |
---|---|---|
committer | drh <> | 2025-07-08 17:28:09 +0000 |
commit | 449b34571e9022333eb0cd0ce403a4636719194d (patch) | |
tree | 2270a946627b688956ea06fe228a21c7d4ce8e08 /src | |
parent | 8c8443a38a69eafee4ef930cbfc2c07da4b78628 (diff) | |
download | sqlite-449b34571e9022333eb0cd0ce403a4636719194d.tar.gz sqlite-449b34571e9022333eb0cd0ce403a4636719194d.zip |
Enable the EXISTS-to-JOIN optimization if the outer query has no
FROM clause.
FossilOrigin-Name: 1b9b124f9a35ebd1ac4ea70ef1ee08a4c82c11da690d4164f6b785a6fd9730d9
Diffstat (limited to 'src')
-rw-r--r-- | src/build.c | 9 | ||||
-rw-r--r-- | src/select.c | 1 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/build.c b/src/build.c index cd838557f..5495cef18 100644 --- a/src/build.c +++ b/src/build.c @@ -5138,6 +5138,9 @@ void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ */ SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){ assert( p1 ); + assert( p2 || pParse->nErr ); + assert( p2==0 || p2->nSrc>=1 ); + testcase( p1->nSrc==0 ); if( p2 ){ int nOld = p1->nSrc; SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, nOld); @@ -5146,10 +5149,10 @@ SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){ }else{ p1 = pNew; memcpy(&p1->a[nOld], p2->a, p2->nSrc*sizeof(SrcItem)); - assert( nOld==1 || (p2->nSrc==1 && (p2->a[0].fg.jointype&JT_LTORJ)==0) ); - assert( p1->nSrc>=2 ); + assert( nOld==1 || (p2->a[0].fg.jointype & JT_LTORJ)==0 ); + assert( p1->nSrc>=1 ); + p1->a[0].fg.jointype |= (JT_LTORJ & p2->a[0].fg.jointype); sqlite3DbFree(pParse->db, p2); - p1->a[0].fg.jointype |= (JT_LTORJ & p1->a[1].fg.jointype); } } return p1; diff --git a/src/select.c b/src/select.c index b15300237..2dd8fc772 100644 --- a/src/select.c +++ b/src/select.c @@ -7432,7 +7432,6 @@ static SQLITE_NOINLINE void existsToJoin( ){ if( pWhere && !ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) - && p->pSrc->nSrc>0 && p->pSrc->nSrc<BMS && pParse->db->mallocFailed==0 ){ |