summaryrefslogtreecommitdiff
path: root/sql/item_timefunc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_timefunc.cc')
-rw-r--r--sql/item_timefunc.cc32
1 files changed, 17 insertions, 15 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 96d7daf9c63..cd46992701b 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -976,7 +976,7 @@ bool Item_func_monthname::fix_length_and_dec()
{
THD* thd= current_thd;
CHARSET_INFO *cs= thd->variables.collation_connection;
- locale= thd->variables.lc_time_names;
+ locale= thd->variables.lc_time_names;
collation.set(cs, DERIVATION_COERCIBLE, locale->repertoire());
decimals=0;
max_length= locale->max_month_name_length * collation.collation->mbmaxlen;
@@ -1575,7 +1575,7 @@ bool Item_func_curtime::get_date(THD *thd, MYSQL_TIME *res,
void Item_func_curtime::print(String *str, enum_query_type query_type)
{
- str->append(func_name());
+ str->append(func_name_cstring());
str->append('(');
if (decimals)
str->append_ulonglong(decimals);
@@ -1637,7 +1637,7 @@ bool Item_func_now::fix_fields(THD *thd, Item **items)
void Item_func_now::print(String *str, enum_query_type query_type)
{
- str->append(func_name());
+ str->append(func_name_cstring());
str->append('(');
if (decimals)
str->append_ulonglong(decimals);
@@ -2109,16 +2109,19 @@ static const char *interval_names[]=
void Item_date_add_interval::print(String *str, enum_query_type query_type)
{
args[0]->print_parenthesised(str, query_type, INTERVAL_PRECEDENCE);
- str->append(date_sub_interval?" - interval ":" + interval ");
+ static LEX_CSTRING minus_interval= { STRING_WITH_LEN(" - interval ") };
+ static LEX_CSTRING plus_interval= { STRING_WITH_LEN(" + interval ") };
+ LEX_CSTRING *tmp= date_sub_interval ? &minus_interval : &plus_interval;
+ str->append(tmp);
args[1]->print(str, query_type);
str->append(' ');
- str->append(interval_names[int_type]);
+ str->append(interval_names[int_type], strlen(interval_names[int_type]));
}
void Item_extract::print(String *str, enum_query_type query_type)
{
str->append(STRING_WITH_LEN("extract("));
- str->append(interval_names[int_type]);
+ str->append(interval_names[int_type], strlen(interval_names[int_type]));
str->append(STRING_WITH_LEN(" from "));
args[0]->print(str, query_type);
str->append(')');
@@ -2260,7 +2263,8 @@ void Item_func::print_cast_temporal(String *str, enum_query_type query_type)
if (decimals && decimals != NOT_FIXED_DEC)
{
str->append('(');
- str->append(llstr(decimals, buf));
+ size_t length= (size_t) (longlong10_to_str(decimals, buf, -10) - buf);
+ str->append(buf, length);
str->append(')');
}
str->append(')');
@@ -2274,18 +2278,16 @@ void Item_char_typecast::print(String *str, enum_query_type query_type)
str->append(STRING_WITH_LEN(" as char"));
if (cast_length != ~0U)
{
+ char buf[20];
+ size_t length= (size_t) (longlong10_to_str(cast_length, buf, 10) - buf);
str->append('(');
- char buffer[20];
- // my_charset_bin is good enough for numbers
- String st(buffer, sizeof(buffer), &my_charset_bin);
- st.set(static_cast<ulonglong>(cast_length), &my_charset_bin);
- str->append(st);
+ str->append(buf, length);
str->append(')');
}
if (cast_cs)
{
str->append(STRING_WITH_LEN(" charset "));
- str->append(cast_cs->csname);
+ str->append(cast_cs->csname, strlen(cast_cs->csname));
}
str->append(')');
}
@@ -2882,7 +2884,7 @@ null_date:
void Item_func_timestamp_diff::print(String *str, enum_query_type query_type)
{
- str->append(func_name());
+ str->append(func_name_cstring());
str->append('(');
switch (int_type) {
@@ -2961,7 +2963,7 @@ String *Item_func_get_format::val_str_ascii(String *str)
void Item_func_get_format::print(String *str, enum_query_type query_type)
{
- str->append(func_name());
+ str->append(func_name_cstring());
str->append('(');
switch (type) {