diff options
author | unknown <ramil/ram@mysql.com/myoffice.izhnet.ru> | 2006-09-21 16:05:01 +0500 |
---|---|---|
committer | unknown <ramil/ram@mysql.com/myoffice.izhnet.ru> | 2006-09-21 16:05:01 +0500 |
commit | 5d3a59fae765f04e912bcf91ea7b1724baf0ba04 (patch) | |
tree | 0125c7578e91dec912ae16b32e016c20f4897b07 /sql/item_strfunc.cc | |
parent | c19ac9ec918408bd72bd718a266a0ef7059c9b07 (diff) | |
download | mariadb-git-5d3a59fae765f04e912bcf91ea7b1724baf0ba04.tar.gz |
Fix for bug #20204: "order by" changes the results returned
Item_substr's results are improperly stored in a temporary table due to
wrongly calculated max_length value for multi-byte charsets if two
arguments specified.
mysql-test/r/ctype_utf8.result:
Fix for bug #20204: "order by" changes the results returned
- test case.
mysql-test/t/ctype_utf8.test:
Fix for bug #20204: "order by" changes the results returned
- test result.
sql/item_strfunc.cc:
Fix for bug #20204: "order by" changes the results returned
- always take into account current mbmaxlen value calculating max_length.
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 1ef11945bd5..98888226e58 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1109,12 +1109,13 @@ void Item_func_substr::fix_length_and_dec() } if (arg_count == 3 && args[2]->const_item()) { - int32 length= (int32) args[2]->val_int() * collation.collation->mbmaxlen; + int32 length= (int32) args[2]->val_int(); if (length <= 0) max_length=0; /* purecov: inspected */ else set_if_smaller(max_length,(uint) length); } + max_length*= collation.collation->mbmaxlen; } |