mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge MySQL 5.1.44 into MariaDB.
This commit is contained in:
@ -647,7 +647,7 @@ static bool read_ddl_log_file_entry(uint entry_no)
|
||||
Write one entry from ddl log file
|
||||
SYNOPSIS
|
||||
write_ddl_log_file_entry()
|
||||
entry_no Entry number to read
|
||||
entry_no Entry number to write
|
||||
RETURN VALUES
|
||||
TRUE Error
|
||||
FALSE Success
|
||||
@ -748,10 +748,10 @@ static uint read_ddl_log_header()
|
||||
else
|
||||
successful_open= TRUE;
|
||||
}
|
||||
entry_no= uint4korr(&file_entry_buf[DDL_LOG_NUM_ENTRY_POS]);
|
||||
global_ddl_log.name_len= uint4korr(&file_entry_buf[DDL_LOG_NAME_LEN_POS]);
|
||||
if (successful_open)
|
||||
{
|
||||
entry_no= uint4korr(&file_entry_buf[DDL_LOG_NUM_ENTRY_POS]);
|
||||
global_ddl_log.name_len= uint4korr(&file_entry_buf[DDL_LOG_NAME_LEN_POS]);
|
||||
global_ddl_log.io_size= uint4korr(&file_entry_buf[DDL_LOG_IO_SIZE_POS]);
|
||||
DBUG_ASSERT(global_ddl_log.io_size <=
|
||||
sizeof(global_ddl_log.file_entry_buf));
|
||||
@ -832,6 +832,7 @@ static bool init_ddl_log()
|
||||
goto end;
|
||||
|
||||
global_ddl_log.io_size= IO_SIZE;
|
||||
global_ddl_log.name_len= FN_LEN;
|
||||
create_ddl_log_file_name(file_name);
|
||||
if ((global_ddl_log.file_id= my_create(file_name,
|
||||
CREATE_MODE,
|
||||
@ -884,6 +885,13 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
|
||||
{
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
DBUG_PRINT("ddl_log",
|
||||
("execute type %c next %u name '%s' from_name '%s' handler '%s'",
|
||||
ddl_log_entry->action_type,
|
||||
ddl_log_entry->next_entry,
|
||||
ddl_log_entry->name,
|
||||
ddl_log_entry->from_name,
|
||||
ddl_log_entry->handler_name));
|
||||
handler_name.str= (char*)ddl_log_entry->handler_name;
|
||||
handler_name.length= strlen(ddl_log_entry->handler_name);
|
||||
init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
|
||||
@ -1091,6 +1099,15 @@ bool write_ddl_log_entry(DDL_LOG_ENTRY *ddl_log_entry,
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
error= FALSE;
|
||||
DBUG_PRINT("ddl_log",
|
||||
("write type %c next %u name '%s' from_name '%s' handler '%s'",
|
||||
(char) global_ddl_log.file_entry_buf[DDL_LOG_ACTION_TYPE_POS],
|
||||
ddl_log_entry->next_entry,
|
||||
(char*) &global_ddl_log.file_entry_buf[DDL_LOG_NAME_POS],
|
||||
(char*) &global_ddl_log.file_entry_buf[DDL_LOG_NAME_POS
|
||||
+ FN_LEN],
|
||||
(char*) &global_ddl_log.file_entry_buf[DDL_LOG_NAME_POS
|
||||
+ (2*FN_LEN)]));
|
||||
if (write_ddl_log_file_entry((*active_entry)->entry_pos))
|
||||
{
|
||||
error= TRUE;
|
||||
@ -1731,9 +1748,10 @@ end:
|
||||
file
|
||||
*/
|
||||
|
||||
void write_bin_log(THD *thd, bool clear_error,
|
||||
char const *query, ulong query_length)
|
||||
int write_bin_log(THD *thd, bool clear_error,
|
||||
char const *query, ulong query_length)
|
||||
{
|
||||
int error= 0;
|
||||
if (mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
@ -1741,9 +1759,10 @@ void write_bin_log(THD *thd, bool clear_error,
|
||||
thd->clear_error();
|
||||
else
|
||||
errcode= query_error_code(thd, TRUE);
|
||||
thd->binlog_query(THD::STMT_QUERY_TYPE,
|
||||
query, query_length, FALSE, FALSE, errcode);
|
||||
error= thd->binlog_query(THD::STMT_QUERY_TYPE,
|
||||
query, query_length, FALSE, FALSE, errcode);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
@ -2091,7 +2110,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
tables). In this case, we can write the original query into
|
||||
the binary log.
|
||||
*/
|
||||
write_bin_log(thd, !error, thd->query(), thd->query_length());
|
||||
error |= write_bin_log(thd, !error, thd->query(), thd->query_length());
|
||||
}
|
||||
else if (thd->current_stmt_binlog_row_based &&
|
||||
tmp_table_deleted)
|
||||
@ -2113,7 +2132,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
*/
|
||||
built_query.chop(); // Chop of the last comma
|
||||
built_query.append(" /* generated by server */");
|
||||
write_bin_log(thd, !error, built_query.ptr(), built_query.length());
|
||||
error|= write_bin_log(thd, !error, built_query.ptr(), built_query.length());
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2132,7 +2151,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
*/
|
||||
built_tmp_query.chop(); // Chop of the last comma
|
||||
built_tmp_query.append(" /* generated by server */");
|
||||
write_bin_log(thd, !error, built_tmp_query.ptr(), built_tmp_query.length());
|
||||
error|= write_bin_log(thd, !error, built_tmp_query.ptr(), built_tmp_query.length());
|
||||
}
|
||||
}
|
||||
|
||||
@ -2577,7 +2596,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
!(sql_field->charset= get_charset_by_csname(sql_field->charset->csname,
|
||||
MY_CS_BINSORT,MYF(0))))
|
||||
{
|
||||
char tmp[64];
|
||||
char tmp[65];
|
||||
strmake(strmake(tmp, save_cs->csname, sizeof(tmp)-4),
|
||||
STRING_WITH_LEN("_bin"));
|
||||
my_error(ER_UNKNOWN_COLLATION, MYF(0), tmp);
|
||||
@ -3541,9 +3560,9 @@ void sp_prepare_create_field(THD *thd, Create_field *sql_field)
|
||||
RETURN VALUES
|
||||
NONE
|
||||
*/
|
||||
static inline void write_create_table_bin_log(THD *thd,
|
||||
const HA_CREATE_INFO *create_info,
|
||||
bool internal_tmp_table)
|
||||
static inline int write_create_table_bin_log(THD *thd,
|
||||
const HA_CREATE_INFO *create_info,
|
||||
bool internal_tmp_table)
|
||||
{
|
||||
/*
|
||||
Don't write statement if:
|
||||
@ -3556,7 +3575,8 @@ static inline void write_create_table_bin_log(THD *thd,
|
||||
(!thd->current_stmt_binlog_row_based ||
|
||||
(thd->current_stmt_binlog_row_based &&
|
||||
!(create_info->options & HA_LEX_CREATE_TMP_TABLE))))
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
return write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -3823,8 +3843,7 @@ bool mysql_create_table_no_lock(THD *thd,
|
||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
||||
ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR),
|
||||
alias);
|
||||
error= 0;
|
||||
write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
error= write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
goto err;
|
||||
}
|
||||
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias);
|
||||
@ -3952,8 +3971,7 @@ bool mysql_create_table_no_lock(THD *thd,
|
||||
thd->thread_specific_used= TRUE;
|
||||
}
|
||||
|
||||
write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
error= FALSE;
|
||||
error= write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
unlock_and_end:
|
||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||
|
||||
@ -3968,7 +3986,7 @@ warn:
|
||||
ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR),
|
||||
alias);
|
||||
create_info->table_existed= 1; // Mark that table existed
|
||||
write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
error= write_create_table_bin_log(thd, create_info, internal_tmp_table);
|
||||
goto unlock_and_end;
|
||||
}
|
||||
|
||||
@ -5444,18 +5462,20 @@ binlog:
|
||||
create_info, FALSE /* show_database */);
|
||||
|
||||
DBUG_ASSERT(result == 0); // store_create_info() always return 0
|
||||
write_bin_log(thd, TRUE, query.ptr(), query.length());
|
||||
if (write_bin_log(thd, TRUE, query.ptr(), query.length()))
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
else // Case 1
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
if (write_bin_log(thd, TRUE, thd->query(), thd->query_length()))
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
Case 3 and 4 does nothing under RBR
|
||||
*/
|
||||
}
|
||||
else
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
else if (write_bin_log(thd, TRUE, thd->query(), thd->query_length()))
|
||||
goto err;
|
||||
|
||||
res= FALSE;
|
||||
|
||||
@ -5543,7 +5563,7 @@ mysql_discard_or_import_tablespace(THD *thd,
|
||||
error=1;
|
||||
if (error)
|
||||
goto err;
|
||||
write_bin_log(thd, FALSE, thd->query(), thd->query_length());
|
||||
error= write_bin_log(thd, FALSE, thd->query(), thd->query_length());
|
||||
|
||||
err:
|
||||
ha_autocommit_or_rollback(thd, error);
|
||||
@ -6571,11 +6591,13 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
thd->clear_error();
|
||||
Query_log_event qinfo(thd, thd->query(), thd->query_length(),
|
||||
0, FALSE, 0);
|
||||
mysql_bin_log.write(&qinfo);
|
||||
if ((error= mysql_bin_log.write(&qinfo)))
|
||||
goto view_err_unlock;
|
||||
}
|
||||
my_ok(thd);
|
||||
}
|
||||
|
||||
view_err_unlock:
|
||||
unlock_table_names(thd, table_list, (TABLE_LIST*) 0);
|
||||
|
||||
view_err:
|
||||
@ -6828,8 +6850,9 @@ view_err:
|
||||
|
||||
if (!error)
|
||||
{
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
my_ok(thd);
|
||||
error= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
if (!error)
|
||||
my_ok(thd);
|
||||
}
|
||||
else if (error > 0)
|
||||
{
|
||||
@ -7322,8 +7345,9 @@ view_err:
|
||||
if (rename_temporary_table(thd, new_table, new_db, new_name))
|
||||
goto err1;
|
||||
/* We don't replicate alter table statement on temporary tables */
|
||||
if (!thd->current_stmt_binlog_row_based)
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
if (!thd->current_stmt_binlog_row_based &&
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length()))
|
||||
DBUG_RETURN(TRUE);
|
||||
goto end_temporary;
|
||||
}
|
||||
|
||||
@ -7486,7 +7510,8 @@ view_err:
|
||||
DBUG_ASSERT(!(mysql_bin_log.is_open() &&
|
||||
thd->current_stmt_binlog_row_based &&
|
||||
(create_info->options & HA_LEX_CREATE_TMP_TABLE)));
|
||||
write_bin_log(thd, TRUE, thd->query(), thd->query_length());
|
||||
if (write_bin_log(thd, TRUE, thd->query(), thd->query_length()))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (ha_check_storage_engine_flag(old_db_type, HTON_FLUSH_AFTER_RENAME))
|
||||
{
|
||||
|
Reference in New Issue
Block a user