diff options
author | drh <drh@noemail.net> | 2012-12-07 18:38:16 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2012-12-07 18:38:16 +0000 |
commit | 0a8a406e9b5d0549b7c0a169e8af54e2d69b6038 (patch) | |
tree | 9391ac1a55c0f77f6dfb63fa756d34a0103a6f33 /src/expr.c | |
parent | 4b17cf58559a0759942aa7d984ed1a27b03a76e2 (diff) | |
download | sqlite-0a8a406e9b5d0549b7c0a169e8af54e2d69b6038.tar.gz sqlite-0a8a406e9b5d0549b7c0a169e8af54e2d69b6038.zip |
Some errors in veryquick resolved. Many more to go.
FossilOrigin-Name: 972443b4eb282d45507da06c75e2cd46dd72326b
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/expr.c b/src/expr.c index 34be87114..b47752aec 100644 --- a/src/expr.c +++ b/src/expr.c @@ -59,14 +59,37 @@ char sqlite3ExprAffinity(Expr *pExpr){ ** Set the collating sequence for expression pExpr to be the collating ** sequence named by pToken. Return a pointer to a new Expr node that ** implements the COLLATE operator. +** +** If a memory allocation error occurs, that fact is recorded in pParse->db +** and the pExpr parameter is returned unchanged. */ -Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){ - Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, 1); - if( pNew ){ - pNew->pLeft = pExpr; - pNew->flags |= EP_Collate; +Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr *pExpr, Token *pCollName){ + if( pCollName->n>0 ){ + Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, 1); + if( pNew ){ + pNew->pLeft = pExpr; + pNew->flags |= EP_Collate; + pExpr = pNew; + } } - return pNew; + return pExpr; +} +Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, const char *zC){ + if( zC ){ + Token s; + s.z = zC; + s.n = sqlite3Strlen30(s.z); + pExpr = sqlite3ExprAddCollateToken(pParse, pExpr, &s); + } + return pExpr; +} + +/* +** Skip over any TK_COLLATE operator in an expression. +*/ +Expr *sqlite3ExprSkipCollate(Expr *pExpr){ + if( pExpr && pExpr->op==TK_COLLATE ) pExpr = pExpr->pLeft; + return pExpr; } /* |