diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-06-17 16:09:16 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-06-17 16:09:16 +0200 |
commit | b8153269f1df2945953b0c96f7f1c539b2a5a0de (patch) | |
tree | b228da1b8a8710dde42544b2c41d756362a56b3c /sql/item_strfunc.h | |
parent | 6cf8672f432ed3afe71fcbe3cd7a45cec974f729 (diff) | |
download | mariadb-git-b8153269f1df2945953b0c96f7f1c539b2a5a0de.tar.gz |
fix an overly agressive optimization in Item_func_conv_charset
Diffstat (limited to 'sql/item_strfunc.h')
-rw-r--r-- | sql/item_strfunc.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 3361464814e..eb764bf7791 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -855,13 +855,29 @@ public: } String *val_str(String *); longlong val_int() - { return args[0]->val_int(); } + { + if (args[0]->result_type() == STRING_RESULT) + return Item_str_func::val_int(); + return args[0]->val_int(); + } double val_real() - { return args[0]->val_real(); } + { + if (args[0]->result_type() == STRING_RESULT) + return Item_str_func::val_real(); + return args[0]->val_real(); + } my_decimal *val_decimal(my_decimal *d) - { return args[0]->val_decimal(d); } + { + if (args[0]->result_type() == STRING_RESULT) + return Item_str_func::val_decimal(d); + return args[0]->val_decimal(d); + } bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate) - { return args[0]->get_date(ltime, fuzzydate); } + { + if (args[0]->result_type() == STRING_RESULT) + return Item_str_func::get_date(ltime, fuzzydate); + return args[0]->get_date(ltime, fuzzydate); + } void fix_length_and_dec(); const char *func_name() const { return "convert"; } virtual void print(String *str, enum_query_type query_type); |