diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-05-23 14:57:29 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-05-23 14:58:03 +0400 |
commit | c83018751cc8eed11279eb6df555bd66c153fa9a (patch) | |
tree | 3d6fa41a975ca9ad1cee5308feda49b787183987 | |
parent | 826f9d4f7e99973cafe7654697d7c50b8b64b76b (diff) | |
download | mariadb-git-c83018751cc8eed11279eb6df555bd66c153fa9a.tar.gz |
MDEV-19566 Remove Item::name related strlen() calls in constructors of some Item_string descendands
-rw-r--r-- | sql/item.cc | 13 | ||||
-rw-r--r-- | sql/item.h | 84 | ||||
-rw-r--r-- | sql/item_create.cc | 6 | ||||
-rw-r--r-- | sql/sql_base.cc | 6 | ||||
-rw-r--r-- | sql/sql_class.cc | 3 | ||||
-rw-r--r-- | sql/sql_cte.cc | 2 | ||||
-rw-r--r-- | sql/sql_profile.cc | 4 | ||||
-rw-r--r-- | sql/sql_show.cc | 64 | ||||
-rw-r--r-- | sql/sql_type.cc | 8 | ||||
-rw-r--r-- | sql/sql_view.cc | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 8 | ||||
-rw-r--r-- | sql/sql_yacc_ora.yy | 8 | ||||
-rw-r--r-- | sql/table.h | 9 | ||||
-rw-r--r-- | sql/vers_string.h | 5 |
14 files changed, 110 insertions, 112 deletions
diff --git a/sql/item.cc b/sql/item.cc index 22bcbf39ab3..09da432d5dc 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1291,7 +1291,7 @@ Item *Item::const_charset_converter(THD *thd, CHARSET_INFO *tocs, uint conv_errors; Item_string *conv= (func_name ? new (mem_root) - Item_static_string_func(thd, func_name, + Item_static_string_func(thd, Lex_cstring(func_name), s, tocs, &conv_errors, collation.derivation, collation.repertoire) : @@ -2014,7 +2014,7 @@ Item_name_const::Item_name_const(THD *thd, Item *name_arg, Item *val): Item::maybe_null= TRUE; if (name_item->basic_const_item() && (name_str= name_item->val_str(&name_buffer))) // Can't have a NULL name - set_name(thd, name_str->ptr(), name_str->length(), name_str->charset()); + set_name(thd, name_str->lex_cstring(), name_str->charset()); } @@ -4560,9 +4560,9 @@ Item *Item_param::value_clone_item(THD *thd) case DECIMAL_RESULT: return 0; // Should create Item_decimal. See MDEV-11361. case STRING_RESULT: - return new (mem_root) Item_string(thd, name.str, - value.m_string.c_ptr_quick(), - value.m_string.length(), + return new (mem_root) Item_string(thd, name, + Lex_cstring(value.m_string.c_ptr_quick(), + value.m_string.length()), value.m_string.charset(), collation.derivation, collation.repertoire); @@ -6554,8 +6554,7 @@ int Item_string::save_in_field(Field *field, bool no_conversions) Item *Item_string::clone_item(THD *thd) { return new (thd->mem_root) - Item_string(thd, name.str, str_value.ptr(), - str_value.length(), collation.collation); + Item_string(thd, name, str_value.lex_cstring(), collation.collation); } diff --git a/sql/item.h b/sql/item.h index b0d3666ead7..45110265cd3 100644 --- a/sql/item.h +++ b/sql/item.h @@ -946,6 +946,11 @@ public: #endif } /*lint -e1509 */ void set_name(THD *thd, const char *str, size_t length, CHARSET_INFO *cs); + void set_name(THD *thd, const LEX_CSTRING &str, + CHARSET_INFO *cs= system_charset_info) + { + set_name(thd, str.str, str.length, cs); + } void set_name_no_truncate(THD *thd, const char *str, uint length, CHARSET_INFO *cs); void init_make_send_field(Send_field *tmp_field, const Type_handler *h); @@ -4257,7 +4262,7 @@ protected: const Metadata metadata) { fix_from_value(dv, metadata); - set_name(thd, str_value.ptr(), str_value.length(), str_value.charset()); + set_name(thd, str_value.lex_cstring(), str_value.charset()); } protected: /* Just create an item and do not fill string representation */ @@ -4304,21 +4309,21 @@ public: fix_and_set_name_from_value(thd, dv, Metadata(&str_value, repertoire)); } // Constructors with an externally provided item name - Item_string(THD *thd, const char *name_par, const char *str, size_t length, + Item_string(THD *thd, const LEX_CSTRING &name_par, const LEX_CSTRING &str, CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE) :Item_literal(thd) { - str_value.set_or_copy_aligned(str, length, cs); + str_value.set_or_copy_aligned(str.str, str.length, cs); fix_from_value(dv, Metadata(&str_value)); - set_name(thd, name_par,safe_strlen(name_par), system_charset_info); + set_name(thd, name_par); } - Item_string(THD *thd, const char *name_par, const char *str, size_t length, + Item_string(THD *thd, const LEX_CSTRING &name_par, const LEX_CSTRING &str, CHARSET_INFO *cs, Derivation dv, uint repertoire) :Item_literal(thd) { - str_value.set_or_copy_aligned(str, length, cs); + str_value.set_or_copy_aligned(str.str, str.length, cs); fix_from_value(dv, Metadata(&str_value, repertoire)); - set_name(thd, name_par, safe_strlen(name_par), system_charset_info); + set_name(thd, name_par); } void print_value(String *to) const { @@ -4393,13 +4398,13 @@ public: class Item_string_with_introducer :public Item_string { public: - Item_string_with_introducer(THD *thd, const char *str, uint length, + Item_string_with_introducer(THD *thd, const LEX_CSTRING &str, CHARSET_INFO *cs): - Item_string(thd, str, length, cs) + Item_string(thd, str.str, str.length, cs) { } - Item_string_with_introducer(THD *thd, const char *name_arg, - const char *str, uint length, CHARSET_INFO *tocs): - Item_string(thd, name_arg, str, length, tocs) + Item_string_with_introducer(THD *thd, const LEX_CSTRING &name_arg, + const LEX_CSTRING &str, CHARSET_INFO *tocs): + Item_string(thd, name_arg, str, tocs) { } virtual bool is_cs_specified() const { @@ -4436,14 +4441,14 @@ public: class Item_static_string_func :public Item_string { - const char *func_name; + const LEX_CSTRING func_name; public: - Item_static_string_func(THD *thd, const char *name_par, const char *str, - uint length, CHARSET_INFO *cs, + Item_static_string_func(THD *thd, const LEX_CSTRING &name_par, + const LEX_CSTRING &str, CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE): - Item_string(thd, NullS, str, length, cs, dv), func_name(name_par) + Item_string(thd, LEX_CSTRING({NullS,0}), str, cs, dv), func_name(name_par) {} - Item_static_string_func(THD *thd, const char *name_par, + Item_static_string_func(THD *thd, const LEX_CSTRING &name_par, const String *str, CHARSET_INFO *tocs, uint *conv_errors, Derivation dv, uint repertoire): @@ -4452,7 +4457,7 @@ public: {} Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs) { - return const_charset_converter(thd, tocs, true, func_name); + return const_charset_converter(thd, tocs, true, func_name.str); } virtual inline void print(String *str, enum_query_type query_type) @@ -4465,7 +4470,7 @@ public: bool check_vcol_func_processor(void *arg) { // VCOL_TIME_FUNC because the value is not constant, but does not // require fix_fields() to be re-run for every statement. - return mark_unsupported_function(func_name, arg, VCOL_TIME_FUNC); + return mark_unsupported_function(func_name.str, arg, VCOL_TIME_FUNC); } }; @@ -4474,10 +4479,12 @@ public: class Item_partition_func_safe_string: public Item_string { public: - Item_partition_func_safe_string(THD *thd, const char *name_arg, uint length, - CHARSET_INFO *cs= NULL): - Item_string(thd, name_arg, length, cs) - {} + Item_partition_func_safe_string(THD *thd, const LEX_CSTRING &name_arg, + uint length, CHARSET_INFO *cs): + Item_string(thd, name_arg, LEX_CSTRING({0,0}), cs) + { + max_length= length; + } bool check_vcol_func_processor(void *arg) { return mark_unsupported_function("safe_string", arg, VCOL_IMPOSSIBLE); @@ -4489,9 +4496,11 @@ class Item_return_date_time :public Item_partition_func_safe_string { enum_field_types date_time_field_type; public: - Item_return_date_time(THD *thd, const char *name_arg, uint length_arg, + Item_return_date_time(THD *thd, const LEX_CSTRING &name_arg, enum_field_types field_type_arg, uint dec_arg= 0): - Item_partition_func_safe_string(thd, name_arg, length_arg, &my_charset_bin), + Item_partition_func_safe_string(thd, name_arg, + 0/*length is not important*/, + &my_charset_bin), date_time_field_type(field_type_arg) { decimals= dec_arg; } const Type_handler *type_handler() const @@ -4504,10 +4513,9 @@ public: class Item_blob :public Item_partition_func_safe_string { public: - Item_blob(THD *thd, const char *name_arg, uint length): - Item_partition_func_safe_string(thd, name_arg, (uint) safe_strlen(name_arg), - &my_charset_bin) - { max_length= length; } + Item_blob(THD *thd, const LEX_CSTRING &name_arg, uint length): + Item_partition_func_safe_string(thd, name_arg, length, &my_charset_bin) + { } enum Type type() const { return TYPE_HOLDER; } const Type_handler *type_handler() const { @@ -4533,15 +4541,15 @@ public: class Item_empty_string :public Item_partition_func_safe_string { public: - Item_empty_string(THD *thd, const char *header,uint length, - CHARSET_INFO *cs= NULL): - Item_partition_func_safe_string(thd, "", 0, - cs ? cs : &my_charset_utf8_general_ci) - { - name.str= header; - name.length= strlen(name.str); - max_length= length * collation.collation->mbmaxlen; - } + Item_empty_string(THD *thd, const LEX_CSTRING &header, uint length, + CHARSET_INFO *cs= &my_charset_utf8_general_ci) + :Item_partition_func_safe_string(thd, header, length * cs->mbmaxlen, cs) + { } + Item_empty_string(THD *thd, const char *header, uint length, + CHARSET_INFO *cs= &my_charset_utf8_general_ci) + :Item_partition_func_safe_string(thd, LEX_CSTRING({header, strlen(header)}), + length * cs->mbmaxlen, cs) + { } void make_send_field(THD *thd, Send_field *field); }; diff --git a/sql/item_create.cc b/sql/item_create.cc index 9b949835e27..8fa55115c88 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -6933,9 +6933,9 @@ Item* Create_func_version::create_builder(THD *thd) { thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); - return new (thd->mem_root) Item_static_string_func(thd, "version()", - server_version, - (uint) strlen(server_version), + static Lex_cstring name("version()"); + return new (thd->mem_root) Item_static_string_func(thd, name, + Lex_cstring(server_version), system_charset_info, DERIVATION_SYSCONST); } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 60371813280..4f055c7f7e0 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5749,8 +5749,7 @@ find_field_in_view(THD *thd, TABLE_LIST *table_list, the replacing item. */ if (*ref && !(*ref)->is_autogenerated_name) - item->set_name(thd, (*ref)->name.str, (*ref)->name.length, - system_charset_info); + item->set_name(thd, (*ref)->name); if (register_tree_change) thd->change_item_tree(ref, item); else @@ -5841,8 +5840,7 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name, si the replacing item. */ if (*ref && !(*ref)->is_autogenerated_name) - item->set_name(thd, (*ref)->name.str, (*ref)->name.length, - system_charset_info); + item->set_name(thd, (*ref)->name); if (register_tree_change && arena) thd->restore_active_arena(arena, &backup); diff --git a/sql/sql_class.cc b/sql/sql_class.cc index c17718bcff2..efde20faf30 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -2516,8 +2516,7 @@ THD::make_string_literal_charset(const Lex_string_with_metadata_st &str, { if (!str.length && (variables.sql_mode & MODE_EMPTY_STRING_IS_NULL)) return new (mem_root) Item_null(this, 0, cs); - return new (mem_root) Item_string_with_introducer(this, - str.str, (uint)str.length, cs); + return new (mem_root) Item_string_with_introducer(this, str, cs); } diff --git a/sql/sql_cte.cc b/sql/sql_cte.cc index 6f5162b645b..57ed922c2b8 100644 --- a/sql/sql_cte.cc +++ b/sql/sql_cte.cc @@ -970,7 +970,7 @@ With_element::rename_columns_of_derived_unit(THD *thd, /* Rename the columns of the first select in the unit */ while ((item= it++, name= nm++)) { - item->set_name(thd, name->str, (uint) name->length, system_charset_info); + item->set_name(thd, *name); item->is_autogenerated_name= false; } diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc index f36805012b2..b08853e54a4 100644 --- a/sql/sql_profile.cc +++ b/sql/sql_profile.cc @@ -125,9 +125,7 @@ int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table) NullS, NullS, &field_name); if (field) { - field->set_name(thd, field_info->old_name, - (uint) strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); if (add_item_to_list(thd, field)) return 1; } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index d76e2deef99..3e049cfaae4 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -8170,7 +8170,6 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) ST_SCHEMA_TABLE *schema_table= table_list->schema_table; ST_FIELD_INFO *fields_info= schema_table->fields_info; ST_FIELD_INFO *fields; - CHARSET_INFO *cs= system_charset_info; MEM_ROOT *mem_root= thd->mem_root; MY_BITMAP bitmap; my_bitmap_map *buf; @@ -8192,7 +8191,6 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) for (field_count=0; fields_info->field_name; fields_info++) { - size_t field_name_length= strlen(fields_info->field_name); switch (fields_info->field_type) { case MYSQL_TYPE_TINY: case MYSQL_TYPE_LONG: @@ -8211,23 +8209,20 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) break; case MYSQL_TYPE_DATE: if (!(item=new (mem_root) - Item_return_date_time(thd, fields_info->field_name, - (uint)field_name_length, + Item_return_date_time(thd, fields_info->get_name(), fields_info->field_type))) DBUG_RETURN(0); break; case MYSQL_TYPE_TIME: if (!(item=new (mem_root) - Item_return_date_time(thd, fields_info->field_name, - (uint)field_name_length, + Item_return_date_time(thd, fields_info->get_name(), fields_info->field_type))) DBUG_RETURN(0); break; case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: if (!(item=new (mem_root) - Item_return_date_time(thd, fields_info->field_name, - (uint)field_name_length, + Item_return_date_time(thd, fields_info->get_name(), fields_info->field_type, fields_info->field_length))) DBUG_RETURN(0); @@ -8261,7 +8256,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) item->max_length+= 1; if (item->decimals > 0) item->max_length+= 1; - item->set_name(thd, fields_info->field_name, field_name_length, cs); + item->set_name(thd, fields_info->get_name()); break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: @@ -8270,7 +8265,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) if (bitmap_is_set(&bitmap, field_count)) { if (!(item= new (mem_root) - Item_blob(thd, fields_info->field_name, + Item_blob(thd, fields_info->get_name(), fields_info->field_length))) { DBUG_RETURN(0); @@ -8279,12 +8274,11 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) else { if (!(item= new (mem_root) - Item_empty_string(thd, "", 0, cs))) + Item_empty_string(thd, "", 0, system_charset_info))) { DBUG_RETURN(0); } - item->set_name(thd, fields_info->field_name, - field_name_length, cs); + item->set_name(thd, fields_info->get_name()); } break; default: @@ -8296,12 +8290,12 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) show_field= bitmap_is_set(&bitmap, field_count); if (!(item= new (mem_root) Item_empty_string(thd, "", - show_field ? fields_info->field_length : 0, cs))) + show_field ? fields_info->field_length : 0, + system_charset_info))) { DBUG_RETURN(0); } - item->set_name(thd, fields_info->field_name, - field_name_length, cs); + item->set_name(thd, fields_info->get_name()); break; } } @@ -8312,7 +8306,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list) TMP_TABLE_PARAM *tmp_table_param = (TMP_TABLE_PARAM*) (thd->alloc(sizeof(TMP_TABLE_PARAM))); tmp_table_param->init(); - tmp_table_param->table_charset= cs; + tmp_table_param->table_charset= system_charset_info; tmp_table_param->field_count= field_count; tmp_table_param->schema_table= 1; SELECT_LEX *select_lex= table_list->select_lex; @@ -8357,15 +8351,12 @@ static int make_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) { if (field_info->old_name) { - LEX_CSTRING field_name= {field_info->field_name, - strlen(field_info->field_name)}; + LEX_CSTRING field_name= field_info->get_name(); Item_field *field= new (thd->mem_root) Item_field(thd, context, NullS, NullS, &field_name); if (field) { - field->set_name(thd, field_info->old_name, - strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); if (add_item_to_list(thd, field)) return 1; } @@ -8386,22 +8377,20 @@ int make_schemata_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) { ST_FIELD_INFO *field_info= &schema_table->fields_info[1]; String buffer(tmp,sizeof(tmp), system_charset_info); - LEX_CSTRING field_name= {field_info->field_name, - strlen(field_info->field_name) }; - + LEX_CSTRING field_name= field_info->get_name(); Item_field *field= new (thd->mem_root) Item_field(thd, context, NullS, NullS, &field_name); if (!field || add_item_to_list(thd, field)) return 1; buffer.length(0); - buffer.append(field_info->old_name); + buffer.append(field_info->get_old_name()); if (lex->wild && lex->wild->ptr()) { buffer.append(STRING_WITH_LEN(" (")); buffer.append(lex->wild->ptr()); buffer.append(')'); } - field->set_name(thd, buffer.ptr(), buffer.length(), system_charset_info); + field->set_name(thd, buffer.lex_cstring()); } return 0; } @@ -8418,7 +8407,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) strlen(field_info->field_name) }; buffer.length(0); - buffer.append(field_info->old_name); + buffer.append(field_info->get_old_name()); buffer.append(&lex->first_select_lex()->db); if (lex->wild && lex->wild->ptr()) { @@ -8430,7 +8419,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) NullS, NullS, &field_name); if (add_item_to_list(thd, field)) return 1; - field->set_name(thd, buffer.ptr(), buffer.length(), system_charset_info); + field->set_name(thd, buffer.lex_cstring()); if (thd->lex->verbose) { field_info= &schema_table->fields_info[3]; @@ -8440,8 +8429,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) &field_name2); if (add_item_to_list(thd, field)) return 1; - field->set_name(thd, field_info->old_name, strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); } return 0; } @@ -8467,9 +8455,7 @@ int make_columns_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) NullS, NullS, &field_name); if (field) { - field->set_name(thd, field_info->old_name, - strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); if (add_item_to_list(thd, field)) return 1; } @@ -8494,9 +8480,7 @@ int make_character_sets_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) NullS, NullS, &field_name); if (field) { - field->set_name(thd, field_info->old_name, - strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); if (add_item_to_list(thd, field)) return 1; } @@ -8521,9 +8505,7 @@ int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) NullS, NullS, &field_name); if (field) { - field->set_name(thd, field_info->old_name, - strlen(field_info->old_name), - system_charset_info); + field->set_name(thd, field_info->get_old_name()); if (add_item_to_list(thd, field)) return 1; } @@ -10118,7 +10100,7 @@ static bool show_create_trigger_impl(THD *thd, Trigger *trigger) Item_datetime_literal *tmp= (new (mem_root) Item_datetime_literal(thd, &zero_time, 2)); - tmp->set_name(thd, STRING_WITH_LEN("Created"), system_charset_info); + tmp->set_name(thd, Lex_cstring("Created")); fields.push_back(tmp, mem_root); if (p->send_result_set_metadata(&fields, diff --git a/sql/sql_type.cc b/sql/sql_type.cc index fc33b6d1427..f5b8b2e530d 100644 --- a/sql/sql_type.cc +++ b/sql/sql_type.cc @@ -6888,10 +6888,10 @@ Item *Type_handler_string_result:: String *result= item->val_str(&tmp); if (item->null_value) return new (thd->mem_root) Item_null(thd, item->name.str); - uint length= result->length(); - char *tmp_str= thd->strmake(result->ptr(), length); - return new (thd->mem_root) Item_string(thd, item->name.str, - tmp_str, length, result->charset()); + LEX_CSTRING value; + thd->make_lex_string(&value, result->ptr(), result->length()); + return new (thd->mem_root) Item_string(thd, item->name, value, + result->charset()); } diff --git a/sql/sql_view.cc b/sql/sql_view.cc index b130fbc099b..04cdfbcb5bf 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -556,7 +556,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views, } while ((item= it++, name= nm++)) { - item->set_name(thd, name->str, (uint) name->length, system_charset_info); + item->set_name(thd, *name); item->is_autogenerated_name= FALSE; } } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 10c45f4eb4d..d0a7fe6057c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -9570,7 +9570,7 @@ select_item: check_column_name($4.str))) my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), $4.str)); $2->is_autogenerated_name= FALSE; - $2->set_name(thd, $4.str, $4.length, system_charset_info); + $2->set_name(thd, $4); } else if (!$2->name.str || $2->name.str == item_empty_name) { @@ -11186,7 +11186,7 @@ udf_expr: if ($4.str) { $2->is_autogenerated_name= FALSE; - $2->set_name(thd, $4.str, $4.length, system_charset_info); + $2->set_name(thd, $4); } /* A field has to have its proper name in order for name @@ -15123,8 +15123,8 @@ literal: will include the introducer and the original hex/bin notation. */ item_str= new (thd->mem_root) - Item_string_with_introducer(thd, NULL, $2->ptr(), $2->length(), - $1); + Item_string_with_introducer(thd, null_clex_str, + $2->lex_cstring(), $1); if (unlikely(!item_str || !item_str->check_well_formed_result(true))) MYSQL_YYABORT; diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy index 8086ede3fef..e81294504e3 100644 --- a/sql/sql_yacc_ora.yy +++ b/sql/sql_yacc_ora.yy @@ -9687,7 +9687,7 @@ select_item: check_column_name($4.str))) my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), $4.str)); $2->is_autogenerated_name= FALSE; - $2->set_name(thd, $4.str, $4.length, system_charset_info); + $2->set_name(thd, $4); } else if (!$2->name.str || $2->name.str == item_empty_name) { @@ -11312,7 +11312,7 @@ udf_expr: if ($4.str) { $2->is_autogenerated_name= FALSE; - $2->set_name(thd, $4.str, $4.length, system_charset_info); + $2->set_name(thd, $4); } /* A field has to have its proper name in order for name @@ -15271,8 +15271,8 @@ literal: will include the introducer and the original hex/bin notation. */ item_str= new (thd->mem_root) - Item_string_with_introducer(thd, NULL, $2->ptr(), $2->length(), - $1); + Item_string_with_introducer(thd, null_clex_str, + $2->lex_cstring(), $1); if (unlikely(!item_str || !item_str->check_well_formed_result(true))) MYSQL_YYABORT; diff --git a/sql/table.h b/sql/table.h index 42c017d63af..f41bcb30c2b 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1703,6 +1703,15 @@ typedef struct st_field_info @c OPEN_FRM_ONLY or @c OPEN_FULL_TABLE. */ uint open_method; + + LEX_CSTRING get_name() const + { + return LEX_CSTRING({field_name, strlen(field_name)}); + } + LEX_CSTRING get_old_name() const + { + return LEX_CSTRING({old_name, strlen(old_name)}); + } } ST_FIELD_INFO; diff --git a/sql/vers_string.h b/sql/vers_string.h index 2349cc0cac1..d792a60b8fc 100644 --- a/sql/vers_string.h +++ b/sql/vers_string.h @@ -53,6 +53,11 @@ class Lex_cstring : public LEX_CSTRING str= NULL; length= 0; } + Lex_cstring(const char *_str) + { + str= _str; + length= strlen(_str); + } Lex_cstring(const char *_str, size_t _len) { str= _str; |