1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-10 01:02:56 +03:00

Tie up the loose ends in the ExprList size reduction.

FossilOrigin-Name: 59d0f3afe5249a2a6453fe7bc810c2c7beb896d3800174c7c90f9304c0b1ad88
This commit is contained in:
drh
2019-12-13 00:49:42 +00:00
parent cbb9da337e
commit c4938ea2ba
7 changed files with 49 additions and 33 deletions

View File

@@ -132,13 +132,16 @@ static int nameInUsingClause(IdList *pUsing, const char *zCol){
** and zCol. If any of zDb, zTab, and zCol are NULL then those fields will
** match anything.
*/
int sqlite3MatchSpanName(
const char *zSpan,
int sqlite3MatchEName(
const struct ExprList_item *pItem,
const char *zCol,
const char *zTab,
const char *zDb
){
int n;
const char *zSpan;
if( pItem->eEName!=ENAME_TAB ) return 0;
zSpan = pItem->zEName;
for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){
return 0;
@@ -267,7 +270,7 @@ static int lookupName(
int hit = 0;
pEList = pItem->pSelect->pEList;
for(j=0; j<pEList->nExpr; j++){
if( sqlite3MatchSpanName(pEList->a[j].zEName, zCol, zTab, zDb) ){
if( sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb) ){
cnt++;
cntTab = 2;
pMatch = pItem;
@@ -448,8 +451,11 @@ static int lookupName(
pEList = pNC->uNC.pEList;
assert( pEList!=0 );
for(j=0; j<pEList->nExpr; j++){
char *zAs = pEList->a[j].zEName;
if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
char *zAs;
if( pEList->a[j].eEName==ENAME_NAME
&& (zAs = pEList->a[j].zEName)!=0
&& sqlite3StrICmp(zAs, zCol)==0
){
Expr *pOrig;
assert( pExpr->pLeft==0 && pExpr->pRight==0 );
assert( pExpr->x.pList==0 );
@@ -1116,7 +1122,10 @@ static int resolveAsName(
char *zCol = pE->u.zToken;
for(i=0; i<pEList->nExpr; i++){
char *zAs = pEList->a[i].zEName;
if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
if( pEList->a[i].eEName==ENAME_NAME
&& (zAs = pEList->a[i].zEName)!=0
&& sqlite3StrICmp(zAs, zCol)==0
){
return i+1;
}
}