mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
5a86a61219
- InnoDB now returns handler specific HA_WRONG_CREATE_OPTION instead of MySQL specific ER_ILLEGAL_HA_CREATE_OPTION - This changes the user level error message from "Unknown error" to "Wrong create options" mysql-test/r/lowercase_table2.result: Updated result file mysql-test/r/partition_innodb_plugin.result: Updated to new error message mysql-test/r/partition_open_files_limit.result: Updated result file mysql-test/r/row-checksum-old.result: Updated to new error message mysql-test/r/row-checksum.result: Updated to new error message mysql-test/r/symlink.result: Updated result file mysql-test/suite/innodb/r/innodb-create-options.result: Updated to new error message mysql-test/suite/innodb/r/innodb-zip.result: Updated to new error message mysql-test/suite/innodb/r/innodb.result: Updated to new error message storage/innobase/handler/ha_innodb.cc: Return HA_WRONG_CREATE_OPTION instead of ER_ILLEGAL_HA_CREATE_OPTION This gives more clear and OS indepedent error messages storage/xtradb/handler/ha_innodb.cc: Return HA_WRONG_CREATE_OPTION instead of ER_ILLEGAL_HA_CREATE_OPTION This gives more clear and OS indepedent error messages
155 lines
5.2 KiB
Text
155 lines
5.2 KiB
Text
#
|
|
# Bug#11766879/Bug#60106: DIFF BETWEEN # OF INDEXES IN MYSQL VS INNODB,
|
|
# PARTITONING, ON INDEX CREATE
|
|
# Bug#12696518: MEMORY LEAKS IN HA_PARTITION (VALGRIND TESTS ON TRUNK)
|
|
#
|
|
CREATE TABLE t1 (
|
|
id bigint NOT NULL AUTO_INCREMENT,
|
|
time date,
|
|
id2 bigint not null,
|
|
PRIMARY KEY (id,time)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
|
/*!50100 PARTITION BY RANGE(TO_DAYS(time))
|
|
(PARTITION p10 VALUES LESS THAN (734708) ENGINE = InnoDB,
|
|
PARTITION p20 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
|
|
INSERT INTO t1 (time,id2) VALUES ('2011-07-24',1);
|
|
INSERT INTO t1 (time,id2) VALUES ('2011-07-25',1);
|
|
INSERT INTO t1 (time,id2) VALUES ('2011-07-25',1);
|
|
CREATE UNIQUE INDEX uk_time_id2 on t1(time,id2);
|
|
ERROR 23000: Duplicate entry '2011-07-25-1' for key 'uk_time_id2'
|
|
SELECT COUNT(*) FROM t1;
|
|
COUNT(*)
|
|
3
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
|
`time` date NOT NULL DEFAULT '0000-00-00',
|
|
`id2` bigint(20) NOT NULL,
|
|
PRIMARY KEY (`id`,`time`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
|
|
/*!50100 PARTITION BY RANGE (TO_DAYS(time))
|
|
(PARTITION p10 VALUES LESS THAN (734708) ENGINE = InnoDB,
|
|
PARTITION p20 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
|
DROP TABLE t1;
|
|
call mtr.add_suppression("InnoDB: Error: table `test`.`t1` .* InnoDB internal");
|
|
#
|
|
# Bug#55091: Server crashes on ADD PARTITION after a failed attempt
|
|
#
|
|
SET @old_innodb_file_format = @@global.innodb_file_format;
|
|
SET @old_innodb_file_per_table = @@global.innodb_file_per_table;
|
|
SET @old_innodb_strict_mode = @@global.innodb_strict_mode;
|
|
SET @@global.innodb_file_format = Barracuda,
|
|
@@global.innodb_file_per_table = ON,
|
|
@@global.innodb_strict_mode = ON;
|
|
# Connection con1
|
|
CREATE TABLE t1 (id INT NOT NULL
|
|
PRIMARY KEY,
|
|
user_num CHAR(10)
|
|
) ENGINE = InnoDB
|
|
KEY_BLOCK_SIZE=4
|
|
PARTITION BY HASH(id) PARTITIONS 1;
|
|
t1#P#p0.ibd
|
|
t1.frm
|
|
t1.par
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`user_num` char(10) DEFAULT NULL,
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=4
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 1 */
|
|
SET GLOBAL innodb_file_per_table = OFF;
|
|
# Connection con2
|
|
LOCK TABLE t1 WRITE;
|
|
# ALTER fails because COMPRESSED/KEY_BLOCK_SIZE
|
|
# are incompatible with innodb_file_per_table = OFF;
|
|
ALTER TABLE t1 ADD PARTITION PARTITIONS 1;
|
|
ERROR HY000: Got error 140 "Wrong create options" from storage engine
|
|
t1#P#p0.ibd
|
|
t1.frm
|
|
t1.par
|
|
# This SET is not needed to reproduce the bug,
|
|
# it is here just to make the test case more realistic
|
|
SET innodb_strict_mode = OFF;
|
|
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
|
Warnings:
|
|
Warning 140 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
|
Warning 140 InnoDB: ignoring KEY_BLOCK_SIZE=4.
|
|
Warning 140 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
|
Warning 140 InnoDB: ignoring KEY_BLOCK_SIZE=4.
|
|
Warning 140 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
|
Warning 140 InnoDB: ignoring KEY_BLOCK_SIZE=4.
|
|
t1.frm
|
|
t1.par
|
|
ALTER TABLE t1 REBUILD PARTITION p0;
|
|
Warnings:
|
|
Warning 140 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
|
Warning 140 InnoDB: ignoring KEY_BLOCK_SIZE=4.
|
|
UNLOCK TABLES;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`user_num` char(10) DEFAULT NULL,
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=4
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 3 */
|
|
DROP TABLE t1;
|
|
# Connection default
|
|
SET @@global.innodb_strict_mode = @old_innodb_strict_mode;
|
|
SET @@global.innodb_file_format = @old_innodb_file_format;
|
|
SET @@global.innodb_file_per_table = @old_innodb_file_per_table;
|
|
SET NAMES utf8;
|
|
CREATE TABLE `t``\""e` (a INT, PRIMARY KEY (a))
|
|
ENGINE=InnoDB
|
|
PARTITION BY RANGE (a)
|
|
SUBPARTITION BY HASH (a)
|
|
(PARTITION `p0``\""e` VALUES LESS THAN (100)
|
|
(SUBPARTITION `sp0``\""e`,
|
|
SUBPARTITION `sp1``\""e`),
|
|
PARTITION `p1``\""e` VALUES LESS THAN (MAXVALUE)
|
|
(SUBPARTITION `sp2``\""e`,
|
|
SUBPARTITION `sp3``\""e`));
|
|
INSERT INTO `t``\""e` VALUES (0), (2), (6), (10), (14), (18), (22);
|
|
START TRANSACTION;
|
|
# con1
|
|
SET NAMES utf8;
|
|
START TRANSACTION;
|
|
# default connection
|
|
UPDATE `t``\""e` SET a = 16 WHERE a = 0;
|
|
# con1
|
|
UPDATE `t``\""e` SET a = 8 WHERE a = 22;
|
|
UPDATE `t``\""e` SET a = 12 WHERE a = 0;
|
|
# default connection
|
|
SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
|
|
GROUP BY lock_table;
|
|
lock_table COUNT(*)
|
|
`test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */ 2
|
|
set @old_sql_mode = @@sql_mode;
|
|
set sql_mode = 'ANSI_QUOTES';
|
|
SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
|
|
GROUP BY lock_table;
|
|
lock_table COUNT(*)
|
|
"test"."t`\""""e" /* Partition "p0`\""""e", Subpartition "sp0`\""""e" */ 2
|
|
set @@sql_mode = @old_sql_mode;
|
|
UPDATE `t``\""e` SET a = 4 WHERE a = 22;
|
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
# First table reported in 'SHOW ENGINE InnoDB STATUS'
|
|
SHOW ENGINE InnoDB STATUS;
|
|
Type Name Status
|
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
|
set @old_sql_mode = @@sql_mode;
|
|
set sql_mode = 'ANSI_QUOTES';
|
|
SHOW ENGINE InnoDB STATUS;
|
|
Type Name Status
|
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
|
set @@sql_mode = @old_sql_mode;
|
|
# con1
|
|
ROLLBACK;
|
|
# default connection
|
|
DROP TABLE `t``\""e`;
|
|
SET NAMES DEFAULT;
|