diff options
Diffstat (limited to 'sql/item_timefunc.cc')
-rw-r--r-- | sql/item_timefunc.cc | 32 |
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) { |