diff options
author | unknown <bar@mysql.com> | 2005-06-06 16:54:15 +0500 |
---|---|---|
committer | unknown <bar@mysql.com> | 2005-06-06 16:54:15 +0500 |
commit | e7300f13465e8e218351f61a4bef6b8133ed79b4 (patch) | |
tree | 901c99571e02ef1768a731b79400976f99f118e3 /sql/item_strfunc.cc | |
parent | 29f18223aaec312d214658ffc59694a0ab6be6d7 (diff) | |
download | mariadb-git-e7300f13465e8e218351f61a4bef6b8133ed79b4.tar.gz |
Bug#8610: The ucs2_turkish_ci collation fails with upper('i')
UPPER/LOWER now can return a string with different length.
mi_test1.c:
Adding new arguments.
Many files:
Changeing caseup/casedn to return a result with different
length than argument.
sql_string.h:
Removing unused method,
mysql_priv.h:
Removing unused method
strings/ctype-big5.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-bin.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-cp932.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-czech.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-euc_kr.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-extra.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-eucjpms.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-gb2312.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-gbk.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-latin1.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-mb.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-simple.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-sjis.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-tis620.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-uca.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-ucs2.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-ujis.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-utf8.c:
Changeing caseup/casedn to return a result with different length than argument.
strings/ctype-win1250ch.c:
Changeing caseup/casedn to return a result with different length than argument.
sql/item_strfunc.cc:
Changeing caseup/casedn to return a result with different length than argument.
sql/item_strfunc.h:
Changeing caseup/casedn to return a result with different length than argument.
sql/mysql_priv.h:
Removing unused method
sql/sql_string.h:
Removing unused method,
client/sql_string.h:
Changeing caseup/casedn to return a result with different length than argument.
include/m_ctype.h:
Changeing caseup/casedn to return a result with different length than argument.
myisam/mi_test1.c:
Adding new arguments.
mysql-test/r/ctype_uca.result:
UPPER/LOWER now can return a string with different length.
mysql-test/t/ctype_uca.test:
UPPER/LOWER now can return a string with different length.
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 4808159fe98..c43f65c731c 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -902,7 +902,7 @@ void Item_func_insert::fix_length_and_dec() } -String *Item_func_lcase::val_str(String *str) +String *Item_str_conv::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res; @@ -912,24 +912,25 @@ String *Item_func_lcase::val_str(String *str) return 0; /* purecov: inspected */ } null_value=0; - res=copy_if_not_alloced(str,res,res->length()); - res->casedn(); - return res; -} - - -String *Item_func_ucase::val_str(String *str) -{ - DBUG_ASSERT(fixed == 1); - String *res; - if (!(res=args[0]->val_str(str))) + if (multiply == 1) { - null_value=1; /* purecov: inspected */ - return 0; /* purecov: inspected */ + uint len; + res= copy_if_not_alloced(str,res,res->length()); + len= converter(collation.collation, (char*) res->ptr(), res->length(), + (char*) res->ptr(), res->length()); + DBUG_ASSERT(len <= res->length()); + res->length(len); + } + else + { + uint len= res->length() * multiply; + tmp_value.alloc(len); + tmp_value.set_charset(collation.collation); + len= converter(collation.collation, (char*) res->ptr(), res->length(), + (char*) tmp_value.ptr(), len); + tmp_value.length(len); + res= &tmp_value; } - null_value=0; - res=copy_if_not_alloced(str,res,res->length()); - res->caseup(); return res; } |