summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.h
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-06-17 16:09:16 +0200
committerSergei Golubchik <sergii@pisem.net>2012-06-17 16:09:16 +0200
commitb8153269f1df2945953b0c96f7f1c539b2a5a0de (patch)
treeb228da1b8a8710dde42544b2c41d756362a56b3c /sql/item_strfunc.h
parent6cf8672f432ed3afe71fcbe3cd7a45cec974f729 (diff)
downloadmariadb-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.h24
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);