Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Cannot Reproduce
-
10.0.12
-
None
Description
I found this while trying to workaround MDEV-6488.
DROP PROCEDURE IF EXISTS `_`.`materialize_sql`; |
DELIMITER ||
|
CREATE PROCEDURE `_`.`materialize_sql`(IN p_name VARCHAR(56), IN p_sql TEXT) |
MODIFIES SQL DATA
|
BEGIN
|
# SET p_name := CONCAT('`', REPLACE(p_name, '`', '``'), '`'); |
|
-- create table |
SET @v_materialized_sql := CONCAT_WS('', |
'CREATE OR REPLACE TEMPORARY TABLE `_`.', p_name |
, ' ENGINE = CONNECT' |
, ' TABLE_TYPE = MYSQL' |
, ' SRCDEF = ''', REPLACE(p_sql, '''', ''''''), '''' |
, ' CONNECTION = ''_''' |
);
|
PREPARE stmt_materialized_sql FROM @v_materialized_sql; |
EXECUTE stmt_materialized_sql; |
END || |
DELIMITER ;
|
CALL materialize_sql('x', 'SHOW MASTER STATUS'); |
DESC x; |
SELECT * FROM x; |
There are 3 things to note:
1) The table structure (DESC x) is correct, but SELECT x returns only empty fields, without a good reason.
2) If you remove the TEMPORARY keyword, the output will be different: we get 0 rows without a good readon.
3) If you remove TEMPORARY and uncomment the SET statement, the behaviour is correct (no bug). But "x" is not a special char...
I still couldn't find any way to create a temporary CONNECT table with a procedure.