mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
1923ff8e41
This commit updates sysschema to work with the new behaviour of show tables and information_schema.tables table showing temporary tables for current connection. Co-authored-by: Monty <monty@mariadb.org> Reviewer: <vicentiu@mariadb.org>
177 lines
5.4 KiB
Text
177 lines
5.4 KiB
Text
-- source include/not_embedded.inc
|
|
|
|
|
|
# Create a base table and a view
|
|
CREATE TABLE t1 (id INT PRIMARY KEY);
|
|
# Verify the base table and view is supported
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
DROP TABLE t1;
|
|
|
|
CREATE view v_t1 AS SELECT 1;
|
|
CALL sys.table_exists('test', 'v_t1', @exists);
|
|
SELECT @exists;
|
|
DROP VIEW v_t1;
|
|
|
|
CREATE TABLE tv (i int) with system versioning;
|
|
CALL sys.table_exists('test','tv',@exists);
|
|
SELECT @exists;
|
|
DROP TABLE tv;
|
|
|
|
CREATE SEQUENCE s;
|
|
CALL sys.table_exists('test','s',@exists);
|
|
SELECT @exists;
|
|
DROP SEQUENCE s;
|
|
|
|
# Replace the base table with a temporary table
|
|
CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
DROP TEMPORARY TABLE t1;
|
|
|
|
CALL sys.table_exists('information_schema', 'all_plugins', @exists);
|
|
SELECT @exists;
|
|
|
|
# Try a non-existing table
|
|
CALL sys.table_exists('test', 't2', @exists);
|
|
SELECT @exists;
|
|
|
|
# Try variables longer than expected
|
|
SET @identifier := REPEAT('a', 65);
|
|
|
|
-- error 1406
|
|
CALL sys.table_exists(@identifier, 't1', @exists);
|
|
|
|
-- error 1406
|
|
CALL sys.table_exists('test', @identifier, @exists);
|
|
|
|
SET @identifier := NULL;
|
|
|
|
--echo #
|
|
--echo # MDEV-28391: table_exists procedure fails with
|
|
--echo # Incorrect table name with backtick identifiers
|
|
--echo #
|
|
CREATE TABLE `ab``c` (t1_id int PRIMARY KEY, t1_val varchar(10));
|
|
CALL sys.table_exists('test', 'ab`c', @tbl_type);
|
|
SELECT @tbl_type;
|
|
DROP TABLE `ab``c`;
|
|
CREATE TEMPORARY TABLE `ab``c` (t1_id int PRIMARY KEY, t1_val varchar(10));
|
|
CALL sys.table_exists('test', 'ab`c', @tbl_type);
|
|
SELECT @tbl_type;
|
|
DROP TABLE `ab``c`;
|
|
CREATE TABLE `ab``c` (t1_id int PRIMARY KEY, t1_val varchar(10));
|
|
CREATE TEMPORARY TABLE `ab``c` (t1_id int PRIMARY KEY, t1_val varchar(10));
|
|
CALL sys.table_exists('test', 'ab`c', @tbl_type);
|
|
SELECT @tbl_type;
|
|
--echo # We cannot send quoted identifer to the procedure, no table will be found
|
|
CALL sys.table_exists('test', '`ab``c`', @tbl_type);
|
|
SELECT @tbl_type;
|
|
--echo # Remove temporary table
|
|
DROP TABLE `ab``c`;
|
|
CALL sys.table_exists('test', 'ab`c', @tbl_type);
|
|
SELECT @tbl_type;
|
|
--echo # Remove base table
|
|
DROP TABLE `ab``c`;
|
|
--echo # MDEV-12459: The information_schema tables for getting temporary tables
|
|
--echo # info is missing, at least for innodb, there is no
|
|
--echo # INNODB_TEMP_TABLE_INFO
|
|
--echo #
|
|
|
|
# Temporary table will shadow the base table without warning
|
|
CREATE TABLE t1 (id INT PRIMARY KEY);
|
|
# Verify the base table and view is supported
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
|
|
DROP TEMPORARY TABLE t1;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-28335: TABLE_TYPE for temporary sequences
|
|
--echo # is the same as for permanent ones
|
|
--echo #
|
|
|
|
CREATE TEMPORARY SEQUENCE s1;
|
|
CALL sys.table_exists('test', 's1', @exists);
|
|
# If there is no shadowing with temporary table, result is table type
|
|
SELECT @exists;
|
|
DROP SEQUENCE s1;
|
|
CREATE SEQUENCE s;
|
|
CALL sys.table_exists('test', 's', @exists); SELECT @exists;
|
|
# Creating temporary sequence over sequence results in `temporary`
|
|
CREATE TEMPORARY SEQUENCE s;
|
|
CALL sys.table_exists('test', 's', @exists); SELECT @exists;
|
|
# First drop temporary sequence
|
|
DROP SEQUENCE s;
|
|
CALL sys.table_exists('test', 's', @exists); SELECT @exists;
|
|
DROP SEQUENCE s;
|
|
CALL sys.table_exists('test', 's', @exists); SELECT @exists;
|
|
|
|
CREATE TEMPORARY SEQUENCE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
CREATE TABLE t1 (id INT PRIMARY KEY);
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Before was a `temporary sequence`, now should be `temporary`
|
|
SELECT @exists;
|
|
# It is not possible to create temporary table over temporary sequence with the same name
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
|
|
# It is not possible to create sequence over temporary sequence with the same name
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE SEQUENCE t1;
|
|
# This will drop temporary sequence
|
|
DROP SEQUENCE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# This will lead to `base table`
|
|
SELECT @exists;
|
|
# It is not possible to create a sequence over the base table
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE SEQUENCE t1;
|
|
# Let's test with temporary sequence instead
|
|
CREATE TEMPORARY SEQUENCE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Will return temporary as expected
|
|
SELECT @exists;
|
|
# Again droping the temporary sequence
|
|
DROP SEQUENCE t1;
|
|
# Will lead to the base table
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
|
|
# This will return `temporary`
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
SELECT @exists;
|
|
# We cannot create temporary sequence over temporary table
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE TEMPORARY SEQUENCE t1;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE SEQUENCE t1;
|
|
DROP TEMPORARY TABLE t1;
|
|
# Drop base table
|
|
DROP TABLE t1;
|
|
CREATE SEQUENCE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Should be a sequence
|
|
SELECT @exists;
|
|
# Create an temporary table
|
|
CREATE TEMPORARY TABLE t1(t int);
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Should shadow an sequence with temporary
|
|
SELECT @exists;
|
|
# Drop temporary table
|
|
DROP TABLE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Should again show the sequence
|
|
SELECT @exists;
|
|
CREATE TEMPORARY SEQUENCE t1;
|
|
CALL sys.table_exists('test', 't1', @exists);
|
|
# Should shadow an sequence with temporary
|
|
SELECT @exists;
|
|
# Drop temporary sequence
|
|
DROP TABLE t1;
|
|
# Drop an sequence
|
|
DROP TABLE t1;
|