Merge branch 'github/10.1' into 10.2
This commit is contained in:
commit
fd6dfb3b54
15
mysql-test/suite/innodb/r/stat_tables.result
Normal file
15
mysql-test/suite/innodb/r/stat_tables.result
Normal file
@ -0,0 +1,15 @@
|
||||
rename table mysql.table_stats to mysql.table_stats_save;
|
||||
flush tables;
|
||||
set use_stat_tables= PREFERABLY;
|
||||
create table t1 (a int) engine=InnoDB;
|
||||
start transaction;
|
||||
insert t1 values (1);
|
||||
insert t1 values (2);
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
rename table mysql.table_stats_save to mysql.table_stats;
|
||||
flush tables;
|
17
mysql-test/suite/innodb/t/stat_tables.test
Normal file
17
mysql-test/suite/innodb/t/stat_tables.test
Normal file
@ -0,0 +1,17 @@
|
||||
source include/have_innodb.inc;
|
||||
|
||||
#
|
||||
# MDEV-20354 All but last insert ignored in InnoDB tables when table locked
|
||||
#
|
||||
rename table mysql.table_stats to mysql.table_stats_save;
|
||||
flush tables;
|
||||
set use_stat_tables= PREFERABLY;
|
||||
create table t1 (a int) engine=InnoDB;
|
||||
start transaction;
|
||||
insert t1 values (1);
|
||||
insert t1 values (2);
|
||||
commit;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
rename table mysql.table_stats_save to mysql.table_stats;
|
||||
flush tables;
|
@ -1579,12 +1579,16 @@ public:
|
||||
/**
|
||||
@class Sub_statement_state
|
||||
@brief Used to save context when executing a function or trigger
|
||||
|
||||
operations on stat tables aren't technically a sub-statement, but they are
|
||||
similar in a sense that they cannot change the transaction status.
|
||||
*/
|
||||
|
||||
/* Defines used for Sub_statement_state::in_sub_stmt */
|
||||
|
||||
#define SUB_STMT_TRIGGER 1
|
||||
#define SUB_STMT_FUNCTION 2
|
||||
#define SUB_STMT_STAT_TABLES 4
|
||||
|
||||
|
||||
class Sub_statement_state
|
||||
|
@ -258,10 +258,8 @@ index_stat_def= {INDEX_STAT_N_FIELDS, index_stat_fields, 4, index_stat_pk_col};
|
||||
Open all statistical tables and lock them
|
||||
*/
|
||||
|
||||
static
|
||||
inline int open_stat_tables(THD *thd, TABLE_LIST *tables,
|
||||
Open_tables_backup *backup,
|
||||
bool for_write)
|
||||
static int open_stat_tables(THD *thd, TABLE_LIST *tables,
|
||||
Open_tables_backup *backup, bool for_write)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@ -269,12 +267,14 @@ inline int open_stat_tables(THD *thd, TABLE_LIST *tables,
|
||||
thd->push_internal_handler(&deh);
|
||||
init_table_list_for_stat_tables(tables, for_write);
|
||||
init_mdl_requests(tables);
|
||||
thd->in_sub_stmt|= SUB_STMT_STAT_TABLES;
|
||||
rc= open_system_tables_for_read(thd, tables, backup);
|
||||
thd->in_sub_stmt&= ~SUB_STMT_STAT_TABLES;
|
||||
thd->pop_internal_handler();
|
||||
|
||||
|
||||
/* If the number of tables changes, we should revise the check below. */
|
||||
DBUG_ASSERT(STATISTICS_TABLES == 3);
|
||||
compile_time_assert(STATISTICS_TABLES == 3);
|
||||
|
||||
if (!rc &&
|
||||
(stat_table_intact.check(tables[TABLE_STAT].table, &table_stat_def) ||
|
||||
@ -3276,10 +3276,7 @@ int read_statistics_for_tables(THD *thd, TABLE_LIST *tables)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (open_stat_tables(thd, stat_tables, &open_tables_backup, FALSE))
|
||||
{
|
||||
thd->clear_error();
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
for (TABLE_LIST *tl= tables; tl; tl= tl->next_global)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user