Commit a6fa724b authored by Sergei Golubchik's avatar Sergei Golubchik

split THD::make_lex_string() in two

parent e56cad4b
...@@ -7034,10 +7034,8 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name, ...@@ -7034,10 +7034,8 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name,
tables->db= (char*)sp_db; tables->db= (char*)sp_db;
tables->table_name= tables->alias= (char*)sp_name; tables->table_name= tables->alias= (char*)sp_name;
thd->make_lex_string(&combo->user, thd->make_lex_string(&combo->user, combo->user.str, strlen(combo->user.str));
combo->user.str, strlen(combo->user.str), 0); thd->make_lex_string(&combo->host, combo->host.str, strlen(combo->host.str));
thd->make_lex_string(&combo->host,
combo->host.str, strlen(combo->host.str), 0);
combo->password= empty_lex_str; combo->password= empty_lex_str;
combo->plugin= empty_lex_str; combo->plugin= empty_lex_str;
...@@ -8263,7 +8261,7 @@ static bool parse_com_change_user_packet(MPVIO_EXT *mpvio, uint packet_length) ...@@ -8263,7 +8261,7 @@ static bool parse_com_change_user_packet(MPVIO_EXT *mpvio, uint packet_length)
thd->user_connect= 0; thd->user_connect= 0;
strmake(sctx->priv_user, sctx->user, USERNAME_LENGTH); strmake(sctx->priv_user, sctx->user, USERNAME_LENGTH);
if (thd->make_lex_string(&mpvio->db, db_buff, db_len, 0) == 0) if (thd->make_lex_string(&mpvio->db, db_buff, db_len) == 0)
DBUG_RETURN(1); /* The error is set by make_lex_string(). */ DBUG_RETURN(1); /* The error is set by make_lex_string(). */
/* /*
...@@ -8489,7 +8487,7 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio, ...@@ -8489,7 +8487,7 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
Security_context *sctx= thd->security_ctx; Security_context *sctx= thd->security_ctx;
if (thd->make_lex_string(&mpvio->db, db, db_len, 0) == 0) if (thd->make_lex_string(&mpvio->db, db, db_len) == 0)
return packet_error; /* The error is set by make_lex_string(). */ return packet_error; /* The error is set by make_lex_string(). */
my_free(sctx->user); my_free(sctx->user);
if (!(sctx->user= my_strndup(user, user_len, MYF(MY_WME)))) if (!(sctx->user= my_strndup(user, user_len, MYF(MY_WME))))
......
/* /*
Copyright (c) 2000, 2012, Oracle and/or its affiliates. Copyright (c) 2000, 2012, Oracle and/or its affiliates.
Copyright (c) 2008, 2012, Monty Program Ab Copyright (c) 2008, 2013, Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -1186,8 +1186,8 @@ LEX_STRING *thd_make_lex_string(THD *thd, LEX_STRING *lex_str, ...@@ -1186,8 +1186,8 @@ LEX_STRING *thd_make_lex_string(THD *thd, LEX_STRING *lex_str,
const char *str, unsigned int size, const char *str, unsigned int size,
int allocate_lex_string) int allocate_lex_string)
{ {
return thd->make_lex_string(lex_str, str, size, return allocate_lex_string ? thd->make_lex_string(str, size)
(bool) allocate_lex_string); : thd->make_lex_string(lex_str, str, size);
} }
extern "C" extern "C"
...@@ -1900,30 +1900,6 @@ void THD::cleanup_after_query() ...@@ -1900,30 +1900,6 @@ void THD::cleanup_after_query()
} }
/**
Create a LEX_STRING in this connection.
@param lex_str pointer to LEX_STRING object to be initialized
@param str initializer to be copied into lex_str
@param length length of str, in bytes
@param allocate_lex_string if TRUE, allocate new LEX_STRING object,
instead of using lex_str value
@return NULL on failure, or pointer to the LEX_STRING object
*/
LEX_STRING *THD::make_lex_string(LEX_STRING *lex_str,
const char* str, uint length,
bool allocate_lex_string)
{
if (allocate_lex_string)
if (!(lex_str= (LEX_STRING *)alloc_root(mem_root, sizeof(LEX_STRING))))
return 0;
if (!(lex_str->str= strmake_root(mem_root, str, length)))
return 0;
lex_str->length= length;
return lex_str;
}
/* /*
Convert a string to another character set Convert a string to another character set
......
...@@ -2622,9 +2622,21 @@ public: ...@@ -2622,9 +2622,21 @@ public:
return alloc_root(&transaction.mem_root,size); return alloc_root(&transaction.mem_root,size);
} }
LEX_STRING *make_lex_string(LEX_STRING *lex_str, LEX_STRING *make_lex_string(LEX_STRING *lex_str, const char* str, uint length)
const char* str, uint length, {
bool allocate_lex_string); if (!(lex_str->str= strmake_root(mem_root, str, length)))
return 0;
lex_str->length= length;
return lex_str;
}
LEX_STRING *make_lex_string(const char* str, uint length)
{
LEX_STRING *lex_str;
if (!(lex_str= (LEX_STRING *)alloc_root(mem_root, sizeof(LEX_STRING))))
return 0;
return make_lex_string(lex_str, str, length);
}
bool convert_string(LEX_STRING *to, CHARSET_INFO *to_cs, bool convert_string(LEX_STRING *to, CHARSET_INFO *to_cs,
const char *from, uint from_length, const char *from, uint from_length,
......
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. /* Copyright (c) 2000, 2012, Oracle and/or its affiliates.
Copyright (c) 2009, 2012, Monty Program Ab Copyright (c) 2009, 2013, Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -829,8 +829,7 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db, ...@@ -829,8 +829,7 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
continue; continue;
} }
#endif #endif
if (!(file_name= if (!(file_name= thd->make_lex_string(uname, file_name_len)) ||
thd->make_lex_string(file_name, uname, file_name_len, TRUE)) ||
files->push_back(file_name)) files->push_back(file_name))
{ {
my_dirend(dirp); my_dirend(dirp);
...@@ -3443,8 +3442,8 @@ bool get_lookup_value(THD *thd, Item_func *item_func, ...@@ -3443,8 +3442,8 @@ bool get_lookup_value(THD *thd, Item_func *item_func,
(uchar *) item_field->field_name, (uchar *) item_field->field_name,
strlen(item_field->field_name), 0)) strlen(item_field->field_name), 0))
{ {
thd->make_lex_string(&lookup_field_vals->db_value, tmp_str->ptr(), thd->make_lex_string(&lookup_field_vals->db_value,
tmp_str->length(), FALSE); tmp_str->ptr(), tmp_str->length());
} }
/* Lookup value is table name */ /* Lookup value is table name */
else if (!cs->coll->strnncollsp(cs, (uchar *) field_name2, else if (!cs->coll->strnncollsp(cs, (uchar *) field_name2,
...@@ -3452,8 +3451,8 @@ bool get_lookup_value(THD *thd, Item_func *item_func, ...@@ -3452,8 +3451,8 @@ bool get_lookup_value(THD *thd, Item_func *item_func,
(uchar *) item_field->field_name, (uchar *) item_field->field_name,
strlen(item_field->field_name), 0)) strlen(item_field->field_name), 0))
{ {
thd->make_lex_string(&lookup_field_vals->table_value, tmp_str->ptr(), thd->make_lex_string(&lookup_field_vals->table_value,
tmp_str->length(), FALSE); tmp_str->ptr(), tmp_str->length());
} }
} }
return 0; return 0;
...@@ -3638,8 +3637,7 @@ bool get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables, ...@@ -3638,8 +3637,7 @@ bool get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
case SQLCOM_SHOW_DATABASES: case SQLCOM_SHOW_DATABASES:
if (wild) if (wild)
{ {
thd->make_lex_string(&lookup_field_values->db_value, thd->make_lex_string(&lookup_field_values->db_value, wild, strlen(wild));
wild, strlen(wild), 0);
lookup_field_values->wild_db_value= 1; lookup_field_values->wild_db_value= 1;
} }
break; break;
...@@ -3648,11 +3646,11 @@ bool get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables, ...@@ -3648,11 +3646,11 @@ bool get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
case SQLCOM_SHOW_TRIGGERS: case SQLCOM_SHOW_TRIGGERS:
case SQLCOM_SHOW_EVENTS: case SQLCOM_SHOW_EVENTS:
thd->make_lex_string(&lookup_field_values->db_value, thd->make_lex_string(&lookup_field_values->db_value,
lex->select_lex.db, strlen(lex->select_lex.db), 0); lex->select_lex.db, strlen(lex->select_lex.db));
if (wild) if (wild)
{ {
thd->make_lex_string(&lookup_field_values->table_value, thd->make_lex_string(&lookup_field_values->table_value,
wild, strlen(wild), 0); wild, strlen(wild));
lookup_field_values->wild_table_value= 1; lookup_field_values->wild_table_value= 1;
} }
break; break;
...@@ -3711,9 +3709,8 @@ int make_db_list(THD *thd, List<LEX_STRING> *files, ...@@ -3711,9 +3709,8 @@ int make_db_list(THD *thd, List<LEX_STRING> *files,
bool *with_i_schema) bool *with_i_schema)
{ {
LEX_STRING *i_s_name_copy= 0; LEX_STRING *i_s_name_copy= 0;
i_s_name_copy= thd->make_lex_string(i_s_name_copy, i_s_name_copy= thd->make_lex_string(INFORMATION_SCHEMA_NAME.str,
INFORMATION_SCHEMA_NAME.str, INFORMATION_SCHEMA_NAME.length);
INFORMATION_SCHEMA_NAME.length, TRUE);
*with_i_schema= 0; *with_i_schema= 0;
if (lookup_field_vals->wild_db_value) if (lookup_field_vals->wild_db_value)
{ {
...@@ -3802,9 +3799,8 @@ static my_bool add_schema_table(THD *thd, plugin_ref plugin, ...@@ -3802,9 +3799,8 @@ static my_bool add_schema_table(THD *thd, plugin_ref plugin,
DBUG_RETURN(0); DBUG_RETURN(0);
} }
if ((file_name= thd->make_lex_string(file_name, schema_table->table_name, if ((file_name= thd->make_lex_string(schema_table->table_name,
strlen(schema_table->table_name), strlen(schema_table->table_name))) &&
TRUE)) &&
!file_list->push_back(file_name)) !file_list->push_back(file_name))
DBUG_RETURN(0); DBUG_RETURN(0);
DBUG_RETURN(1); DBUG_RETURN(1);
...@@ -3835,8 +3831,8 @@ int schema_tables_add(THD *thd, List<LEX_STRING> *files, const char *wild) ...@@ -3835,8 +3831,8 @@ int schema_tables_add(THD *thd, List<LEX_STRING> *files, const char *wild)
continue; continue;
} }
if ((file_name= if ((file_name=
thd->make_lex_string(file_name, tmp_schema_table->table_name, thd->make_lex_string(tmp_schema_table->table_name,
strlen(tmp_schema_table->table_name), TRUE)) && strlen(tmp_schema_table->table_name))) &&
!files->push_back(file_name)) !files->push_back(file_name))
continue; continue;
DBUG_RETURN(1); DBUG_RETURN(1);
...@@ -3888,9 +3884,8 @@ make_table_name_list(THD *thd, List<LEX_STRING> *table_names, LEX *lex, ...@@ -3888,9 +3884,8 @@ make_table_name_list(THD *thd, List<LEX_STRING> *table_names, LEX *lex,
find_schema_table(thd, lookup_field_vals->table_value.str); find_schema_table(thd, lookup_field_vals->table_value.str);
if (schema_table && !schema_table->hidden) if (schema_table && !schema_table->hidden)
{ {
if (!(name= if (!(name= thd->make_lex_string(schema_table->table_name,
thd->make_lex_string(NULL, schema_table->table_name, strlen(schema_table->table_name))) ||
strlen(schema_table->table_name), TRUE)) ||
table_names->push_back(name)) table_names->push_back(name))
return 1; return 1;
} }
...@@ -4015,10 +4010,10 @@ fill_schema_table_by_open(THD *thd, bool is_show_fields_or_keys, ...@@ -4015,10 +4010,10 @@ fill_schema_table_by_open(THD *thd, bool is_show_fields_or_keys,
These copies are used for make_table_list() while unaltered values These copies are used for make_table_list() while unaltered values
are passed to process_table() functions. are passed to process_table() functions.
*/ */
if (!thd->make_lex_string(&db_name, orig_db_name->str, if (!thd->make_lex_string(&db_name,
orig_db_name->length, FALSE) || orig_db_name->str, orig_db_name->length) ||
!thd->make_lex_string(&table_name, orig_table_name->str, !thd->make_lex_string(&table_name,
orig_table_name->length, FALSE)) orig_table_name->str, orig_table_name->length))
goto end; goto end;
/* /*
...@@ -7860,9 +7855,9 @@ int make_schema_select(THD *thd, SELECT_LEX *sel, ...@@ -7860,9 +7855,9 @@ int make_schema_select(THD *thd, SELECT_LEX *sel,
because of lower_case_table_names because of lower_case_table_names
*/ */
thd->make_lex_string(&db, INFORMATION_SCHEMA_NAME.str, thd->make_lex_string(&db, INFORMATION_SCHEMA_NAME.str,
INFORMATION_SCHEMA_NAME.length, 0); INFORMATION_SCHEMA_NAME.length);
thd->make_lex_string(&table, schema_table->table_name, thd->make_lex_string(&table, schema_table->table_name,
strlen(schema_table->table_name), 0); strlen(schema_table->table_name));
if (schema_table->old_format(thd, schema_table) || /* Handle old syntax */ if (schema_table->old_format(thd, schema_table) || /* Handle old syntax */
!sel->add_table_to_list(thd, new Table_ident(thd, db, table, 0), !sel->add_table_to_list(thd, new Table_ident(thd, db, table, 0),
0, 0, TL_READ, MDL_SHARED_READ)) 0, 0, TL_READ, MDL_SHARED_READ))
......
/* Copyright (c) 2004, 2011, Oracle and/or its affiliates. /* Copyright (c) 2004, 2011, Oracle and/or its affiliates.
Copyright (c) 2011 Monty Program Ab Copyright (c) 2011, 2013, Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -871,7 +871,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, ...@@ -871,7 +871,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
view->source= thd->lex->create_view_select; view->source= thd->lex->create_view_select;
if (!thd->make_lex_string(&view->select_stmt, view_query.ptr(), if (!thd->make_lex_string(&view->select_stmt, view_query.ptr(),
view_query.length(), false)) view_query.length()))
{ {
my_error(ER_OUT_OF_RESOURCES, MYF(0)); my_error(ER_OUT_OF_RESOURCES, MYF(0));
error= -1; error= -1;
...@@ -1004,7 +1004,7 @@ loop_out: ...@@ -1004,7 +1004,7 @@ loop_out:
view->view_creation_ctx->get_connection_cl()->name); view->view_creation_ctx->get_connection_cl()->name);
if (!thd->make_lex_string(&view->view_body_utf8, is_query.ptr(), if (!thd->make_lex_string(&view->view_body_utf8, is_query.ptr(),
is_query.length(), false)) is_query.length()))
{ {
my_error(ER_OUT_OF_RESOURCES, MYF(0)); my_error(ER_OUT_OF_RESOURCES, MYF(0));
error= -1; error= -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment