Skip to content
Permalink
Browse files
Merge 10.1 into 10.2
  • Loading branch information
dr-m committed Nov 1, 2017
2 parents c3b641e + 892cf2d commit 6692b5f
Show file tree
Hide file tree
Showing 17 changed files with 124 additions and 113 deletions.
@@ -34,11 +34,11 @@ t4 CREATE TABLE `t4` (
PARTITION BY HASH (`a`)
PARTITIONS 2
alter table t1 encrypted=no;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTED'
alter table t2 encrypted=yes;
alter table t3 encrypted=default;
alter table t4 encrypted=no;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTED'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
@@ -14,7 +14,7 @@ t1 CREATE TABLE `t1` (
`b` char(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes `encryption_key_id`=2
alter table t1 encryption_key_id=3;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
@@ -14,7 +14,7 @@ t1 CREATE TABLE `t1` (
`b` char(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes `encryption_key_id`=2
alter table t1 encryption_key_id=3;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
@@ -41,11 +41,10 @@ CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNOD
Warnings:
Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 1 when encryption is disabled
ALTER TABLE t1 ENCRYPTION_KEY_ID=99;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
SHOW WARNINGS;
Level Code Message
Warning 140 InnoDB: ENCRYPTION_KEY_ID 99 not available
Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
Error 1478 Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
set innodb_default_encryption_key_id = 1;
drop table t1,t2;
@@ -5,7 +5,7 @@ ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT,
c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB;
ALTER TABLE t1 ENCRYPTED=YES;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTED'
DROP TABLE t1;
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT,
c VARCHAR(256), coordinate POINT NOT NULL) ENCRYPTED=YES ENGINE=INNODB;
@@ -22,13 +22,11 @@ show create table t2;
show create table t3;
show create table t4;

--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
--error ER_CANT_CREATE_TABLE
--error ER_ILLEGAL_HA_CREATE_OPTION
alter table t1 encrypted=no;
alter table t2 encrypted=yes;
alter table t3 encrypted=default;
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
--error ER_CANT_CREATE_TABLE
--error ER_ILLEGAL_HA_CREATE_OPTION
alter table t4 encrypted=no;

show create table t1;
@@ -7,8 +7,7 @@ insert t1 values (12345, repeat('1234567890', 20));

alter table t1 encryption_key_id=2;
show create table t1;
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
--error ER_CANT_CREATE_TABLE
--error ER_ILLEGAL_HA_CREATE_OPTION
alter table t1 encryption_key_id=3;
show create table t1;
alter table t1 encryption_key_id=33;
@@ -17,4 +16,3 @@ alter table t1 encryption_key_id=4;
show create table t1;

drop table t1;

@@ -27,10 +27,8 @@ DROP TABLE t1;
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
SHOW CREATE TABLE t1;
CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
--error 1005
--error ER_ILLEGAL_HA_CREATE_OPTION
ALTER TABLE t1 ENCRYPTION_KEY_ID=99;
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
SHOW WARNINGS;
set innodb_default_encryption_key_id = 1;

@@ -20,10 +20,8 @@ ENCRYPTED=YES;
#
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT,
c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB;
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/
--error ER_CANT_CREATE_TABLE
--error ER_ILLEGAL_HA_CREATE_OPTION
ALTER TABLE t1 ENCRYPTED=YES;
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/
DROP TABLE t1;

#
@@ -36,12 +36,11 @@ innodb_redundant CREATE TABLE `innodb_redundant` (
`b` char(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
alter table innodb_redundant page_compressed=1;
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED'
show warnings;
Level Code Message
Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=REDUNDANT
Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options")
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
Error 1478 Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED'
show create table innodb_redundant;
Table Create Table
innodb_redundant CREATE TABLE `innodb_redundant` (
@@ -235,7 +235,8 @@ t1 CREATE TABLE `t1` (
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done';
SET lock_wait_timeout = 10;
ALTER TABLE t1 ROW_FORMAT=COMPACT, ALGORITHM = INPLACE;
ALTER TABLE t1 ROW_FORMAT=COMPACT
PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE;
# session default
connection default;
INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1;
@@ -26,10 +26,8 @@ create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row
show warnings;
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant;
show create table innodb_redundant;
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/
--error 1005
--error ER_ILLEGAL_HA_CREATE_OPTION
alter table innodb_redundant page_compressed=1;
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/
show warnings;
show create table innodb_redundant;
alter table innodb_redundant row_format=compact page_compressed=1;
@@ -215,7 +215,8 @@ SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done
# Ensure that the ALTER TABLE will be executed even with some concurrent DML.
SET lock_wait_timeout = 10;
--send
ALTER TABLE t1 ROW_FORMAT=COMPACT, ALGORITHM = INPLACE;
ALTER TABLE t1 ROW_FORMAT=COMPACT
PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE;

# Generate some log (delete-mark, delete-unmark, insert etc.)
# while the index creation is blocked. Some of this may run
@@ -390,23 +390,34 @@ innobase_spatial_exist(
return(false);
}

/*******************************************************************//**
Determine if ALTER TABLE needs to rebuild the table.
@param ha_alter_info the DDL operation
@param altered_table MySQL original table
/** Determine if ALTER TABLE needs to rebuild the table.
@param ha_alter_info the DDL operation
@param table metadata before ALTER TABLE
@return whether it is necessary to rebuild the table */
static MY_ATTRIBUTE((nonnull, warn_unused_result))
bool
innobase_need_rebuild(
/*==================*/
const Alter_inplace_info* ha_alter_info,
const TABLE* altered_table)
const TABLE* table)
{
Alter_inplace_info::HA_ALTER_FLAGS alter_inplace_flags =
ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE);
ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE;

if (alter_inplace_flags & Alter_inplace_info::CHANGE_CREATE_OPTION) {
const ha_table_option_struct& alt_opt=
*ha_alter_info->create_info->option_struct;
const ha_table_option_struct& opt= *table->s->option_struct;

if (alt_opt.page_compressed != opt.page_compressed
|| alt_opt.page_compression_level
!= opt.page_compression_level
|| alt_opt.encryption != opt.encryption
|| alt_opt.encryption_key_id != opt.encryption_key_id) {
return(true);
}
}

if (alter_inplace_flags
== Alter_inplace_info::CHANGE_CREATE_OPTION
if (alter_inplace_flags == Alter_inplace_info::CHANGE_CREATE_OPTION
&& !(ha_alter_info->create_info->used_fields
& (HA_CREATE_USED_ROW_FORMAT
| HA_CREATE_USED_KEY_BLOCK_SIZE))) {
@@ -416,7 +427,7 @@ innobase_need_rebuild(
return(false);
}

return(!!(ha_alter_info->handler_flags & INNOBASE_ALTER_REBUILD));
return(!!(alter_inplace_flags & INNOBASE_ALTER_REBUILD));
}

/** Check if virtual column in old and new table are in order, excluding
@@ -571,28 +582,6 @@ ha_innobase::check_if_supported_inplace_alter(

update_thd();

/* Change on engine specific table options require rebuild of the
table */
if (ha_alter_info->handler_flags
& Alter_inplace_info::CHANGE_CREATE_OPTION) {
ha_table_option_struct *new_options= ha_alter_info->create_info->option_struct;
ha_table_option_struct *old_options= table->s->option_struct;

if (new_options->page_compressed != old_options->page_compressed ||
new_options->page_compression_level != old_options->page_compression_level) {
ha_alter_info->unsupported_reason = innobase_get_err_msg(
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON);
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
}

if (new_options->encryption != old_options->encryption ||
new_options->encryption_key_id != old_options->encryption_key_id) {
ha_alter_info->unsupported_reason = innobase_get_err_msg(
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON);
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
}
}

if (ha_alter_info->handler_flags
& ~(INNOBASE_INPLACE_IGNORE
| INNOBASE_ALTER_NOREBUILD
@@ -4501,7 +4490,6 @@ prepare_inplace_alter_table_dict(
to rebuild the table with a temporary name. */

if (new_clustered) {
fil_space_crypt_t* crypt_data;
const char* new_table_name
= dict_mem_create_temporary_tablename(
ctx->heap,
@@ -4515,13 +4503,29 @@ prepare_inplace_alter_table_dict(
uint32_t key_id = FIL_DEFAULT_ENCRYPTION_KEY;
fil_encryption_t mode = FIL_ENCRYPTION_DEFAULT;

fil_space_t* space = fil_space_acquire(ctx->prebuilt->table->space);
crypt_data = space->crypt_data;
fil_space_release(space);
if (fil_space_t* space
= fil_space_acquire(ctx->prebuilt->table->space)) {
if (const fil_space_crypt_t* crypt_data
= space->crypt_data) {
key_id = crypt_data->key_id;
mode = crypt_data->encryption;
}

fil_space_release(space);
}

if (crypt_data) {
key_id = crypt_data->key_id;
mode = crypt_data->encryption;
if (ha_alter_info->handler_flags
& Alter_inplace_info::CHANGE_CREATE_OPTION) {
const ha_table_option_struct& alt_opt=
*ha_alter_info->create_info->option_struct;
const ha_table_option_struct& opt=
*old_table->s->option_struct;
if (alt_opt.encryption != opt.encryption
|| alt_opt.encryption_key_id
!= opt.encryption_key_id) {
key_id = alt_opt.encryption_key_id;
mode = fil_encryption_t(alt_opt.encryption);
}
}

if (innobase_check_foreigns(

0 comments on commit 6692b5f

Please sign in to comment.