diff --git a/mysql-test/main/servers.result b/mysql-test/main/servers.result index d660aff1bd2..a02c3d6ac74 100644 --- a/mysql-test/main/servers.result +++ b/mysql-test/main/servers.result @@ -43,3 +43,10 @@ ERROR HY000: Can't read record in system table drop table mysql.servers; rename table mysql.servers_save to mysql.servers; drop server s1; +# +# MDEV-35641 foreign server "disappears" after ALTERing the servers system table to use innodb and FLUSH PRIVILEGES +# +CREATE SERVER s1 FOREIGN DATA WRAPPER mysql OPTIONS (HOST '127.0.0.1'); +ALTER TABLE mysql.servers ENGINE=innodb; +FLUSH PRIVILEGES; +drop server s1; diff --git a/mysql-test/main/servers.test b/mysql-test/main/servers.test index 1a58d5849f8..f46041bb21c 100644 --- a/mysql-test/main/servers.test +++ b/mysql-test/main/servers.test @@ -41,3 +41,12 @@ create server s2 foreign data wrapper foo options(user 'a'); drop table mysql.servers; rename table mysql.servers_save to mysql.servers; drop server s1; + +--echo # +--echo # MDEV-35641 foreign server "disappears" after ALTERing the servers system table to use innodb and FLUSH PRIVILEGES +--echo # +--source include/have_innodb.inc +CREATE SERVER s1 FOREIGN DATA WRAPPER mysql OPTIONS (HOST '127.0.0.1'); +ALTER TABLE mysql.servers ENGINE=innodb; +FLUSH PRIVILEGES; +drop server s1; diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index 59a4679847b..ecf411ab313 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -283,7 +283,7 @@ end: static bool servers_load(THD *thd, TABLE_LIST *tables) { - TABLE *table; + TABLE *table= tables[0].table; READ_RECORD read_record_info; bool return_val= TRUE; DBUG_ENTER("servers_load"); @@ -292,7 +292,8 @@ static bool servers_load(THD *thd, TABLE_LIST *tables) free_root(&mem, MYF(0)); init_sql_alloc(key_memory_servers, &mem, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0)); - if (init_read_record(&read_record_info,thd,table=tables[0].table, NULL, NULL, + table->use_all_columns(); + if (init_read_record(&read_record_info,thd,table, NULL, NULL, 1,0, FALSE)) DBUG_RETURN(1); while (!(read_record_info.read_record())) @@ -405,7 +406,6 @@ get_server_from_table_to_cache(TABLE *table) FOREIGN_SERVER *server= (FOREIGN_SERVER *)alloc_root(&mem, sizeof(FOREIGN_SERVER)); DBUG_ENTER("get_server_from_table_to_cache"); - table->use_all_columns(); /* get each field into the server struct ptr */ ptr= get_field(&mem, table->field[0]);