summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc31
1 files changed, 13 insertions, 18 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 2ce5ec81917..c7513f45983 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4144,24 +4144,19 @@ retry:
entry->file->implicit_emptied= 0;
if (mysql_bin_log.is_open())
{
- char *query, *end;
- uint query_buf_size= 20 + share->db.length + share->table_name.length +1;
- if ((query= (char*) my_malloc(query_buf_size,MYF(MY_WME))))
- {
- /* this DELETE FROM is needed even with row-based binlogging */
- end = strxmov(strmov(query, "DELETE FROM `"),
- share->db.str,"`.`",share->table_name.str,"`", NullS);
- int errcode= query_error_code(thd, TRUE);
- if (thd->binlog_query(THD::STMT_QUERY_TYPE,
- query, (ulong)(end-query),
- FALSE, FALSE, errcode))
- {
- my_free(query, MYF(0));
- goto err;
- }
- my_free(query, MYF(0));
- }
- else
+ bool error= false;
+ String temp_buf;
+ error= temp_buf.append("DELETE FROM ");
+ append_identifier(thd, &temp_buf, share->db.str, strlen(share->db.str));
+ error= temp_buf.append(".");
+ append_identifier(thd, &temp_buf, share->table_name.str,
+ strlen(share->table_name.str));
+ int errcode= query_error_code(thd, TRUE);
+ if (thd->binlog_query(THD::STMT_QUERY_TYPE,
+ temp_buf.ptr(), temp_buf.length(),
+ FALSE, FALSE, errcode))
+ goto err;
+ if(error)
{
/*
As replication is maybe going to be corrupted, we need to warn the