summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-01-26 17:52:24 +0400
committerAlexander Barkov <bar@mariadb.org>2016-01-26 17:52:24 +0400
commit77c75a46cfe9ffa914c73fe129dec743b80ed57b (patch)
tree0d41f8dcaea54c93ccfe037b5b1f5f8b9baefb5e
parent71b39066d4320e74e5ad73f4f5a6d436e32f14f3 (diff)
downloadmariadb-git-77c75a46cfe9ffa914c73fe129dec743b80ed57b.tar.gz
A clean-up patch for Item_func_conv_charset (needed for MDEV-9181)
Removing the "conv_charset" member and using collation.collation instead, as they duplicated each other.
-rw-r--r--sql/item_strfunc.cc6
-rw-r--r--sql/item_strfunc.h10
-rw-r--r--storage/spider/spd_db_mysql.cc2
3 files changed, 10 insertions, 8 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 6c49c02f9aa..9880db7745a 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -3404,7 +3404,7 @@ String *Item_func_conv_charset::val_str(String *str)
String *arg= args[0]->val_str(str);
String_copier_for_item copier(current_thd);
return ((null_value= args[0]->null_value ||
- copier.copy_with_warn(conv_charset, &tmp_value,
+ copier.copy_with_warn(collation.collation, &tmp_value,
arg->charset(), arg->ptr(),
arg->length(), arg->length()))) ?
0 : &tmp_value;
@@ -3412,7 +3412,7 @@ String *Item_func_conv_charset::val_str(String *str)
void Item_func_conv_charset::fix_length_and_dec()
{
- collation.set(conv_charset, DERIVATION_IMPLICIT);
+ DBUG_ASSERT(collation.derivation == DERIVATION_IMPLICIT);
fix_char_length(args[0]->max_char_length());
}
@@ -3421,7 +3421,7 @@ void Item_func_conv_charset::print(String *str, enum_query_type query_type)
str->append(STRING_WITH_LEN("convert("));
args[0]->print(str, query_type);
str->append(STRING_WITH_LEN(" using "));
- str->append(conv_charset->csname);
+ str->append(collation.collation->csname);
str->append(')');
}
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 1a9f855dec5..65c286819d3 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -959,20 +959,22 @@ class Item_func_conv_charset :public Item_str_func
String tmp_value;
public:
bool safe;
- CHARSET_INFO *conv_charset; // keep it public
Item_func_conv_charset(THD *thd, Item *a, CHARSET_INFO *cs):
Item_str_func(thd, a)
- { conv_charset= cs; use_cached_value= 0; safe= 0; }
+ {
+ collation.set(cs, DERIVATION_IMPLICIT);
+ use_cached_value= 0; safe= 0;
+ }
Item_func_conv_charset(THD *thd, Item *a, CHARSET_INFO *cs, bool cache_if_const):
Item_str_func(thd, a)
{
- conv_charset= cs;
+ collation.set(cs, DERIVATION_IMPLICIT);
if (cache_if_const && args[0]->const_item() && !args[0]->is_expensive())
{
uint errors= 0;
String tmp, *str= args[0]->val_str(&tmp);
if (!str || str_value.copy(str->ptr(), str->length(),
- str->charset(), conv_charset, &errors))
+ str->charset(), cs, &errors))
null_value= 1;
use_cached_value= 1;
str_value.mark_as_const();
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index 22aef83c7d4..3f56d9a9d89 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -4041,7 +4041,7 @@ int spider_db_mysql_util::open_item_func(
{
Item_func_conv_charset *item_func_conv_charset =
(Item_func_conv_charset *)item_func;
- CHARSET_INFO *conv_charset = item_func_conv_charset->conv_charset;
+ CHARSET_INFO *conv_charset = item_func_conv_charset->collation.collation;
uint cset_length = strlen(conv_charset->csname);
if (str->reserve(SPIDER_SQL_USING_LEN + cset_length))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);