aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-04-06 18:16:31 +0000
committerdrh <drh@noemail.net>2020-04-06 18:16:31 +0000
commitd44390c8c54268e1651fafb9ee738574947aceba (patch)
treedada4b22ba9554235ba5fcec32ea35b8610d5851 /src/resolve.c
parent85f2c76cf9eeae30fb410c73c7427724dbb02182 (diff)
downloadsqlite-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.c7
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;
}