diff options
author | Marc Alff <marc.alff@sun.com> | 2009-12-16 15:48:55 -0700 |
---|---|---|
committer | Marc Alff <marc.alff@sun.com> | 2009-12-16 15:48:55 -0700 |
commit | 0d99234dba5dc64bc4f369361f8fc0a669b8dff3 (patch) | |
tree | be48bf75b22c376754b743856f13a6f42139de8b /sql/sql_delete.cc | |
parent | 0531f85e16223e30071e7e8ce40695fda3f2c235 (diff) | |
parent | 5cd3dffebb2abd5778e819ac57001e0d963484d8 (diff) | |
download | mariadb-git-0d99234dba5dc64bc4f369361f8fc0a669b8dff3.tar.gz |
Merge mysql-next-mr (revno 2942) --> mysql-next-mr-marc
Diffstat (limited to 'sql/sql_delete.cc')
-rw-r--r-- | sql/sql_delete.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 1b54f2a76e4..ab898950a1d 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -426,7 +426,8 @@ cleanup: } DBUG_ASSERT(transactional_table || !deleted || thd->transaction.stmt.modified_non_trans_table); free_underlaid_joins(thd, select_lex); - if (error < 0 || (thd->lex->ignore && !thd->is_fatal_error)) + if (error < 0 || + (thd->lex->ignore && !thd->is_error() && !thd->is_fatal_error)) { /* If a TRUNCATE TABLE was issued, the number of rows should be reported as @@ -1090,6 +1091,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) TABLE *table; bool error; uint path_length; + bool is_temporary_table= false; DBUG_ENTER("mysql_truncate"); bzero((char*) &create_info,sizeof(create_info)); @@ -1100,6 +1102,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) /* If it is a temporary table, close and regenerate it */ if (!dont_send_ok && (table= find_temporary_table(thd, table_list))) { + is_temporary_table= true; handlerton *table_type= table->s->db_type(); TABLE_SHARE *share= table->s; /* Note that a temporary table cannot be partitioned */ @@ -1178,11 +1181,9 @@ end: { if (!error) { - /* - TRUNCATE must always be statement-based binlogged (not row-based) so - we don't test current_stmt_binlog_row_based. - */ - error= write_bin_log(thd, TRUE, thd->query(), thd->query_length()); + /* In RBR, the statement is not binlogged if the table is temporary. */ + if (!is_temporary_table || !thd->current_stmt_binlog_row_based) + error= write_bin_log(thd, TRUE, thd->query(), thd->query_length()); if (!error) my_ok(thd); // This should return record count } |