mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 21:42:35 +01:00
Bug#56632 - The warning code related to KEY_BLOCK_SIZE and ROW_FORMAT when innodb_strict_mode=OFF is improved in order to take into account whether the KEY_BLOCK_SIZE is specified on the current ALTER statement or the previous CREATE statement.
The testcase shows the expected results of 12 different combinations of these settings.
This commit is contained in:
parent
0062e693d7
commit
b1698f638f
3 changed files with 519 additions and 8 deletions
294
mysql-test/suite/innodb/r/innodb_bug56632.result
Normal file
294
mysql-test/suite/innodb/r/innodb_bug56632.result
Normal file
|
@ -0,0 +1,294 @@
|
|||
SET storage_engine=InnoDB;
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
# Test 1) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
ERROR HY000: Can't create table 'test.bug56632' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.bug56632' (errno: 1478)
|
||||
# Test 2) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 3) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
# Test 4) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
# Test 5) CREATE with KEY_BLOCK_SIZE=3 (invalid).
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
ERROR HY000: Can't create table 'test.bug56632' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 3. Valid values are [1, 2, 4, 8, 16]
|
||||
Error 1005 Can't create table 'test.bug56632' (errno: 1478)
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
# Test 6) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 7) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 8) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 9) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
# Test 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=3
|
||||
# Test 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
# Cleanup
|
||||
DROP TABLE IF EXISTS bug56632;
|
216
mysql-test/suite/innodb/t/innodb_bug56632.test
Normal file
216
mysql-test/suite/innodb/t/innodb_bug56632.test
Normal file
|
@ -0,0 +1,216 @@
|
|||
#
|
||||
# Bug#56632: ALTER TABLE implicitly changes ROW_FORMAT to COMPRESSED
|
||||
# http://bugs.mysql.com/56632
|
||||
#
|
||||
# Innodb automatically uses compressed mode when the KEY_BLOCK_SIZE
|
||||
# parameter is used, except if the ROW_FORMAT is also specified, in
|
||||
# which case the KEY_BLOCK_SIZE is ignored and a warning is shown.
|
||||
# But Innodb was getting confused when neither of those parameters
|
||||
# was used on the ALTER statement after they were both used on the
|
||||
# CREATE.
|
||||
#
|
||||
# This will test the results of all 4 combinations of these two
|
||||
# parameters of the CREATE and ALTER.
|
||||
#
|
||||
# Tests 1-5 use INNODB_STRICT_MODE=1 which returns an error
|
||||
# if there is anything wrong with the statement.
|
||||
#
|
||||
# 1) CREATE with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1, ALTER with neither.
|
||||
# Result; CREATE; fails with error ER_CANT_CREATE_TABLE
|
||||
# 2) CREATE with ROW_FORMAT=COMPACT, ALTER with KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER quietly converts ROW_FORMAT to compressed.
|
||||
# 3) CREATE with KEY_BLOCK_SIZE=1, ALTER with ROW_FORMAT=COMPACT
|
||||
# Result; CREATE quietly converts ROW_FORMAT to compressed,
|
||||
# ALTER fails with error ER_CANT_CREATE_TABLE.
|
||||
# 4) CREATE with neither, ALTER with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER; fails with error ER_CANT_CREATE_TABLE
|
||||
# 5) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
# Result; CREATE; fails with error ER_CANT_CREATE_TABLE
|
||||
#
|
||||
# Tests 6-11 use INNODB_STRICT_MODE=0 which automatically makes
|
||||
# adjustments if the prameters are incompatible.
|
||||
#
|
||||
# 6) CREATE with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1, ALTER with neither.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# ALTER succeeds, no warnings.
|
||||
# 7) CREATE with ROW_FORMAT=COMPACT, ALTER with KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER quietly converts ROW_FORMAT to compressed.
|
||||
# 8) CREATE with KEY_BLOCK_SIZE=1, ALTER with ROW_FORMAT=COMPACT
|
||||
# Result; CREATE quietly converts ROW_FORMAT to compressed,
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# 9) CREATE with neither, ALTER with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, quietly converts ROW_FORMAT to compressed.
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
SET storage_engine=InnoDB;
|
||||
|
||||
--disable_query_log
|
||||
# These values can change during the test
|
||||
LET $innodb_file_format_orig=`select @@innodb_file_format`;
|
||||
LET $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
|
||||
LET $innodb_file_per_table_orig=`select @@innodb_file_per_table`;
|
||||
LET $innodb_strict_mode_orig=`select @@session.innodb_strict_mode`;
|
||||
--enable_query_log
|
||||
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
|
||||
# Innodb strict mode will cause an error on the CREATE or ALTER when;
|
||||
# 1. both ROW_FORMAT=COMPACT and KEY_BLOCK_SIZE=1,
|
||||
# 2. KEY_BLOCK_SIZE is not a valid number (0,1,2,4,8,16).
|
||||
# With innodb_strict_mode = OFF, These errors are corrected
|
||||
# and just a warning is returned.
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
|
||||
--echo # Test 1) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
|
||||
--echo # Test 2) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 3) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
--disable_result_log
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
--enable_result_log
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 4) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
--disable_result_log
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
--enable_result_log
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 5) CREATE with KEY_BLOCK_SIZE=3 (invalid).
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
|
||||
--echo # Test 6) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 7) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 8) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 9) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Cleanup
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
|
||||
--disable_query_log
|
||||
EVAL SET GLOBAL innodb_file_per_table=$innodb_file_per_table_orig;
|
||||
EVAL SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
|
||||
EVAL SET GLOBAL innodb_file_format=$innodb_file_format_orig;
|
||||
EVAL SET SESSION innodb_strict_mode=$innodb_strict_mode_orig;
|
||||
--enable_query_log
|
||||
|
|
@ -6556,8 +6556,8 @@ create_options_are_valid(
|
|||
? "COMPRESSED"
|
||||
: "DYNAMIC";
|
||||
|
||||
/* These two ROW_FORMATs require
|
||||
srv_file_per_table and srv_file_format */
|
||||
/* These two ROW_FORMATs require srv_file_per_table
|
||||
and srv_file_format > Antelope */
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
|
@ -6567,7 +6567,6 @@ create_options_are_valid(
|
|||
" requires innodb_file_per_table.",
|
||||
row_format_name);
|
||||
ret = FALSE;
|
||||
|
||||
}
|
||||
|
||||
if (srv_file_format < DICT_TF_FORMAT_ZIP) {
|
||||
|
@ -6766,6 +6765,8 @@ ha_innobase::create(
|
|||
ulint ssize, ksize;
|
||||
ulint key_block_size = create_info->key_block_size;
|
||||
|
||||
/* Set 'flags' to the correct key_block_size.
|
||||
It will be zero if key_block_size is an invalid number.*/
|
||||
for (ssize = ksize = 1; ssize <= DICT_TF_ZSSIZE_MAX;
|
||||
ssize++, ksize <<= 1) {
|
||||
if (key_block_size == ksize) {
|
||||
|
@ -6806,10 +6807,10 @@ ha_innobase::create(
|
|||
row_type = form->s->row_type;
|
||||
|
||||
if (flags) {
|
||||
/* KEY_BLOCK_SIZE was specified. */
|
||||
if (!(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) {
|
||||
/* ROW_FORMAT was not specified;
|
||||
default to ROW_FORMAT=COMPRESSED */
|
||||
/* if KEY_BLOCK_SIZE was specified on this statement and
|
||||
ROW_FORMAT was not, automatically change ROW_FORMAT to COMPRESSED.*/
|
||||
if ( (create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)
|
||||
&& !(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) {
|
||||
row_type = ROW_TYPE_COMPRESSED;
|
||||
} else if (row_type != ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT other than COMPRESSED
|
||||
|
@ -6828,7 +6829,7 @@ ha_innobase::create(
|
|||
flags = 0;
|
||||
}
|
||||
} else {
|
||||
/* No KEY_BLOCK_SIZE */
|
||||
/* flags == 0 means no KEY_BLOCK_SIZE.*/
|
||||
if (row_type == ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT=COMPRESSED without
|
||||
KEY_BLOCK_SIZE implies half the
|
||||
|
|
Loading…
Reference in a new issue