mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 17:33:44 +01:00
0e947e88b1
CORRUPTS FRM Analysis: --------- ALTER TABLE on a partitioned table resulted in the wrong engine being written into the table's FRM file and displayed in SHOW CREATE TABLE. The prep_alter_part_table() modifies the partition_info object for TABLE instance representing the old version of table. If the ALTER TABLE ENGINE statement fails, the partition_info object for the TABLE contains the altered storage engine name. The SHOW CREATE TABLE uses the TABLE object to display the table information, hence displays incorrect storage engine for the table. Also a subsequent successful ALTER TABLE operation will write the incorrect engine information into the FRM file. Fix: --- A copy of the partition_info object is created before modification so that any changes would not cause the the original partition_info object to be modified if the ALTER TABLE fails.(Backported part of the code provided as fix for bug#14156617 in mysql-5.6.6).
146 lines
4.2 KiB
Text
146 lines
4.2 KiB
Text
# Tests for the partition storage engine in connection with the
|
|
# storage engine ARCHIVE.
|
|
#
|
|
# Creation:
|
|
# 2007-10-18 mleich - Move ARCHIVE related sub tests of partition.test to
|
|
# this test. Reason: ARCHIVE is not everytime available.
|
|
# - Minor cleanup
|
|
#
|
|
|
|
--source include/have_partition.inc
|
|
--source include/have_archive.inc
|
|
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
|
|
#
|
|
# Bug#44622: Using PARTITIONs with ARCHIVE engine reports 0 bytes in i_s.TABLES
|
|
#
|
|
CREATE TABLE t1 (f1 DATE NOT NULL)
|
|
ENGINE = ARCHIVE PARTITION BY RANGE (TO_DAYS(f1))
|
|
(partition p1 values less than (733751),
|
|
partition p2 values less than MAXVALUE);
|
|
|
|
INSERT INTO t1 VALUES(CURRENT_DATE);
|
|
|
|
SELECT DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
|
|
SELECT DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (f1 DATE NOT NULL)
|
|
ENGINE = ARCHIVE;
|
|
INSERT INTO t1 VALUES(CURRENT_DATE);
|
|
SELECT DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
|
|
SELECT DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Bug 17310 Partitions: Bugs with archived partitioned tables
|
|
#
|
|
--disable_warnings
|
|
drop database if exists db99;
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
create database db99;
|
|
use db99;
|
|
create table t1 (a int not null)
|
|
engine=archive
|
|
partition by list (a)
|
|
(partition p0 values in (1), partition p1 values in (2));
|
|
insert into t1 values (1), (2);
|
|
--error 0, ER_CANT_CREATE_TABLE
|
|
create index inx on t1 (a);
|
|
alter table t1 add partition (partition p2 values in (3));
|
|
alter table t1 drop partition p2;
|
|
use test;
|
|
drop database db99;
|
|
|
|
create table t1 (f1 integer) engine= ARCHIVE partition by list(f1)
|
|
(
|
|
partition p1 values in (1),
|
|
partition p2 values in (NULL),
|
|
partition p3 values in (2),
|
|
partition p4 values in (3),
|
|
partition p5 values in (4)
|
|
);
|
|
|
|
insert into t1 values (1),(2),(3),(4),(null);
|
|
select * from t1;
|
|
select * from t1 where f1 < 3;
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1 (
|
|
a int not null,
|
|
b int not null,
|
|
c int not null) engine=ARCHIVE
|
|
partition by hash (a + 2)
|
|
partitions 3
|
|
(partition x1 tablespace ts1,
|
|
partition x2 tablespace ts2,
|
|
partition x3 tablespace ts3);
|
|
|
|
insert into t1 values (1,1,1);
|
|
insert into t1 values (2,1,1);
|
|
insert into t1 values (3,1,1);
|
|
insert into t1 values (4,1,1);
|
|
insert into t1 values (5,1,1);
|
|
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
|
|
# (though reported as InnoDB bug, requires some ARCHIVE tests
|
|
|
|
create table t1 (a int) engine=archive partition by hash(a);
|
|
show create table t1;
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
|
f1 VARCHAR(25),
|
|
PRIMARY KEY(id)) ENGINE=ARCHIVE
|
|
PARTITION BY RANGE(id)
|
|
SUBPARTITION BY hash(id) subpartitions 2
|
|
(PARTITION pa1 values less than (10),
|
|
PARTITION pa2 values less than (20),
|
|
PARTITION pa3 values less than (30),
|
|
PARTITION pa4 values less than (40),
|
|
PARTITION pa5 values less than (50),
|
|
PARTITION pa6 values less than (60),
|
|
PARTITION pa7 values less than (70),
|
|
PARTITION pa8 values less than (80),
|
|
PARTITION pa9 values less than (90),
|
|
PARTITION pa10 values less than (100),
|
|
PARTITION pa11 values less than MAXVALUE);
|
|
|
|
--disable_query_log
|
|
let $n= 100;
|
|
while ($n)
|
|
{
|
|
insert into t1 (f1) values (repeat('a',25));
|
|
dec $n;
|
|
}
|
|
--enable_query_log
|
|
|
|
show create table t1;
|
|
select count(*) from t1;
|
|
drop table t1;
|
|
|
|
|
|
--echo #
|
|
--echo #BUG 18618561: FAILED ALTER TABLE ENGINE CHANGE WITH PARTITIONS
|
|
--echo # CORRUPTS FRM
|
|
|
|
CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= MYISAM PARTITION BY HASH(fld1)
|
|
PARTITIONS 5;
|
|
SHOW CREATE TABLE t1;
|
|
|
|
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
|
|
--error ER_CANT_CREATE_TABLE
|
|
ALTER TABLE t1 ENGINE= ARCHIVE;
|
|
|
|
--echo #After the patch, the ENGINE is correctly displayed as MyISAM
|
|
SHOW CREATE TABLE t1;
|
|
|
|
--echo #Cleanup.
|
|
DROP TABLE t1;
|