summaryrefslogtreecommitdiff
path: root/sql/sql_alter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_alter.cc')
-rw-r--r--sql/sql_alter.cc59
1 files changed, 31 insertions, 28 deletions
diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc
index 3d1e4c0fa65..2cc6504d2f3 100644
--- a/sql/sql_alter.cc
+++ b/sql/sql_alter.cc
@@ -86,8 +86,8 @@ bool Alter_info::set_requested_lock(const LEX_CSTRING *str)
Alter_table_ctx::Alter_table_ctx()
: datetime_field(NULL), error_if_not_empty(false),
tables_opened(0),
- db(NULL), table_name(NULL), alias(NULL),
- new_db(NULL), new_name(NULL), new_alias(NULL),
+ db(null_clex_str), table_name(null_clex_str), alias(null_clex_str),
+ new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str),
fk_error_if_delete_row(false), fk_error_id(NULL),
fk_error_table(NULL)
#ifdef DBUG_ASSERT_EXISTS
@@ -103,11 +103,11 @@ Alter_table_ctx::Alter_table_ctx()
Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list,
uint tables_opened_arg,
- const char *new_db_arg,
- const char *new_name_arg)
+ const LEX_CSTRING *new_db_arg,
+ const LEX_CSTRING *new_name_arg)
: datetime_field(NULL), error_if_not_empty(false),
tables_opened(tables_opened_arg),
- new_db(new_db_arg), new_name(new_name_arg),
+ new_db(*new_db_arg), new_name(*new_name_arg),
fk_error_if_delete_row(false), fk_error_id(NULL),
fk_error_table(NULL)
#ifdef DBUG_ASSERT_EXISTS
@@ -123,29 +123,31 @@ Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list,
table_name= table_list->table_name;
alias= (lower_case_table_names == 2) ? table_list->alias : table_name;
- if (!new_db || !my_strcasecmp(table_alias_charset, new_db, db))
+ if (!new_db.str || !my_strcasecmp(table_alias_charset, new_db.str, db.str))
new_db= db;
- if (new_name)
+ if (new_name.str)
{
- DBUG_PRINT("info", ("new_db.new_name: '%s'.'%s'", new_db, new_name));
+ DBUG_PRINT("info", ("new_db.new_name: '%s'.'%s'", new_db.str, new_name.str));
- if (lower_case_table_names == 1) // Convert new_name/new_alias to lower case
+ if (lower_case_table_names == 1) // Convert new_name/new_alias to lower
{
- my_casedn_str(files_charset_info, (char*) new_name);
+ new_name.length= my_casedn_str(files_charset_info, (char*) new_name.str);
new_alias= new_name;
}
else if (lower_case_table_names == 2) // Convert new_name to lower case
{
- new_alias= new_alias_buff;
- strmov(new_alias_buff, new_name);
- my_casedn_str(files_charset_info, (char*) new_name);
+ new_alias.str= new_alias_buff;
+ new_alias.length= new_name.length;
+ strmov(new_alias_buff, new_name.str);
+ new_name.length= my_casedn_str(files_charset_info, (char*) new_name.str);
+
}
else
new_alias= new_name; // LCTN=0 => case sensitive + case preserving
if (!is_database_changed() &&
- !my_strcasecmp(table_alias_charset, new_name, table_name))
+ !my_strcasecmp(table_alias_charset, new_name.str, table_name.str))
{
/*
Source and destination table names are equal:
@@ -161,22 +163,23 @@ Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list,
new_name= table_name;
}
- my_snprintf(tmp_name, sizeof(tmp_name), "%s-%lx_%llx", tmp_file_prefix,
- current_pid, thd->thread_id);
+ tmp_name.str= tmp_name_buff;
+ tmp_name.length= my_snprintf(tmp_name_buff, sizeof(tmp_name_buff), "%s-%lx_%llx",
+ tmp_file_prefix, current_pid, thd->thread_id);
/* Safety fix for InnoDB */
if (lower_case_table_names)
- my_casedn_str(files_charset_info, tmp_name);
+ tmp_name.length= my_casedn_str(files_charset_info, tmp_name_buff);
if (table_list->table->s->tmp_table == NO_TMP_TABLE)
{
- build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0);
+ build_table_filename(path, sizeof(path) - 1, db.str, table_name.str, "", 0);
- build_table_filename(new_path, sizeof(new_path) - 1, new_db, new_name, "", 0);
+ build_table_filename(new_path, sizeof(new_path) - 1, new_db.str, new_name.str, "", 0);
build_table_filename(new_filename, sizeof(new_filename) - 1,
- new_db, new_name, reg_ext, 0);
+ new_db.str, new_name.str, reg_ext, 0);
- build_table_filename(tmp_path, sizeof(tmp_path) - 1, new_db, tmp_name, "",
+ build_table_filename(tmp_path, sizeof(tmp_path) - 1, new_db.str, tmp_name.str, "",
FN_IS_TMP);
}
else
@@ -227,14 +230,14 @@ bool Sql_cmd_alter_table::execute(THD *thd)
priv_needed|= DROP_ACL;
/* Must be set in the parser */
- DBUG_ASSERT(select_lex->db);
+ DBUG_ASSERT(select_lex->db.str);
DBUG_ASSERT(!(alter_info.flags & Alter_info::ALTER_EXCHANGE_PARTITION));
DBUG_ASSERT(!(alter_info.flags & Alter_info::ALTER_ADMIN_PARTITION));
- if (check_access(thd, priv_needed, first_table->db,
+ if (check_access(thd, priv_needed, first_table->db.str,
&first_table->grant.privilege,
&first_table->grant.m_internal,
0, 0) ||
- check_access(thd, INSERT_ACL | CREATE_ACL, select_lex->db,
+ check_access(thd, INSERT_ACL | CREATE_ACL, select_lex->db.str,
&priv,
NULL, /* Don't use first_tab->grant with sel_lex->db */
0, 0))
@@ -291,7 +294,7 @@ bool Sql_cmd_alter_table::execute(THD *thd)
// Rename of table
TABLE_LIST tmp_table;
memset(&tmp_table, 0, sizeof(tmp_table));
- tmp_table.table_name= lex->name.str;
+ tmp_table.table_name= lex->name;
tmp_table.db= select_lex->db;
tmp_table.grant.privilege= priv;
if (check_grant(thd, INSERT_ACL | CREATE_ACL, &tmp_table, FALSE,
@@ -316,13 +319,13 @@ bool Sql_cmd_alter_table::execute(THD *thd)
if ((!thd->is_current_stmt_binlog_format_row() ||
!thd->find_temporary_table(first_table)))
{
- WSREP_TO_ISOLATION_BEGIN(((lex->name.str) ? select_lex->db : NULL),
+ WSREP_TO_ISOLATION_BEGIN(((lex->name.str) ? select_lex->db.str : NULL),
((lex->name.str) ? lex->name.str : NULL),
first_table);
}
#endif /* WITH_WSREP */
- result= mysql_alter_table(thd, select_lex->db, lex->name.str,
+ result= mysql_alter_table(thd, &select_lex->db, &lex->name,
&create_info,
first_table,
&alter_info,
@@ -346,7 +349,7 @@ bool Sql_cmd_discard_import_tablespace::execute(THD *thd)
/* first table of first SELECT_LEX */
TABLE_LIST *table_list= (TABLE_LIST*) select_lex->table_list.first;
- if (check_access(thd, ALTER_ACL, table_list->db,
+ if (check_access(thd, ALTER_ACL, table_list->db.str,
&table_list->grant.privilege,
&table_list->grant.m_internal,
0, 0))