mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 22:34:18 +01:00
07e9a6dc2a
partition is corrupt The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION took another code path (over mysql_alter_table instead of mysql_admin_table) which differs in two ways: 1) alter table opens the tables in a different way than admin tables do resulting in returning with error before it tried the command 2) alter table does not start to send any diagnostic rows to the client which the lower admin functions continue to use -> resulting in assertion crash The fix: Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t. Adding check in mysql_admin_table to setup the partition list for which partitions that should be used. Partitioned tables will still not work with REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions to tables, REPAIR TABLE t USE_FRM, and check that the data still fulfills the partitioning function and then move the table back to being a partition. NOTE: I have removed the following functions from the handler interface: analyze_partitions, check_partitions, optimize_partitions, repair_partitions Since they are not longer needed. THIS ALTERS THE STORAGE ENGINE API
244 lines
5.6 KiB
Text
244 lines
5.6 KiB
Text
-- source include/have_ndb.inc
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
|
|
#
|
|
# Basic syntax test
|
|
#
|
|
|
|
# Support for partition key verified
|
|
CREATE TABLE t1 (a int, b int, c int, d int, PRIMARY KEY(a,b,c))
|
|
ENGINE = NDB
|
|
PARTITION BY KEY (a,b);
|
|
|
|
insert into t1 values (1,1,1,1);
|
|
select * from t1;
|
|
update t1 set d = 2 where a = 1 and b = 1 and c = 1;
|
|
select * from t1;
|
|
delete from t1;
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
# only support for partition key on primary key
|
|
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
|
CREATE TABLE t1 (a int, b int, c int, d int, PRIMARY KEY(a,b))
|
|
ENGINE = NDB
|
|
PARTITION BY KEY (c);
|
|
|
|
CREATE TABLE t1 (a int, b int, c int, PRIMARY KEY(a,b))
|
|
ENGINE = NDB
|
|
PARTITION BY KEY (a);
|
|
|
|
insert into t1 values
|
|
(1,1,3),(1,2,3),(1,3,3),(1,4,3),(1,5,3),(1,6,3),
|
|
(1,7,3),(1,8,3),(1,9,3),(1,10,3),(1,11,3),(1,12,3);
|
|
|
|
select * from t1 order by b;
|
|
|
|
# BUG#33061: ORDER BY DESC becomes ASC in NDB partition pruning to one partition
|
|
select max(b) from t1 where a = 1;
|
|
select b from t1 where a = 1 order by b desc;
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Test partition and char support
|
|
#
|
|
|
|
CREATE TABLE t1 (a INT, b CHAR(10) COLLATE latin1_bin, c INT, d INT,
|
|
PRIMARY KEY (a,b,c) USING HASH)
|
|
ENGINE=NDB
|
|
DEFAULT CHARSET=latin1
|
|
PARTITION BY KEY (b);
|
|
|
|
insert into t1 values (1,"a",1,1),(2,"a",1,1),(3,"a",1,1);
|
|
|
|
# should show only one attribute with DISTRIBUTION KEY
|
|
--exec $NDB_TOOLS_DIR/ndb_desc --no-defaults -d test t1 | sed 's/Version: [0-9]*//' | sed 's/\(Length of frm data: \)[0-9]*/\1#/'
|
|
|
|
#
|
|
# Test that explicit partition info is not shown in show create table
|
|
# result should not contain (PARTITION P0 ... etc) since this is what shows up in
|
|
# mysqldump, and we don't want that info there
|
|
#
|
|
show create table t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Bug #13155: Problem in Create Table using SHOW CREATE TABLE syntax
|
|
#
|
|
CREATE TABLE t1 (a int not null primary key)
|
|
PARTITION BY KEY(a)
|
|
(PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB);
|
|
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1 (a int not null primary key);
|
|
ALTER TABLE t1
|
|
ENGINE = NDB
|
|
PARTITION BY KEY(a)
|
|
(PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB);
|
|
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1 (a int not null primary key) ENGINE = NDB;
|
|
ALTER TABLE t1
|
|
PARTITION BY KEY(a)
|
|
(PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB);
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Bug #17754 Improper handling of removal of partitioning in ALTER TABLE
|
|
# Also added a number of general test cases in the same area
|
|
#
|
|
create table t1 (a int)
|
|
engine=ndb
|
|
partition by key(a)
|
|
(partition p0, partition p1);
|
|
show create table t1;
|
|
|
|
alter table t1 engine=heap;
|
|
show create table t1;
|
|
|
|
alter table t1 engine=ndb;
|
|
show create table t1;
|
|
|
|
alter table t1 engine=heap remove partitioning;
|
|
show create table t1;
|
|
|
|
alter table t1 engine=ndb
|
|
partition by key(a)
|
|
(partition p0, partition p1 engine = ndb);
|
|
show create table t1;
|
|
|
|
alter table t1
|
|
partition by key (a)
|
|
(partition p0 engine=ndb, partition p1 engine=ndb);
|
|
show create table t1;
|
|
|
|
alter table t1 remove partitioning;
|
|
show create table t1;
|
|
|
|
# after bug#31931 was fixed
|
|
# this is OK, since the storage engine is specified
|
|
# on table level before.
|
|
#--error ER_MIX_HANDLER_ERROR
|
|
alter table t1
|
|
partition by key(a)
|
|
(partition p0 engine=ndb, partition p1);
|
|
|
|
alter table t1
|
|
engine=ndb
|
|
partition by key(a)
|
|
(partition p0 engine=ndb, partition p1 engine = ndb);
|
|
show create table t1;
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# BUG 16810 Out of memory when coalesce partition
|
|
#
|
|
CREATE TABLE t1 (
|
|
c1 MEDIUMINT NOT NULL AUTO_INCREMENT,
|
|
c2 TEXT NOT NULL,
|
|
c3 INT NOT NULL,
|
|
c4 BIT NOT NULL,
|
|
c5 FLOAT,
|
|
c6 VARCHAR(255),
|
|
c7 TIMESTAMP,
|
|
PRIMARY KEY(c1,c3))
|
|
ENGINE=NDB
|
|
PARTITION BY KEY(c3) PARTITIONS 5;
|
|
|
|
let $j= 11;
|
|
--disable_query_log
|
|
while ($j)
|
|
{
|
|
eval INSERT INTO t1 VALUES (NULL, "Tested Remotely from Texas, USA", $j,
|
|
b'0',
|
|
$j.00,"By JBM $j","2006-01-26");
|
|
dec $j;
|
|
}
|
|
--enable_query_log
|
|
ALTER TABLE t1 COALESCE PARTITION 4;
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Bug 16822: OPTIMIZE TABLE hangs test
|
|
#
|
|
CREATE TABLE t1 (a int primary key)
|
|
ENGINE=NDB
|
|
PARTITION BY KEY(a);
|
|
ANALYZE TABLE t1;
|
|
CHECK TABLE t1;
|
|
OPTIMIZE TABLE t1;
|
|
REPAIR TABLE t1;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION p0;
|
|
ALTER TABLE t1 CHECK PARTITION p0;
|
|
ALTER TABLE t1 REPAIR PARTITION p0;
|
|
ALTER TABLE t1 ANALYZE PARTITION p0;
|
|
--error ER_ILLEGAL_HA
|
|
ALTER TABLE t1 REBUILD PARTITION p0;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# BUG 16806: ALTER TABLE fails
|
|
#
|
|
CREATE TABLE t1 (
|
|
c1 MEDIUMINT NOT NULL AUTO_INCREMENT,
|
|
c2 TEXT NOT NULL,
|
|
c3 INT NOT NULL,
|
|
PRIMARY KEY(c1,c3))
|
|
ENGINE=NDB
|
|
PARTITION BY KEY(c3) PARTITIONS 5;
|
|
|
|
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (
|
|
c1 MEDIUMINT NOT NULL AUTO_INCREMENT,
|
|
c2 TEXT NOT NULL,
|
|
c3 INT NOT NULL,
|
|
PRIMARY KEY(c1,c3))
|
|
ENGINE=NDB
|
|
PARTITION BY KEY(c3)
|
|
(PARTITION p0 NODEGROUP 0, PARTITION p1 NODEGROUP 0);
|
|
|
|
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
|
|
SELECT NODEGROUP,PARTITION_NAME FROM information_schema.partitions WHERE
|
|
table_name = "t1";
|
|
DROP TABLE t1;
|
|
|
|
# bug#25587
|
|
|
|
CREATE TABLE t1 (
|
|
a tinyint unsigned NOT NULL,
|
|
b bigint(20) unsigned NOT NULL,
|
|
c char(12),
|
|
PRIMARY KEY (a,b)
|
|
) ENGINE ndb DEFAULT CHARSET=latin1 PARTITION BY KEY (a);
|
|
|
|
insert into t1 values(1,1,'1'), (2,2,'2'), (3,3,'3'), (4,4,'4'), (5,5,'5');
|
|
select * from t1 where a = 1;
|
|
select * from t1 where a = 2;
|
|
select * from t1 where a = 3;
|
|
select * from t1 where a = 4;
|
|
select * from t1 where a = 5;
|
|
delete from t1 where a = 1;
|
|
select * from t1 order by 1;
|
|
delete from t1 where a = 2;
|
|
select * from t1 order by 1;
|
|
delete from t1 where a = 3;
|
|
select * from t1 order by 1;
|
|
delete from t1 where a = 4;
|
|
select * from t1 order by 1;
|
|
delete from t1 where a = 5;
|
|
select * from t1 order by 1;
|
|
|
|
drop table t1;
|