diff options
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/resolve.c b/src/resolve.c index b2da946a9..86fd543d0 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1160,12 +1160,7 @@ static int resolveCompoundOrderBy( assert(pDup); iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup); } - if( IN_RENAME_OBJECT ){ - if( iCol>0 ){ - pItem->done = 1; - continue; - } - }else{ + if( !IN_RENAME_OBJECT ){ sqlite3ExprDelete(db, pDup); } } @@ -1173,21 +1168,23 @@ static int resolveCompoundOrderBy( if( iCol>0 ){ /* Convert the ORDER BY term into an integer column number iCol, ** taking care to preserve the COLLATE clause if it exists */ - Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); - if( pNew==0 ) return 1; - pNew->flags |= EP_IntValue; - pNew->u.iValue = iCol; - if( pItem->pExpr==pE ){ - pItem->pExpr = pNew; - }else{ - Expr *pParent = pItem->pExpr; - assert( pParent->op==TK_COLLATE ); - while( pParent->pLeft->op==TK_COLLATE ) pParent = pParent->pLeft; - assert( pParent->pLeft==pE ); - pParent->pLeft = pNew; + if( !IN_RENAME_OBJECT ){ + Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); + if( pNew==0 ) return 1; + pNew->flags |= EP_IntValue; + pNew->u.iValue = iCol; + if( pItem->pExpr==pE ){ + pItem->pExpr = pNew; + }else{ + Expr *pParent = pItem->pExpr; + assert( pParent->op==TK_COLLATE ); + while( pParent->pLeft->op==TK_COLLATE ) pParent = pParent->pLeft; + assert( pParent->pLeft==pE ); + pParent->pLeft = pNew; + } + sqlite3ExprDelete(db, pE); + pItem->u.x.iOrderByCol = (u16)iCol; } - sqlite3ExprDelete(db, pE); - pItem->u.x.iOrderByCol = (u16)iCol; pItem->done = 1; }else{ moreToDo = 1; |