mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-26456: SIGSEGV in flush_tables_with_read_lock on FLUSH TABLE
It is legal that open table can leave unopened tables in SP and other parts of the code shoud expect it.
This commit is contained in:
@@ -6920,5 +6920,20 @@ Drop View v3;
|
|||||||
Drop View v4;
|
Drop View v4;
|
||||||
Drop table t1;
|
Drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-26456: SIGSEGV in flush_tables_with_read_lock on FLUSH TABLE
|
||||||
|
#
|
||||||
|
CREATE FUNCTION f() RETURNS INT RETURN (SELECT 1 FROM t);
|
||||||
|
CREATE VIEW v AS SELECT f();
|
||||||
|
SELECT * FROM v;
|
||||||
|
ERROR HY000: View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
FLUSH TABLE v WITH READ LOCK;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
FLUSH TABLES v FOR EXPORT;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
SELECT * FROM v;
|
||||||
|
ERROR HY000: View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
DROP VIEW v;
|
||||||
|
DROP FUNCTION f;
|
||||||
|
#
|
||||||
# End of 10.6 tests
|
# End of 10.6 tests
|
||||||
#
|
#
|
||||||
|
@@ -6653,6 +6653,24 @@ Drop View v3;
|
|||||||
Drop View v4;
|
Drop View v4;
|
||||||
Drop table t1;
|
Drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26456: SIGSEGV in flush_tables_with_read_lock on FLUSH TABLE
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE FUNCTION f() RETURNS INT RETURN (SELECT 1 FROM t);
|
||||||
|
CREATE VIEW v AS SELECT f();
|
||||||
|
--error ER_VIEW_INVALID
|
||||||
|
SELECT * FROM v;
|
||||||
|
FLUSH TABLE v WITH READ LOCK;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
FLUSH TABLES v FOR EXPORT;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
--error ER_VIEW_INVALID
|
||||||
|
SELECT * FROM v;
|
||||||
|
|
||||||
|
DROP VIEW v;
|
||||||
|
DROP FUNCTION f;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.6 tests
|
--echo # End of 10.6 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -601,6 +601,7 @@ bool flush_tables_with_read_lock(THD *thd, TABLE_LIST *all_tables)
|
|||||||
if (table_list->is_view_or_derived())
|
if (table_list->is_view_or_derived())
|
||||||
continue;
|
continue;
|
||||||
if (thd->lex->type & REFRESH_FOR_EXPORT &&
|
if (thd->lex->type & REFRESH_FOR_EXPORT &&
|
||||||
|
table_list->table &&
|
||||||
!(table_list->table->file->ha_table_flags() & HA_CAN_EXPORT))
|
!(table_list->table->file->ha_table_flags() & HA_CAN_EXPORT))
|
||||||
{
|
{
|
||||||
my_error(ER_ILLEGAL_HA, MYF(0),table_list->table->file->table_type(),
|
my_error(ER_ILLEGAL_HA, MYF(0),table_list->table->file->table_type(),
|
||||||
@@ -608,6 +609,7 @@ bool flush_tables_with_read_lock(THD *thd, TABLE_LIST *all_tables)
|
|||||||
goto error_reset_bits;
|
goto error_reset_bits;
|
||||||
}
|
}
|
||||||
if (thd->lex->type & REFRESH_READ_LOCK &&
|
if (thd->lex->type & REFRESH_READ_LOCK &&
|
||||||
|
table_list->table &&
|
||||||
table_list->table->file->extra(HA_EXTRA_FLUSH))
|
table_list->table->file->extra(HA_EXTRA_FLUSH))
|
||||||
goto error_reset_bits;
|
goto error_reset_bits;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user