[MDEV-6499] Creating CONNECT table with SRCDEF in a stored procedure Created: 2014-07-28  Updated: 2014-10-12  Due: 2014-10-09  Resolved: 2014-10-12

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - Connect
Affects Version/s: 10.0.12
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Federico Razzoli Assignee: Sergei Golubchik
Resolution: Cannot Reproduce Votes: 0
Labels: 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.



 Comments   
Comment by Federico Razzoli [ 2014-07-29 ]

For misteryous reasons the workaround at 3) yesterday worked, and today doesn't. I have no idea about what changed (or if something really changed...). I have to give up, so I hope that this bugs will be fixed.

Comment by Federico Razzoli [ 2014-08-03 ]

Part of this is not really a bug: I didn't know CONNECT tables cannot be temporary. (but then, why I was able to create it? see MDEV-6523)

However, commenting/uncommenting the SET statement should not affect the shown example.

Comment by Sergei Golubchik [ 2014-09-09 ]

I cannot really repeat it. After I fixed MDEV-6523, one cannot create a TEMPORARY CONNECT table, and with non-temporary tables, your test case seems to work, with or without SET statement.

Generated at Thu Feb 08 07:12:22 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.