mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge branch '10.7' into 10.8
This commit is contained in:
@@ -5157,6 +5157,7 @@ public:
|
||||
|
||||
int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
{
|
||||
DBUG_ENTER("get_all_tables");
|
||||
LEX *lex= thd->lex;
|
||||
TABLE *table= tables->table;
|
||||
TABLE_LIST table_acl_check;
|
||||
@@ -5174,7 +5175,29 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
uint table_open_method= tables->table_open_method;
|
||||
bool can_deadlock;
|
||||
MEM_ROOT tmp_mem_root;
|
||||
DBUG_ENTER("get_all_tables");
|
||||
/*
|
||||
We're going to open FRM files for tables.
|
||||
In case of VIEWs that contain stored function calls,
|
||||
these stored functions will be parsed and put to the SP cache.
|
||||
|
||||
Suppose we have a view containing a stored function call:
|
||||
CREATE VIEW v1 AS SELECT f1() AS c1;
|
||||
and now we're running:
|
||||
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=f1();
|
||||
If a parallel thread invalidates the cache,
|
||||
e.g. by creating or dropping some stored routine,
|
||||
the SELECT query will re-parse f1() when processing "v1"
|
||||
and replace the outdated cached version of f1() to a new one.
|
||||
But the old version of f1() is referenced from the m_sp member
|
||||
of the Item_func_sp instances used in the WHERE condition.
|
||||
We cannot destroy it. To avoid such clashes, let's remember
|
||||
all old routines into a temporary SP cache collection
|
||||
and process tables with a new empty temporary SP cache collection.
|
||||
Then restore to the old SP cache collection at the end.
|
||||
*/
|
||||
Sp_caches old_sp_caches;
|
||||
|
||||
old_sp_caches.sp_caches_swap(*thd);
|
||||
|
||||
bzero(&tmp_mem_root, sizeof(tmp_mem_root));
|
||||
|
||||
@@ -5350,6 +5373,13 @@ err:
|
||||
thd->restore_backup_open_tables_state(&open_tables_state_backup);
|
||||
free_root(&tmp_mem_root, 0);
|
||||
|
||||
/*
|
||||
Now restore to the saved SP cache collection
|
||||
and clear the temporary SP cache collection.
|
||||
*/
|
||||
old_sp_caches.sp_caches_swap(*thd);
|
||||
old_sp_caches.sp_caches_clear();
|
||||
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
@@ -9057,7 +9087,7 @@ ST_FIELD_INFO columns_fields_info[]=
|
||||
Column("ORDINAL_POSITION", ULonglong(), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("COLUMN_DEFAULT", Longtext(MAX_FIELD_VARCHARLENGTH),
|
||||
NULLABLE, "Default",OPEN_FRM_ONLY),
|
||||
Column("IS_NULLABLE", Yesno(), NOT_NULL, "Null", OPEN_FRM_ONLY),
|
||||
Column("IS_NULLABLE", Yes_or_empty(), NOT_NULL, "Null", OPEN_FRM_ONLY),
|
||||
Column("DATA_TYPE", Name(), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("CHARACTER_MAXIMUM_LENGTH",ULonglong(), NULLABLE, OPEN_FRM_ONLY),
|
||||
Column("CHARACTER_OCTET_LENGTH", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
|
||||
@@ -9094,8 +9124,8 @@ ST_FIELD_INFO collation_fields_info[]=
|
||||
Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"),
|
||||
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
|
||||
Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"),
|
||||
Column("IS_DEFAULT", Yesno(), NOT_NULL, "Default"),
|
||||
Column("IS_COMPILED", Yesno(), NOT_NULL, "Compiled"),
|
||||
Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL, "Default"),
|
||||
Column("IS_COMPILED", Yes_or_empty(), NOT_NULL, "Compiled"),
|
||||
Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"),
|
||||
CEnd()
|
||||
};
|
||||
@@ -9103,10 +9133,10 @@ ST_FIELD_INFO collation_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO applicable_roles_fields_info[]=
|
||||
{
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("ROLE_NAME", Varchar(USERNAME_CHAR_LENGTH), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yesno(), NOT_NULL),
|
||||
Column("IS_DEFAULT", Yesno(), NULLABLE),
|
||||
Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
|
||||
Column("IS_DEFAULT", Yes_or_empty(), NULLABLE),
|
||||
CEnd()
|
||||
};
|
||||
|
||||
@@ -9250,7 +9280,7 @@ ST_FIELD_INFO view_fields_info[]=
|
||||
Column("TABLE_NAME", Name(), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("VIEW_DEFINITION", Longtext(65535), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("CHECK_OPTION", Varchar(8), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("IS_UPDATABLE", Yesno(), NOT_NULL, OPEN_FULL_TABLE),
|
||||
Column("IS_UPDATABLE", Yes_or_empty(), NOT_NULL, OPEN_FULL_TABLE),
|
||||
Column("DEFINER", Definer(), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("SECURITY_TYPE", Varchar(7), NOT_NULL, OPEN_FRM_ONLY),
|
||||
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, OPEN_FRM_ONLY),
|
||||
@@ -9262,46 +9292,46 @@ ST_FIELD_INFO view_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO user_privileges_fields_info[]=
|
||||
{
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yesno(), NOT_NULL),
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
|
||||
CEnd()
|
||||
};
|
||||
|
||||
|
||||
ST_FIELD_INFO schema_privileges_fields_info[]=
|
||||
{
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yesno(), NOT_NULL),
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
|
||||
CEnd()
|
||||
};
|
||||
|
||||
|
||||
ST_FIELD_INFO table_privileges_fields_info[]=
|
||||
{
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("TABLE_NAME", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yesno(), NOT_NULL),
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("TABLE_NAME", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
|
||||
CEnd()
|
||||
};
|
||||
|
||||
|
||||
ST_FIELD_INFO column_privileges_fields_info[]=
|
||||
{
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("TABLE_NAME", Name(), NOT_NULL),
|
||||
Column("COLUMN_NAME", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yesno(), NOT_NULL),
|
||||
Column("GRANTEE", Userhost(), NOT_NULL),
|
||||
Column("TABLE_CATALOG", Catalog(), NOT_NULL),
|
||||
Column("TABLE_SCHEMA", Name(), NOT_NULL),
|
||||
Column("TABLE_NAME", Name(), NOT_NULL),
|
||||
Column("COLUMN_NAME", Name(), NOT_NULL),
|
||||
Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
|
||||
Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
|
||||
CEnd()
|
||||
};
|
||||
|
||||
@@ -9442,7 +9472,7 @@ ST_FIELD_INFO sysvars_fields_info[]=
|
||||
Column("NUMERIC_MAX_VALUE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE),
|
||||
Column("NUMERIC_BLOCK_SIZE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE),
|
||||
Column("ENUM_VALUE_LIST", Longtext(65535), NULLABLE),
|
||||
Column("READ_ONLY", Yesno(), NOT_NULL),
|
||||
Column("READ_ONLY", Yes_or_empty(), NOT_NULL),
|
||||
Column("COMMAND_LINE_ARGUMENT",Name(), NULLABLE),
|
||||
Column("GLOBAL_VALUE_PATH", Varchar(2048), NULLABLE),
|
||||
CEnd()
|
||||
|
Reference in New Issue
Block a user