mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-12459 post-review fixes
* IS_USER_TEMP_TABLE() was misleading, name didn't match the code * list of temp tables was rescanned number_of_databases times * some temporary tables were not shown (from nonexistent databases) * some temporary tables were shown more than once (e.g. after self-joins) * sys.table_exists() - avoid querying I_S twice * fix handling of temporary MERGE tables - it's pointless to fully open them, they're not in thd->temporary_tables, so they simply fail to open and are skipped. Relax the assertion instead.
This commit is contained in:
@ -154,21 +154,18 @@ BEGIN
|
||||
DECLARE db_quoted VARCHAR(64);
|
||||
DECLARE table_quoted VARCHAR(64);
|
||||
DECLARE v_table_type VARCHAR(30) DEFAULT '';
|
||||
DECLARE v_table_type_num INT;
|
||||
DECLARE CONTINUE HANDLER FOR 1050 SET v_error = TRUE;
|
||||
DECLARE CONTINUE HANDLER FOR 1146 SET v_error = TRUE;
|
||||
|
||||
-- First check do we have multiple rows, what can happen if temporary table
|
||||
-- and/or sequence is shadowing base table for example.
|
||||
-- In such scenario return temporary.
|
||||
SET v_table_type_num = (SELECT COUNT(TABLE_TYPE) FROM information_schema.TABLES WHERE
|
||||
SET v_table_type = (SELECT GROUP_CONCAT(TABLE_TYPE) FROM information_schema.TABLES WHERE
|
||||
TABLE_SCHEMA = in_db AND TABLE_NAME = in_table);
|
||||
|
||||
IF v_table_type_num > 1 THEN
|
||||
IF v_table_type LIKE '%,%' THEN
|
||||
SET out_exists = 'TEMPORARY';
|
||||
ELSE
|
||||
SET v_table_type = (SELECT TABLE_TYPE FROM information_schema.TABLES WHERE
|
||||
TABLE_SCHEMA = in_db AND TABLE_NAME = in_table);
|
||||
IF v_table_type is NULL
|
||||
THEN
|
||||
SET v_table_type='';
|
||||
|
Reference in New Issue
Block a user