MDEV-15953 Alter InnoDB Partitioned Table ignores pre-existing DATA DIRECTORY attribute
This commit is contained in:
commit
cc8772f33e
65
mysql-test/suite/parts/r/alter_data_directory_innodb.result
Normal file
65
mysql-test/suite/parts/r/alter_data_directory_innodb.result
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#
|
||||||
|
# MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||||
|
#
|
||||||
|
CREATE TABLE t (
|
||||||
|
a INT NOT NULL
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY HASH (a) (
|
||||||
|
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
INSERT INTO t VALUES (1);
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||||
|
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||||
|
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
DROP TABLE t;
|
46
mysql-test/suite/parts/t/alter_data_directory_innodb.test
Normal file
46
mysql-test/suite/parts/t/alter_data_directory_innodb.test
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
mkdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval CREATE TABLE t (
|
||||||
|
a INT NOT NULL
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY HASH (a) (
|
||||||
|
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
INSERT INTO t VALUES (1);
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||||
|
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here/test;
|
||||||
|
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
@ -3572,6 +3572,12 @@ check_if_ok_to_rename:
|
|||||||
goto err_exit_no_heap;
|
goto err_exit_no_heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Preserve this flag, because it currenlty can't be changed during
|
||||||
|
ALTER TABLE*/
|
||||||
|
if (flags2 & DICT_TF2_USE_TABLESPACE) {
|
||||||
|
flags |= prebuilt->table->flags & 1U << DICT_TF_POS_DATA_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
||||||
|
|
||||||
/* Check each index's column length to make sure they do not
|
/* Check each index's column length to make sure they do not
|
||||||
|
@ -3586,6 +3586,12 @@ check_if_ok_to_rename:
|
|||||||
goto err_exit_no_heap;
|
goto err_exit_no_heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Preserve this flag, because it currenlty can't be changed during
|
||||||
|
ALTER TABLE*/
|
||||||
|
if (flags2 & DICT_TF2_USE_TABLESPACE) {
|
||||||
|
flags |= prebuilt->table->flags & 1U << DICT_TF_POS_DATA_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
||||||
|
|
||||||
/* Check each index's column length to make sure they do not
|
/* Check each index's column length to make sure they do not
|
||||||
|
Loading…
x
Reference in New Issue
Block a user