267 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| SET sql_mode=ORACLE;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-10801 sql_mode: dynamic SQL placeholders
 | |
| --echo #
 | |
| 
 | |
| SET @a=10, @b=20;
 | |
| PREPARE stmt FROM 'SELECT ?,?';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :a,:b';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :aaa,:bbb';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| #qc_mysqlembedded: PREPARE stmt FROM 'SELECT :"a",:"b"';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| #qc_mysqlembedded: PREPARE stmt FROM 'SELECT :"aaa",:"bbb"';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :1,:2';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :222,:111';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :0,:65535';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| PREPARE stmt FROM 'SELECT :65535,:0';
 | |
| EXECUTE stmt USING @a, @b;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-10709 Expressions as parameters to Dynamic SQL
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing disallowed expressions in USING
 | |
| --echo #
 | |
| 
 | |
| PREPARE stmt FROM 'SELECT :1 FROM DUAL';
 | |
| --error ER_PARSE_ERROR
 | |
| EXECUTE stmt USING (SELECT 1);
 | |
| DEALLOCATE PREPARE stmt;
 | |
| 
 | |
| DELIMITER $$;
 | |
| CREATE FUNCTION f1() RETURN VARCHAR
 | |
| AS
 | |
| BEGIN
 | |
|   RETURN 'test';
 | |
| END;
 | |
| $$
 | |
| DELIMITER ;$$
 | |
| PREPARE stmt FROM 'SELECT ? FROM DUAL';
 | |
| --error ER_SUBQUERIES_NOT_SUPPORTED
 | |
| EXECUTE stmt USING f1();
 | |
| DEALLOCATE PREPARE stmt;
 | |
| DROP FUNCTION f1;
 | |
| 
 | |
| --echo #
 | |
| --echo # Using a user variable as a EXECUTE..USING out parameter
 | |
| --echo #
 | |
| 
 | |
| DELIMITER /;
 | |
| CREATE PROCEDURE p1(a OUT INT)
 | |
| AS
 | |
| BEGIN
 | |
|   a:= 10;
 | |
| END;
 | |
| /
 | |
| DELIMITER ;/
 | |
| SET @a=1;
 | |
| CALL p1(@a);
 | |
| SELECT @a;
 | |
| SET @a=2;
 | |
| PREPARE stmt FROM 'CALL p1(?)';
 | |
| EXECUTE stmt USING @a;
 | |
| SELECT @a;
 | |
| DROP PROCEDURE p1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Using an SP variable as a EXECUTE..USING out parameter
 | |
| --echo #
 | |
| 
 | |
| DELIMITER /;
 | |
| CREATE PROCEDURE p1 (a OUT INT)
 | |
| AS
 | |
| BEGIN
 | |
|   a:=10;
 | |
| END;
 | |
| /
 | |
| CREATE PROCEDURE p2 (a OUT INT)
 | |
| AS
 | |
| BEGIN
 | |
|   PREPARE stmt FROM 'CALL p1(?)';
 | |
|   EXECUTE stmt USING a;
 | |
| END;
 | |
| /
 | |
| DELIMITER ;/
 | |
| SET @a= 1;
 | |
| CALL p2(@a);
 | |
| SELECT @a;
 | |
| DROP PROCEDURE p2;
 | |
| DROP PROCEDURE p1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Using a trigger field as a EXECUTE..USING out parameter
 | |
| --echo #
 | |
| DELIMITER /;
 | |
| CREATE PROCEDURE p1 (a OUT INT)
 | |
| AS
 | |
| BEGIN
 | |
|  a:= 10;
 | |
| END;
 | |
| /
 | |
| DELIMITER ;/
 | |
| CREATE TABLE t1 (a INT);
 | |
| CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW CALL p1(:NEW.a);
 | |
| INSERT INTO t1 VALUES (1);
 | |
| SELECT * FROM t1;
 | |
| DROP TABLE t1;
 | |
| DROP PROCEDURE p1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing re-prepare on a table metadata update between PREPARE and EXECUTE
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (a INT);
 | |
| DELIMITER /;
 | |
| CREATE PROCEDURE p1(a IN INT)
 | |
| AS
 | |
| BEGIN
 | |
|   INSERT INTO t1 VALUES (a);
 | |
| END;
 | |
| /
 | |
| DELIMITER ;/
 | |
| PREPARE stmt FROM 'CALL p1(?)';
 | |
| EXECUTE stmt USING 10;
 | |
| SELECT * FROM t1;
 | |
| CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW NEW.a:=NEW.a+1;
 | |
| EXECUTE stmt USING 20;
 | |
| SELECT * FROM t1;
 | |
| DEALLOCATE PREPARE stmt;
 | |
| DROP PROCEDURE p1;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # End of MDEV-10709 Expressions as parameters to Dynamic SQL
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-10585 EXECUTE IMMEDIATE statement
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing disallowed expressions in USING
 | |
| --echo #
 | |
| 
 | |
| --error ER_PARSE_ERROR
 | |
| EXECUTE IMMEDIATE 'SELECT :1 FROM DUAL' USING (SELECT 1);
 | |
| 
 | |
| DELIMITER $$;
 | |
| CREATE FUNCTION f1() RETURN VARCHAR
 | |
| AS
 | |
| BEGIN
 | |
|   RETURN 'test';
 | |
| END;
 | |
| $$
 | |
| DELIMITER ;$$
 | |
| --error ER_SUBQUERIES_NOT_SUPPORTED
 | |
| EXECUTE IMMEDIATE 'SELECT ? FROM DUAL' USING f1();
 | |
| DROP FUNCTION f1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing simple expressions
 | |
| --echo #
 | |
| 
 | |
| EXECUTE IMMEDIATE 'SELECT :1 FROM DUAL' USING 10;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-10866 Extend PREPARE and EXECUTE IMMEDIATE to understand expressions
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing erroneous and diallowed prepare source
 | |
| --echo #
 | |
| 
 | |
| --error ER_CANT_AGGREGATE_2COLLATIONS
 | |
| EXECUTE IMMEDIATE _latin1'SELECT 1 AS c FROM ' || _latin2 'DUAL';
 | |
| --error ER_CANT_AGGREGATE_2COLLATIONS
 | |
| PREPARE stmt FROM _latin1'SELECT 1 AS c FROM ' || _latin2 'DUAL';
 | |
| 
 | |
| --error ER_PARSE_ERROR
 | |
| EXECUTE IMMEDIATE (SELECT 'SELECT 1');
 | |
| --error ER_PARSE_ERROR
 | |
| PREPARE stmt FROM (SELECT 'SELECT 1');
 | |
| 
 | |
| --error ER_BAD_FIELD_ERROR
 | |
| EXECUTE IMMEDIATE a;
 | |
| --error ER_BAD_FIELD_ERROR
 | |
| PREPARE stmt FROM a;
 | |
| 
 | |
| --error ER_PARSE_ERROR
 | |
| EXECUTE IMMEDIATE NULL;
 | |
| --error ER_PARSE_ERROR
 | |
| PREPARE stmt FROM NULL;
 | |
| 
 | |
| --error ER_PARSE_ERROR
 | |
| EXECUTE IMMEDIATE COALESCE(NULL);
 | |
| --error ER_PARSE_ERROR
 | |
| PREPARE stmt FROM COALESCE(NULL);
 | |
| 
 | |
| DELIMITER $$;
 | |
| CREATE FUNCTION f1() RETURN VARCHAR
 | |
| AS
 | |
| BEGIN
 | |
|   RETURN 't1';
 | |
| END;
 | |
| $$
 | |
| DELIMITER ;$$
 | |
| --error ER_SUBQUERIES_NOT_SUPPORTED
 | |
| EXECUTE IMMEDIATE f1();
 | |
| --error ER_SUBQUERIES_NOT_SUPPORTED
 | |
| PREPARE stmt FROM f1();
 | |
| DROP FUNCTION f1;
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing user variables in prepare source
 | |
| --echo #
 | |
| 
 | |
| SET @table_name='DUAL';
 | |
| EXECUTE IMMEDIATE 'SELECT 1 AS a FROM ' || @table_name;
 | |
| #qc: PREPARE stmt FROM 'SELECT 1 AS a FROM ' || @table_name;
 | |
| EXECUTE stmt;
 | |
| DEALLOCATE PREPARE stmt;
 | |
| 
 | |
| --echo #
 | |
| --echo # Testing SP parameters and variables in prepare source
 | |
| --echo #
 | |
| 
 | |
| DELIMITER $$;
 | |
| CREATE PROCEDURE p1(table_name VARCHAR)
 | |
| AS
 | |
| BEGIN
 | |
|   EXECUTE IMMEDIATE 'SELECT 1 AS c FROM '|| table_name;
 | |
| END;
 | |
| $$
 | |
| DELIMITER ;$$
 | |
| CALL p1('DUAL');
 | |
| DROP PROCEDURE p1;
 | |
| 
 | |
| DELIMITER $$;
 | |
| CREATE PROCEDURE p1()
 | |
| AS
 | |
|   table_name VARCHAR(64):='DUAL';
 | |
| BEGIN
 | |
|   EXECUTE IMMEDIATE 'SELECT 1 AS c FROM ' || table_name;
 | |
| END;
 | |
| $$
 | |
| DELIMITER ;$$
 | |
| CALL p1();
 | |
| DROP PROCEDURE p1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # End of MDEV-10866 Extend PREPARE and EXECUTE IMMEDIATE to understand expressions
 | |
| --echo #
 | 
