From d91eba96734ecea60ac584c314bca11ea8bc5685 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 8 Dec 2012 00:52:14 +0000 Subject: [PATCH] Recognize TK_COLLATE operators that have been transformed into TK_REGISTER. Skip both TK_COLLATE and TK_AS operators when looking for the top of an expression. FossilOrigin-Name: f66c1db2965054f38125218202b6a6ec62d57666 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 9 ++++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 7389441669..b053670e8d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\serror\smessages\swhen\scolumn\sintegers\sin\san\sORDER\sBY\sclause\sare\s\nout\sof\srange. -D 2012-12-07T23:23:53.894 +C Recognize\sTK_COLLATE\soperators\sthat\shave\sbeen\stransformed\sinto\sTK_REGISTER.\nSkip\sboth\sTK_COLLATE\sand\sTK_AS\soperators\swhen\slooking\sfor\sthe\stop\sof\san\nexpression. +D 2012-12-08T00:52:14.756 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 690d441a758cbffd13e814dc2724a721a6ebd400 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -130,7 +130,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 72a70dcfda75d3a1f81041ce4573e7afddcd8e4e F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4 F src/delete.c 9b8d308979114991e5dc7cee958316e07186941d -F src/expr.c 6b50dcc885e8f898e6ba97457d1b2305b78cc8d0 +F src/expr.c 7b3659c3dc5fb667a1c47262182b79495ab3c19d F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c ddf44f8ce43b91623e8687fd940c6bf3882d9480 F src/func.c 8147799b048065a1590805be464d05b4913e652c @@ -1025,7 +1025,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P 8e724b383da1314909c9a05e9d941a26a9f50b95 -R 881a229233da2a5bfc26c84533c04750 +P bd960d937f8d6521c8ec4b7bd8a77a498dd432d4 +R 186ed0129944dda9e365917ac59a8e17 U drh -Z a8bde7d83f4cf51f4dbb6d352a9305a4 +Z a53089f14a1e3e28e1b6c68901d1de44 diff --git a/manifest.uuid b/manifest.uuid index 55db2ef471..127f567337 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bd960d937f8d6521c8ec4b7bd8a77a498dd432d4 \ No newline at end of file +f66c1db2965054f38125218202b6a6ec62d57666 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 0e4a3cb1f3..abba7d4ffa 100644 --- a/src/expr.c +++ b/src/expr.c @@ -85,10 +85,13 @@ Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, const char *zC){ } /* -** Skip over any TK_COLLATE operator in an expression. +** Skip over any TK_COLLATE and/or TK_AS operators at the root of +** an expression. */ Expr *sqlite3ExprSkipCollate(Expr *pExpr){ - if( pExpr && pExpr->op==TK_COLLATE ) pExpr = pExpr->pLeft; + while( pExpr && (pExpr->op==TK_COLLATE || pExpr->op==TK_AS) ){ + pExpr = pExpr->pLeft; + } return pExpr; } @@ -111,7 +114,7 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ p = p->pLeft; continue; } - if( op==TK_COLLATE ){ + if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ if( db->init.busy ){ /* Do not report errors when parsing while the schema */ pColl = sqlite3FindCollSeq(db, ENC(db), p->u.zToken, 0);