summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2019-05-23 14:57:29 +0400
committerAlexander Barkov <bar@mariadb.com>2019-05-23 14:58:03 +0400
commitc83018751cc8eed11279eb6df555bd66c153fa9a (patch)
tree3d6fa41a975ca9ad1cee5308feda49b787183987
parent826f9d4f7e99973cafe7654697d7c50b8b64b76b (diff)
downloadmariadb-git-c83018751cc8eed11279eb6df555bd66c153fa9a.tar.gz
MDEV-19566 Remove Item::name related strlen() calls in constructors of some Item_string descendands
-rw-r--r--sql/item.cc13
-rw-r--r--sql/item.h84
-rw-r--r--sql/item_create.cc6
-rw-r--r--sql/sql_base.cc6
-rw-r--r--sql/sql_class.cc3
-rw-r--r--sql/sql_cte.cc2
-rw-r--r--sql/sql_profile.cc4
-rw-r--r--sql/sql_show.cc64
-rw-r--r--sql/sql_type.cc8
-rw-r--r--sql/sql_view.cc2
-rw-r--r--sql/sql_yacc.yy8
-rw-r--r--sql/sql_yacc_ora.yy8
-rw-r--r--sql/table.h9
-rw-r--r--sql/vers_string.h5
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;