mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-24715 Assertion !node->table->skip_alter_undo in CREATE...REPLACE SELECT
In commit 3cef4f8f0f
(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.
This commit is contained in:
15
mysql-test/suite/innodb/r/insert_into_empty.result
Normal file
15
mysql-test/suite/innodb/r/insert_into_empty.result
Normal file
@ -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
mysql-test/suite/innodb/t/insert_into_empty.test
Normal file
14
mysql-test/suite/innodb/t/insert_into_empty.test
Normal file
@ -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;
|
@ -4746,6 +4746,7 @@ 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);
|
||||
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();
|
||||
|
Reference in New Issue
Block a user