Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
15c0777d
Commit
15c0777d
authored
Jun 25, 2010
by
Vasil Dimov
Browse files
Options
Browse Files
Download
Plain Diff
Merge a lost changeset marko.makela@oracle.com-20100624104620-pklunowaigv7quu9
parents
ff9159f7
d2dfe0b8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
268 additions
and
79 deletions
+268
-79
mysql-test/suite/innodb_plugin/r/innodb_bug54679.result
mysql-test/suite/innodb_plugin/r/innodb_bug54679.result
+91
-0
mysql-test/suite/innodb_plugin/t/innodb_bug54679.test
mysql-test/suite/innodb_plugin/t/innodb_bug54679.test
+97
-0
storage/innodb_plugin/handler/ha_innodb.cc
storage/innodb_plugin/handler/ha_innodb.cc
+80
-79
No files found.
mysql-test/suite/innodb_plugin/r/innodb_bug54679.result
0 → 100644
View file @
15c0777d
SET GLOBAL innodb_file_format='Barracuda';
SET GLOBAL innodb_file_per_table=ON;
SET innodb_strict_mode=ON;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Compressed row_format=COMPRESSED
ALTER TABLE bug54679 ADD COLUMN b INT;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Compressed row_format=COMPRESSED
DROP TABLE bug54679;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Compact
ALTER TABLE bug54679 KEY_BLOCK_SIZE=1;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Compressed KEY_BLOCK_SIZE=1
ALTER TABLE bug54679 ROW_FORMAT=REDUNDANT;
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
DROP TABLE bug54679;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Redundant row_format=REDUNDANT
ALTER TABLE bug54679 KEY_BLOCK_SIZE=2;
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
WHERE TABLE_NAME='bug54679';
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
bug54679 Compressed row_format=REDUNDANT KEY_BLOCK_SIZE=2
SET GLOBAL innodb_file_format=Antelope;
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
DROP TABLE bug54679;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ERROR HY000: Can't create table 'test.bug54679' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
Error 1005 Can't create table 'test.bug54679' (errno: 1478)
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=OFF;
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
DROP TABLE bug54679;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ERROR HY000: Can't create table 'test.bug54679' (errno: 1478)
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
Error 1005 Can't create table 'test.bug54679' (errno: 1478)
SET GLOBAL innodb_file_per_table=ON;
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
DROP TABLE bug54679;
SET GLOBAL innodb_file_format=Antelope;
SET GLOBAL innodb_file_format_check=Antelope;
SET GLOBAL innodb_file_per_table=0;
mysql-test/suite/innodb_plugin/t/innodb_bug54679.test
0 → 100644
View file @
15c0777d
# Test Bug #54679 alter table causes compressed row_format to revert to compact
--
source
include
/
have_innodb_plugin
.
inc
let
$file_format
=
`select @@innodb_file_format`
;
let
$file_format_check
=
`select @@innodb_file_format_check`
;
let
$file_per_table
=
`select @@innodb_file_per_table`
;
SET
GLOBAL
innodb_file_format
=
'Barracuda'
;
SET
GLOBAL
innodb_file_per_table
=
ON
;
SET
innodb_strict_mode
=
ON
;
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
ROW_FORMAT
=
COMPRESSED
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
# The ROW_FORMAT of the table should be preserved when it is not specified
# in ALTER TABLE.
ALTER
TABLE
bug54679
ADD
COLUMN
b
INT
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
DROP
TABLE
bug54679
;
# Check that the ROW_FORMAT conversion to/from COMPRESSED works.
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
# KEY_BLOCK_SIZE implies COMPRESSED.
ALTER
TABLE
bug54679
KEY_BLOCK_SIZE
=
1
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
ALTER
TABLE
bug54679
ROW_FORMAT
=
REDUNDANT
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
DROP
TABLE
bug54679
;
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
ROW_FORMAT
=
REDUNDANT
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
ALTER
TABLE
bug54679
KEY_BLOCK_SIZE
=
2
;
SELECT
TABLE_NAME
,
ROW_FORMAT
,
CREATE_OPTIONS
FROM
information_schema
.
tables
WHERE
TABLE_NAME
=
'bug54679'
;
# This prevents other than REDUNDANT or COMPACT ROW_FORMAT for new tables.
SET
GLOBAL
innodb_file_format
=
Antelope
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
ALTER
TABLE
bug54679
KEY_BLOCK_SIZE
=
4
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
ALTER
TABLE
bug54679
ROW_FORMAT
=
DYNAMIC
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
DROP
TABLE
bug54679
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
ROW_FORMAT
=
DYNAMIC
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
;
SET
GLOBAL
innodb_file_format
=
Barracuda
;
# This will prevent ROW_FORMAT=COMPRESSED, because the system tablespace
# cannot be compressed.
SET
GLOBAL
innodb_file_per_table
=
OFF
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
ALTER
TABLE
bug54679
KEY_BLOCK_SIZE
=
4
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
ALTER
TABLE
bug54679
ROW_FORMAT
=
DYNAMIC
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
DROP
TABLE
bug54679
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
--
error
ER_CANT_CREATE_TABLE
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
ROW_FORMAT
=
DYNAMIC
;
--
replace_regex
/
'[^'
]
*
test
\
.
#sql-[0-9a-f_]*'/'#sql-temporary'/
SHOW
WARNINGS
;
SET
GLOBAL
innodb_file_per_table
=
ON
;
CREATE
TABLE
bug54679
(
a
INT
)
ENGINE
=
InnoDB
ROW_FORMAT
=
DYNAMIC
;
DROP
TABLE
bug54679
;
EVAL
SET
GLOBAL
innodb_file_format
=
$file_format
;
EVAL
SET
GLOBAL
innodb_file_format_check
=
$file_format_check
;
EVAL
SET
GLOBAL
innodb_file_per_table
=
$file_per_table
;
storage/innodb_plugin/handler/ha_innodb.cc
View file @
15c0777d
...
@@ -6460,6 +6460,7 @@ ha_innobase::create(
...
@@ -6460,6 +6460,7 @@ ha_innobase::create(
const
ulint
file_format
=
srv_file_format
;
const
ulint
file_format
=
srv_file_format
;
const
char
*
stmt
;
const
char
*
stmt
;
size_t
stmt_len
;
size_t
stmt_len
;
enum
row_type
row_type
;
DBUG_ENTER
(
"ha_innobase::create"
);
DBUG_ENTER
(
"ha_innobase::create"
);
...
@@ -6580,94 +6581,94 @@ ha_innobase::create(
...
@@ -6580,94 +6581,94 @@ ha_innobase::create(
}
}
}
}
if
(
create_info
->
used_fields
&
HA_CREATE_USED_ROW_FORMAT
)
{
row_type
=
form
->
s
->
row_type
;
if
(
flags
)
{
/* KEY_BLOCK_SIZE was specified. */
if
(
flags
)
{
if
(
form
->
s
->
row_type
!=
ROW_TYPE_COMPRESSED
)
{
/* KEY_BLOCK_SIZE was specified. */
/* ROW_FORMAT other than COMPRESSED
if
(
!
(
create_info
->
used_fields
&
HA_CREATE_USED_ROW_FORMAT
))
{
ignores KEY_BLOCK_SIZE. It does not
/* ROW_FORMAT was not specified;
make sense to reject conflicting
default to ROW_FORMAT=COMPRESSED */
KEY_BLOCK_SIZE and ROW_FORMAT, because
row_type
=
ROW_TYPE_COMPRESSED
;
such combinations can be obtained
}
else
if
(
row_type
!=
ROW_TYPE_COMPRESSED
)
{
with ALTER TABLE anyway. */
/* ROW_FORMAT other than COMPRESSED
push_warning_printf
(
ignores KEY_BLOCK_SIZE. It does not
thd
,
make sense to reject conflicting
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
KEY_BLOCK_SIZE and ROW_FORMAT, because
ER_ILLEGAL_HA_CREATE_OPTION
,
such combinations can be obtained
"InnoDB: ignoring KEY_BLOCK_SIZE=%lu"
with ALTER TABLE anyway. */
" unless ROW_FORMAT=COMPRESSED."
,
push_warning_printf
(
create_info
->
key_block_size
);
thd
,
flags
=
0
;
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
}
ER_ILLEGAL_HA_CREATE_OPTION
,
}
else
{
"InnoDB: ignoring KEY_BLOCK_SIZE=%lu"
/* No KEY_BLOCK_SIZE */
" unless ROW_FORMAT=COMPRESSED."
,
if
(
form
->
s
->
row_type
==
ROW_TYPE_COMPRESSED
)
{
create_info
->
key_block_size
);
/* ROW_FORMAT=COMPRESSED without
flags
=
0
;
KEY_BLOCK_SIZE implies half the
}
maximum KEY_BLOCK_SIZE. */
}
else
{
flags
=
(
DICT_TF_ZSSIZE_MAX
-
1
)
/* No KEY_BLOCK_SIZE */
<<
DICT_TF_ZSSIZE_SHIFT
if
(
row_type
==
ROW_TYPE_COMPRESSED
)
{
|
DICT_TF_COMPACT
/* ROW_FORMAT=COMPRESSED without
|
DICT_TF_FORMAT_ZIP
KEY_BLOCK_SIZE implies half the
<<
DICT_TF_FORMAT_SHIFT
;
maximum KEY_BLOCK_SIZE. */
flags
=
(
DICT_TF_ZSSIZE_MAX
-
1
)
<<
DICT_TF_ZSSIZE_SHIFT
|
DICT_TF_COMPACT
|
DICT_TF_FORMAT_ZIP
<<
DICT_TF_FORMAT_SHIFT
;
#if DICT_TF_ZSSIZE_MAX < 1
#if DICT_TF_ZSSIZE_MAX < 1
# error "DICT_TF_ZSSIZE_MAX < 1"
# error "DICT_TF_ZSSIZE_MAX < 1"
#endif
#endif
}
}
}
}
switch
(
form
->
s
->
row_type
)
{
switch
(
row_type
)
{
const
char
*
row_format_name
;
const
char
*
row_format_name
;
case
ROW_TYPE_REDUNDANT
:
case
ROW_TYPE_REDUNDANT
:
break
;
break
;
case
ROW_TYPE_COMPRESSED
:
case
ROW_TYPE_COMPRESSED
:
case
ROW_TYPE_DYNAMIC
:
case
ROW_TYPE_DYNAMIC
:
row_format_name
row_format_name
=
form
->
s
->
row_type
==
ROW_TYPE_COMPRESSED
=
row_type
==
ROW_TYPE_COMPRESSED
?
"COMPRESSED"
?
"COMPRESSED"
:
"DYNAMIC"
;
:
"DYNAMIC"
;
if
(
!
srv_file_per_table
)
{
push_warning_printf
(
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_ILLEGAL_HA_CREATE_OPTION
,
"InnoDB: ROW_FORMAT=%s"
" requires innodb_file_per_table."
,
row_format_name
);
}
else
if
(
file_format
<
DICT_TF_FORMAT_ZIP
)
{
push_warning_printf
(
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_ILLEGAL_HA_CREATE_OPTION
,
"InnoDB: ROW_FORMAT=%s"
" requires innodb_file_format >"
" Antelope."
,
row_format_name
);
}
else
{
flags
|=
DICT_TF_COMPACT
|
(
DICT_TF_FORMAT_ZIP
<<
DICT_TF_FORMAT_SHIFT
);
break
;
}
/* fall through */
if
(
!
srv_file_per_table
)
{
case
ROW_TYPE_NOT_USED
:
push_warning_printf
(
case
ROW_TYPE_FIXED
:
thd
,
default:
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
push_warning
(
thd
,
ER_ILLEGAL_HA_CREATE_OPTION
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
"InnoDB: ROW_FORMAT=%s"
ER_ILLEGAL_HA_CREATE_OPTION
,
" requires innodb_file_per_table."
,
"InnoDB: assuming ROW_FORMAT=COMPACT."
);
row_format_name
);
case
ROW_TYPE_DEFAULT
:
}
else
if
(
file_format
<
DICT_TF_FORMAT_ZIP
)
{
case
ROW_TYPE_COMPACT
:
push_warning_printf
(
flags
=
DICT_TF_COMPACT
;
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_ILLEGAL_HA_CREATE_OPTION
,
"InnoDB: ROW_FORMAT=%s"
" requires innodb_file_format >"
" Antelope."
,
row_format_name
);
}
else
{
flags
|=
DICT_TF_COMPACT
|
(
DICT_TF_FORMAT_ZIP
<<
DICT_TF_FORMAT_SHIFT
);
break
;
break
;
}
}
}
else
if
(
!
flags
)
{
/* No KEY_BLOCK_SIZE or ROW_FORMAT specified:
/* fall through */
use ROW_FORMAT=COMPACT by default. */
case
ROW_TYPE_NOT_USED
:
case
ROW_TYPE_FIXED
:
default:
push_warning
(
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_ILLEGAL_HA_CREATE_OPTION
,
"InnoDB: assuming ROW_FORMAT=COMPACT."
);
case
ROW_TYPE_DEFAULT
:
case
ROW_TYPE_COMPACT
:
flags
=
DICT_TF_COMPACT
;
flags
=
DICT_TF_COMPACT
;
break
;
}
}
/* Look for a primary key */
/* Look for a primary key */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment