summaryrefslogtreecommitdiff
path: root/sql/sql_insert.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r--sql/sql_insert.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index ebbf4cafb19..f7f68ba9509 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -3486,6 +3486,13 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
thd->binlog_start_trans_and_stmt();
}
+ /*
+ If error during the CREATE SELECT we drop the table, so no need for
+ engines to do logging of insertions (optimization).
+ */
+ if (ha_enable_transaction(thd, FALSE))
+ DBUG_RETURN(-1);
+
if (!(table= create_table_from_items(thd, create_info, create_table,
alter_info, &values,
&thd->extra_lock, hook_ptr)))
@@ -3629,6 +3636,7 @@ bool select_create::send_eof()
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
+ ha_enable_transaction(thd, TRUE);
if (thd->extra_lock)
{
mysql_unlock_tables(thd, thd->extra_lock);
@@ -3667,6 +3675,8 @@ void select_create::abort()
if (thd->current_stmt_binlog_row_based)
ha_rollback_stmt(thd);
+ ha_enable_transaction(thd, TRUE);
+
if (thd->extra_lock)
{
mysql_unlock_tables(thd, thd->extra_lock);