mariadb/mysql-test/suite/sysschema/t/pr_table_exists.test
Anel Husakovic 06a4193cc3 MDEV-28391: table_exists procedure fails when arguments contain escaped backticks as an quoted identifiers
- When arguments to the procedure contain quote in the name, procedure fails with parsing error.
  The reason was because additional quoting is done when testing TEMPORARY table with the same name.
- Reviewed by: <wlad@mariadb.com>
2022-05-04 08:31:55 -05:00

69 lines
No EOL
2 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;
DROP TABLE `ab``c`;