diff options
author | drh <drh@noemail.net> | 2010-07-22 17:49:52 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2010-07-22 17:49:52 +0000 |
commit | 8342e49f6299287de14d8c2a4f7d8d7d3c327a81 (patch) | |
tree | f1fc0b2046ff678f6d1094d9b3c7c097f941f1e6 /src/expr.c | |
parent | 4be02b901c60865f76a5123571322a83e900d5ad (diff) | |
download | sqlite-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.c | 23 |
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; } |