diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 13 | ||||
-rw-r--r-- | src/whereexpr.c | 6 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/expr.c b/src/expr.c index 685f04175..f225b59bc 100644 --- a/src/expr.c +++ b/src/expr.c @@ -95,7 +95,18 @@ Expr *sqlite3ExprAddCollateToken( const Token *pCollName, /* Name of collating sequence */ int dequote /* True to dequote pCollName */ ){ - if( pCollName->n>0 ){ + assert( pExpr!=0 || pParse->db->mallocFailed ); + if( pExpr==0 ) return 0; + if( pExpr->op==TK_VECTOR ){ + ExprList *pList = pExpr->x.pList; + if( ALWAYS(pList!=0) ){ + int i; + for(i=0; i<pList->nExpr; i++){ + pList->a[i].pExpr = sqlite3ExprAddCollateToken(pParse,pList->a[i].pExpr, + pCollName, dequote); + } + } + }else if( pCollName->n>0 ){ Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, dequote); if( pNew ){ pNew->pLeft = pExpr; diff --git a/src/whereexpr.c b/src/whereexpr.c index e3c02deac..9029ff181 100644 --- a/src/whereexpr.c +++ b/src/whereexpr.c @@ -1215,11 +1215,9 @@ static void exprAnalyzeExists( if( pInLhs==pEq->pLeft ){ pRet = pEq->pRight; }else{ + CollSeq *p = sqlite3ExprCompareCollSeq(pParse, pEq); + pInLhs = sqlite3ExprAddCollateString(pParse, pInLhs, p?p->zName:"BINARY"); pRet = pEq->pLeft; - if( pRet->op!=TK_VECTOR ){ - CollSeq *p = sqlite3ExprCompareCollSeq(pParse, pEq); - pInLhs = sqlite3ExprAddCollateString(pParse, pInLhs, p?p->zName:"BINARY"); - } } assert( pDup->pLeft==0 ); |