aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2012-12-07 18:38:16 +0000
committerdrh <drh@noemail.net>2012-12-07 18:38:16 +0000
commit0a8a406e9b5d0549b7c0a169e8af54e2d69b6038 (patch)
tree9391ac1a55c0f77f6dfb63fa756d34a0103a6f33 /src/expr.c
parent4b17cf58559a0759942aa7d984ed1a27b03a76e2 (diff)
downloadsqlite-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.c35
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;
}
/*