diff options
author | drh <drh@noemail.net> | 2020-04-06 18:16:31 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-04-06 18:16:31 +0000 |
commit | d44390c8c54268e1651fafb9ee738574947aceba (patch) | |
tree | dada4b22ba9554235ba5fcec32ea35b8610d5851 /src/resolve.c | |
parent | 85f2c76cf9eeae30fb410c73c7427724dbb02182 (diff) | |
download | sqlite-d44390c8c54268e1651fafb9ee738574947aceba.tar.gz sqlite-d44390c8c54268e1651fafb9ee738574947aceba.zip |
Performance improvement for column name lookup.
FossilOrigin-Name: 1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/resolve.c b/src/resolve.c index 2def65f99..5877dfa37 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -294,6 +294,7 @@ static int lookupName( if( pSrcList ){ for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){ + u8 hCol; pTab = pItem->pTab; assert( pTab!=0 && pTab->zName!=0 ); assert( pTab->nCol>0 ); @@ -327,8 +328,9 @@ static int lookupName( if( 0==(cntTab++) ){ pMatch = pItem; } + hCol = sqlite3StrIHash(zCol); for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){ - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + if( pCol->hName==hCol && sqlite3StrICmp(pCol->zName, zCol)==0 ){ /* If there has been exactly one prior match and this match ** is for the right-hand table of a NATURAL JOIN or is in a ** USING clause, then skip this match. @@ -389,10 +391,11 @@ static int lookupName( if( pTab ){ int iCol; + u8 hCol = sqlite3StrIHash(zCol); pSchema = pTab->pSchema; cntTab++; for(iCol=0, pCol=pTab->aCol; iCol<pTab->nCol; iCol++, pCol++){ - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + if( pCol->hName==hCol && sqlite3StrICmp(pCol->zName, zCol)==0 ){ if( iCol==pTab->iPKey ){ iCol = -1; } |