From fb3972602c5e584c9abebaddc79dea50c738b1ba Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 20 Jan 2016 14:22:41 +0000 Subject: [PATCH] Case folding in the LIKE operator should look at all bits of the character, not just the lower 8 bits. Fix for ticket [80369eddd5c94]. This is a back-out of check-in [0a99a8c4facf] with a testcase added. FossilOrigin-Name: 204432ee72fda8e82d244c4aa18de7ec4811b8e1 --- manifest | 17 +++++++++-------- manifest.uuid | 2 +- src/func.c | 2 +- test/like.test | 17 +++++++++++++++++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 1c1653b60a..d21c7850c5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improve\sperformance\sof\ssqlite3VtabImportErrmsg(). -D 2016-01-20T08:47:55.546 +C Case\sfolding\sin\sthe\sLIKE\soperator\sshould\slook\sat\sall\sbits\sof\sthe\scharacter,\nnot\sjust\sthe\slower\s8\sbits.\s\sFix\sfor\sticket\s[80369eddd5c94].\s\sThis\sis\sa\nback-out\sof\scheck-in\s[0a99a8c4facf]\swith\sa\stestcase\sadded. +D 2016-01-20T14:22:41.167 F Makefile.in a476545d0c8626224d0bacac85c6e2967474af81 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 01e855f958932d0d3ed62ec675fc63e2cef61fcb @@ -301,7 +301,7 @@ F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da F src/expr.c df0d7c3230d59abd679da22ff5ce4cfd0e3a0e63 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c e18b3dff7d47c7bcac5ac4fc178a89b9fd322b44 -F src/func.c ccaf46fa98f795673afbfab73dff7c18db88f3cd +F src/func.c ba6c03f9e440f5693086c08ee88e6e60212b3504 F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094 @@ -836,7 +836,7 @@ F test/json103.test 923b288a0610ec86c0951778f7db19cbcca36ad1 F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63 F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200 -F test/like.test edcf6d0a055816fd793eab92454597c1be91f720 +F test/like.test 81632c437a947bf1f7130b19537da6a1a844806a F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da F test/like3.test 3608a2042b6f922f900fbfd5d3ce4e7eca57f7c4 F test/limit.test 0c99a27a87b14c646a9d583c7c89fd06c352663e @@ -1419,7 +1419,8 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P ff8eadbed5004ab03438f737492387dee6b9750a -R 9def3e1e6201afa0dc73a868079c61c0 -U dan -Z 16223910bb7e7f6f85293111cf2f150d +P 18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e +Q -0a99a8c4facf65ec67d8d86108c9a3f723f7cbd6 +R a12b99ab1200f8dc9c9bb177fd701c6e +U drh +Z 48772c507adcfea733ff1f22cebdbc4d diff --git a/manifest.uuid b/manifest.uuid index eacc6db990..f32ef30853 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e \ No newline at end of file +204432ee72fda8e82d244c4aa18de7ec4811b8e1 \ No newline at end of file diff --git a/src/func.c b/src/func.c index 45bbb35cd8..b927296782 100644 --- a/src/func.c +++ b/src/func.c @@ -739,7 +739,7 @@ static int patternCompare( } c2 = Utf8Read(zString); if( c==c2 ) continue; - if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) ){ + if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){ continue; } if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue; diff --git a/test/like.test b/test/like.test index ceb5f2bfac..fba89e9037 100644 --- a/test/like.test +++ b/test/like.test @@ -964,5 +964,22 @@ do_execsql_test like-12.16 { SELECT id FROM t12b WHERE x LIKE 'abc%' COLLATE binary ORDER BY +id; } {/SCAN/} +# Ticket [https://www.sqlite.org/src/tktview/80369eddd5c94d49f7fbbcf5] +# 2016-01-20 +# +do_execsql_test like-13.1 { + SELECT char(0x304d) LIKE char(0x306d); +} {0} +do_execsql_test like-13.2 { + SELECT char(0x4d) LIKE char(0x306d); +} {0} +do_execsql_test like-13.3 { + SELECT char(0x304d) LIKE char(0x6d); +} {0} +do_execsql_test like-13.4 { + SELECT char(0x4d) LIKE char(0x6d); +} {1} + + finish_test -- 2.47.2