Skip to content

Commit

Permalink
Merge branch 'github/10.1' into 10.2
Browse files Browse the repository at this point in the history
  • Loading branch information
vuvova committed Oct 30, 2019
2 parents 6680b04 + 3138557 commit fd6dfb3
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 8 deletions.
15 changes: 15 additions & 0 deletions mysql-test/suite/innodb/r/stat_tables.result
Original file line number Diff line number Diff line change
@@ -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 changes: 17 additions & 0 deletions mysql-test/suite/innodb/t/stat_tables.test
Original file line number Diff line number Diff line change
@@ -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;
4 changes: 4 additions & 0 deletions sql/sql_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -1579,12 +1579,16 @@ class Open_tables_backup: public Open_tables_state
/**
@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
Expand Down
13 changes: 5 additions & 8 deletions sql/sql_statistics.cc
Original file line number Diff line number Diff line change
Expand Up @@ -258,23 +258,23 @@ 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;

Dummy_error_handler deh; // suppress errors
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) ||
Expand Down Expand Up @@ -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)
{
Expand Down

0 comments on commit fd6dfb3

Please sign in to comment.