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
This commit is contained in:
drh 2016-01-20 14:22:41 +00:00
parent 5c3aa0517e
commit fb3972602c
4 changed files with 28 additions and 10 deletions

View File

@ -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

View File

@ -1 +1 @@
18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e
204432ee72fda8e82d244c4aa18de7ec4811b8e1

View File

@ -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;

View File

@ -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