diff --git a/mysql-test/include/type_mix_incompatible.inc b/mysql-test/include/type_mix_incompatible.inc index 8f0eb4fb70c..750dc7bcac6 100644 --- a/mysql-test/include/type_mix_incompatible.inc +++ b/mysql-test/include/type_mix_incompatible.inc @@ -10,6 +10,9 @@ SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS AND TABLE_NAME='t1' AND TABLE_SCHEMA='test'); +let $source_type= `(SELECT @source_type)`; +let $target_type= `(SELECT @target_type)`; + CREATE TABLE t2 LIKE t1; ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST; INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT); @@ -134,4 +137,122 @@ EXECUTE IMMEDIATE @alter; DROP TABLE t3; DROP TABLE t2; + +# +# MDEV-28963 Incompatible data type assignment through SP vars is not consistent with columns +# + +# +# SP local variables +# +DELIMITER $$; +eval CREATE PROCEDURE p1() +BEGIN + DECLARE src $source_type DEFAULT NULL; + DECLARE dst $target_type DEFAULT NULL; + SET dst=src; +END; +$$ +DELIMITER ;$$ +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +CALL p1; +DROP PROCEDURE p1; + +# +# SP IN parameters +# + +--eval CREATE FUNCTION f1(a $target_type) RETURNS INT RETURN NULL; +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +DROP FUNCTION f1; + +--eval CREATE PROCEDURE p1(a $target_type) BEGIN END; +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +DROP PROCEDURE p1; + +# +# SP OUT parameters +# + +DELIMITER $$; +eval CREATE PROCEDURE p1(OUT dst $target_type) +BEGIN + DECLARE src $source_type DEFAULT NULL; + SET dst=src; +END; +$$ +eval CREATE PROCEDURE p2() +BEGIN + DECLARE dst $target_type DEFAULT NULL; + CALL p1(dst); +END; +$$ +DELIMITER ;$$ +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +CALL p2(); +SHOW WARNINGS; +DROP PROCEDURE p2; +DROP PROCEDURE p1; + + +# +# SF RETURN +# + +DELIMITER $$; +eval CREATE FUNCTION f1() RETURNS $target_type +BEGIN + DECLARE rc $source_type DEFAULT NULL; + RETURN rc; +END; +$$ +DELIMITER ;$$ +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT f1(); +DROP FUNCTION f1; + +# +# Cursor IN parameters +# + +DELIMITER $$; +eval CREATE PROCEDURE p1() +BEGIN + DECLARE src $source_type DEFAULT NULL; + DECLARE cur1 CURSOR(t $target_type) FOR SELECT * FROM t1 WHERE target=t; + OPEN cur1(src); + CLOSE cur1; +END; +$$ +DELIMITER ;$$ +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +CALL p1(); +DROP PROCEDURE p1; + +# +# FETCH +# + +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); + +DELIMITER $$; +eval CREATE PROCEDURE p1() +BEGIN + DECLARE dst $target_type DEFAULT NULL; + DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; + OPEN cur2; + FETCH cur2 INTO dst; + CLOSE cur2; +END; +$$ +DELIMITER ;$$ +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +CALL p1(); +DROP PROCEDURE p1; + +DROP TABLE t2; + --echo # End of type_store_assignment_incompatible.inc diff --git a/mysql-test/main/alter_table_combinations.result b/mysql-test/main/alter_table_combinations.result index 459447f343e..b2690555016 100644 --- a/mysql-test/main/alter_table_combinations.result +++ b/mysql-test/main/alter_table_combinations.result @@ -226,7 +226,7 @@ Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function SELECT * FROM v1; ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them UPDATE t2 SET f = f + 10; -ERROR 42S22: Unknown column 'd' in 'OLD' +ERROR 42S22: Unknown column 'd' in 'NEW' CALL sp1(); ERROR 42S22: Unknown column 'd' in 'field list' DROP TRIGGER trg1; diff --git a/mysql-test/main/sp-row.result b/mysql-test/main/sp-row.result index 2764b4cd999..1cbfa8c639f 100644 --- a/mysql-test/main/sp-row.result +++ b/mysql-test/main/sp-row.result @@ -20,7 +20,7 @@ RETURN a; END; $$ SELECT f1(ROW(10,20)); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP FUNCTION f1; # # ROW as an SP parameter @@ -236,7 +236,7 @@ SELECT f1(a); END; $$ CALL p1(); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP PROCEDURE p1; DROP FUNCTION f1; # @@ -286,7 +286,7 @@ RETURN rec; END; $$ SELECT f1(10); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP FUNCTION f1; # # Using the entire ROW in SELECT..CREATE diff --git a/mysql-test/main/sp-row.test b/mysql-test/main/sp-row.test index 527ff9455bd..c49ea293bfe 100644 --- a/mysql-test/main/sp-row.test +++ b/mysql-test/main/sp-row.test @@ -27,7 +27,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION SELECT f1(ROW(10,20)); DROP FUNCTION f1; @@ -307,7 +307,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1(); DROP PROCEDURE p1; DROP FUNCTION f1; @@ -393,7 +393,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION SELECT f1(10); DROP FUNCTION f1; diff --git a/mysql-test/main/sp-vars.result b/mysql-test/main/sp-vars.result index de30156c602..4ffc05fa257 100644 --- a/mysql-test/main/sp-vars.result +++ b/mysql-test/main/sp-vars.result @@ -1026,11 +1026,11 @@ BEGIN SELECT arg; END| CALL p1((1, 2)); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types tinyint and row for operation 'SET' CALL p1((SELECT * FROM t1 LIMIT 1)); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types tinyint and row for operation 'SET' CALL p1((SELECT col1, col2 FROM t1 LIMIT 1)); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types tinyint and row for operation 'SET' DROP PROCEDURE p1; DROP TABLE t1; diff --git a/mysql-test/main/sp-vars.test b/mysql-test/main/sp-vars.test index 9edf245acbe..5e1e07888ca 100644 --- a/mysql-test/main/sp-vars.test +++ b/mysql-test/main/sp-vars.test @@ -1221,13 +1221,13 @@ BEGIN END| delimiter ;| ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1((1, 2)); ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1((SELECT * FROM t1 LIMIT 1)); ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1((SELECT col1, col2 FROM t1 LIMIT 1)); # diff --git a/mysql-test/main/sp.result b/mysql-test/main/sp.result index bddb41c0730..bb73622106f 100644 --- a/mysql-test/main/sp.result +++ b/mysql-test/main/sp.result @@ -255,7 +255,7 @@ return i+1| call sub1("sub1a", (select 7))| call sub1("sub1b", (select max(i) from t2))| call sub1("sub1c", (select i,d from t2 limit 1))| -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' call sub1("sub1d", (select 1 from (select 1) a))| call sub2("sub2")| select * from t1 order by id| diff --git a/mysql-test/main/sp.test b/mysql-test/main/sp.test index 9d0e05e4d1d..512f149e4b8 100644 --- a/mysql-test/main/sp.test +++ b/mysql-test/main/sp.test @@ -386,7 +386,7 @@ create function sub3(i int) returns int deterministic call sub1("sub1a", (select 7))| call sub1("sub1b", (select max(i) from t2))| ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION call sub1("sub1c", (select i,d from t2 limit 1))| call sub1("sub1d", (select 1 from (select 1) a))| call sub2("sub2")| diff --git a/mysql-test/main/type_geometry_mix_int.result b/mysql-test/main/type_geometry_mix_int.result index 6511a0fcea6..e5d00c63727 100644 --- a/mysql-test/main/type_geometry_mix_int.result +++ b/mysql-test/main/type_geometry_mix_int.result @@ -92,6 +92,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE dst geometry DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a geometry) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a geometry) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst geometry) +BEGIN +DECLARE src int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst geometry DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types geometry and int for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS geometry +BEGIN +DECLARE rc int(11) DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE cur1 CURSOR(t geometry) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst geometry DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target INT DEFAULT 0, source GEOMETRY DEFAULT POINT(1,1)); @@ -185,6 +259,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types geometry and int for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src geometry DEFAULT NULL; +DECLARE dst int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a int(11)) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a int(11)) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst int(11)) +BEGIN +DECLARE src geometry DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types int and geometry for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS int(11) +BEGIN +DECLARE rc geometry DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src geometry DEFAULT NULL; +DECLARE cur1 CURSOR(t int(11)) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and geometry for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/mysql-test/suite/compat/oracle/r/sp-row.result b/mysql-test/suite/compat/oracle/r/sp-row.result index 7fd986a71c8..a15fe30d8af 100644 --- a/mysql-test/suite/compat/oracle/r/sp-row.result +++ b/mysql-test/suite/compat/oracle/r/sp-row.result @@ -24,7 +24,7 @@ RETURN a; END; $$ SELECT f1(ROW(10,20)); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP FUNCTION f1; # # ROW as an SP parameter @@ -261,7 +261,7 @@ SELECT f1(a); END; $$ CALL p1(); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP PROCEDURE p1; DROP FUNCTION f1; CREATE FUNCTION f1(a INT) RETURN INT @@ -278,7 +278,7 @@ SELECT f1(a); END; $$ CALL p1(); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP PROCEDURE p1; DROP FUNCTION f1; # @@ -332,7 +332,7 @@ RETURN rec; END; $$ SELECT f1(10); -ERROR 21000: Operand should contain 1 column(s) +ERROR HY000: Illegal parameter data types int and row for operation 'SET' DROP FUNCTION f1; # # Using the entire ROW in SELECT..CREATE diff --git a/mysql-test/suite/compat/oracle/t/sp-row.test b/mysql-test/suite/compat/oracle/t/sp-row.test index ebd0a2a2137..c7658c76838 100644 --- a/mysql-test/suite/compat/oracle/t/sp-row.test +++ b/mysql-test/suite/compat/oracle/t/sp-row.test @@ -35,7 +35,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION SELECT f1(ROW(10,20)); DROP FUNCTION f1; @@ -334,7 +334,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1(); DROP PROCEDURE p1; DROP FUNCTION f1; @@ -355,7 +355,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION CALL p1(); DROP PROCEDURE p1; DROP FUNCTION f1; @@ -427,7 +427,7 @@ BEGIN END; $$ DELIMITER ;$$ ---error ER_OPERAND_COLUMNS +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION SELECT f1(10); DROP FUNCTION f1; diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_decimal.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_decimal.result index c045bbe7769..024b9d012be 100644 --- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_decimal.result +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_decimal.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +DECLARE dst inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a inet6) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a inet6) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst inet6) +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types inet6 and decimal for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS inet6 +BEGIN +DECLARE rc decimal(38,0) DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +DECLARE cur1 CURSOR(t inet6) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target DECIMAL(38,0) DEFAULT 0, source INET6 DEFAULT '::0'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE dst decimal(38,0) DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a decimal(38,0)) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a decimal(38,0)) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst decimal(38,0)) +BEGIN +DECLARE src inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst decimal(38,0) DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types decimal and inet6 for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS decimal(38,0) +BEGIN +DECLARE rc inet6 DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE cur1 CURSOR(t decimal(38,0)) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst decimal(38,0) DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_double.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_double.result index cd658dbab1a..41baf7b8ca3 100644 --- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_double.result +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_double.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src double DEFAULT NULL; +DECLARE dst inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a inet6) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a inet6) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst inet6) +BEGIN +DECLARE src double DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types inet6 and double for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS inet6 +BEGIN +DECLARE rc double DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src double DEFAULT NULL; +DECLARE cur1 CURSOR(t inet6) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target DOUBLE DEFAULT 0, source INET6 DEFAULT '::0'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE dst double DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a double) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a double) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst double) +BEGIN +DECLARE src inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst double DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types double and inet6 for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS double +BEGIN +DECLARE rc inet6 DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE cur1 CURSOR(t double) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst double DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_int.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_int.result index 67052350187..80a2e70cd7a 100644 --- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_int.result +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_int.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE dst inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a inet6) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a inet6) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst inet6) +BEGIN +DECLARE src int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types inet6 and int for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS inet6 +BEGIN +DECLARE rc int(11) DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE cur1 CURSOR(t inet6) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target INT DEFAULT 0, source INET6 DEFAULT '::0'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE dst int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a int(11)) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a int(11)) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst int(11)) +BEGIN +DECLARE src inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types int and inet6 for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS int(11) +BEGIN +DECLARE rc inet6 DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE cur1 CURSOR(t int(11)) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_time.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_time.result index 042a9203fd6..ffca3fb441f 100644 --- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_time.result +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_time.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src time DEFAULT NULL; +DECLARE dst inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a inet6) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a inet6) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst inet6) +BEGIN +DECLARE src time DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types inet6 and time for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS inet6 +BEGIN +DECLARE rc time DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src time DEFAULT NULL; +DECLARE cur1 CURSOR(t inet6) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target TIME DEFAULT '00:00:00', source INET6 DEFAULT '::0'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE dst time DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a time) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a time) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst time) +BEGIN +DECLARE src inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst time DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types time and inet6 for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS time +BEGIN +DECLARE rc inet6 DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE cur1 CURSOR(t time) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst time DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_uint.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_uint.result index 579aee6e3fd..7fa4df73dab 100644 --- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_uint.result +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_uint.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +DECLARE dst inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a inet6) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a inet6) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst inet6) +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types inet6 and int unsigned for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS inet6 +BEGIN +DECLARE rc int(10) unsigned DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +DECLARE cur1 CURSOR(t inet6) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst inet6 DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target INT UNSIGNED DEFAULT 0, source INET6 DEFAULT '::0'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE dst int(10) unsigned DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a int(10) unsigned) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a int(10) unsigned) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst int(10) unsigned) +BEGIN +DECLARE src inet6 DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst int(10) unsigned DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types int unsigned and inet6 for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS int(10) unsigned +BEGIN +DECLARE rc inet6 DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src inet6 DEFAULT NULL; +DECLARE cur1 CURSOR(t int(10) unsigned) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst int(10) unsigned DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_decimal.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_decimal.result index 7fc9d0a9d38..91519b1e677 100644 --- a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_decimal.result +++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_decimal.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +DECLARE dst uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a uuid) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a uuid) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst uuid) +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst uuid DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types uuid and decimal for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS uuid +BEGIN +DECLARE rc decimal(38,0) DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src decimal(38,0) DEFAULT NULL; +DECLARE cur1 CURSOR(t uuid) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst uuid DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target DECIMAL(38,0) DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE dst decimal(38,0) DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a decimal(38,0)) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a decimal(38,0)) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst decimal(38,0)) +BEGIN +DECLARE src uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst decimal(38,0) DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types decimal and uuid for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS decimal(38,0) +BEGIN +DECLARE rc uuid DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE cur1 CURSOR(t decimal(38,0)) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst decimal(38,0) DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_double.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_double.result index 87b3b1ecfb3..2f045078eb7 100644 --- a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_double.result +++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_double.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src double DEFAULT NULL; +DECLARE dst uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a uuid) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a uuid) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst uuid) +BEGIN +DECLARE src double DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst uuid DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types uuid and double for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS uuid +BEGIN +DECLARE rc double DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src double DEFAULT NULL; +DECLARE cur1 CURSOR(t uuid) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst uuid DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target DOUBLE DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types uuid and double for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE dst double DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a double) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a double) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst double) +BEGIN +DECLARE src uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst double DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types double and uuid for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS double +BEGIN +DECLARE rc uuid DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE cur1 CURSOR(t double) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst double DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types double and uuid for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_int.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_int.result index 404581ee519..4eb2b803a98 100644 --- a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_int.result +++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_int.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE dst uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a uuid) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a uuid) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst uuid) +BEGIN +DECLARE src int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst uuid DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types uuid and int for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS uuid +BEGIN +DECLARE rc int(11) DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(11) DEFAULT NULL; +DECLARE cur1 CURSOR(t uuid) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst uuid DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target INT DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types uuid and int for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE dst int(11) DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a int(11)) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a int(11)) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst int(11)) +BEGIN +DECLARE src uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types int and uuid for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS int(11) +BEGIN +DECLARE rc uuid DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE cur1 CURSOR(t int(11)) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst int(11) DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int and uuid for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_time.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_time.result index 99efe1b579c..bb41af1ebf0 100644 --- a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_time.result +++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_time.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src time DEFAULT NULL; +DECLARE dst uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a uuid) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a uuid) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst uuid) +BEGIN +DECLARE src time DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst uuid DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types uuid and time for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS uuid +BEGIN +DECLARE rc time DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src time DEFAULT NULL; +DECLARE cur1 CURSOR(t uuid) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst uuid DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target TIME DEFAULT '00:00:00', source UUID DEFAULT '00000000-0000-0000-0000-000000000000'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types uuid and time for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE dst time DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a time) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a time) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst time) +BEGIN +DECLARE src uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst time DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types time and uuid for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS time +BEGIN +DECLARE rc uuid DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE cur1 CURSOR(t time) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst time DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types time and uuid for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_uint.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_uint.result index 8f7236dab20..9c61cfb1171 100644 --- a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_uint.result +++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mix_uint.result @@ -95,6 +95,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +DECLARE dst uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a uuid) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a uuid) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst uuid) +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst uuid DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types uuid and int unsigned for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS uuid +BEGIN +DECLARE rc int(10) unsigned DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src int(10) unsigned DEFAULT NULL; +DECLARE cur1 CURSOR(t uuid) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst uuid DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; CREATE TABLE t1 (target INT UNSIGNED DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000'); @@ -188,6 +262,80 @@ EXECUTE IMMEDIATE @alter; ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET' DROP TABLE t3; DROP TABLE t2; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE dst int(10) unsigned DEFAULT NULL; +SET dst=src; +END; +$$ +CALL p1; +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE FUNCTION f1(a int(10) unsigned) RETURNS INT RETURN NULL;; +SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1(a int(10) unsigned) BEGIN END;; +CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1)); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE PROCEDURE p1(OUT dst int(10) unsigned) +BEGIN +DECLARE src uuid DEFAULT NULL; +SET dst=src; +END; +$$ +CREATE PROCEDURE p2() +BEGIN +DECLARE dst int(10) unsigned DEFAULT NULL; +CALL p1(dst); +END; +$$ +CALL p2(); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +SHOW WARNINGS; +Level Code Message +Error 4078 Illegal parameter data types int unsigned and uuid for operation 'SET' +Note 4094 At line 4 in test.p1 +Note 4094 At line 4 in test.p2 +DROP PROCEDURE p2; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS int(10) unsigned +BEGIN +DECLARE rc uuid DEFAULT NULL; +RETURN rc; +END; +$$ +SELECT f1(); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP FUNCTION f1; +CREATE PROCEDURE p1() +BEGIN +DECLARE src uuid DEFAULT NULL; +DECLARE cur1 CURSOR(t int(10) unsigned) FOR SELECT * FROM t1 WHERE target=t; +OPEN cur1(src); +CLOSE cur1; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP PROCEDURE p1; +CREATE TABLE t2 LIKE t1; +INSERT INTO t2 VALUES (); +CREATE PROCEDURE p1() +BEGIN +DECLARE dst int(10) unsigned DEFAULT NULL; +DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1; +OPEN cur2; +FETCH cur2 INTO dst; +CLOSE cur2; +END; +$$ +CALL p1(); +ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET' +DROP PROCEDURE p1; +DROP TABLE t2; # End of type_store_assignment_incompatible.inc DROP TABLE t1; # diff --git a/sql/field.cc b/sql/field.cc index 5abf05fed2e..491db8ddbc8 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1453,7 +1453,7 @@ bool Field::sp_prepare_and_store_item(THD *thd, Item **value) Item *expr_item; - if (!(expr_item= thd->sp_prepare_func_item(value, 1))) + if (!(expr_item= thd->sp_fix_func_item_for_assignment(this, value))) goto error; /* diff --git a/sql/item.cc b/sql/item.cc index ecc9f8e6bfe..0d6f6cda544 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -9892,9 +9892,11 @@ void Item_trigger_field::set_required_privilege(bool rw) bool Item_trigger_field::set_value(THD *thd, sp_rcontext * /*ctx*/, Item **it) { - Item *item= thd->sp_prepare_func_item(it); + if (fix_fields_if_needed(thd, NULL)) + return true; - if (!item || fix_fields_if_needed(thd, NULL)) + Item *item= thd->sp_fix_func_item_for_assignment(field, it); + if (!item) return true; // NOTE: field->table->copy_blobs should be false here, but let's diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 393f2016a87..3557e21d53b 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -410,6 +410,26 @@ Item *THD::sp_fix_func_item(Item **it_addr) } +/** + Prepare an Item for evaluation as an assignment source, + for assignment to the given target. + + @param to - the assignment target + @param it_addr - a pointer on item refernce + + @retval - NULL on error + @retval - a prepared item pointer on success +*/ +Item *THD::sp_fix_func_item_for_assignment(const Field *to, Item **it_addr) +{ + DBUG_ENTER("THD::sp_fix_func_item_for_assignment"); + Item *res= sp_fix_func_item(it_addr); + if (res && (!res->check_assignability_to(to))) + DBUG_RETURN(res); + DBUG_RETURN(NULL); +} + + /** Evaluate an expression and store the result in the field. @@ -4071,7 +4091,7 @@ sp_instr_jump_if_not::exec_core(THD *thd, uint *nextp) Item *it; int res; - it= thd->sp_prepare_func_item(&m_expr); + it= thd->sp_prepare_func_item(&m_expr, 1); if (! it) { res= -1; diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc index 619218f3b68..d2fe53a2431 100644 --- a/sql/sp_rcontext.cc +++ b/sql/sp_rcontext.cc @@ -715,7 +715,7 @@ Item_cache *sp_rcontext::create_case_expr_holder(THD *thd, bool sp_rcontext::set_case_expr(THD *thd, int case_expr_id, Item **case_expr_item_ptr) { - Item *case_expr_item= thd->sp_prepare_func_item(case_expr_item_ptr); + Item *case_expr_item= thd->sp_prepare_func_item(case_expr_item_ptr, 1); if (!case_expr_item) return true; diff --git a/sql/sql_class.h b/sql/sql_class.h index 76f713d0aac..f4116932ac8 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5493,7 +5493,8 @@ public: bool restore_from_local_lex_to_old_lex(LEX *oldlex); Item *sp_fix_func_item(Item **it_addr); - Item *sp_prepare_func_item(Item **it_addr, uint cols= 1); + Item *sp_fix_func_item_for_assignment(const Field *to, Item **it_addr); + Item *sp_prepare_func_item(Item **it_addr, uint cols); bool sp_eval_expr(Field *result_field, Item **expr_item_ptr); bool sql_parser(LEX *old_lex, LEX *lex,