mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fixed MDEV-365 "Got assertion when doing alter table on a partition"
mysql-test/r/partition.result: Added test case mysql-test/t/partition.test: Added test case sql/sql_partition.cc: Do mysql_trans_prepare_alter_copy_data() after all original tables are locked. (We don't want to disable transactions for the original tables, that still may be in the cache) sql/sql_table.cc: Fixed two wrong DBUG_ENTER
This commit is contained in:
@@ -2473,3 +2473,17 @@ SELECT * FROM vtmp;
|
|||||||
1
|
1
|
||||||
DROP VIEW vtmp;
|
DROP VIEW vtmp;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-365 "Got assertion when doing alter table on a partition"
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( i INT ) ENGINE=Aria PARTITION BY HASH(i) PARTITIONS 2;
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(2),(3),(4);
|
||||||
|
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||||
|
SELECT * from t1 order by i;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
2
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -2476,3 +2476,13 @@ SELECT 1 FROM t1 AS t1_0 JOIN t1 ON t1_0.a LIKE (SELECT 1 FROM t1);
|
|||||||
SELECT * FROM vtmp;
|
SELECT * FROM vtmp;
|
||||||
DROP VIEW vtmp;
|
DROP VIEW vtmp;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-365 "Got assertion when doing alter table on a partition"
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( i INT ) ENGINE=Aria PARTITION BY HASH(i) PARTITIONS 2;
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(2),(3),(4);
|
||||||
|
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||||
|
SELECT * from t1 order by i;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -5500,10 +5500,12 @@ static bool mysql_change_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||||||
|
|
||||||
build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0);
|
build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0);
|
||||||
|
|
||||||
if(mysql_trans_prepare_alter_copy_data(thd))
|
/* First lock the original tables */
|
||||||
|
if (file->ha_external_lock(thd, F_WRLCK))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
if (file->ha_external_lock(thd, F_WRLCK))
|
/* Disable transactions for all new tables */
|
||||||
|
if (mysql_trans_prepare_alter_copy_data(thd))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
/* TODO: test if bulk_insert would increase the performance */
|
/* TODO: test if bulk_insert would increase the performance */
|
||||||
|
@@ -7247,7 +7247,7 @@ err_with_mdl:
|
|||||||
|
|
||||||
bool mysql_trans_prepare_alter_copy_data(THD *thd)
|
bool mysql_trans_prepare_alter_copy_data(THD *thd)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_prepare_alter_copy_data");
|
DBUG_ENTER("mysql_trans_prepare_alter_copy_data");
|
||||||
/*
|
/*
|
||||||
Turn off recovery logging since rollback of an alter table is to
|
Turn off recovery logging since rollback of an alter table is to
|
||||||
delete the new table so there is no need to log the changes to it.
|
delete the new table so there is no need to log the changes to it.
|
||||||
@@ -7267,7 +7267,7 @@ bool mysql_trans_prepare_alter_copy_data(THD *thd)
|
|||||||
bool mysql_trans_commit_alter_copy_data(THD *thd)
|
bool mysql_trans_commit_alter_copy_data(THD *thd)
|
||||||
{
|
{
|
||||||
bool error= FALSE;
|
bool error= FALSE;
|
||||||
DBUG_ENTER("mysql_commit_alter_copy_data");
|
DBUG_ENTER("mysql_trans_commit_alter_copy_data");
|
||||||
|
|
||||||
if (ha_enable_transaction(thd, TRUE))
|
if (ha_enable_transaction(thd, TRUE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
Reference in New Issue
Block a user