From 1e66871713b7196daf1e9416823d57d5bbac85a1 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 3 Sep 2014 18:24:31 +0400 Subject: [PATCH] Adding Item_string_sys and Item_string_ascii to reduce duplicate code --- sql/item.h | 26 +++++++++++++++++++++++++ sql/sql_acl.cc | 2 +- sql/sql_explain.cc | 20 +++++++------------- sql/sql_help.cc | 2 +- sql/sql_select.cc | 47 +++++++++++++++++----------------------------- sql/sql_yacc.yy | 10 +++++----- 6 files changed, 57 insertions(+), 50 deletions(-) diff --git a/sql/item.h b/sql/item.h index 814ec121803..2647f0b20bd 100644 --- a/sql/item.h +++ b/sql/item.h @@ -2929,6 +2929,32 @@ public: }; +class Item_string_sys :public Item_string +{ +public: + Item_string_sys(const char *str, uint length) + :Item_string(str, length, system_charset_info) + { } + Item_string_sys(const char *str) + :Item_string(str, strlen(str), system_charset_info) + { } +}; + + +class Item_string_ascii :public Item_string +{ +public: + Item_string_ascii(const char *str, uint length) + :Item_string(str, length, &my_charset_latin1, + DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII) + { } + Item_string_ascii(const char *str) + :Item_string(str, strlen(str), &my_charset_latin1, + DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII) + { } +}; + + longlong longlong_from_string_with_check(CHARSET_INFO *cs, const char *cptr, const char *end); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index abc53687ee0..2847da9d3da 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -7551,7 +7551,7 @@ bool mysql_show_grants(THD *thd, LEX_USER *lex_user) } DBUG_ASSERT(rolename || username); - Item_string *field=new Item_string("",0,&my_charset_latin1); + Item_string *field=new Item_string_ascii("", 0); List field_list; field->name=buff; field->max_length=1024; diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 84ff8759d96..2b523b323a4 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -203,15 +203,13 @@ bool Explain_query::print_explain_str(THD *thd, String *out_str) static void push_str(List *item_list, const char *str) { - item_list->push_back(new Item_string(str, - strlen(str), system_charset_info)); + item_list->push_back(new Item_string_sys(str)); } static void push_string(List *item_list, String *str) { - item_list->push_back(new Item_string(str->ptr(), str->length(), - system_charset_info)); + item_list->push_back(new Item_string_sys(str->ptr(), str->length())); } @@ -262,8 +260,7 @@ int Explain_union::print_explain(Explain_query *query, len+= lastop; table_name_buffer[len - 1]= '>'; // change ',' to '>' } - const CHARSET_INFO *cs= system_charset_info; - item_list.push_back(new Item_string(table_name_buffer, len, cs)); + item_list.push_back(new Item_string_sys(table_name_buffer, len)); } /* `partitions` column */ @@ -298,8 +295,7 @@ int Explain_union::print_explain(Explain_query *query, { extra_buf.append(STRING_WITH_LEN("Using filesort")); } - const CHARSET_INFO *cs= system_charset_info; - item_list.push_back(new Item_string(extra_buf.ptr(), extra_buf.length(), cs)); + item_list.push_back(new Item_string_sys(extra_buf.ptr(), extra_buf.length())); //output->unit.offset_limit_cnt= 0; if (output->send_data(item_list)) @@ -349,12 +345,10 @@ int Explain_select::print_explain(Explain_query *query, if (message) { List item_list; - const CHARSET_INFO *cs= system_charset_info; Item *item_null= new Item_null(); item_list.push_back(new Item_int((int32) select_id)); - item_list.push_back(new Item_string(select_type, - strlen(select_type), cs)); + item_list.push_back(new Item_string_sys(select_type)); for (uint i=0 ; i < 7; i++) item_list.push_back(item_null); if (explain_flags & DESCRIBE_PARTITIONS) @@ -362,7 +356,7 @@ int Explain_select::print_explain(Explain_query *query, if (explain_flags & DESCRIBE_EXTENDED) item_list.push_back(item_null); - item_list.push_back(new Item_string(message,strlen(message),cs)); + item_list.push_back(new Item_string_sys(message)); if (output->send_data(item_list)) return 1; @@ -560,7 +554,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai extra_buf.append(STRING_WITH_LEN("Using filesort")); } - item_list.push_back(new Item_string(extra_buf.ptr(), extra_buf.length(), cs)); + item_list.push_back(new Item_string_sys(extra_buf.ptr(), extra_buf.length())); if (output->send_data(item_list)) return 1; diff --git a/sql/sql_help.cc b/sql/sql_help.cc index 844810af0f4..8f458ea0b9f 100644 --- a/sql/sql_help.cc +++ b/sql/sql_help.cc @@ -626,7 +626,7 @@ SQL_SELECT *prepare_select_for_name(THD *thd, const char *mask, uint mlen, { Item *cond= new Item_func_like(new Item_field(pfname), new Item_string(mask,mlen,pfname->charset()), - new Item_string("\\",1,&my_charset_latin1), + new Item_string_ascii("\\"), FALSE); if (thd->is_fatal_error) return 0; // OOM diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8146eb7a909..52015ee5ba7 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -22950,13 +22950,11 @@ int print_explain_message_line(select_result_sink *result, ha_rows *rows, const char *message) { - const CHARSET_INFO *cs= system_charset_info; Item *item_null= new Item_null(); List item_list; item_list.push_back(new Item_int((int32) select_number)); - item_list.push_back(new Item_string(select_type, - strlen(select_type), cs)); + item_list.push_back(new Item_string_sys(select_type)); /* `table` */ item_list.push_back(item_null); @@ -22983,7 +22981,7 @@ int print_explain_message_line(select_result_sink *result, /* `Extra` */ if (message) - item_list.push_back(new Item_string(message,strlen(message),cs)); + item_list.push_back(new Item_string_sys(message)); else item_list.push_back(item_null); @@ -23042,45 +23040,39 @@ int print_explain_row(select_result_sink *result, ha_rows *rows, const char *extra) { - const CHARSET_INFO *cs= system_charset_info; Item *item_null= new Item_null(); List item_list; Item *item; item_list.push_back(new Item_int((int32) select_number)); - item_list.push_back(new Item_string(select_type, - strlen(select_type), cs)); - item_list.push_back(new Item_string(table_name, - strlen(table_name), cs)); + item_list.push_back(new Item_string_sys(select_type)); + item_list.push_back(new Item_string_sys(table_name)); if (options & DESCRIBE_PARTITIONS) { if (partitions) { - item_list.push_back(new Item_string(partitions, - strlen(partitions), cs)); + item_list.push_back(new Item_string_sys(partitions)); } else item_list.push_back(item_null); } const char *jtype_str= join_type_str[jtype]; - item_list.push_back(new Item_string(jtype_str, - strlen(jtype_str), cs)); + item_list.push_back(new Item_string_sys(jtype_str)); - item= possible_keys? new Item_string(possible_keys, strlen(possible_keys), - cs) : item_null; + item= possible_keys? new Item_string_sys(possible_keys) : item_null; item_list.push_back(item); /* 'index */ - item= index ? new Item_string(index, strlen(index), cs) : item_null; + item= index ? new Item_string_sys(index) : item_null; item_list.push_back(item); /* 'key_len */ - item= key_len ? new Item_string(key_len, strlen(key_len), cs) : item_null; + item= key_len ? new Item_string_sys(key_len) : item_null; item_list.push_back(item); /* 'ref' */ - item= ref ? new Item_string(ref, strlen(ref), cs) : item_null; + item= ref ? new Item_string_sys(ref) : item_null; item_list.push_back(item); /* 'rows' */ @@ -23099,7 +23091,7 @@ int print_explain_row(select_result_sink *result, /* 'Extra' */ if (extra) - item_list.push_back(new Item_string(extra, strlen(extra), cs)); + item_list.push_back(new Item_string_sys(extra)); else item_list.push_back(item_null); @@ -23112,7 +23104,6 @@ int print_explain_row(select_result_sink *result, int print_fake_select_lex_join(select_result_sink *result, bool on_the_fly, SELECT_LEX *select_lex, uint8 explain_flags) { - const CHARSET_INFO *cs= system_charset_info; Item *item_null= new Item_null(); List item_list; if (on_the_fly) @@ -23129,9 +23120,7 @@ int print_fake_select_lex_join(select_result_sink *result, bool on_the_fly, /* id */ item_list.push_back(new Item_null); /* select_type */ - item_list.push_back(new Item_string(select_lex->type, - strlen(select_lex->type), - cs)); + item_list.push_back(new Item_string_sys(select_lex->type)); /* table */ { SELECT_LEX *sl= select_lex->master_unit()->first_select(); @@ -23153,15 +23142,14 @@ int print_fake_select_lex_join(select_result_sink *result, bool on_the_fly, len+= lastop; table_name_buffer[len - 1]= '>'; // change ',' to '>' } - item_list.push_back(new Item_string(table_name_buffer, len, cs)); + item_list.push_back(new Item_string_sys(table_name_buffer, len)); } /* partitions */ if (explain_flags & DESCRIBE_PARTITIONS) item_list.push_back(item_null); /* type */ - item_list.push_back(new Item_string(join_type_str[JT_ALL], - strlen(join_type_str[JT_ALL]), - cs)); + item_list.push_back(new Item_string_sys(join_type_str[JT_ALL])); + /* possible_keys */ item_list.push_back(item_null); /* key*/ @@ -23177,10 +23165,9 @@ int print_fake_select_lex_join(select_result_sink *result, bool on_the_fly, item_list.push_back(item_null); /* extra */ if (select_lex->master_unit()->global_parameters->order_list.first) - item_list.push_back(new Item_string("Using filesort", - 14, cs)); + item_list.push_back(new Item_string_sys("Using filesort", 14)); else - item_list.push_back(new Item_string("", 0, cs)); + item_list.push_back(new Item_string_sys("", 0)); if (result->send_data(item_list)) return 1; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ecef9d8841a..7777853e7c5 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -11124,8 +11124,8 @@ opt_escape: { Lex->escape_used= FALSE; $$= ((thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? - new (thd->mem_root) Item_string("", 0, &my_charset_latin1) : - new (thd->mem_root) Item_string("\\", 1, &my_charset_latin1)); + new (thd->mem_root) Item_string_ascii("", 0) : + new (thd->mem_root) Item_string_ascii("\\", 1)); if ($$ == NULL) MYSQL_YYABORT; } @@ -14792,19 +14792,19 @@ set_expr_or_default: | DEFAULT { $$=0; } | ON { - $$=new (thd->mem_root) Item_string("ON", 2, system_charset_info); + $$=new (thd->mem_root) Item_string_sys("ON", 2); if ($$ == NULL) MYSQL_YYABORT; } | ALL { - $$=new (thd->mem_root) Item_string("ALL", 3, system_charset_info); + $$=new (thd->mem_root) Item_string_sys("ALL", 3); if ($$ == NULL) MYSQL_YYABORT; } | BINARY { - $$=new (thd->mem_root) Item_string("binary", 6, system_charset_info); + $$=new (thd->mem_root) Item_string_sys("binary", 6); if ($$ == NULL) MYSQL_YYABORT; }