aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-04-15 05:57:50 +0000
committerdrh <drh@noemail.net>2015-04-15 05:57:50 +0000
commit6456b7710c1ff87a5a6b6f58a8d1471a16553434 (patch)
treef48d4b59d29f91892d3bc898d99525436bb336b8 /src/resolve.c
parent3457338ced7a521be2fb0aab1808648128a3d43e (diff)
downloadsqlite-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.c8
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;