diff options
author | drh <drh@noemail.net> | 2015-04-15 05:57:50 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2015-04-15 05:57:50 +0000 |
commit | 6456b7710c1ff87a5a6b6f58a8d1471a16553434 (patch) | |
tree | f48d4b59d29f91892d3bc898d99525436bb336b8 /src/resolve.c | |
parent | 3457338ced7a521be2fb0aab1808648128a3d43e (diff) | |
download | sqlite-6456b7710c1ff87a5a6b6f58a8d1471a16553434.tar.gz sqlite-6456b7710c1ff87a5a6b6f58a8d1471a16553434.zip |
Correctly handle COLLATE operators applied to COLLATE operators in an
ORDER BY clause.
FossilOrigin-Name: 9e1f837b08facbc7a2b6196770599a58233e725c
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/resolve.c b/src/resolve.c index d66de2795..aa4cddfef 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -994,9 +994,11 @@ static int resolveCompoundOrderBy( if( pItem->pExpr==pE ){ pItem->pExpr = pNew; }else{ - assert( pItem->pExpr->op==TK_COLLATE ); - assert( pItem->pExpr->pLeft==pE ); - pItem->pExpr->pLeft = pNew; + 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; |