MDEV-19331 Merge new release of InnoDB 5.6.44 to 10.1

This commit is contained in:
Marko Mäkelä 2019-04-25 14:15:54 +03:00
commit caa9023c9e
16 changed files with 188 additions and 23 deletions

View File

@ -918,3 +918,45 @@ ERROR HY000: CHECK OPTION failed 'test.v'
SET GLOBAL innodb_stats_persistent= @save_isp; SET GLOBAL innodb_stats_persistent= @save_isp;
DROP view v; DROP view v;
DROP TABLE t; DROP TABLE t;
#
# Bug#28573894 ALTER PARTITIONED TABLE ADD AUTO_INCREMENT DIFF RESULT
#
CREATE TABLE t (a VARCHAR(10) NOT NULL,b INT,PRIMARY KEY (b)) ENGINE=INNODB
PARTITION BY RANGE (b)
(PARTITION pa VALUES LESS THAN (2),
PARTITION pb VALUES LESS THAN (20),
PARTITION pc VALUES LESS THAN (30),
PARTITION pd VALUES LESS THAN (40));
INSERT INTO t
VALUES('A',0),('B',1),('C',2),('D',3),('E',4),('F',5),('G',25),('H',35);
CREATE TABLE t_copy LIKE t;
INSERT INTO t_copy SELECT * FROM t;
ALTER TABLE t ADD COLUMN r INT UNSIGNED NOT NULL AUTO_INCREMENT,
ADD UNIQUE KEY (r,b);
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t_copy ADD COLUMN r INT UNSIGNED NOT NULL AUTO_INCREMENT,
ADD UNIQUE KEY (r,b), ALGORITHM=COPY;
affected rows: 8
info: Records: 8 Duplicates: 0 Warnings: 0
SELECT * FROM t;
a b r
A 0 1
B 1 2
C 2 3
D 3 4
E 4 5
F 5 6
G 25 7
H 35 8
SELECT * FROM t_copy;
a b r
A 0 1
B 1 2
C 2 3
D 3 4
E 4 5
F 5 6
G 25 7
H 35 8
DROP TABLE t,t_copy;

View File

@ -1213,3 +1213,30 @@ test.t1 check status OK
DROP TABLE t1; DROP TABLE t1;
SET GLOBAL innodb_file_format=@save_format; SET GLOBAL innodb_file_format=@save_format;
SET GLOBAL innodb_large_prefix=@save_prefix; SET GLOBAL innodb_large_prefix=@save_prefix;
#
# Bug#19811005 ALTER TABLE ADD INDEX DOES NOT UPDATE INDEX_LENGTH
# IN I_S TABLES
#
CREATE TABLE t1(a INT, b INT) ENGINE=INNODB, STATS_PERSISTENT=1;
SELECT cast(DATA_LENGTH/@@innodb_page_size as int) D,
cast(INDEX_LENGTH/@@innodb_page_size as int) I
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
D I
1 0
ALTER TABLE t1 ADD INDEX (a);
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SELECT cast(DATA_LENGTH/@@innodb_page_size as int) D,
cast(INDEX_LENGTH/@@innodb_page_size as int) I
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
D I
1 1
ALTER TABLE t1 ADD INDEX (b);
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SELECT cast(DATA_LENGTH/@@innodb_page_size as int) D,
cast(INDEX_LENGTH/@@innodb_page_size as int) I
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
D I
1 2
DROP TABLE t1;

View File

@ -593,3 +593,23 @@ CHECK TABLE t1;
DROP TABLE t1; DROP TABLE t1;
SET GLOBAL innodb_file_format=@save_format; SET GLOBAL innodb_file_format=@save_format;
SET GLOBAL innodb_large_prefix=@save_prefix; SET GLOBAL innodb_large_prefix=@save_prefix;
--echo #
--echo # Bug#19811005 ALTER TABLE ADD INDEX DOES NOT UPDATE INDEX_LENGTH
--echo # IN I_S TABLES
--echo #
let $i_s_query=SELECT cast(DATA_LENGTH/@@innodb_page_size as int) D,
cast(INDEX_LENGTH/@@innodb_page_size as int) I
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
CREATE TABLE t1(a INT, b INT) ENGINE=INNODB, STATS_PERSISTENT=1;
eval $i_s_query;
--enable_info
ALTER TABLE t1 ADD INDEX (a);
--disable_info
eval $i_s_query;
--enable_info
ALTER TABLE t1 ADD INDEX (b);
--disable_info
eval $i_s_query;
DROP TABLE t1;

View File

@ -1214,7 +1214,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.43 -GLOBAL_VALUE 5.6.44
+GLOBAL_VALUE 5.6.43-84.3 +GLOBAL_VALUE 5.6.43-84.3
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL

View File

@ -684,7 +684,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.43 -GLOBAL_VALUE 5.6.44
+GLOBAL_VALUE 5.6.43-84.3 +GLOBAL_VALUE 5.6.43-84.3
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL

View File

@ -2401,7 +2401,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE 5.6.43 GLOBAL_VALUE 5.6.44
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL

View File

@ -1028,3 +1028,27 @@ SET GLOBAL innodb_stats_persistent= @save_isp;
DROP view v; DROP view v;
DROP TABLE t; DROP TABLE t;
--echo #
--echo # Bug#28573894 ALTER PARTITIONED TABLE ADD AUTO_INCREMENT DIFF RESULT
--echo #
CREATE TABLE t (a VARCHAR(10) NOT NULL,b INT,PRIMARY KEY (b)) ENGINE=INNODB
PARTITION BY RANGE (b)
(PARTITION pa VALUES LESS THAN (2),
PARTITION pb VALUES LESS THAN (20),
PARTITION pc VALUES LESS THAN (30),
PARTITION pd VALUES LESS THAN (40));
INSERT INTO t
VALUES('A',0),('B',1),('C',2),('D',3),('E',4),('F',5),('G',25),('H',35);
CREATE TABLE t_copy LIKE t;
INSERT INTO t_copy SELECT * FROM t;
--enable_info
ALTER TABLE t ADD COLUMN r INT UNSIGNED NOT NULL AUTO_INCREMENT,
ADD UNIQUE KEY (r,b);
ALTER TABLE t_copy ADD COLUMN r INT UNSIGNED NOT NULL AUTO_INCREMENT,
ADD UNIQUE KEY (r,b), ALGORITHM=COPY;
--disable_info
SELECT * FROM t;
SELECT * FROM t_copy;
DROP TABLE t,t_copy;

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2005, 2017, Oracle and/or its affiliates. Copyright (c) 2005, 2019, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, MariaDB Copyright (c) 2009, 2019, MariaDB
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -8329,7 +8329,12 @@ bool ha_partition::inplace_alter_table(TABLE *altered_table,
for (index= 0; index < m_tot_parts && !error; index++) for (index= 0; index < m_tot_parts && !error; index++)
{ {
ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[index]; if ((ha_alter_info->handler_ctx=
part_inplace_ctx->handler_ctx_array[index]) != NULL
&& index != 0)
ha_alter_info->handler_ctx->set_shared_data
(*part_inplace_ctx->handler_ctx_array[index - 1]);
if (m_file[index]->ha_inplace_alter_table(altered_table, if (m_file[index]->ha_inplace_alter_table(altered_table,
ha_alter_info)) ha_alter_info))
error= true; error= true;

View File

@ -1,8 +1,8 @@
#ifndef HANDLER_INCLUDED #ifndef HANDLER_INCLUDED
#define HANDLER_INCLUDED #define HANDLER_INCLUDED
/* /*
Copyright (c) 2000, 2016, Oracle and/or its affiliates. Copyright (c) 2000, 2019, Oracle and/or its affiliates.
Copyright (c) 2009, 2018, MariaDB Copyright (c) 2009, 2019, MariaDB
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
@ -1833,6 +1833,7 @@ public:
inplace_alter_handler_ctx() {} inplace_alter_handler_ctx() {}
virtual ~inplace_alter_handler_ctx() {} virtual ~inplace_alter_handler_ctx() {}
virtual void set_shared_data(const inplace_alter_handler_ctx& ctx) {}
}; };

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2009, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, 2019, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 2017, MariaDB Corporation. Copyright (c) 2015, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -2499,7 +2499,6 @@ dict_stats_report_error(
return (err); return (err);
} }
/** Save the table's statistics into the persistent statistics storage. /** Save the table's statistics into the persistent statistics storage.
@param[in] table_orig table whose stats to save @param[in] table_orig table whose stats to save
@param[in] only_for_index if this is non-NULL, then stats for indexes @param[in] only_for_index if this is non-NULL, then stats for indexes
@ -3208,6 +3207,8 @@ dict_stats_update_for_index(
if (dict_stats_persistent_storage_check(false)) { if (dict_stats_persistent_storage_check(false)) {
dict_table_stats_lock(index->table, RW_X_LATCH); dict_table_stats_lock(index->table, RW_X_LATCH);
dict_stats_analyze_index(index); dict_stats_analyze_index(index);
index->table->stat_sum_of_other_index_sizes
+= index->stat_index_size;
dict_table_stats_unlock(index->table, RW_X_LATCH); dict_table_stats_unlock(index->table, RW_X_LATCH);
dict_stats_save(index->table, &index->id); dict_stats_save(index->table, &index->id);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2019, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2013, 2019, MariaDB Corporation. Copyright (c) 2013, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -2178,6 +2178,23 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
@return whether the table will be rebuilt */ @return whether the table will be rebuilt */
bool need_rebuild () const { return(old_table != new_table); } bool need_rebuild () const { return(old_table != new_table); }
/** Share context between partitions.
@param[in] ctx context from another partition of the table */
void set_shared_data(const inplace_alter_handler_ctx& ctx)
{
if (add_autoinc != ULINT_UNDEFINED) {
const ha_innobase_inplace_ctx& ha_ctx =
static_cast<const ha_innobase_inplace_ctx&>
(ctx);
/* When adding an AUTO_INCREMENT column to a
partitioned InnoDB table, we must share the
sequence for all partitions. */
ut_ad(ha_ctx.add_autoinc == add_autoinc);
ut_ad(ha_ctx.sequence.last());
sequence = ha_ctx.sequence;
}
}
private: private:
// Disable copying // Disable copying
ha_innobase_inplace_ctx(const ha_innobase_inplace_ctx&); ha_innobase_inplace_ctx(const ha_innobase_inplace_ctx&);
@ -2721,7 +2738,7 @@ prepare_inplace_alter_table_dict(
(ha_alter_info->handler_ctx); (ha_alter_info->handler_ctx);
DBUG_ASSERT((ctx->add_autoinc != ULINT_UNDEFINED) DBUG_ASSERT((ctx->add_autoinc != ULINT_UNDEFINED)
== (ctx->sequence.m_max_value > 0)); == (ctx->sequence.max_value() > 0));
DBUG_ASSERT(!ctx->num_to_drop_index == !ctx->drop_index); DBUG_ASSERT(!ctx->num_to_drop_index == !ctx->drop_index);
DBUG_ASSERT(!ctx->num_to_drop_fk == !ctx->drop_fk); DBUG_ASSERT(!ctx->num_to_drop_fk == !ctx->drop_fk);
DBUG_ASSERT(!add_fts_doc_id || add_fts_doc_id_idx); DBUG_ASSERT(!add_fts_doc_id || add_fts_doc_id_idx);

View File

@ -1,6 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -96,9 +97,13 @@ struct ib_sequence_t {
return(m_next_value); return(m_next_value);
} }
/** Maximum calumn value if adding an AUTOINC column else 0. Once /** @return maximum column value
we reach the end of the sequence it will be set to ~0. */ @retval 0 if not adding AUTO_INCREMENT column */
const ulonglong m_max_value; ulonglong max_value() const { return m_max_value; }
private:
/** Maximum value if adding an AUTO_INCREMENT column, else 0 */
ulonglong m_max_value;
/** Value of auto_increment_increment */ /** Value of auto_increment_increment */
ulong m_increment; ulong m_increment;

View File

@ -45,7 +45,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 5 #define INNODB_VERSION_MAJOR 5
#define INNODB_VERSION_MINOR 6 #define INNODB_VERSION_MINOR 6
#define INNODB_VERSION_BUGFIX 43 #define INNODB_VERSION_BUGFIX 44
/* The following is the InnoDB version as shown in /* The following is the InnoDB version as shown in
SELECT plugin_version FROM information_schema.plugins; SELECT plugin_version FROM information_schema.plugins;

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2009, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, 2019, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 2017, MariaDB Corporation. Copyright (c) 2015, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -3207,6 +3207,8 @@ dict_stats_update_for_index(
if (dict_stats_persistent_storage_check(false)) { if (dict_stats_persistent_storage_check(false)) {
dict_table_stats_lock(index->table, RW_X_LATCH); dict_table_stats_lock(index->table, RW_X_LATCH);
dict_stats_analyze_index(index); dict_stats_analyze_index(index);
index->table->stat_sum_of_other_index_sizes
+= index->stat_index_size;
dict_table_stats_unlock(index->table, RW_X_LATCH); dict_table_stats_unlock(index->table, RW_X_LATCH);
dict_stats_save(index->table, &index->id); dict_stats_save(index->table, &index->id);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
@ -4006,7 +4008,6 @@ dict_stats_save_defrag_stats(
{ {
dberr_t ret; dberr_t ret;
if (index->is_readable()) { if (index->is_readable()) {
} else { } else {
return (dict_stats_report_error(index->table, true)); return (dict_stats_report_error(index->table, true));

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2019, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2019, MariaDB Corporation. Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -2181,6 +2181,23 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
@return whether the table will be rebuilt */ @return whether the table will be rebuilt */
bool need_rebuild () const { return(old_table != new_table); } bool need_rebuild () const { return(old_table != new_table); }
/** Share context between partitions.
@param[in] ctx context from another partition of the table */
void set_shared_data(const inplace_alter_handler_ctx& ctx)
{
if (add_autoinc != ULINT_UNDEFINED) {
const ha_innobase_inplace_ctx& ha_ctx =
static_cast<const ha_innobase_inplace_ctx&>
(ctx);
/* When adding an AUTO_INCREMENT column to a
partitioned InnoDB table, we must share the
sequence for all partitions. */
ut_ad(ha_ctx.add_autoinc == add_autoinc);
ut_ad(ha_ctx.sequence.last());
sequence = ha_ctx.sequence;
}
}
private: private:
// Disable copying // Disable copying
ha_innobase_inplace_ctx(const ha_innobase_inplace_ctx&); ha_innobase_inplace_ctx(const ha_innobase_inplace_ctx&);
@ -2727,7 +2744,7 @@ prepare_inplace_alter_table_dict(
(ha_alter_info->handler_ctx); (ha_alter_info->handler_ctx);
DBUG_ASSERT((ctx->add_autoinc != ULINT_UNDEFINED) DBUG_ASSERT((ctx->add_autoinc != ULINT_UNDEFINED)
== (ctx->sequence.m_max_value > 0)); == (ctx->sequence.max_value() > 0));
DBUG_ASSERT(!ctx->num_to_drop_index == !ctx->drop_index); DBUG_ASSERT(!ctx->num_to_drop_index == !ctx->drop_index);
DBUG_ASSERT(!ctx->num_to_drop_fk == !ctx->drop_fk); DBUG_ASSERT(!ctx->num_to_drop_fk == !ctx->drop_fk);
DBUG_ASSERT(!add_fts_doc_id || add_fts_doc_id_idx); DBUG_ASSERT(!add_fts_doc_id || add_fts_doc_id_idx);

View File

@ -1,6 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -96,9 +97,13 @@ struct ib_sequence_t {
return(m_next_value); return(m_next_value);
} }
/** Maximum calumn value if adding an AUTOINC column else 0. Once /** @return maximum column value
we reach the end of the sequence it will be set to ~0. */ @retval 0 if not adding AUTO_INCREMENT column */
const ulonglong m_max_value; ulonglong max_value() const { return m_max_value; }
private:
/** Maximum value if adding an AUTO_INCREMENT column, else 0 */
ulonglong m_max_value;
/** Value of auto_increment_increment */ /** Value of auto_increment_increment */
ulong m_increment; ulong m_increment;