Any TMP_TABLE_SHARE must always have at least one TABLE instance.
So whenever a temporary TABLE that is marked for reopen is closed,
reopen it at once if its TMP_TABLE_SHARE list of tables becomes empty.
- Pre-open temporary table on sequence creation.
- Without this patch, if rename alter is done on the temporary sequence,
and after that `create replace`, since table is not preopened and
alter rename marked the table as reopen, and such table is deleted in
the `find_temporary_table()` leaving the share without the table, that
causes `show tables` to fail
- Closes PR #2685
- Reviewer: <serg@mariadb.com>
* 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.
Additionally fixes the bugs uncovered in:
- `MDEV-28332: Alter on temporary table causes ER_TABLE_EXISTS_ERROR note`
Since there is no `warning` issued by shadowing of base table, this MDEV
is irrelevant. Keeping for review purposes and for future development
in case shadowing is going to be implemented
- `MDEV-28334: SHOW TABLE STATUS shows all temporary tables ignoring database and conditions`
- `MDEV-28453: SHOW commands are inconsistent for temporary tables`
Reviewed by: <monty@mariadb.org>,
<vicentiu@mariadb.org>