diff options
author | unknown <bar@mysql.com> | 2005-09-06 16:16:10 +0500 |
---|---|---|
committer | unknown <bar@mysql.com> | 2005-09-06 16:16:10 +0500 |
commit | 965afd45a18f0af3395c4750c072788e1f9b2ee1 (patch) | |
tree | f5e60a5cc5b8f3d74322e27c60478d1b679f3f79 /sql/item_cmpfunc.cc | |
parent | e254105bec21fc101326ca366ef85cd0d8d4ed98 (diff) | |
download | mariadb-git-965afd45a18f0af3395c4750c072788e1f9b2ee1.tar.gz |
func_like.result, func_like.test:
adding test case.
item_cmpfunc.cc:
Bug#12611
ESCAPE + LIKE do not work when the escape char is a multibyte one
Additional fix for 8bit character sets:
escape character must be converted into
operation character set.
sql/item_cmpfunc.cc:
Bug#12611
ESCAPE + LIKE do not work when the escape char is a multibyte one
Additional fix for 8bit character sets:
escape character must be converted into
operation character set.
mysql-test/t/func_like.test:
adding test case.
mysql-test/r/func_like.result:
adding test case.
Diffstat (limited to 'sql/item_cmpfunc.cc')
-rw-r--r-- | sql/item_cmpfunc.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index c869e7f5c65..ead07892bee 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2307,7 +2307,24 @@ bool Item_func_like::fix_fields(THD *thd, TABLE_LIST *tlist, Item ** ref) } else { - escape= *(escape_str->ptr()); + /* + In the case of 8bit character set, we pass native + code instead of Unicode code as "escape" argument. + Convert to "cs" if charset of escape differs. + */ + uint32 unused; + if (escape_str->needs_conversion(escape_str->length(), + escape_str->charset(), cs, &unused)) + { + char ch; + uint errors; + uint32 cnvlen= copy_and_convert(&ch, 1, cs, escape_str->ptr(), + escape_str->length(), + escape_str->charset(), &errors); + escape= cnvlen ? ch : '\\'; + } + else + escape= *(escape_str->ptr()); } } else |