diff options
author | drh <> | 2022-04-22 13:34:45 +0000 |
---|---|---|
committer | drh <> | 2022-04-22 13:34:45 +0000 |
commit | 1ca14b74ed9b287d7a965cdcc44d6fe9775bee02 (patch) | |
tree | 02ed8b78b58ecdccf9e19280da57f2631dc94ed1 /src | |
parent | 1c69bc912d05bf1bf8acbda2abc4a2966d490e5b (diff) | |
parent | 9c2d7aa7d060def8173e9b235bdb565b874b9205 (diff) | |
download | sqlite-1ca14b74ed9b287d7a965cdcc44d6fe9775bee02.tar.gz sqlite-1ca14b74ed9b287d7a965cdcc44d6fe9775bee02.zip |
Simplification of data structures in the wildcard expander for
SF_NestedFrom queries.
FossilOrigin-Name: f7c18262347ff430879d5afc7a118d2b9b0050c845c6b1fe6c047062ea2ba8fe
Diffstat (limited to 'src')
-rw-r--r-- | src/select.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/select.c b/src/select.c index f0a3e5877..2b27eea63 100644 --- a/src/select.c +++ b/src/select.c @@ -5804,25 +5804,27 @@ static int selectExpander(Walker *pWalker, Select *p){ zTName = pE->pLeft->u.zToken; } for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ - Table *pTab = pFrom->pTab; - Select *pSub; - char *zTabName = pFrom->zAlias; - const char *zSchemaName = 0; - int iDb; - if( zTabName==0 ){ + Table *pTab = pFrom->pTab; /* Table for this data source */ + ExprList *pNestedFrom; /* Result-set of a nested FROM clause */ + char *zTabName; /* AS name for this data source */ + const char *zSchemaName = 0; /* Schema name for this data source */ + int iDb; /* Schema index for this data src */ + + if( (zTabName = pFrom->zAlias)==0 ){ zTabName = pTab->zName; } if( db->mallocFailed ) break; assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); if( pFrom->fg.isNestedFrom ){ - pSub = pFrom->pSelect; - assert( pSub->pEList!=0 ); - assert( pSub->pEList->nExpr==pTab->nCol ); + assert( pFrom->pSelect!=0 ); + pNestedFrom = pFrom->pSelect->pEList; + assert( pNestedFrom!=0 ); + assert( pNestedFrom->nExpr==pTab->nCol ); }else{ - pSub = 0; if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ continue; } + pNestedFrom = 0; iDb = sqlite3SchemaToIndex(db, pTab->pSchema); zSchemaName = iDb>=0 ? db->aDb[iDb].zDbSName : "*"; } @@ -5831,8 +5833,9 @@ static int selectExpander(Walker *pWalker, Select *p){ struct ExprList_item *pX; /* Newly added ExprList term */ assert( zName ); - if( zTName && pSub - && sqlite3MatchEName(&pSub->pEList->a[j], 0, zTName, 0)==0 + if( zTName + && pNestedFrom + && sqlite3MatchEName(&pNestedFrom->a[j], 0, zTName, 0)==0 ){ continue; } @@ -5885,8 +5888,8 @@ static int selectExpander(Walker *pWalker, Select *p){ pX = &pNew->a[pNew->nExpr-1]; assert( pX->zEName==0 ); if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ - if( pSub ){ - pX->zEName = sqlite3DbStrDup(db, pSub->pEList->a[j].zEName); + if( pNestedFrom ){ + pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName); testcase( pX->zEName==0 ); }else{ pX->zEName = sqlite3MPrintf(db, "%s.%s.%s", |