aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2010-07-22 17:49:52 +0000
committerdrh <drh@noemail.net>2010-07-22 17:49:52 +0000
commit8342e49f6299287de14d8c2a4f7d8d7d3c327a81 (patch)
treef1fc0b2046ff678f6d1094d9b3c7c097f941f1e6 /src/expr.c
parent4be02b901c60865f76a5123571322a83e900d5ad (diff)
downloadsqlite-8342e49f6299287de14d8c2a4f7d8d7d3c327a81.tar.gz
sqlite-8342e49f6299287de14d8c2a4f7d8d7d3c327a81.zip
Enhance the LIKE/GLOB query optimization so that it works as long as there
is an index with the appropriate collating sequence and even if the default collating sequence of the column is different. Ticket [4711020446da7d93d99]. FossilOrigin-Name: 9f932655f9eb9fdab16d7deed98b7cad414e0ca6
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/expr.c b/src/expr.c
index 204643316..bd28bf939 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -56,24 +56,31 @@ char sqlite3ExprAffinity(Expr *pExpr){
}
/*
+** Set the explicit collating sequence for an expression to the
+** collating sequence supplied in the second argument.
+*/
+Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){
+ if( pExpr && pColl ){
+ pExpr->pColl = pColl;
+ pExpr->flags |= EP_ExpCollate;
+ }
+ return pExpr;
+}
+
+/*
** Set the collating sequence for expression pExpr to be the collating
** sequence named by pToken. Return a pointer to the revised expression.
** The collating sequence is marked as "explicit" using the EP_ExpCollate
** flag. An explicit collating sequence will override implicit
** collating sequences.
*/
-Expr *sqlite3ExprSetColl(Parse *pParse, Expr *pExpr, Token *pCollName){
+Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){
char *zColl = 0; /* Dequoted name of collation sequence */
CollSeq *pColl;
sqlite3 *db = pParse->db;
zColl = sqlite3NameFromToken(db, pCollName);
- if( pExpr && zColl ){
- pColl = sqlite3LocateCollSeq(pParse, zColl);
- if( pColl ){
- pExpr->pColl = pColl;
- pExpr->flags |= EP_ExpCollate;
- }
- }
+ pColl = sqlite3LocateCollSeq(pParse, zColl);
+ sqlite3ExprSetColl(pExpr, pColl);
sqlite3DbFree(db, zColl);
return pExpr;
}