1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Merge 10.7 into 10.8

This commit is contained in:
Marko Mäkelä
2022-06-28 10:06:00 +03:00
134 changed files with 6657 additions and 1298 deletions

View File

@@ -76,8 +76,15 @@ disable_libfmt()
architecture=$(dpkg-architecture -q DEB_BUILD_ARCH)
CODENAME="$(lsb_release -sc)"
case "${CODENAME}" in
LSBID="$(lsb_release -si | tr '[:upper:]' '[:lower:]')"
LSBVERSION="$(lsb_release -sr | sed -e "s#\.##g")"
LSBNAME="$(lsb_release -sc)"
if [ -z "${LSBID}" ]
then
LSBID="unknown"
fi
case "${LSBNAME}" in
stretch)
# MDEV-16525 libzstd-dev-1.1.3 minimum version
sed -e '/libzstd-dev/d' \
@@ -136,7 +143,7 @@ case "${CODENAME}" in
fi
;;
*)
echo "Error - unknown release codename $CODENAME" >&2
echo "Error - unknown release codename $LSBNAME" >&2
exit 1
esac
@@ -153,9 +160,9 @@ UPSTREAM="${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}.${MYSQL_VERSION_PATCH}${
PATCHLEVEL="+maria"
LOGSTRING="MariaDB build"
EPOCH="1:"
VERSION="${EPOCH}${UPSTREAM}${PATCHLEVEL}~${CODENAME}"
VERSION="${EPOCH}${UPSTREAM}${PATCHLEVEL}~${LSBID:0:3}${LSBVERSION}"
dch -b -D "${CODENAME}" -v "${VERSION}" "Automatic build with ${LOGSTRING}." --controlmaint
dch -b -D ${LSBNAME} -v "${VERSION}" "Automatic build with ${LOGSTRING}." --controlmaint
echo "Creating package version ${VERSION} ... "

View File

@@ -180,9 +180,9 @@ insert IGNORE into t1 (a) values ('Garbage');
drop table t1;
create table t1 (pk integer primary key auto_increment, fl geometry not null);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 (fl) values (1);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 (fl) values (1.11);
--error 1416
insert into t1 (fl) values ("qwerty");

View File

@@ -0,0 +1,258 @@
--echo # Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
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);
SHOW CREATE TABLE t2;
#
# Single row INSERT..VALUES
#
CREATE TABLE t3 LIKE t2;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
DROP TABLE t3;
#
# Multi-row INSERT..VALUES
#
# INSERT .. VALUES checks assignment compatibility for the first row only.
# Here the first row is compatible, so no error happens.
# The second row is not compatible. It works according to the
# current sql_mode and the table transaction ability, so it can:
# (a) either raise a warning
# (b) or escalate a warning to an error and abort on the current row
# (c) or escalate a warning to an error and rollback
# Here we test (a) and (b).
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
--error 0,ER_CANT_CREATE_GEOMETRY_OBJECT
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
SELECT * FROM v3;
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
--error ER_TRUNCATED_WRONG_VALUE, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, WARN_DATA_TRUNCATED, ER_CANT_CREATE_GEOMETRY_OBJECT
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
SELECT * FROM v3;
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
#
# INSERT .. SELECT
#
CREATE TABLE t3 LIKE t2;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 SELECT id,source,source FROM t2;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
#
# INSERT .. VALUES .. ON DUPLICATE KEY UPDATE target=source
#
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
#
# INSERT .. SELECT .. ON DUPLICATE KEY UPDATE target=source
#
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
#
# UPDATE
#
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t3 SET target=source;
#
# UPDATE, multi-table
#
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
#
# ALTER
#
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
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

View File

@@ -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;

View File

@@ -1152,11 +1152,11 @@ SELECT @var62, @var63;
@var62 @var63
1 NULL
INSERT INTO t1 SELECT id2, val2, p2 from t2;
ERROR 22007: Incorrect double value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x00$@' for column `test`.`t1`.`d1` at row 1
ERROR HY000: Illegal parameter data types double and point for operation 'SET'
GET DIAGNOSTICS CONDITION 1 @var64= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var65= ROW_NUMBER;
Warnings:
Error 1366 Incorrect double value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x00$@' for column `test`.`t1`.`d1` at row 1
Error 4078 Illegal parameter data types double and point for operation 'SET'
Error 1758 Invalid condition number
SELECT @var64, @var65;
@var64 @var65
@@ -1396,11 +1396,11 @@ SELECT @var103, @var104;
@var103 @var104
1 NULL
INSERT INTO t1 SELECT id2, val2, p2 from t2;
ERROR 22007: Incorrect double value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x00$@' for column `test`.`t1`.`d1` at row 1
ERROR HY000: Illegal parameter data types double and point for operation 'SET'
GET DIAGNOSTICS CONDITION 1 @var105= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var106= ROW_NUMBER;
Warnings:
Error 1366 Incorrect double value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x00$@' for column `test`.`t1`.`d1` at row 1
Error 4078 Illegal parameter data types double and point for operation 'SET'
Error 1758 Invalid condition number
SELECT @var105, @var106;
@var105 @var106

View File

@@ -1091,7 +1091,7 @@ GET DIAGNOSTICS CONDITION 1 @var62= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var63= ROW_NUMBER;
SELECT @var62, @var63;
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 SELECT id2, val2, p2 from t2;
GET DIAGNOSTICS CONDITION 1 @var64= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var65= ROW_NUMBER;
@@ -1277,7 +1277,7 @@ GET DIAGNOSTICS CONDITION 1 @var103= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var104= ROW_NUMBER;
SELECT @var103, @var104;
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 SELECT id2, val2, p2 from t2;
GET DIAGNOSTICS CONDITION 1 @var105= ROW_NUMBER;
GET DIAGNOSTICS CONDITION 2 @var106= ROW_NUMBER;

View File

@@ -688,9 +688,9 @@ object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo))
drop table t1;
create table t1 (fl geometry not null);
insert into t1 values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 values (pointfromtext('point(1,1)'));

View File

@@ -366,9 +366,9 @@ t1 where object_id=85984;
drop table t1;
create table t1 (fl geometry not null);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1.11);
--error 1416
insert into t1 values ("qwerty");

View File

@@ -834,3 +834,25 @@ set global keycache2.key_buffer_size=0;
set global key_buffer_size=@save_key_buffer_size;
set global key_cache_segments=@save_key_cache_segments;
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
#
# SIGSEGV in flush_all_key_blocks when changing
# key_buffer_size / ASAN: heap-use-after-free in flush_all_key_blocks
#
SET GLOBAL keycache1.key_cache_segments=7;
SET GLOBAL keycache1.key_buffer_size=1*1024*1024;
SET GLOBAL keycache1.key_buffer_size=0;
SET GLOBAL keycache1.key_buffer_size=128*1024;
create table t1 (p int primary key, a char(10)) delay_key_write=1;
cache index t1 key (`primary`) in keycache1;
Table Op Msg_type Msg_text
test.t1 assign_to_keycache status OK
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
select * from t1;
p a
1 qqqq
11 yyyy
drop table t1;
SET GLOBAL keycache1.key_buffer_size=0;
#
# End of 10.3 tests
#

View File

@@ -538,3 +538,24 @@ set global key_cache_segments=@save_key_cache_segments;
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
# End of 5.2 tests
--echo #
--echo # SIGSEGV in flush_all_key_blocks when changing
--echo # key_buffer_size / ASAN: heap-use-after-free in flush_all_key_blocks
--echo #
SET GLOBAL keycache1.key_cache_segments=7;
SET GLOBAL keycache1.key_buffer_size=1*1024*1024;
SET GLOBAL keycache1.key_buffer_size=0;
SET GLOBAL keycache1.key_buffer_size=128*1024;
create table t1 (p int primary key, a char(10)) delay_key_write=1;
cache index t1 key (`primary`) in keycache1;
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
select * from t1;
drop table t1;
SET GLOBAL keycache1.key_buffer_size=0;
--echo #
--echo # End of 10.3 tests
--echo #

View File

@@ -197,20 +197,6 @@ f2
connection default;
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1, t2;
connection con1;
connection con2;
connection con1;
SET SESSION optimizer_search_depth=0;
SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
PREPARE stmt FROM 'EXPLAIN SELECT * FROM t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40 WHERE a1=a2 AND a2=a3 AND a3=a4 AND a4=a5 AND a5=a6 AND a6=a7 AND a7=a8 AND a8=a9 AND a9=a10 AND a10=a11 AND a11=a12 AND a12=a13 AND a13=a14 AND a14=a15 AND a15=a16 AND a16=a17 AND a17=a18 AND a18=a19 AND a19=a20 AND a20=a21 AND a21=a22 AND a22=a23 AND a23=a24 AND a24=a25 AND a25=a26 AND a26=a27 AND a27=a28 AND a28=a29 AND a29=a30 AND a30=a31 AND a31=a32 AND a32=a33 AND a33=a34 AND a34=a35 AND a35=a36 AND a36=a37 AND a37=a38 AND a38=a39 AND a39=a40 ';
EXECUTE stmt;
connection con2;
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
KILL QUERY @id;
connection con1;
ERROR 70100: Query execution was interrupted
connection default;
SET DEBUG_SYNC = 'RESET';
#
# Bug#19723: kill of active connection yields different error code
# depending on platform.

View File

@@ -271,74 +271,6 @@ connection default;
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1, t2;
#
# Bug#28598: mysqld crash when killing a long-running explain query.
#
connection con1;
let $ID= `SELECT @id := CONNECTION_ID()`;
connection con2;
let $ignore= `SELECT @id := $ID`;
connection con1;
--disable_query_log
let $tab_count= 40;
--disable_query_log
begin;
let $i= $tab_count;
while ($i)
{
eval CREATE TABLE t$i (a$i INT, KEY(a$i));
eval INSERT INTO t$i VALUES (1),(2),(3),(4),(5),(6),(7);
dec $i ;
}
commit;
--enable_query_log
SET SESSION optimizer_search_depth=0;
let $i=$tab_count;
while ($i)
{
let $a= a$i;
let $t= t$i;
dec $i;
if ($i)
{
let $comma=,;
let $from=$comma$t$from;
let $where=a$i=$a $and $where;
}
if (!$i)
{
let $from=FROM $t$from;
let $where=WHERE $where;
}
let $and=AND;
}
--enable_query_log
SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
eval PREPARE stmt FROM 'EXPLAIN SELECT * $from $where';
send EXECUTE stmt;
connection con2;
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
KILL QUERY @id;
connection con1;
--error 1317
reap;
--disable_query_log
let $i= $tab_count;
while ($i)
{
eval DROP TABLE t$i;
dec $i ;
}
--enable_query_log
connection default;
SET DEBUG_SYNC = 'RESET';
--echo #
--echo # Bug#19723: kill of active connection yields different error code
--echo # depending on platform.

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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));
#

View File

@@ -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|

View File

@@ -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")|

View File

@@ -0,0 +1,340 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target GEOMETRY DEFAULT POINT(1,1), source INT DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` geometry DEFAULT point(1,1),
`source` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
SELECT * FROM v3;
id target source
1 POINT(1 1) 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 POINT(1 1) 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target int(11)
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));
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` int(11) DEFAULT 0,
`source` geometry DEFAULT point(1,1),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1366 Incorrect integer value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\xF0?' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 0 POINT(1 1)
2 0 POINT(1 1)
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 POINT(1 1)
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types int and geometry for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target geometry
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target GEOMETRY DEFAULT POINT(1,1), source INT DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target INT DEFAULT 0, source GEOMETRY DEFAULT POINT(1,1));
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -3274,17 +3274,21 @@ sub do_before_run_mysqltest($)
if ($^O eq "MSWin32") {
push @cmd, '--binary';
}
push @cmd, (qw/-r - -f -s -o/, $dest, $base_result, $resfile);
push @cmd, (qw/-r - -f -s -o/, $dest . $$, $base_result, $resfile);
if (-w $resdir) {
# don't rebuild a file if it's up to date
unless (-e $dest and -M $dest < -M $resfile
and -M $dest < -M $base_result) {
run_system(@cmd);
rename $cmd[-3], $dest or unlink $cmd[-3];
}
} else {
$cmd[-3] = $dest = $opt_tmpdir . '/' . basename($dest);
$dest = $opt_tmpdir . '/' . basename($dest);
$cmd[-3] = $dest . $$;
run_system(@cmd);
rename $cmd[-3], $dest or unlink $cmd[-3];
}
$tinfo->{result_file} = $dest;
}

View File

@@ -452,9 +452,9 @@ ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
create table t1 (pk integer primary key auto_increment, fl geometry not null);
insert into t1 (fl) values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 (fl) values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 (fl) values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 (fl) values (pointfromtext('point(1,1)'));

View File

@@ -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

View File

@@ -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;

View File

@@ -1,27 +1,27 @@
--- r/galera_ist_MDEV-28423.result
+++ r/galera_ist_MDEV-28423.reject
@@ -286,3 +286,111 @@
@@ -517,3 +517,187 @@
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
+Performing State Transfer on a server that has been killed and restarted
+while a DDL was in progress on it
+connection node_1;
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (1,'node1_committed_before');
+INSERT INTO t1 VALUES (2,'node1_committed_before');
+INSERT INTO t1 VALUES (3,'node1_committed_before');
+INSERT INTO t1 VALUES (4,'node1_committed_before');
+INSERT INTO t1 VALUES (5,'node1_committed_before');
+connection node_2;
+START TRANSACTION;
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (6,'node2_committed_before');
+INSERT INTO t1 VALUES (7,'node2_committed_before');
+INSERT INTO t1 VALUES (8,'node2_committed_before');
+INSERT INTO t1 VALUES (9,'node2_committed_before');
+INSERT INTO t1 VALUES (10,'node2_committed_before');
+COMMIT;
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
+connection node_1;
@@ -32,26 +32,26 @@
+connection node_1;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during');
+COMMIT;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after');
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after');
+connection node_2;
+Performing --wsrep-recover ...
+connection node_2;
@@ -59,56 +59,132 @@
+Using --wsrep-start-position when starting mysqld ...
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after');
+COMMIT;
+connection node_1;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after');
+COMMIT;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after');
+COMMIT;
+connection node_1a_galera_st_kill_slave_ddl;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after');
+ROLLBACK;
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+COUNT(*) = 2
+1
+SELECT COUNT(*) = 35 FROM t1;
+COUNT(*) = 35
+1
+SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3
+3
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0
+1
+COMMIT;
+SET AUTOCOMMIT=ON;
+connection node_1;
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+COUNT(*) = 2
+1
+SELECT COUNT(*) = 35 FROM t1;
+COUNT(*) = 35
+1
+SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3
+3
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0
+1
+DROP TABLE t1;
+COMMIT;
+SET AUTOCOMMIT=ON;
+SET GLOBAL debug_dbug = $debug_orig;

View File

@@ -1,287 +1,519 @@
connection node_2;
connection node_1;
connection node_1;
connection node_2;
Performing State Transfer on a server that has been temporarily disconnected
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Unloading wsrep provider ...
SET GLOBAL wsrep_cluster_address = '';
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Loading wsrep provider ...
disconnect node_2;
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_disconnect_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been shut down cleanly and restarted
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Shutting down server ...
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Starting server ...
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_shutdown_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_15 FROM t1;
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_15 FROM t1;
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been killed and restarted
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Killing server ...
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Performing --wsrep-recover ...
Starting server ...
Using --wsrep-start-position when starting mysqld ...
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_kill_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;

View File

@@ -1,27 +1,27 @@
--- r/galera_ist_MDEV-28583.result
+++ r/galera_ist_MDEV-28583.reject
@@ -285,3 +285,111 @@
@@ -517,3 +517,187 @@
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
+Performing State Transfer on a server that has been killed and restarted
+while a DDL was in progress on it
+connection node_1;
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (1,'node1_committed_before');
+INSERT INTO t1 VALUES (2,'node1_committed_before');
+INSERT INTO t1 VALUES (3,'node1_committed_before');
+INSERT INTO t1 VALUES (4,'node1_committed_before');
+INSERT INTO t1 VALUES (5,'node1_committed_before');
+connection node_2;
+START TRANSACTION;
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (6,'node2_committed_before');
+INSERT INTO t1 VALUES (7,'node2_committed_before');
+INSERT INTO t1 VALUES (8,'node2_committed_before');
+INSERT INTO t1 VALUES (9,'node2_committed_before');
+INSERT INTO t1 VALUES (10,'node2_committed_before');
+COMMIT;
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
+connection node_1;
@@ -32,26 +32,26 @@
+connection node_1;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during');
+COMMIT;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after');
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after');
+connection node_2;
+Performing --wsrep-recover ...
+connection node_2;
@@ -59,56 +59,132 @@
+Using --wsrep-start-position when starting mysqld ...
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after');
+COMMIT;
+connection node_1;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after');
+COMMIT;
+SET AUTOCOMMIT=OFF;
+START TRANSACTION;
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after');
+COMMIT;
+connection node_1a_galera_st_kill_slave_ddl;
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after');
+ROLLBACK;
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+COUNT(*) = 2
+1
+SELECT COUNT(*) = 35 FROM t1;
+COUNT(*) = 35
+1
+SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3
+3
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0
+1
+COMMIT;
+SET AUTOCOMMIT=ON;
+connection node_1;
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+COUNT(*) = 2
+1
+SELECT COUNT(*) = 35 FROM t1;
+COUNT(*) = 35
+1
+SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3
+3
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0
+1
+DROP TABLE t1;
+COMMIT;
+SET AUTOCOMMIT=ON;
+SET GLOBAL debug_dbug = $debug_orig;

View File

@@ -1,287 +1,519 @@
connection node_2;
connection node_1;
connection node_1;
connection node_2;
Performing State Transfer on a server that has been temporarily disconnected
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Unloading wsrep provider ...
SET GLOBAL wsrep_cluster_address = '';
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Loading wsrep provider ...
disconnect node_2;
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_disconnect_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been shut down cleanly and restarted
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Shutting down server ...
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Starting server ...
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_shutdown_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_15 FROM t1;
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_15 FROM t1;
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been killed and restarted
connection node_1;
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (1,'node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before');
COMMIT;
connection node_2;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (6,'node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before');
COMMIT;
Killing server ...
connection node_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (11,'node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during');
COMMIT;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
connection node_2;
Performing --wsrep-recover ...
Starting server ...
Using --wsrep-start-position when starting mysqld ...
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (26,'node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after');
COMMIT;
connection node_1;
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
COMMIT;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (36,'node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after');
COMMIT;
connection node_1a_galera_st_kill_slave;
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after');
ROLLBACK;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
COMMIT;
SET AUTOCOMMIT=ON;
connection node_1;
SELECT COUNT(*) = 35 FROM t1;
COUNT(*) = 35
1
SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15;
SELECT COUNT(*) AS EXPECT_35 FROM t1;
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0
1
DROP TABLE t1;
COMMIT;
SET AUTOCOMMIT=ON;

View File

@@ -452,9 +452,9 @@ ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
create table t1 (pk integer primary key auto_increment, fl geometry not null);
insert into t1 (fl) values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 (fl) values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 (fl) values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 (fl) values (pointfromtext('point(1,1)'));

View File

@@ -0,0 +1,9 @@
#
# MDEV-26577 InnoDB: Failing assertion: dict_tf2_is_valid(flags, flags2)
# during ADD COLUMN
#
CREATE TABLE t1(a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
CREATE TABLE t2(a INT PRIMARY KEY) ENGINE=InnoDB;
FLUSH TABLES;
ALTER TABLE t2 ADD COLUMN b INT;
DROP TABLE t1,t2;

View File

@@ -6,9 +6,9 @@ SET DEBUG_SYNC='dict_stats_update_persistent SIGNAL stop WAIT_FOR go';
ANALYZE TABLE t1;
connect con1, localhost, root;
SET DEBUG_SYNC='now WAIT_FOR stop';
SELECT ENGINE,SUM(DATA_LENGTH+INDEX_LENGTH),COUNT(ENGINE),SUM(DATA_LENGTH),SUM(INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
ENGINE SUM(DATA_LENGTH+INDEX_LENGTH) COUNT(ENGINE) SUM(DATA_LENGTH) SUM(INDEX_LENGTH)
InnoDB 114688 4 65536 49152
SELECT SUM(DATA_LENGTH+INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
SUM(DATA_LENGTH+INDEX_LENGTH)
SUM
SET DEBUG_SYNC='now SIGNAL go';
disconnect con1;
connection default;

View File

@@ -8,6 +8,7 @@ call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed r
call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted.");
call mtr.add_suppression("Table test/t1 is corrupted. Please drop the table and recreate\\.");
call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted");
call mtr.add_suppression("InnoDB: A long wait .* was observed for dict_sys");
--enable_query_log
let INNODB_PAGE_SIZE=`select @@innodb_page_size`;

View File

@@ -0,0 +1,16 @@
--source include/have_innodb.inc
--source include/innodb_row_format.inc
--echo #
--echo # MDEV-26577 InnoDB: Failing assertion: dict_tf2_is_valid(flags, flags2)
--echo # during ADD COLUMN
--echo #
CREATE TABLE t1(a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
CREATE TABLE t2(a INT PRIMARY KEY) ENGINE=InnoDB;
FLUSH TABLES;
--let $datadir=`select @@datadir`
--remove_file $datadir/test/t2.frm
--copy_file $datadir/test/t1.frm $datadir/test/t2.frm
ALTER TABLE t2 ADD COLUMN b INT;
DROP TABLE t1,t2;

View File

@@ -14,7 +14,8 @@ SET DEBUG_SYNC='dict_stats_update_persistent SIGNAL stop WAIT_FOR go';
--connect(con1, localhost, root)
SET DEBUG_SYNC='now WAIT_FOR stop';
SELECT ENGINE,SUM(DATA_LENGTH+INDEX_LENGTH),COUNT(ENGINE),SUM(DATA_LENGTH),SUM(INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
--replace_column 1 SUM
SELECT SUM(DATA_LENGTH+INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
SET DEBUG_SYNC='now SIGNAL go';
--disconnect con1

View File

@@ -452,9 +452,9 @@ ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
create table t1 (pk integer primary key auto_increment, fl geometry not null);
insert into t1 (fl) values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 (fl) values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 (fl) values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 (fl) values (pointfromtext('point(1,1)'));

View File

@@ -660,9 +660,9 @@ object_id ST_geometrytype(geo) ST_ISSIMPLE(GEO) ST_ASTEXT(ST_centroid(geo))
drop table t1;
create table t1 (fl geometry not null);
insert into t1 values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 values (ST_pointfromtext('point(1,1)'));

View File

@@ -661,9 +661,9 @@ object_id ST_geometrytype(geo) ST_ISSIMPLE(GEO) ST_ASTEXT(ST_centroid(geo))
drop table t1;
create table t1 (fl geometry not null);
insert into t1 values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and int for operation 'SET'
insert into t1 values (1.11);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
ERROR HY000: Illegal parameter data types geometry and decimal for operation 'SET'
insert into t1 values ("qwerty");
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 values (ST_pointfromtext('point(1,1)'));

View File

@@ -387,9 +387,9 @@ t1 where object_id=85984;
drop table t1;
create table t1 (fl geometry not null);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1.11);
--error 1416
insert into t1 values ("qwerty");

View File

@@ -380,9 +380,9 @@ t1 where object_id=85984;
drop table t1;
create table t1 (fl geometry not null);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1);
--error 1416
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
insert into t1 values (1.11);
--error 1416
insert into t1 values ("qwerty");

View File

@@ -886,5 +886,16 @@ UPDATE t1 SET pk = 0;
DROP TABLE t1;
}
if (!$skip_update)
{
--echo #
--echo # MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
--echo # ha_partition::set_auto_increment_if_higher
--echo #
eval CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=$engine PARTITION BY HASH (a) PARTITIONS 3;
REPLACE INTO t1 PARTITION (p0) VALUES (3);
DROP TABLE t1;
}
--echo ##############################################################################
}

View File

@@ -1124,4 +1124,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
INSERT INTO t1 VALUES (1,1),(2,2);
UPDATE t1 SET pk = 0;
DROP TABLE t1;
#
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
# ha_partition::set_auto_increment_if_higher
#
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='InnoDB' PARTITION BY HASH (a) PARTITIONS 3;
REPLACE INTO t1 PARTITION (p0) VALUES (3);
DROP TABLE t1;
##############################################################################

View File

@@ -1156,4 +1156,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
INSERT INTO t1 VALUES (1,1),(2,2);
UPDATE t1 SET pk = 0;
DROP TABLE t1;
#
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
# ha_partition::set_auto_increment_if_higher
#
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='Aria' PARTITION BY HASH (a) PARTITIONS 3;
REPLACE INTO t1 PARTITION (p0) VALUES (3);
DROP TABLE t1;
##############################################################################

View File

@@ -1137,4 +1137,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
INSERT INTO t1 VALUES (1,1),(2,2);
UPDATE t1 SET pk = 0;
DROP TABLE t1;
#
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
# ha_partition::set_auto_increment_if_higher
#
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='Memory' PARTITION BY HASH (a) PARTITIONS 3;
REPLACE INTO t1 PARTITION (p0) VALUES (3);
DROP TABLE t1;
##############################################################################

View File

@@ -1156,4 +1156,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
INSERT INTO t1 VALUES (1,1),(2,2);
UPDATE t1 SET pk = 0;
DROP TABLE t1;
#
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
# ha_partition::set_auto_increment_if_higher
#
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='MyISAM' PARTITION BY HASH (a) PARTITIONS 3;
REPLACE INTO t1 PARTITION (p0) VALUES (3);
DROP TABLE t1;
##############################################################################

View File

@@ -2,6 +2,26 @@ install plugin test_sql_service soname 'test_sql_service';
show status like 'test_sql_service_passed';
Variable_name Value
Test_sql_service_passed 1
set global test_sql_service_execute_sql_global= 'create table test.t1 select 1 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_local= 'insert into test.t1 select 2 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET SQL_LOG_BIN=1';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 3 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET SQL_LOG_BIN=0';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 4 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET sql_auto_is_null=1';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 5 as a, @@sql_auto_is_null';
set global test_sql_service_execute_sql_global= 'SET sql_auto_is_null=0';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 6 as a, @@sql_auto_is_null';
select * from t1 order by a;
a @@SQL_LOG_BIN
1 0
2 0
3 1
4 0
5 1
6 0
drop table t1;
SET SQL_LOG_BIN=0;
set global test_sql_service_run_test= 1;
show status like 'test_sql_service_passed';
Variable_name Value
@@ -68,3 +88,12 @@ drop table t1;
uninstall plugin test_sql_service;
Warnings:
Warning 1620 Plugin is busy and will be uninstalled on shutdown
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # insert into test.t1 select 3 as a, @@SQL_LOG_BIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */

View File

@@ -1,4 +1,5 @@
--source include/not_embedded.inc
--source include/have_log_bin.inc
if (!$TEST_SQL_SERVICE_SO) {
skip No TEST_SQL_SERVICE plugin;
@@ -11,6 +12,20 @@ source include/wait_until_count_sessions.inc;
install plugin test_sql_service soname 'test_sql_service';
show status like 'test_sql_service_passed';
set global test_sql_service_execute_sql_global= 'create table test.t1 select 1 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_local= 'insert into test.t1 select 2 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET SQL_LOG_BIN=1';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 3 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET SQL_LOG_BIN=0';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 4 as a, @@SQL_LOG_BIN';
set global test_sql_service_execute_sql_global= 'SET sql_auto_is_null=1';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 5 as a, @@sql_auto_is_null';
set global test_sql_service_execute_sql_global= 'SET sql_auto_is_null=0';
set global test_sql_service_execute_sql_global= 'insert into test.t1 select 6 as a, @@sql_auto_is_null';
select * from t1 order by a;
drop table t1;
SET SQL_LOG_BIN=0;
set global test_sql_service_run_test= 1;
show status like 'test_sql_service_passed';
@@ -58,3 +73,9 @@ drop table t1;
uninstall plugin test_sql_service;
# Check that statements were executed/binlogged in correct order.
source include/show_binlog_events.inc;
# --replace_column 2 # 5 #
# --replace_regex /xid=[0-9]+/xid=XX/ /GTID [0-9]+-[0-9]+-[0-9]+/GTID #-#-#/
# SHOW BINLOG EVENTS LIMIT 3,100;

View File

@@ -13,6 +13,5 @@
rpl_partition_archive : MDEV-5077 2013-09-27 svoj Cannot exchange partition with archive table
rpl_row_binlog_max_cache_size : MDEV-11092
rpl_row_index_choice : MDEV-11666
rpl_semi_sync_after_sync : fails after MDEV-16172
rpl_auto_increment_update_failure : disabled for now
rpl_current_user : waits for MDEV-22374 fix

View File

@@ -701,7 +701,7 @@ int prepare_resize_simple_key_cache(SIMPLE_KEY_CACHE_CB *keycache,
keycache->in_resize= 1;
/* Need to flush only if keycache is enabled. */
if (keycache->can_be_used)
if (keycache->can_be_used && keycache->disk_blocks != -1)
{
/* Start the flush phase. */
keycache->resize_in_flush= 1;

View File

@@ -1,4 +1,4 @@
SET(FILE_KEY_MANAGEMENT_PLUGIN_SOURCES file_key_management_plugin.cc parser.cc)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql)
MYSQL_ADD_PLUGIN(FILE_KEY_MANAGEMENT ${FILE_KEY_MANAGEMENT_PLUGIN_SOURCES})
MYSQL_ADD_PLUGIN(FILE_KEY_MANAGEMENT ${FILE_KEY_MANAGEMENT_PLUGIN_SOURCES} MODULE_ONLY)

View File

@@ -192,9 +192,9 @@ CREATE TABLE t1 (a INET6);
INSERT INTO t1 VALUES ('x');
ERROR 22007: Incorrect inet6 value: 'x' for column `test`.`t1`.`a` at row 1
INSERT INTO t1 VALUES (1);
ERROR 22007: Incorrect inet6 value: '1' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t1 VALUES (TIME'10:20:30');
ERROR 22007: Incorrect inet6 value: '10:20:30' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t1 VALUES (0x00);
ERROR 22007: Incorrect inet6 value: '\x00' for column `test`.`t1`.`a` at row 1
DROP TABLE t1;
@@ -820,15 +820,15 @@ DROP TABLE t1;
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (CAST('::' AS INET6));
ERROR 22007: Incorrect integer value: '::' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE);
INSERT INTO t1 VALUES (CAST('::' AS INET6));
ERROR 22007: Incorrect double value: '::' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0));
INSERT INTO t1 VALUES (CAST('::' AS INET6));
ERROR 22007: Incorrect decimal value: '::' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(64));
INSERT INTO t1 VALUES (CAST('::' AS INET6));
@@ -1606,7 +1606,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b INT);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect integer value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1614,7 +1614,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DOUBLE);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect double value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1622,7 +1622,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DECIMAL(32,0));
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect decimal value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1630,7 +1630,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b YEAR);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect integer value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types year and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1641,7 +1641,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT, b INET6);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1649,7 +1649,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE, b INET6);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1657,7 +1657,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0), b INET6);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1665,7 +1665,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a YEAR, b INET6);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '2001' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and year for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1676,7 +1676,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b TIME);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect time value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1684,7 +1684,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DATE);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect date value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types date and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1692,7 +1692,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DATETIME);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect datetime value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types datetime and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1700,7 +1700,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b TIMESTAMP NULL DEFAULT NULL);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect datetime value: 'ffff::ffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types timestamp and inet6 for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1711,7 +1711,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIME, b INET6);
INSERT INTO t1 VALUES ('00:00:00', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '00:00:00' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1719,7 +1719,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DATE, b INET6);
INSERT INTO t1 VALUES ('2001-01:01', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '2001-01-01' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and date for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1727,7 +1727,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DATETIME, b INET6);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '2001-01-01 10:20:30' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and datetime for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1735,7 +1735,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIMESTAMP, b INET6);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect inet6 value: '2001-01-01 10:20:30' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types inet6 and timestamp for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -1922,7 +1922,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b INT);
INSERT INTO t1 (a) VALUES ('::');
UPDATE t1 SET b=a;
ERROR 22007: Incorrect integer value: '::' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
SELECT * FROM t1;
a b
:: NULL
@@ -1931,7 +1931,7 @@ SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TABLE t1 (a INET6, b TIMESTAMP);
INSERT INTO t1 (a) VALUES ('::');
UPDATE t1 SET b=a;
ERROR 22007: Incorrect datetime value: '::' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types timestamp and inet6 for operation 'SET'
SELECT * FROM t1;
a b
:: 2001-01-01 10:20:30
@@ -1940,7 +1940,7 @@ SET timestamp=DEFAULT;
CREATE OR REPLACE TABLE t1 (a INET6);
INSERT INTO t1 (a) VALUES ('::');
ALTER TABLE t1 MODIFY a DATE;
ERROR 22007: Incorrect date value: '::' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types date and inet6 for operation 'SET'
DROP TABLE t1;
#
# MDEV-20818 ER_CRASHED_ON_USAGE or Assertion `length <= column->length' failed in write_block_record on temporary table
@@ -2222,8 +2222,8 @@ Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '4'
CREATE TEMPORARY TABLE t1(c INET6,d DATE);
INSERT INTO t1 VALUES(0,0);
Warnings:
Warning 1292 Incorrect inet6 value: '0' for column `test`.`t1`.`c` at row 1
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t1 VALUES('::',0);
SELECT c FROM t1 ORDER BY c;
c
::

View File

@@ -1,4 +1,3 @@
--echo #
--echo # Basic CREATE functionality, defaults, metadata
--echo #
@@ -48,9 +47,9 @@ CREATE TABLE t1 (c1 INET6 DEFAULT '');
CREATE TABLE t1 (a INET6);
--error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 VALUES ('x');
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (1);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (TIME'10:20:30');
--error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 VALUES (0x00);
@@ -447,17 +446,17 @@ DROP TABLE t1;
--echo #
CREATE TABLE t1 (a INT);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('::' AS INET6));
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('::' AS INET6));
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0));
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('::' AS INET6));
DROP TABLE t1;
@@ -1095,28 +1094,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b INT);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DOUBLE);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DECIMAL(32,0));
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b YEAR);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1128,28 +1127,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT, b INET6);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE, b INET6);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0), b INET6);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a YEAR, b INET6);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1161,28 +1160,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b TIME);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DATE);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b DATETIME);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INET6, b TIMESTAMP NULL DEFAULT NULL);
INSERT INTO t1 VALUES ('ffff::ffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1194,28 +1193,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIME, b INET6);
INSERT INTO t1 VALUES ('00:00:00', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DATE, b INET6);
INSERT INTO t1 VALUES ('2001-01:01', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DATETIME, b INET6);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a TIMESTAMP, b INET6);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1406,7 +1405,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INET6, b INT);
INSERT INTO t1 (a) VALUES ('::');
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT * FROM t1;
DROP TABLE t1;
@@ -1414,7 +1413,7 @@ DROP TABLE t1;
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TABLE t1 (a INET6, b TIMESTAMP);
INSERT INTO t1 (a) VALUES ('::');
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT * FROM t1;
DROP TABLE t1;
@@ -1422,7 +1421,7 @@ SET timestamp=DEFAULT;
CREATE OR REPLACE TABLE t1 (a INET6);
INSERT INTO t1 (a) VALUES ('::');
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
ALTER TABLE t1 MODIFY a DATE;
DROP TABLE t1;
@@ -1638,7 +1637,9 @@ DROP TABLE companies;
SET sql_mode='';
SET @@SESSION.max_sort_length=4;
CREATE TEMPORARY TABLE t1(c INET6,d DATE);
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES(0,0);
INSERT INTO t1 VALUES('::',0);
SELECT c FROM t1 ORDER BY c;
DROP TABLE t1;
SET max_sort_length=DEFAULT;

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target INET6 DEFAULT '::0', source DECIMAL(38,0) DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` inet6 DEFAULT '::',
`source` decimal(38,0) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect inet6 value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 :: 0
2 :: 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 :: 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types inet6 and decimal for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target decimal(38,0)
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` decimal(38,0) DEFAULT 0,
`source` inet6 DEFAULT '::',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1366 Incorrect decimal value: '::' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 0 ::
2 0 ::
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 ::
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types decimal and inet6 for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target inet6
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target INET6 DEFAULT '::0', source DECIMAL(38,0) DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target DECIMAL(38,0) DEFAULT 0, source INET6 DEFAULT '::0');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target INET6 DEFAULT '::0', source DOUBLE DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` inet6 DEFAULT '::',
`source` double DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect inet6 value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 :: 0
2 :: 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 :: 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types inet6 and double for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target double
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` double DEFAULT 0,
`source` inet6 DEFAULT '::',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1366 Incorrect double value: '::' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 0 ::
2 0 ::
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 ::
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types double and inet6 for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target inet6
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target INET6 DEFAULT '::0', source DOUBLE DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target DOUBLE DEFAULT 0, source INET6 DEFAULT '::0');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target INET6 DEFAULT '::0', source INT DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` inet6 DEFAULT '::',
`source` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect inet6 value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 :: 0
2 :: 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 :: 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types inet6 and int for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target int(11)
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` int(11) DEFAULT 0,
`source` inet6 DEFAULT '::',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1366 Incorrect integer value: '::' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 0 ::
2 0 ::
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 ::
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types int and inet6 for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target inet6
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target INET6 DEFAULT '::0', source INT DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target INT DEFAULT 0, source INET6 DEFAULT '::0');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target INET6 DEFAULT '::0', source TIME DEFAULT '00:00:00');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` inet6 DEFAULT '::',
`source` time DEFAULT '00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect inet6 value: '00:00:00' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 :: 00:00:00
2 :: 00:00:00
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 :: 00:00:00
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types inet6 and time for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target time
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` time DEFAULT '00:00:00',
`source` inet6 DEFAULT '::',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 00:00:00 ::
2 00:00:00 ::
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00:00:00 ::
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types time and inet6 for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target inet6
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target INET6 DEFAULT '::0', source TIME DEFAULT '00:00:00');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target TIME DEFAULT '00:00:00', source INET6 DEFAULT '::0');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target INET6 DEFAULT '::0', source INT UNSIGNED DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` inet6 DEFAULT '::',
`source` int(10) unsigned DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect inet6 value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 :: 0
2 :: 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 :: 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types inet6 and int unsigned for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target int(10) unsigned
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` int(10) unsigned DEFAULT 0,
`source` inet6 DEFAULT '::',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1366 Incorrect integer value: '::' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 0 ::
2 0 ::
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 ::
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types int unsigned and inet6 for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target inet6
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target INET6 DEFAULT '::0', source INT UNSIGNED DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target INT UNSIGNED DEFAULT 0, source INET6 DEFAULT '::0');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -40,6 +40,18 @@ public:
void Column_definition_reuse_fix_attributes(THD *thd,
Column_definition *def,
const Field *field) const override;
const Type_handler *type_handler_base() const override
{
/*
Override this method in the same way with what Type_handler_blob_json
does, to tell the server that MySQL JSON inherits aggregation behaviour
from the LONGBLOB data type.
This makes MariaDB JSON column and a MySQL JSON column compatible for
assignment, so "ALTER TABLE table_with_mysql_json FORCE" can run without
raising ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION.
*/
return &type_handler_long_blob;
}
};
Type_handler_mysql_json type_handler_mysql_json;

View File

@@ -195,9 +195,9 @@ CREATE TABLE t1 (a UUID);
INSERT INTO t1 VALUES ('x');
ERROR 22007: Incorrect uuid value: 'x' for column `test`.`t1`.`a` at row 1
INSERT INTO t1 VALUES (1);
ERROR 22007: Incorrect uuid value: '1' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t1 VALUES (TIME'10:20:30');
ERROR 22007: Incorrect uuid value: '10:20:30' for column `test`.`t1`.`a` at row 1
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t1 VALUES (0x00);
ERROR 22007: Incorrect uuid value: '\x00' for column `test`.`t1`.`a` at row 1
DROP TABLE t1;
@@ -1931,15 +1931,15 @@ DROP TABLE t1;
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
ERROR 01000: Data truncated for column 'a' at row 1
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE);
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
ERROR 01000: Data truncated for column 'a' at row 1
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0));
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
ERROR 01000: Data truncated for column 'a' at row 1
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(64));
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
@@ -2762,7 +2762,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b INT);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect integer value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2770,7 +2770,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DOUBLE);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect double value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2778,7 +2778,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DECIMAL(32,0));
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect decimal value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2786,7 +2786,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b YEAR);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect integer value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types year and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2797,7 +2797,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT, b UUID);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2805,7 +2805,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE, b UUID);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2813,7 +2813,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0), b UUID);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '1' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2821,7 +2821,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a YEAR, b UUID);
INSERT INTO t1 VALUES (1, NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '2001' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and year for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2832,7 +2832,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b TIME);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect time value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2840,7 +2840,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DATE);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect date value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types date and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2848,7 +2848,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DATETIME);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect datetime value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types datetime and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2856,7 +2856,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b TIMESTAMP NULL DEFAULT NULL);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect datetime value: 'ffffffff-ffff-ffff-ffff-ffffffffffff' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types timestamp and uuid for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2867,7 +2867,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIME, b UUID);
INSERT INTO t1 VALUES ('00:00:00', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '00:00:00' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2875,7 +2875,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DATE, b UUID);
INSERT INTO t1 VALUES ('2001-01:01', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '2001-01-01' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and date for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2883,7 +2883,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a DATETIME, b UUID);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '2001-01-01 10:20:30' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and datetime for operation 'SET'
SELECT b FROM t1;
b
NULL
@@ -2891,7 +2891,7 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIMESTAMP, b UUID);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
UPDATE t1 SET b=a;
ERROR 22007: Incorrect uuid value: '2001-01-01 10:20:30' for column `test`.`t1`.`b` at row 1
ERROR HY000: Illegal parameter data types uuid and timestamp for operation 'SET'
SELECT b FROM t1;
b
NULL

View File

@@ -51,9 +51,9 @@ CREATE TABLE t1 (c1 UUID DEFAULT '');
CREATE TABLE t1 (a UUID);
--error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 VALUES ('x');
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (1);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (TIME'10:20:30');
--error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 VALUES (0x00);
@@ -542,17 +542,17 @@ DROP TABLE t1;
--echo #
CREATE TABLE t1 (a INT);
--error WARN_DATA_TRUNCATED
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE);
--error WARN_DATA_TRUNCATED
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0));
--error WARN_DATA_TRUNCATED
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
INSERT INTO t1 VALUES (CAST('00000000-0000-0000-0000-000000000000' AS UUID));
DROP TABLE t1;
@@ -1250,28 +1250,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b INT);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DOUBLE);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DECIMAL(32,0));
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b YEAR);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1283,28 +1283,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT, b UUID);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DOUBLE, b UUID);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DECIMAL(32,0), b UUID);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a YEAR, b UUID);
INSERT INTO t1 VALUES (1, NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1316,28 +1316,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a UUID, b TIME);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DATE);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b DATETIME);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a UUID, b TIMESTAMP NULL DEFAULT NULL);
INSERT INTO t1 VALUES ('ffffffff-ffff-ffff-ffff-ffffffffffff', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
@@ -1349,28 +1349,28 @@ DROP TABLE t1;
CREATE TABLE t1 (a TIME, b UUID);
INSERT INTO t1 VALUES ('00:00:00', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DATE, b UUID);
INSERT INTO t1 VALUES ('2001-01:01', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a DATETIME, b UUID);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a TIMESTAMP, b UUID);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', NULL);
--error ER_TRUNCATED_WRONG_VALUE
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
SELECT b FROM t1;
DROP TABLE t1;

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from UUID UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source DECIMAL(38,0) DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
`source` decimal(38,0) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect uuid value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
2 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types uuid and decimal for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target decimal(38,0)
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` decimal(38,0) DEFAULT 0,
`source` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
2 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types decimal and uuid for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target uuid
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from UUID UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source DECIMAL(38,0) DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target DECIMAL(38,0) DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source DOUBLE DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
`source` double DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect uuid value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
2 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types uuid and double for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target double
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` double DEFAULT 0,
`source` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
2 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types double and uuid for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target uuid
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source DOUBLE DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target DOUBLE DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source INT DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
`source` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect uuid value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
2 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types uuid and int for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target int(11)
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` int(11) DEFAULT 0,
`source` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
2 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types int and uuid for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target uuid
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source INT DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target INT DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source TIME DEFAULT '00:00:00');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
`source` time DEFAULT '00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect uuid value: '00:00:00' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 00:00:00
2 00000000-0000-0000-0000-000000000000 00:00:00
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 00:00:00
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types uuid and time for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target time
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` time DEFAULT '00:00:00',
`source` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 00:00:00 00000000-0000-0000-0000-000000000000
2 00:00:00 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00:00:00 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types time and uuid for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target uuid
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source TIME DEFAULT '00:00:00');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target TIME DEFAULT '00:00:00', source UUID DEFAULT '00000000-0000-0000-0000-000000000000');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -0,0 +1,343 @@
#
# Start of 10.7 tests
#
#
# MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
#
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source INT UNSIGNED DEFAULT 0);
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
`source` int(10) unsigned DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1292 Incorrect uuid value: '0' for column `test`.`t3`.`target` at row 2
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
2 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 00000000-0000-0000-0000-000000000000 0
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types uuid and int unsigned for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target int(10) unsigned
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');
# Start of type_store_assignment_incompatible.inc
SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='source'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='target'
AND TABLE_NAME='t1'
AND TABLE_SCHEMA='test');
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`target` int(10) unsigned DEFAULT 0,
`source` uuid DEFAULT '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 VALUES
(1,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
DROP TABLE t3;
SET sql_mode='';
CREATE TABLE t3 LIKE t2;
ALTER TABLE t3 ENGINE=MyISAM;
EXECUTE IMMEDIATE
CONCAT('CREATE VIEW v3 AS SELECT id,',
IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
' FROM t3');
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Warnings:
Warning 1265 Data truncated for column 'target' at row 2
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
2 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=STRICT_ALL_TABLES;
INSERT INTO t3 VALUES
(1,
(SELECT target FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1)),
(2,
(SELECT source FROM t2 ORDER BY id LIMIT 1),
(SELECT source FROM t2 ORDER BY id LIMIT 1));
Got one of the listed errors
SELECT * FROM v3;
id target source
1 0 00000000-0000-0000-0000-000000000000
TRUNCATE TABLE t3;
SET sql_mode=DEFAULT;
DROP TABLE t3;
DROP VIEW v3;
CREATE TABLE t3 LIKE t2;
INSERT INTO t3 SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
UPDATE t3 SET target=source;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
ERROR HY000: Illegal parameter data types int unsigned and uuid for operation 'SET'
SET @alter=CONCAT('ALTER TABLE t3 MODIFY target ', @source_type);
SELECT @alter;
@alter
ALTER TABLE t3 MODIFY target uuid
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;
#
# End of 10.7 tests
#

View File

@@ -0,0 +1,19 @@
--echo #
--echo # Start of 10.7 tests
--echo #
--echo #
--echo # MDEV-28918 Implicit cast from INET6 UNSIGNED works differently on UPDATE vs ALTER
--echo #
CREATE TABLE t1 (target UUID DEFAULT '00000000-0000-0000-0000-000000000000', source INT UNSIGNED DEFAULT 0);
--source include/type_mix_incompatible.inc
DROP TABLE t1;
CREATE TABLE t1 (target INT UNSIGNED DEFAULT 0, source UUID DEFAULT '00000000-0000-0000-0000-000000000000');
--source include/type_mix_incompatible.inc
DROP TABLE t1;
--echo #
--echo # End of 10.7 tests
--echo #

View File

@@ -72,7 +72,7 @@ then
# (c) ERROR file, in case flush tables operation failed.
while [ ! -r "$FLUSHED" ] && \
! grep -q -F ':' -- "$FLUSHED" >/dev/null 2>&1
! grep -q -F ':' -- "$FLUSHED"
do
# Check whether ERROR file exists.
if [ -f "$ERROR" ]; then
@@ -105,4 +105,5 @@ else # joiner
fi
wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE"
exit 0

View File

@@ -80,6 +80,7 @@ to_minuses()
}
WSREP_SST_OPT_BYPASS=0
WSREP_SST_OPT_PROGRESS=0
WSREP_SST_OPT_BINLOG=""
WSREP_SST_OPT_BINLOG_INDEX=""
WSREP_SST_OPT_LOG_BASENAME=""
@@ -187,6 +188,10 @@ case "$1" in
'--bypass')
readonly WSREP_SST_OPT_BYPASS=1
;;
'--progress')
readonly WSREP_SST_OPT_PROGRESS=$(( $2 ))
shift
;;
'--datadir')
# Let's remove the trailing slash:
readonly WSREP_SST_OPT_DATA=$(trim_dir "$2")
@@ -246,11 +251,11 @@ case "$1" in
shift
;;
'--local-port')
readonly WSREP_SST_OPT_LPORT="$2"
readonly WSREP_SST_OPT_LPORT=$(( $2 ))
shift
;;
'--parent')
readonly WSREP_SST_OPT_PARENT="$2"
readonly WSREP_SST_OPT_PARENT=$(( $2 ))
shift
;;
'--password')
@@ -258,7 +263,7 @@ case "$1" in
shift
;;
'--port')
readonly WSREP_SST_OPT_PORT="$2"
readonly WSREP_SST_OPT_PORT=$(( $2 ))
shift
;;
'--role')
@@ -531,6 +536,8 @@ else
readonly WSREP_SST_OPT_ROLE='donor'
fi
readonly WSREP_SST_OPT_PROGRESS
# The same argument can be present on the command line several
# times, in this case we must take its last value:
if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \
@@ -1180,7 +1187,6 @@ check_port()
check_for_dhparams()
{
ssl_dhparams="$DATA/dhparams.pem"
if [ ! -r "$ssl_dhparams" ]; then
get_openssl
if [ -n "$OPENSSL_BINARY" ]; then
wsrep_log_info \
@@ -1188,9 +1194,10 @@ check_for_dhparams()
local bug=0
local errmsg
errmsg=$("$OPENSSL_BINARY" \
dhparam -out "$ssl_dhparams" 2048 2>&1) || bug=1
dhparam -out "$ssl_dhparams" -dsaparam 2048 2>&1) || bug=1
if [ $bug -ne 0 ]; then
wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam -out \"$ssl_dhparams\" 2048"
wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam"\
"-out \"$ssl_dhparams\" -dsaparam 2048"
wsrep_log_info "output: $errmsg"
wsrep_log_error "******** ERROR *****************************************"
wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. *"
@@ -1202,7 +1209,6 @@ check_for_dhparams()
# the default parameters:
ssl_dhparams=""
fi
fi
}
#
@@ -1303,29 +1309,39 @@ verify_cert_matches_key()
#
check_for_version()
{
y1="${1#*.}"
local y1="${1#*.}"
[ "$y1" = "$1" ] && y1=""
z1=${y1#*.}
local z1="${y1#*.}"
[ "$z1" = "$y1" ] && z1=""
x1="${1%%.*}"
local w1="${z1#*.}"
[ "$w1" = "$z1" ] && w1=""
local x1="${1%%.*}"
y1="${y1%%.*}"
z1="${z1%%.*}"
w1="${w1%%.*}"
[ -z "$y1" ] && y1=0
[ -z "$z1" ] && z1=0
y2="${2#*.}"
[ -z "$w1" ] && w1=0
local y2="${2#*.}"
[ "$y2" = "$2" ] && y2=""
z2="${y2#*.}"
local z2="${y2#*.}"
[ "$z2" = "$y2" ] && z2=""
x2="${2%%.*}"
local w2="${z2#*.}"
[ "$w2" = "$z2" ] && w2=""
local x2="${2%%.*}"
y2="${y2%%.*}"
z2="${z2%%.*}"
w2="${w2%%.*}"
[ -z "$y2" ] && y2=0
[ -z "$z2" ] && z2=0
[ -z "$w2" ] && w2=0
[ $x1 -lt $x2 ] && return 1
[ $x1 -gt $x2 ] && return 0
[ $y1 -lt $y2 ] && return 1
[ $y1 -gt $y2 ] && return 0
[ $z1 -lt $z2 ] && return 1
[ $z1 -gt $z2 ] && return 0
[ $w1 -lt $w2 ] && return 1
return 0
}

View File

@@ -86,15 +86,12 @@ encrypt_threads=""
encrypt_chunk=""
readonly SECRET_TAG='secret'
readonly TOTAL_TAG='total'
# Required for backup locks
# For backup locks it is 1 sent by joiner
sst_ver=1
if [ -n "$(commandex pv)" ] && pv --help | grep -qw -F -- '-F'; then
pvopts="$pvopts $pvformat"
fi
pcmd="pv $pvopts"
declare -a RC
BACKUP_BIN=$(commandex 'mariabackup')
@@ -121,18 +118,19 @@ timeit()
if [ $ttime -eq 1 ]; then
x1=$(date +%s)
fi
wsrep_log_info "Evaluating $cmd"
eval "$cmd"
eval $cmd
extcode=$?
if [ $ttime -eq 1 ]; then
x2=$(date +%s)
took=$(( x2-x1 ))
wsrep_log_info "NOTE: $stage took $took seconds"
totime=$(( totime+took ))
else
wsrep_log_info "Evaluating $cmd"
eval "$cmd"
extcode=$?
fi
return $extcode
}
@@ -220,6 +218,21 @@ get_keys()
stagemsg="$stagemsg-XB-Encrypted"
}
get_socat_ver()
{
[ -n "${SOCAT_VERSION+x}" ] && return
# Determine the socat version
SOCAT_VERSION=$(socat -V 2>&1 | \
grep -m1 -owE '[0-9]+(\.[0-9]+)+' | \
head -n1 || :)
if [ -z "$SOCAT_VERSION" ]; then
wsrep_log_error "******** FATAL ERROR ******************"
wsrep_log_error "* Cannot determine the socat version. *"
wsrep_log_error "***************************************"
exit 2
fi
}
get_transfer()
{
if [ "$tfmt" = 'nc' ]; then
@@ -285,7 +298,7 @@ get_transfer()
# If sockopt contains 'pf=ip6' somewhere in the middle,
# this will not interfere with socat, but exclude the trivial
# cases when sockopt contains 'pf=ip6' as prefix or suffix:
if [ "$sockopt" = "${sockopt#,pf=ip6}" -a \
if [ "$sockopt" = "${sockopt#,pf=ip6,}" -a \
"$sockopt" = "${sockopt%,pf=ip6}" ]
then
sockopt=",pf=ip6$sockopt"
@@ -312,22 +325,25 @@ get_transfer()
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
tcmd="socat -u openssl-listen:$SST_PORT,reuseaddr"
else
tcmd="socat -u stdio openssl-connect:$REMOTEIP:$SST_PORT"
local addr="$REMOTEIP:$SST_PORT"
tcmd="socat -u stdio openssl-connect:$addr"
action='Encrypting'
get_socat_ver
if ! check_for_version "$SOCAT_VERSION" '1.7.4.1'; then
if check_for_version "$SOCAT_VERSION" '1.7.3.3'; then
# Workaround for a bug known as 'Red Hat issue 1870279'
# (connection reset by peer) in socat versions 1.7.3.3
# to 1.7.4.0:
tcmd="socat stdio openssl-connect:$addr,linger=10"
wsrep_log_info \
"Use workaround for socat $SOCAT_VERSION bug"
fi
fi
fi
if [ "${sockopt#*,dhparam=}" != "$sockopt" ]; then
if [ "${sockopt#*,dhparam=}" = "$sockopt" ]; then
if [ -z "$ssl_dhparams" ]; then
# Determine the socat version
SOCAT_VERSION=$(socat -V 2>&1 | \
grep -m1 -owE '[0-9]+(\.[0-9]+)+' | \
head -n1 || :)
if [ -z "$SOCAT_VERSION" ]; then
wsrep_log_error "******** FATAL ERROR ******************"
wsrep_log_error "* Cannot determine the socat version. *"
wsrep_log_error "***************************************"
exit 2
fi
get_socat_ver
if ! check_for_version "$SOCAT_VERSION" '1.7.3'; then
# socat versions < 1.7.3 will have 512-bit dhparams (too small)
# so create 2048-bit dhparams and send that as a parameter:
@@ -419,44 +435,90 @@ get_transfer()
get_footprint()
{
cd "$DATA_DIR"
payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \
local payload_data=$(find . \
-regex '.*undo[0-9]+$\|.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \
-type f -print0 | du --files0-from=- --block-size=1 -c -s | \
awk 'END { print $1 }')
local payload_undo=0
if [ -n "$ib_undo_dir" -a -d "$ib_undo_dir" ]; then
cd "$ib_undo_dir"
payload_undo=$(find . -regex '.*undo[0-9]+$' -type f -print0 | \
du --files0-from=- --block-size=1 -c -s | awk 'END { print $1 }')
fi
cd "$OLD_PWD"
wsrep_log_info \
"SST footprint estimate: data: $payload_data, undo: $payload_undo"
payload=$(( payload_data + payload_undo ))
if [ "$compress" != 'none' ]; then
# QuickLZ has around 50% compression ratio
# When compression/compaction used, the progress is only an approximate.
payload=$(( payload*1/2 ))
fi
cd "$OLD_PWD"
pcmd="$pcmd -s $payload"
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
# report to parent the total footprint of the SST
echo "$TOTAL_TAG $payload"
fi
adjust_progress
}
adjust_progress()
{
if [ -z "$(commandex pv)" ]; then
wsrep_log_error "pv not found in path: $PATH"
wsrep_log_error "Disabling all progress/rate-limiting"
pcmd=""
rlimit=""
progress=""
return
rcmd=""
[ "$progress" = 'none' ] && return
rlimitopts=""
if [ -n "$rlimit" -a "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
wsrep_log_info "Rate-limiting SST to $rlimit"
rlimitopts=" -L $rlimit"
fi
if [ -n "$progress" -a "$progress" != '1' ]; then
if [ -n "$progress" ]; then
# Backward compatibility: user-configured progress output
pcmd="pv $pvopts$rlimitopts"
if [ -z "${PV_FORMAT+x}" ]; then
PV_FORMAT=0
pv --help | grep -qw -F -- '-F' && PV_FORMAT=1
fi
if [ $PV_FORMAT -eq 1 ]; then
pcmd="$pcmd $pvformat"
fi
if [ $payload -ne 0 ]; then
pcmd="$pcmd -s $payload"
fi
if [ "$progress" != '1' ]; then
if [ -e "$progress" ]; then
pcmd="$pcmd 2>>'$progress'"
else
pcmd="$pcmd 2>'$progress'"
fi
elif [ -z "$progress" -a -n "$rlimit" ]; then
# When rlimit is non-zero
pcmd='pv -q'
fi
if [ -n "$rlimit" -a "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
wsrep_log_info "Rate-limiting SST to $rlimit"
pcmd="$pcmd -L \$rlimit"
elif [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
# Default progress output parseable by parent
pcmd="pv -f -i 1 -n -b$rlimitopts"
# read progress data, add tag and post to stdout
# for the parent
rcmd="stdbuf -oL tr '\r' '\n' | xargs -n1 echo complete"
elif [ -n "$rlimitopts" ]; then
# Rate-limiting only, when rlimit is non-zero
pcmd="pv -q$rlimitopts"
fi
}
@@ -512,6 +574,10 @@ read_cnf()
"CERT='$tpem', KEY='$tkey', MODE='$tmode'," \
"encrypt='$encrypt'"
if [ $encrypt -ge 2 ]; then
ssl_dhparams=$(parse_cnf "$encgroups" 'ssl-dhparams')
fi
sockopt=$(parse_cnf sst sockopt "")
progress=$(parse_cnf sst progress "")
ttime=$(parse_cnf sst time 0)
@@ -765,13 +831,10 @@ recv_joiner()
wsrep_log_info $(ls -l "$dir/"*)
exit 32
fi
# Select the "secret" tag whose value does not start
# with a slash symbol. All new tags must to start with
# the space and the slash symbol after the word "secret" -
# to be removed by older versions of the SST scripts:
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]+[^/]" \
-- "$MAGIC_FILE" || :)
if [ -n "$MY_SECRET" ]; then
# Check donor supplied secret:
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]" "$MAGIC_FILE" || :)
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
if [ "$SECRET" != "$MY_SECRET" ]; then
wsrep_log_error "Donor does not know my secret!"
@@ -779,6 +842,19 @@ recv_joiner()
exit 32
fi
fi
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
# check total SST footprint
payload=$(grep -m1 -E "^$TOTAL_TAG[[:space:]]" "$MAGIC_FILE" || :)
if [ -n "$payload" ]; then
payload=$(trim_string "${payload#$TOTAL_TAG}")
if [ $payload -ge 0 ]; then
# report to parent
echo "$TOTAL_TAG $payload"
fi
fi
fi
fi
}
send_donor()
@@ -825,6 +901,14 @@ monitor_process()
read_cnf
setup_ports
if [ "$progress" = 'none' ]; then
wsrep_log_info "All progress/rate-limiting disabled by configuration"
elif [ -z "$(commandex pv)" ]; then
wsrep_log_info "Progress reporting tool pv not found in path: $PATH"
wsrep_log_info "Disabling all progress/rate-limiting"
progress='none'
fi
if "$BACKUP_BIN" --help 2>/dev/null | grep -qw -F -- '--version-check'; then
disver=' --no-version-check'
fi
@@ -980,6 +1064,14 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
check_extra
if [ -n "$progress" -o $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
wsrep_log_info "Estimating total transfer size"
get_footprint
wsrep_log_info "To transfer: $payload"
else
adjust_progress
fi
wsrep_log_info "Streaming GTID file before SST"
# Store donor's wsrep GTID (state ID) and wsrep_gtid_domain_id
@@ -991,6 +1083,11 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
echo "$SECRET_TAG $WSREP_SST_OPT_REMOTE_PSWD" >> "$MAGIC_FILE"
fi
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
# Tell joiner what to expect:
echo "$TOTAL_TAG $payload" >> "$MAGIC_FILE"
fi
ttcmd="$tcmd"
if [ -n "$scomp" ]; then
@@ -1007,13 +1104,15 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
# Restore the transport commmand to its original state
tcmd="$ttcmd"
if [ -n "$progress" ]; then
get_footprint
tcmd="$pcmd | $tcmd"
elif [ -n "$rlimit" ]; then
adjust_progress
if [ -n "$pcmd" ]; then
if [ -n "$rcmd" ]; then
# redirect pv stderr to rcmd for tagging and output to parent
tcmd="{ $pcmd 2>&3 | $tcmd; } 3>&1 | $rcmd"
else
# use user-configured pv output
tcmd="$pcmd | $tcmd"
fi
fi
wsrep_log_info "Sleeping before data transfer for SST"
sleep 10
@@ -1214,13 +1313,6 @@ else # joiner
MY_SECRET="" # for check down in recv_joiner()
fi
trap cleanup_at_exit EXIT
if [ -n "$progress" ]; then
adjust_progress
tcmd="$tcmd | $pcmd"
fi
get_keys
if [ $encrypt -eq 1 ]; then
strmcmd="$ecmd | $strmcmd"
@@ -1232,6 +1324,8 @@ else # joiner
check_sockets_utils
trap cleanup_at_exit EXIT
STATDIR="$(mktemp -d)"
MAGIC_FILE="$STATDIR/$INFO_FILE"
@@ -1245,6 +1339,17 @@ else # joiner
if [ ! -r "$STATDIR/$IST_FILE" ]; then
adjust_progress
if [ -n "$pcmd" ]; then
if [ -n "$rcmd" ]; then
# redirect pv stderr to rcmd for tagging and output to parent
strmcmd="{ $pcmd 2>&3 | $strmcmd; } 3>&1 | $rcmd"
else
# use user-configured pv output
strmcmd="$pcmd | $strmcmd"
fi
fi
if [ -d "$DATA/.sst" ]; then
wsrep_log_info \
"WARNING: Stale temporary SST directory:" \
@@ -1265,13 +1370,13 @@ else # joiner
cd "$DATA"
wsrep_log_info "Cleaning the old binary logs"
# If there is a file with binlogs state, delete it:
[ -f "$binlog_base.state" ] && rm -f "$binlog_base.state" >&2
[ -f "$binlog_base.state" ] && rm "$binlog_base.state" >&2
# Clean up the old binlog files and index:
if [ -f "$binlog_index" ]; then
while read bin_file || [ -n "$bin_file" ]; do
rm -f "$bin_file" >&2 || :
done < "$binlog_index"
rm -f "$binlog_index" >&2
rm "$binlog_index" >&2
fi
if [ -n "$binlog_dir" -a "$binlog_dir" != '.' -a \
-d "$binlog_dir" ]
@@ -1335,16 +1440,14 @@ else # joiner
dcmd="xargs -n 2 qpress -dT$nproc"
if [ -n "$progress" ] && \
if [ -n "$progress" -a "$progress" != 'none' ] && \
pv --help | grep -qw -F -- '--line-mode'
then
count=$(find "$DATA" -type f -name '*.qp' | wc -l)
count=$(find "$DATA" -maxdepth 1 -type f -name '*.qp' | wc -l)
count=$(( count*2 ))
pvopts="-f -s $count -l -N Decompression"
if pv --help | grep -qw -F -- '-F'; then
pvopts="$pvopts -F '%N => Rate:%r Elapsed:%t %e Progress: [%b/$count]'"
fi
pcmd="pv $pvopts"
pvopts='-f -l -N Decompression'
pvformat="-F '%N => Rate:%r Elapsed:%t %e Progress: [%b/$count]'"
payload=$count
adjust_progress
dcmd="$pcmd | $dcmd"
fi
@@ -1442,7 +1545,7 @@ else # joiner
fi
# Remove special tags from the magic file, and from the output:
coords=$(grep -v -E "^$SECRET_TAG[[:space:]]" -- "$MAGIC_FILE")
coords=$(head -n1 "$MAGIC_FILE")
wsrep_log_info "Galera co-ords from recovery: $coords"
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id

View File

@@ -65,21 +65,21 @@ cleanup_joiner()
if [ $failure -eq 0 ]; then
if cleanup_pid $RSYNC_REAL_PID "$RSYNC_PID" "$RSYNC_CONF"; then
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE"
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE" || :
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE" || :
else
wsrep_log_warning "rsync cleanup failed."
fi
fi
wsrep_log_info "Joiner cleanup done."
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
wsrep_cleanup_progress_file
fi
[ -f "$SST_PID" ] && rm -f "$SST_PID" || :
wsrep_log_info "Joiner cleanup done."
exit $estatus
}
@@ -318,7 +318,7 @@ if [ -n "$SSLMODE" -a "$SSLMODE" != 'DISABLED' ]; then
fi
readonly SECRET_TAG='secret'
readonly BYPASS_TAG='secret /bypass'
readonly BYPASS_TAG='bypass'
SST_PID="$WSREP_SST_OPT_DATA/wsrep_sst.pid"
@@ -371,10 +371,11 @@ done
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE"
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
RC=0
if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
if [ -n "$STUNNEL" ]
then
if [ -n "$STUNNEL" ]; then
cat << EOF > "$STUNNEL_CONF"
key = $SSTKEY
cert = $SSTCERT
@@ -392,8 +393,6 @@ ${CHECK_OPT_LOCAL}
EOF
fi
RC=0
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
FLUSHED="$WSREP_SST_OPT_DATA/tables_flushed"
@@ -410,19 +409,19 @@ EOF
# (c) ERROR file, in case flush tables operation failed.
while [ ! -r "$FLUSHED" ] && \
! grep -q -F ':' -- "$FLUSHED" 2>/dev/null
! grep -q -F ':' -- "$FLUSHED"
do
# Check whether ERROR file exists.
if [ -f "$ERROR" ]; then
# Flush tables operation failed.
rm -f "$ERROR"
rm "$ERROR"
exit 255
fi
sleep 0.2
done
STATE=$(cat "$FLUSHED")
rm -f "$FLUSHED"
rm "$FLUSHED"
sync
@@ -629,6 +628,8 @@ FILTER="-f '- /lost+found'
wsrep_log_info "Transfer of data done"
[ -f "$BINLOG_TAR_FILE" ] && rm "$BINLOG_TAR_FILE"
else # BYPASS
wsrep_log_info "Bypassing state dump."
@@ -657,6 +658,8 @@ FILTER="-f '- /lost+found'
--archive --quiet --checksum "$MAGIC_FILE" \
"rsync://$WSREP_SST_OPT_ADDR" >&2 || RC=$?
rm "$MAGIC_FILE"
if [ $RC -ne 0 ]; then
wsrep_log_error "rsync $MAGIC_FILE returned code $RC:"
exit 255 # unknown error
@@ -665,8 +668,8 @@ FILTER="-f '- /lost+found'
echo "done $STATE"
if [ -n "$STUNNEL" ]; then
[ -f "$STUNNEL_CONF" ] && rm -f "$STUNNEL_CONF"
[ -f "$STUNNEL_PID" ] && rm -f "$STUNNEL_PID"
rm "$STUNNEL_CONF"
[ -f "$STUNNEL_PID" ] && rm "$STUNNEL_PID"
fi
else # joiner
@@ -704,8 +707,7 @@ $SILENT
EOF
# If the IP is local, listen only on it:
if is_local_ip "$RSYNC_ADDR_UNESCAPED"
then
if is_local_ip "$RSYNC_ADDR_UNESCAPED"; then
RSYNC_EXTRA_ARGS="--address $RSYNC_ADDR_UNESCAPED"
STUNNEL_ACCEPT="$RSYNC_ADDR_UNESCAPED:$RSYNC_PORT"
else
@@ -826,13 +828,8 @@ EOF
fi
if [ -n "$MY_SECRET" ]; then
# Select the "secret" tag whose value does not start
# with a slash symbol. All new tags must to start with
# the space and the slash symbol after the word "secret" -
# to be removed by older versions of the SST scripts:
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]+[^/]" \
-- "$MAGIC_FILE" || :)
# Check donor supplied secret:
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]" "$MAGIC_FILE" || :)
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
if [ "$SECRET" != "$MY_SECRET" ]; then
wsrep_log_error "Donor does not know my secret!"
@@ -842,7 +839,7 @@ EOF
fi
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
if grep -m1 -qE "^$BYPASS_TAG([[:space:]]+.*)?\$" -- "$MAGIC_FILE"; then
if grep -m1 -qE "^$BYPASS_TAG([[:space:]]+.*)?\$" "$MAGIC_FILE"; then
readonly WSREP_SST_OPT_BYPASS=1
readonly WSREP_TRANSFER_TYPE='IST'
fi
@@ -850,10 +847,10 @@ EOF
binlog_tar_present=0
if [ -f "$BINLOG_TAR_FILE" ]; then
binlog_tar_present=1
if [ $WSREP_SST_OPT_BYPASS -ne 0 ]; then
wsrep_log_warning "tar with binlogs transferred in the IST mode"
fi
binlog_tar_present=1
fi
if [ $WSREP_SST_OPT_BYPASS -eq 0 -a -n "$WSREP_SST_OPT_BINLOG" ]; then
@@ -867,7 +864,7 @@ EOF
while read bin_file || [ -n "$bin_file" ]; do
rm -f "$bin_file" || :
done < "$binlog_index"
rm -f "$binlog_index"
rm "$binlog_index"
fi
binlog_cd=0
# Change the directory to binlog base (if possible):
@@ -902,7 +899,6 @@ EOF
fi
# Extracting binlog files:
wsrep_log_info "Extracting binlog files:"
RC=0
if tar --version | grep -qw -E '^bsdtar'; then
tar -tf "$BINLOG_TAR_FILE" > "$tmpfile" && \
tar -xvf "$BINLOG_TAR_FILE" > /dev/null || RC=$?
@@ -912,7 +908,7 @@ EOF
fi
if [ $RC -ne 0 ]; then
wsrep_log_error "Error unpacking tar file with binlog files"
rm -f "$tmpfile"
rm "$tmpfile"
exit 32
fi
# Rebuild binlog index:
@@ -920,18 +916,16 @@ EOF
while read bin_file || [ -n "$bin_file" ]; do
echo "$binlog_dir${binlog_dir:+/}$bin_file" >> "$binlog_index"
done < "$tmpfile"
rm -f "$tmpfile"
rm "$tmpfile"
cd "$OLD_PWD"
fi
fi
# Remove special tags from the magic file, and from the output:
coords=$(grep -v -E "^$SECRET_TAG[[:space:]]" -- "$MAGIC_FILE")
coords=$(head -n1 "$MAGIC_FILE")
wsrep_log_info "Galera co-ords from recovery: $coords"
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id
fi
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE"
exit 0

View File

@@ -964,6 +964,32 @@ Type_handler::aggregate_for_result_traditional(const Type_handler *a,
}
bool Field::check_assignability_from(const Type_handler *from) const
{
/*
Using type_handler_for_item_field() here to get the data type handler
on both sides. This is needed to make sure aggregation for Field
works the same way with how Item_field aggregates for UNION or CASE,
so these statements:
SELECT a FROM t1 UNION SELECT b FROM t1; // Item_field vs Item_field
UPDATE t1 SET a=b; // Field vs Item_field
either both return "Illegal parameter data types" or both pass
the data type compatibility test.
For MariaDB standard data types, using type_handler_for_item_field()
turns ENUM/SET into just CHAR.
*/
Type_handler_hybrid_field_type th(type_handler()->
type_handler_for_item_field());
if (th.aggregate_for_result(from->type_handler_for_item_field()))
{
my_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, MYF(0),
type_handler()->name().ptr(), from->name().ptr(), "SET");
return true;
}
return false;
}
/*
Test if the given string contains important data:
not spaces for character string,
@@ -1445,7 +1471,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;
/*

View File

@@ -905,6 +905,12 @@ public:
bool is_unsigned() const { return flags & UNSIGNED_FLAG; }
bool check_assignability_from(const Type_handler *from) const;
bool check_assignability_from(const Field *from) const
{
return check_assignability_from(from->type_handler());
}
/**
Convenience definition of a copy function returned by
Field::get_copy_func()

View File

@@ -3801,7 +3801,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
}
else
{
check_insert_autoincrement();
check_insert_or_replace_autoincrement();
if (unlikely((error= open_read_partitions(name_buff, sizeof(name_buff)))))
goto err_handler;
m_num_locks= m_file_sample->lock_count();
@@ -8851,7 +8851,7 @@ int ha_partition::change_partitions_to_open(List<String> *partition_names)
return 0;
}
check_insert_autoincrement();
check_insert_or_replace_autoincrement();
if (bitmap_cmp(&m_opened_partitions, &m_part_info->read_partitions) != 0)
return 0;

View File

@@ -1405,15 +1405,16 @@ private:
unlock_auto_increment();
}
void check_insert_autoincrement()
void check_insert_or_replace_autoincrement()
{
/*
If we INSERT into the table having the AUTO_INCREMENT column,
If we INSERT or REPLACE into the table having the AUTO_INCREMENT column,
we have to read all partitions for the next autoincrement value
unless we already did it.
*/
if (!part_share->auto_inc_initialized &&
ha_thd()->lex->sql_command == SQLCOM_INSERT &&
(ha_thd()->lex->sql_command == SQLCOM_INSERT ||
ha_thd()->lex->sql_command == SQLCOM_REPLACE) &&
table->found_next_number_field)
bitmap_set_all(&m_part_info->read_partitions);
}

View File

@@ -4509,6 +4509,22 @@ bool Item_param::is_evaluable_expression() const
}
bool Item_param::check_assignability_to(const Field *to) const
{
switch (state) {
case SHORT_DATA_VALUE:
case LONG_DATA_VALUE:
case NULL_VALUE:
return to->check_assignability_from(type_handler());
case NO_VALUE:
case IGNORE_VALUE:
case DEFAULT_VALUE:
break;
}
return false;
}
bool Item_param::can_return_value() const
{
// There's no "default". See comments in Item_param::save_in_field().
@@ -9876,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

View File

@@ -1838,6 +1838,16 @@ public:
*/
virtual bool is_evaluable_expression() const { return true; }
virtual bool check_assignability_to(const Field *to) const
{
/*
"this" must be neither DEFAULT/IGNORE,
nor Item_param bound to DEFAULT/IGNORE.
*/
DBUG_ASSERT(is_evaluable_expression());
return to->check_assignability_from(type_handler());
}
/**
* Check whether the item is a parameter ('?') of stored routine.
* Default implementation returns false. Method is overridden in the class
@@ -4091,6 +4101,7 @@ class Item_param :public Item_basic_value,
const String *value_query_val_str(THD *thd, String* str) const;
Item *value_clone_item(THD *thd);
bool is_evaluable_expression() const override;
bool check_assignability_to(const Field *field) const override;
bool can_return_value() const;
public:
@@ -6771,6 +6782,10 @@ public:
{
str->append(STRING_WITH_LEN("default"));
}
bool check_assignability_to(const Field *to) const override
{
return false;
}
int save_in_field(Field *field_arg, bool) override
{
return field_arg->save_in_field_default_value(false);
@@ -6804,6 +6819,10 @@ public:
{
str->append(STRING_WITH_LEN("ignore"));
}
bool check_assignability_to(const Field *to) const override
{
return false;
}
int save_in_field(Field *field_arg, bool) override
{
return field_arg->save_in_field_ignore_value(false);

View File

@@ -85,6 +85,12 @@ static inline void output_core_info()
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
my_close(fd, MYF(0));
}
if ((fd= my_open("/proc/version", O_RDONLY, MYF(0))) >= 0)
{
len= my_read(fd, (uchar*)buff, sizeof(buff), MYF(0));
my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff);
my_close(fd, MYF(0));
}
#endif
#elif defined(__APPLE__) || defined(__FreeBSD__)
char buff[PATH_MAX];
@@ -93,6 +99,10 @@ static inline void output_core_info()
{
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
}
if (sysctlbyname("kern.version", buff, &len, NULL, 0) == 0)
{
my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff);
}
#else
char buff[80];
my_getwd(buff, sizeof(buff), 0);

View File

@@ -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.
@@ -4128,7 +4148,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;

View File

@@ -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;

View File

@@ -1298,10 +1298,7 @@ void THD::init()
wsrep_desynced_backup_stage= false;
#endif /* WITH_WSREP */
if (variables.sql_log_bin)
variables.option_bits|= OPTION_BIN_LOG;
else
variables.option_bits&= ~OPTION_BIN_LOG;
set_binlog_bit();
select_commands= update_commands= other_commands= 0;
/* Set to handle counting of aborted connections */

View File

@@ -3263,6 +3263,13 @@ public:
auto_inc_intervals_forced.empty(); // in case of multiple SET INSERT_ID
auto_inc_intervals_forced.append(next_id, ULONGLONG_MAX, 0);
}
inline void set_binlog_bit()
{
if (variables.sql_log_bin)
variables.option_bits |= OPTION_BIN_LOG;
else
variables.option_bits &= ~OPTION_BIN_LOG;
}
ulonglong limit_found_rows;
@@ -5493,7 +5500,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,

View File

@@ -829,6 +829,19 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
context->resolve_in_table_list_only(table_list);
switch_to_nullable_trigger_fields(*values, table);
/*
Check assignability for the leftmost () in VALUES:
INSERT INTO t1 (a,b) VALUES (1,2), (3,4);
This checks if the values (1,2) can be assigned to fields (a,b).
The further values, e.g. (3,4) are not checked - they will be
checked during the execution time (when processing actual rows).
This is to preserve the "insert until the very first error"-style
behaviour for non-transactional tables.
*/
if (values->elements &&
table_list->table->check_assignability_opt_fields(fields, *values))
goto abort;
while ((values= its++))
{
thd->get_stmt_da()->inc_current_row_for_warning();
@@ -1688,7 +1701,15 @@ int mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
{
select_lex->no_wrap_view_item= TRUE;
res= check_update_fields(thd, context->table_list, update_fields,
update_values, false, &map);
update_values, false, &map) ||
/*
Check that all col=expr pairs are compatible for assignment in
INSERT INTO t1 VALUES (...)
ON DUPLICATE KEY UPDATE col=expr [, col=expr];
*/
TABLE::check_assignability_explicit_fields(update_fields,
update_values);
select_lex->no_wrap_view_item= FALSE;
}
@@ -3883,6 +3904,16 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
check_insert_fields(thd, table_list, *fields, values,
!insert_into_view, 1, &map));
if (!res)
{
/*
Check that all colN=exprN pairs are compatible for assignment, e.g.:
INSERT INTO t1 (col1, col2) VALUES (expr1, expr2);
INSERT INTO t1 SET col1=expr1, col2=expr2;
*/
res= table_list->table->check_assignability_opt_fields(*fields, values);
}
if (!res && fields->elements)
{
Abort_on_warning_instant_set aws(thd,
@@ -3936,7 +3967,14 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
}
res= res || setup_fields(thd, Ref_ptr_array(), *info.update_values,
MARK_COLUMNS_READ, 0, NULL, 0);
MARK_COLUMNS_READ, 0, NULL, 0) ||
/*
Check that all col=expr pairs are compatible for assignment in
INSERT INTO t1 SELECT ... FROM t2
ON DUPLICATE KEY UPDATE col=expr [, col=expr]
*/
TABLE::check_assignability_explicit_fields(*info.update_fields,
*info.update_values);
if (!res)
{
/*

View File

@@ -5627,12 +5627,26 @@ public:
THD *new_thd;
Security_context empty_ctx;
my_bool do_log_bin;
Protocol_local(THD *thd_arg, THD *new_thd_arg, ulong prealloc) :
Protocol_text(thd_arg, prealloc),
cur_data(0), first_data(0), data_tail(&first_data), alloc(0),
new_thd(new_thd_arg)
new_thd(new_thd_arg), do_log_bin(FALSE)
{}
void set_binlog_vars(my_bool *sav_log_bin)
{
*sav_log_bin= thd->variables.sql_log_bin;
thd->variables.sql_log_bin= do_log_bin;
thd->set_binlog_bit();
}
void restore_binlog_vars(my_bool sav_log_bin)
{
do_log_bin= thd->variables.sql_log_bin;
thd->variables.sql_log_bin= sav_log_bin;
thd->set_binlog_bit();
}
protected:
bool net_store_data(const uchar *from, size_t length);
bool net_store_data_cs(const uchar *from, size_t length,
@@ -6240,12 +6254,16 @@ loc_advanced_command(MYSQL *mysql, enum enum_server_command command,
Ed_connection con(p->thd);
Security_context *ctx_orig= p->thd->security_ctx;
MYSQL_LEX_STRING sql_text;
my_bool log_bin_orig;
p->set_binlog_vars(&log_bin_orig);
DBUG_ASSERT(current_thd == p->thd);
sql_text.str= (char *) arg;
sql_text.length= arg_length;
p->thd->security_ctx= &p->empty_ctx;
result= con.execute_direct(p, sql_text);
p->thd->security_ctx= ctx_orig;
p->restore_binlog_vars(log_bin_orig);
}
if (skip_check)
result= 0;
@@ -6401,6 +6419,9 @@ extern "C" MYSQL *mysql_real_connect_local(MYSQL *mysql)
new_thd->security_ctx->skip_grants();
new_thd->query_cache_is_applicable= 0;
new_thd->variables.wsrep_on= 0;
new_thd->variables.sql_log_bin= 0;
new_thd->set_binlog_bit();
/*
TOSO: decide if we should turn the auditing off
for such threads.

View File

@@ -7030,19 +7030,18 @@ static int get_check_constraints_record(THD *thd, TABLE_LIST *tables,
#ifndef NO_EMBEDDED_ACCESS_CHECKS
TABLE_LIST table_acl_check;
bzero((char*) &table_acl_check, sizeof(table_acl_check));
#endif
for (uint i= 0; i < tables->table->s->table_check_constraints; i++)
{
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (!(thd->col_access & TABLE_ACLS))
{
table_acl_check.db= *db_name;
table_acl_check.table_name= *table_name;
table_acl_check.grant.privilege= thd->col_access;
if (check_grant(thd, TABLE_ACLS, &table_acl_check, FALSE, 1, TRUE))
continue;
DBUG_RETURN(res);
}
#endif
for (uint i= 0; i < tables->table->s->table_check_constraints; i++)
{
Virtual_column_info *check= tables->table->check_constraints[i];
table->field[0]->store(STRING_WITH_LEN("def"), system_charset_info);
table->field[3]->store(check->name.str, check->name.length,

View File

@@ -11465,6 +11465,8 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
if (!(*ptr)->vcol_info)
{
bitmap_set_bit(from->read_set, def->field->field_index);
if ((*ptr)->check_assignability_from(def->field))
goto err;
(copy_end++)->set(*ptr,def->field,0);
}
}

View File

@@ -523,6 +523,9 @@ int mysql_update(THD *thd,
DBUG_RETURN(1); /* purecov: inspected */
}
if (table_list->table->check_assignability_explicit_fields(fields, values))
DBUG_RETURN(true);
if (check_unique_table(thd, table_list))
DBUG_RETURN(TRUE);
@@ -2082,7 +2085,8 @@ int multi_update::prepare(List<Item> &not_used_values,
*/
int error= setup_fields(thd, Ref_ptr_array(),
*values, MARK_COLUMNS_READ, 0, NULL, 0);
*values, MARK_COLUMNS_READ, 0, NULL, 0) ||
TABLE::check_assignability_explicit_fields(*fields, *values);
ti.rewind();
while ((table_ref= ti++))

View File

@@ -4490,10 +4490,7 @@ static bool fix_sql_log_bin_after_update(sys_var *self, THD *thd,
{
DBUG_ASSERT(type == OPT_SESSION);
if (thd->variables.sql_log_bin)
thd->variables.option_bits |= OPTION_BIN_LOG;
else
thd->variables.option_bits &= ~OPTION_BIN_LOG;
thd->set_binlog_bit();
return FALSE;
}

View File

@@ -9244,6 +9244,60 @@ bool TABLE::validate_default_values_of_unset_fields(THD *thd) const
}
/*
Check assignment compatibility of a value list against an explicitly
specified field list, e.g.
INSERT INTO t1 (a,b) VALUES (1,2);
*/
bool TABLE::check_assignability_explicit_fields(List<Item> fields,
List<Item> values)
{
DBUG_ENTER("TABLE::check_assignability_explicit_fields");
DBUG_ASSERT(fields.elements == values.elements);
List_iterator<Item> fi(fields);
List_iterator<Item> vi(values);
Item *f, *value;
while ((f= fi++) && (value= vi++))
{
Item_field *item_field= f->field_for_view_update();
if (!item_field)
{
/*
A non-updatable field of a view found.
This scenario is caught later and an error is raised.
We could eventually move error reporting here. For now just continue.
*/
continue;
}
if (value->check_assignability_to(item_field->field))
DBUG_RETURN(true);
}
DBUG_RETURN(false);
}
/*
Check assignment compatibility for a value list against
all visible fields of the table, e.g.
INSERT INTO t1 VALUES (1,2);
*/
bool TABLE::check_assignability_all_visible_fields(List<Item> &values) const
{
DBUG_ENTER("TABLE::check_assignability_all_visible_fields");
DBUG_ASSERT(s->visible_fields == values.elements);
List_iterator<Item> vi(values);
for (uint i= 0; i < s->fields; i++)
{
if (!field[i]->invisible &&
(vi++)->check_assignability_to(field[i]))
DBUG_RETURN(true);
}
DBUG_RETURN(false);
}
bool TABLE::insert_all_rows_into_tmp_table(THD *thd,
TABLE *tmp_table,
TMP_TABLE_PARAM *tmp_table_param,

View File

@@ -1691,6 +1691,27 @@ public:
Field **field_to_fill();
bool validate_default_values_of_unset_fields(THD *thd) const;
// Check if the value list is assignable to the explicit field list
static bool check_assignability_explicit_fields(List<Item> fields,
List<Item> values);
// Check if the value list is assignable to all visible fields
bool check_assignability_all_visible_fields(List<Item> &values) const;
/*
Check if the value list is assignable to:
- The explicit field list if fields.elements > 0, e.g.
INSERT INTO t1 (a,b) VALUES (1,2);
- All visible fields, if fields.elements==0, e.g.
INSERT INTO t1 VALUES (1,2);
*/
bool check_assignability_opt_fields(List<Item> fields,
List<Item> values) const
{
DBUG_ASSERT(values.elements);
return fields.elements ?
check_assignability_explicit_fields(fields, values) :
check_assignability_all_visible_fields(values);
}
bool insert_all_rows_into_tmp_table(THD *thd,
TABLE *tmp_table,
TMP_TABLE_PARAM *tmp_table_param,

View File

@@ -1069,12 +1069,14 @@ static ssize_t sst_prepare_other (const char* method,
WSREP_SST_OPT_ADDR " '%s' "
WSREP_SST_OPT_DATA " '%s' "
"%s"
WSREP_SST_OPT_PARENT " '%d'"
WSREP_SST_OPT_PARENT " %d "
WSREP_SST_OPT_PROGRESS " %d"
"%s"
"%s",
method, addr_in, mysql_real_data_home,
wsrep_defaults_file,
(int)getpid(),
0,
binlog_opt_val, binlog_index_opt_val);
my_free(binlog_opt_val);
@@ -1854,16 +1856,18 @@ static int sst_donate_other (const char* method,
"wsrep_sst_%s "
WSREP_SST_OPT_ROLE " 'donor' "
WSREP_SST_OPT_ADDR " '%s' "
WSREP_SST_OPT_LPORT " '%u' "
WSREP_SST_OPT_LPORT " %u "
WSREP_SST_OPT_SOCKET " '%s' "
WSREP_SST_OPT_PROGRESS " %d "
WSREP_SST_OPT_DATA " '%s' "
"%s"
WSREP_SST_OPT_GTID " '%s:%lld' "
WSREP_SST_OPT_GTID_DOMAIN_ID " '%d'"
WSREP_SST_OPT_GTID_DOMAIN_ID " %d"
"%s"
"%s"
"%s",
method, addr, mysqld_port, mysqld_unix_port,
0,
mysql_real_data_home,
wsrep_defaults_file,
uuid_oss.str().c_str(), gtid.seqno().get(), wsrep_gtid_server.domain_id,

View File

@@ -32,6 +32,7 @@
#define WSREP_SST_OPT_PARENT "--parent"
#define WSREP_SST_OPT_BINLOG "--binlog"
#define WSREP_SST_OPT_BINLOG_INDEX "--binlog-index"
#define WSREP_SST_OPT_PROGRESS "--progress"
#define WSREP_SST_OPT_MYSQLD "--mysqld-args"
// mysqldump-specific options

View File

@@ -294,3 +294,15 @@ a
30
DROP TABLE t2;
DROP TABLE t1;
#
# MDEV-27766 CONNECT Engine Support for INSERT IGNORE with Mysql Table type
#
CREATE TABLE t1 (a INT PRIMARY KEY);
INSERT INTO t1 VALUES (10),(20),(30);
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@localhost:PORT/test/t1' OPTION_LIST="Delayed=1,Ignored=1";
INSERT INTO t2 VALUES (10),(20),(30),(40);
DROP TABLE t2;
DROP TABLE t1;
#
# End of 10.3 tests
#

Some files were not shown because too many files have changed in this diff Show More