diff options
author | Alexander Barkov <bar@mysql.com> | 2010-08-19 15:55:35 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mysql.com> | 2010-08-19 15:55:35 +0400 |
commit | 7f98714247d601c353779d8615a5624cf00b5e6a (patch) | |
tree | 0da012c099ad33a789a218b378cd58bbe76ccb47 /mysql-test/t/case.test | |
parent | 27f5c57cb0c622281b2dd4a9e9c5b327b2bcc6d7 (diff) | |
download | mariadb-git-7f98714247d601c353779d8615a5624cf00b5e6a.tar.gz |
Bug#54916 GROUP_CONCAT + IFNULL truncates output
Problem: a few functions did not calculate their max_length correctly.
This is an after-fix for WL#2649 Number-to-string conversions".
Fix: changing the buggy functions to calculate max_length
using fix_char_length() introduced in WL#2649,
instead of setting max_length directly
mysql-test/include/ctype_numconv.inc
Adding new tests
mysql-test/r/ctype_binary.result
Adding new tests
mysql-test/r/ctype_cp1251.result
Adding new tests
mysql-test/r/ctype_latin1.result
Adding new tests
mysql-test/r/ctype_ucs.result
Adding new tests
mysql-test/r/ctype_utf8.result
Adding new tests
mysql-test/t/ctype_utf8.test
Including ctype_numconv
sql/item.h
- Introducing new method fix_char_length_ulonglong(),
for the cases when length is potentially greater
than UINT_MAX32. This method removes a few
instances of duplicate code, e.g. in item_strfunc.cc.
- Setting collation in Item_copy properly. This change
fixes wrong metadata on client side in some cases, when
"binary" instead of the real character set was reported.
sql/item_cmpfunc.cc
- Using fix_char_length() and max_char_length() methods,
instead of direct access to max_length, to calculate
item length properly.
- Moving count_only_length() in COALESCE after
agg_arg_charsets_for_string_result(). The old
order was incorrect and led to wrong length
calucation in case of multi-byte character sets.
sql/item_func.cc
Fixing that count_only_length() didn't work
properly for multi-byte character sets.
Using fix_char_length() and max_char_length()
instead of direct access to max_length.
sql/item_strfunc.cc
- Using fix_char_length(), fix_char_length_ulonglong(),
max_char_length() instead of direct access to max_length.
- Removing wierd condition: "if (collation.collation->mbmaxlen > 0)",
which is never FALSE.
Diffstat (limited to 'mysql-test/t/case.test')
-rw-r--r-- | mysql-test/t/case.test | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test index 028c64d6de7..e1c807fe32b 100644 --- a/mysql-test/t/case.test +++ b/mysql-test/t/case.test @@ -111,6 +111,9 @@ explain extended SELECT SHOW CREATE TABLE t1; DROP TABLE t1; +--error 1267 +CREATE TABLE t1 SELECT IFNULL('a' COLLATE latin1_swedish_ci, 'b' COLLATE latin1_bin); + # Test for BUG#10151 SELECT 'case+union+test' UNION |