mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.0 into 10.1
This commit is contained in:
@ -1682,6 +1682,27 @@ set use_stat_tables=@save_use_stat_tables;
|
|||||||
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
# MDEV-16507: statistics for temporary tables should not be used
|
||||||
|
#
|
||||||
|
SET
|
||||||
|
@save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||||
|
SET @@use_stat_tables = preferably ;
|
||||||
|
SET @@optimizer_use_condition_selectivity = 4;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
ON UPDATE CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
SET @had_t1_table= @@warning_count != 0;
|
||||||
|
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
|
||||||
|
INSERT INTO tmp_t1 VALUES (now());
|
||||||
|
INSERT INTO t1 SELECT * FROM tmp_t1 WHERE @had_t1_table=0;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET
|
||||||
|
use_stat_tables=@save_use_stat_tables;
|
||||||
|
SET
|
||||||
|
optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
|
# End of 10.0 tests
|
||||||
|
#
|
||||||
# MDEV-9590: Always print "Engine-independent statistic" warnings and
|
# MDEV-9590: Always print "Engine-independent statistic" warnings and
|
||||||
# might be filtering columns unintentionally from engines
|
# might be filtering columns unintentionally from engines
|
||||||
#
|
#
|
||||||
|
65
mysql-test/suite/parts/r/alter_data_directory_innodb.result
Normal file
65
mysql-test/suite/parts/r/alter_data_directory_innodb.result
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#
|
||||||
|
# MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||||
|
#
|
||||||
|
CREATE TABLE t (
|
||||||
|
a INT NOT NULL
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY HASH (a) (
|
||||||
|
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
INSERT INTO t VALUES (1);
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||||
|
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||||
|
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
Table Create Table
|
||||||
|
t CREATE TABLE `t` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */
|
||||||
|
DROP TABLE t;
|
46
mysql-test/suite/parts/t/alter_data_directory_innodb.test
Normal file
46
mysql-test/suite/parts/t/alter_data_directory_innodb.test
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
mkdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval CREATE TABLE t (
|
||||||
|
a INT NOT NULL
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY HASH (a) (
|
||||||
|
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
INSERT INTO t VALUES (1);
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=OFF;
|
||||||
|
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO (
|
||||||
|
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB,
|
||||||
|
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB
|
||||||
|
);
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here/test;
|
||||||
|
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here;
|
@ -748,6 +748,32 @@ set use_stat_tables=@save_use_stat_tables;
|
|||||||
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-16507: statistics for temporary tables should not be used
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET
|
||||||
|
@save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||||
|
SET @@use_stat_tables = preferably ;
|
||||||
|
SET @@optimizer_use_condition_selectivity = 4;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
ON UPDATE CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
SET @had_t1_table= @@warning_count != 0;
|
||||||
|
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
|
||||||
|
INSERT INTO tmp_t1 VALUES (now());
|
||||||
|
INSERT INTO t1 SELECT * FROM tmp_t1 WHERE @had_t1_table=0;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
SET
|
||||||
|
use_stat_tables=@save_use_stat_tables;
|
||||||
|
SET
|
||||||
|
optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
|
--echo # End of 10.0 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-9590: Always print "Engine-independent statistic" warnings and
|
--echo # MDEV-9590: Always print "Engine-independent statistic" warnings and
|
||||||
--echo # might be filtering columns unintentionally from engines
|
--echo # might be filtering columns unintentionally from engines
|
||||||
|
@ -5071,7 +5071,8 @@ int ha_partition::rnd_pos_by_record(uchar *record)
|
|||||||
if (unlikely(get_part_for_delete(record, m_rec0, m_part_info, &m_last_part)))
|
if (unlikely(get_part_for_delete(record, m_rec0, m_part_info, &m_last_part)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
DBUG_RETURN(handler::rnd_pos_by_record(record));
|
int err= m_file[m_last_part]->rnd_pos_by_record(record);
|
||||||
|
DBUG_RETURN(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3180,9 +3180,17 @@ private:
|
|||||||
*/
|
*/
|
||||||
virtual int rnd_pos_by_record(uchar *record)
|
virtual int rnd_pos_by_record(uchar *record)
|
||||||
{
|
{
|
||||||
|
int error;
|
||||||
DBUG_ASSERT(table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION);
|
DBUG_ASSERT(table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION);
|
||||||
|
|
||||||
|
error = ha_rnd_init(false);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
position(record);
|
position(record);
|
||||||
return rnd_pos(record, ref);
|
error = ha_rnd_pos(record, ref);
|
||||||
|
ha_rnd_end();
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
virtual int read_first_row(uchar *buf, uint primary_key);
|
virtual int read_first_row(uchar *buf, uint primary_key);
|
||||||
public:
|
public:
|
||||||
|
@ -12169,10 +12169,6 @@ int Rows_log_event::find_row(rpl_group_info *rgi)
|
|||||||
int error;
|
int error;
|
||||||
DBUG_PRINT("info",("locating record using primary key (position)"));
|
DBUG_PRINT("info",("locating record using primary key (position)"));
|
||||||
|
|
||||||
if (!table->file->inited &&
|
|
||||||
(error= table->file->ha_rnd_init_with_error(0)))
|
|
||||||
DBUG_RETURN(error);
|
|
||||||
|
|
||||||
error= table->file->ha_rnd_pos_by_record(table->record[0]);
|
error= table->file->ha_rnd_pos_by_record(table->record[0]);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
|
@ -3091,7 +3091,7 @@ bool statistics_for_tables_is_needed(THD *thd, TABLE_LIST *tables)
|
|||||||
|
|
||||||
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
||||||
{
|
{
|
||||||
if (!tl->is_view_or_derived() && tl->table)
|
if (!tl->is_view_or_derived() && !is_temporary_table(tl) && tl->table)
|
||||||
{
|
{
|
||||||
TABLE_SHARE *table_share= tl->table->s;
|
TABLE_SHARE *table_share= tl->table->s;
|
||||||
if (table_share &&
|
if (table_share &&
|
||||||
@ -3103,7 +3103,7 @@ bool statistics_for_tables_is_needed(THD *thd, TABLE_LIST *tables)
|
|||||||
|
|
||||||
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
||||||
{
|
{
|
||||||
if (!tl->is_view_or_derived() && tl->table)
|
if (!tl->is_view_or_derived() && !is_temporary_table(tl) && tl->table)
|
||||||
{
|
{
|
||||||
TABLE_SHARE *table_share= tl->table->s;
|
TABLE_SHARE *table_share= tl->table->s;
|
||||||
if (table_share &&
|
if (table_share &&
|
||||||
@ -3232,7 +3232,7 @@ int read_statistics_for_tables_if_needed(THD *thd, TABLE_LIST *tables)
|
|||||||
|
|
||||||
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
||||||
{
|
{
|
||||||
if (!tl->is_view_or_derived() && tl->table)
|
if (!tl->is_view_or_derived() && !is_temporary_table(tl) && tl->table)
|
||||||
{
|
{
|
||||||
TABLE_SHARE *table_share= tl->table->s;
|
TABLE_SHARE *table_share= tl->table->s;
|
||||||
if (table_share &&
|
if (table_share &&
|
||||||
|
@ -3677,6 +3677,12 @@ check_if_ok_to_rename:
|
|||||||
goto err_exit_no_heap;
|
goto err_exit_no_heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Preserve this flag, because it currenlty can't be changed during
|
||||||
|
ALTER TABLE*/
|
||||||
|
if (flags2 & DICT_TF2_USE_TABLESPACE) {
|
||||||
|
flags |= prebuilt->table->flags & 1U << DICT_TF_POS_DATA_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
||||||
|
|
||||||
/* Check each index's column length to make sure they do not
|
/* Check each index's column length to make sure they do not
|
||||||
|
@ -3693,6 +3693,12 @@ check_if_ok_to_rename:
|
|||||||
goto err_exit_no_heap;
|
goto err_exit_no_heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Preserve this flag, because it currenlty can't be changed during
|
||||||
|
ALTER TABLE*/
|
||||||
|
if (flags2 & DICT_TF2_USE_TABLESPACE) {
|
||||||
|
flags |= prebuilt->table->flags & 1U << DICT_TF_POS_DATA_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags);
|
||||||
|
|
||||||
/* Check each index's column length to make sure they do not
|
/* Check each index's column length to make sure they do not
|
||||||
|
Reference in New Issue
Block a user