1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

merge of 5.1-main into 5.1-maria; MyISAM changes are also ported to Maria.

This commit is contained in:
Guilhem Bichot
2009-03-11 16:32:42 +01:00
188 changed files with 4013 additions and 5332 deletions

View File

@ -51,6 +51,11 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
THD::killed_state killed_status= THD::NOT_KILLED;
DBUG_ENTER("mysql_delete");
THD::enum_binlog_query_type query_type=
thd->lex->sql_command == SQLCOM_TRUNCATE ?
THD::STMT_QUERY_TYPE :
THD::ROW_QUERY_TYPE;
if (open_and_lock_tables(thd, table_list))
DBUG_RETURN(TRUE);
if (!(table= table_list->table))
@ -135,6 +140,11 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
DBUG_PRINT("debug", ("Trying to use delete_all_rows()"));
if (!(error=table->file->ha_delete_all_rows()))
{
/*
If delete_all_rows() is used, it is not possible to log the
query in row format, so we have to log it in statement format.
*/
query_type= THD::STMT_QUERY_TYPE;
error= -1; // ok
deleted= maybe_deleted;
goto cleanup;
@ -374,6 +384,11 @@ cleanup:
{
if (mysql_bin_log.is_open())
{
bool const is_trans=
thd->lex->sql_command == SQLCOM_TRUNCATE ?
FALSE :
transactional_table;
if (error < 0)
thd->clear_error();
/*
@ -381,10 +396,13 @@ cleanup:
storage engine does not inject the rows itself, we replicate
statement-based; otherwise, 'ha_delete_row()' was used to
delete specific rows which we might log row-based.
Note that TRUNCATE TABLE is not transactional and should
therefore be treated as a DDL.
*/
int log_result= thd->binlog_query(THD::ROW_QUERY_TYPE,
int log_result= thd->binlog_query(query_type,
thd->query, thd->query_length,
transactional_table, FALSE, killed_status);
is_trans, FALSE, killed_status);
if (log_result && transactional_table)
{