Skip to content

Commit

Permalink
MDEV-24715 Assertion !node->table->skip_alter_undo in CREATE...REPLAC…
Browse files Browse the repository at this point in the history
…E SELECT

In commit 3cef4f8 (MDEV-515)
we inadvertently broke CREATE TABLE...REPLACE SELECT statements
by wrongly disabling row-level undo logging.

select_create::prepare(): Only invoke extra(HA_EXTRA_BEGIN_ALTER_COPY)
if no special treatment of duplicates is needed.
  • Loading branch information
dr-m committed Jan 28, 2021
1 parent 68b2819 commit c411393
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
15 changes: 15 additions & 0 deletions mysql-test/suite/innodb/r/insert_into_empty.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#
# MDEV-24715 Assertion !node->table->skip_alter_undo
#
CREATE TABLE t (a INT UNIQUE) ENGINE=InnoDB
REPLACE SELECT 1 AS a, 2 AS b UNION SELECT 1 AS a, 3 AS c;
SELECT * FROM t;
a b
1 3
DROP TABLE t;
CREATE TEMPORARY TABLE t (a INT UNIQUE) ENGINE=InnoDB
REPLACE SELECT 1 AS a, 2 AS b UNION SELECT 1 AS a, 3 AS c;
SELECT * FROM t;
a b
1 3
DROP TEMPORARY TABLE t;
14 changes: 14 additions & 0 deletions mysql-test/suite/innodb/t/insert_into_empty.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--source include/have_innodb.inc

--echo #
--echo # MDEV-24715 Assertion !node->table->skip_alter_undo
--echo #
CREATE TABLE t (a INT UNIQUE) ENGINE=InnoDB
REPLACE SELECT 1 AS a, 2 AS b UNION SELECT 1 AS a, 3 AS c;
SELECT * FROM t;
DROP TABLE t;

CREATE TEMPORARY TABLE t (a INT UNIQUE) ENGINE=InnoDB
REPLACE SELECT 1 AS a, 2 AS b UNION SELECT 1 AS a, 3 AS c;
SELECT * FROM t;
DROP TEMPORARY TABLE t;
3 changes: 2 additions & 1 deletion sql/sql_insert.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4746,7 +4746,8 @@ select_create::prepare(List<Item> &_values, SELECT_LEX_UNIT *u)
if (thd->locked_tables_mode <= LTM_LOCK_TABLES)
{
table->file->ha_start_bulk_insert((ha_rows) 0);
table->file->extra(HA_EXTRA_BEGIN_ALTER_COPY);
if (thd->lex->duplicates == DUP_ERROR && !thd->lex->ignore)
table->file->extra(HA_EXTRA_BEGIN_ALTER_COPY);
}
thd->abort_on_warning= !info.ignore && thd->is_strict_mode();
if (check_that_all_fields_are_given_values(thd, table, table_list))
Expand Down

0 comments on commit c411393

Please sign in to comment.