aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/expr.c13
-rw-r--r--src/whereexpr.c6
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 );