Skip to content

Commit a8ded39

Browse files
committed
Merge 10.4 into 10.5
2 parents f7bd369 + 3a79e5f commit a8ded39

38 files changed

+650
-163
lines changed

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ test_script:
2525
- set PATH=C:\Strawberry\perl\bin;%PATH%;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
2626
- cd %APPVEYOR_BUILD_FOLDER%\_build\mysql-test
2727
- set /A parallel=4*%NUMBER_OF_PROCESSORS%
28-
- perl mysql-test-run.pl --force --max-test-fail=10 --retry=2 -parallel=%parallel% --testcase-timeout=3 --suite=main --skip-test-list=unstable-tests --mysqld=--loose-innodb-flush-log-at-trx-commit=2
28+
- perl mysql-test-run.pl --force --max-test-fail=10 --retry=2 -parallel=%parallel% --testcase-timeout=4 --suite=main --skip-test-list=unstable-tests --mysqld=--loose-innodb-flush-log-at-trx-commit=2
2929

3030
image: Visual Studio 2019

include/my_pthread.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,16 +298,18 @@ void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size);
298298
int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
299299
#endif
300300

301-
#if !defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
302-
/* no pthread_yield() available */
303301
#ifdef HAVE_SCHED_YIELD
304302
#define pthread_yield() sched_yield()
305-
#elif defined(HAVE_PTHREAD_YIELD_NP) /* can be Mac OS X */
303+
#else
304+
#if !defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
305+
/* no pthread_yield() available */
306+
#if defined(HAVE_PTHREAD_YIELD_NP) /* can be Mac OS X */
306307
#define pthread_yield() pthread_yield_np()
307308
#elif defined(HAVE_THR_YIELD)
308309
#define pthread_yield() thr_yield()
309-
#endif
310-
#endif
310+
#endif //defined(HAVE_PTHREAD_YIELD_NP)
311+
#endif //!defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
312+
#endif //HAVE_SCHED_YIELD
311313

312314
size_t my_setstacksize(pthread_attr_t *attr, size_t stacksize);
313315

mysql-test/main/create_or_replace.result

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,27 @@ unlock tables;
340340
drop table t1;
341341
create table test.t1 (i int);
342342
drop database mysqltest2;
343+
drop table test.t1;
344+
#
345+
# MDEV-23391 Server crash in close_thread_table or assertion, upon CREATE OR REPLACE TABLE under lock
346+
#
347+
create table t1 (i int);
348+
lock table t1 write;
349+
select * from information_schema.metadata_lock_info;
350+
THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME
351+
# MDL_BACKUP_DDL NULL Backup lock
352+
# MDL_BACKUP_DML NULL Backup lock
353+
# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test
354+
# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1
355+
create or replace table t1 (a char(1)) engine=Innodb select 'foo' as a;
356+
ERROR 22001: Data too long for column 'a' at row 1
357+
show tables;
358+
Tables_in_test
359+
t2
360+
select * from information_schema.metadata_lock_info;
361+
THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME
362+
create table t1 (i int);
363+
drop table t1;
343364
#
344365
# Testing CREATE .. LIKE
345366
#
@@ -545,3 +566,4 @@ SELECT * FROM t3;
545566
ERROR HY000: Table 't3' was not locked with LOCK TABLES
546567
UNLOCK TABLES;
547568
DROP TABLE t3;
569+
# End of 10.4 tests

mysql-test/main/create_or_replace.test

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,26 @@ drop table t1;
270270

271271
create table test.t1 (i int);
272272
drop database mysqltest2;
273+
drop table test.t1;
274+
275+
276+
--echo #
277+
--echo # MDEV-23391 Server crash in close_thread_table or assertion, upon CREATE OR REPLACE TABLE under lock
278+
--echo #
279+
create table t1 (i int);
280+
lock table t1 write;
281+
--replace_column 1 #
282+
--sorted_result
283+
select * from information_schema.metadata_lock_info;
284+
--error ER_DATA_TOO_LONG
285+
create or replace table t1 (a char(1)) engine=Innodb select 'foo' as a;
286+
show tables;
287+
--replace_column 1 #
288+
--sorted_result
289+
select * from information_schema.metadata_lock_info;
290+
create table t1 (i int);
291+
drop table t1;
292+
273293

274294
--echo #
275295
--echo # Testing CREATE .. LIKE
@@ -486,3 +506,5 @@ CREATE OR REPLACE TEMPORARY TABLE t2(c INT DEFAULT '');
486506
SELECT * FROM t3;
487507
UNLOCK TABLES;
488508
DROP TABLE t3;
509+
510+
--echo # End of 10.4 tests

mysql-test/main/ctype_utf32_uca.result

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7919,6 +7919,28 @@ a b
79197919
DROP TABLE t1;
79207920
SET NAMES utf8;
79217921
#
7922+
# MDEV-25402 Assertion `!str || str != Ptr' failed in String::copy
7923+
#
7924+
SET @c:="SET SESSION collation_connection=utf32_spanish_ci";
7925+
PREPARE s FROM @c;
7926+
EXECUTE s;
7927+
CREATE PROCEDURE p (IN i INT) EXECUTE s;
7928+
SET SESSION character_set_connection=latin1;
7929+
SET @c:="SET @b=get_format(DATE,'EUR')";
7930+
PREPARE s FROM @c;
7931+
EXECUTE s;
7932+
CALL p (@a);
7933+
DEALLOCATE PREPARE s;
7934+
DROP PROCEDURE p;
7935+
SET NAMES utf8;
7936+
SET @c:="SET @b=get_format(DATE,'EUR')";
7937+
PREPARE s FROM @c;
7938+
EXECUTE s;
7939+
SET collation_connection=utf32_spanish_ci;
7940+
EXECUTE s;
7941+
DEALLOCATE PREPARE s;
7942+
SET NAMES utf8;
7943+
#
79227944
# End of 10.2 tests
79237945
#
79247946
#

mysql-test/main/ctype_utf32_uca.test

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,32 @@ SET NAMES utf8, collation_connection=utf32_unicode_520_nopad_ci;
265265
SET NAMES utf8;
266266

267267

268+
--echo #
269+
--echo # MDEV-25402 Assertion `!str || str != Ptr' failed in String::copy
270+
--echo #
271+
272+
SET @c:="SET SESSION collation_connection=utf32_spanish_ci";
273+
PREPARE s FROM @c;
274+
EXECUTE s;
275+
CREATE PROCEDURE p (IN i INT) EXECUTE s;
276+
SET SESSION character_set_connection=latin1;
277+
SET @c:="SET @b=get_format(DATE,'EUR')";
278+
PREPARE s FROM @c;
279+
EXECUTE s;
280+
CALL p (@a);
281+
DEALLOCATE PREPARE s;
282+
DROP PROCEDURE p;
283+
284+
SET NAMES utf8;
285+
SET @c:="SET @b=get_format(DATE,'EUR')";
286+
PREPARE s FROM @c;
287+
EXECUTE s;
288+
SET collation_connection=utf32_spanish_ci;
289+
EXECUTE s;
290+
DEALLOCATE PREPARE s;
291+
SET NAMES utf8;
292+
293+
268294
--echo #
269295
--echo # End of 10.2 tests
270296
--echo #

mysql-test/main/sp.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--source include/have_partition.inc
12
#
23
# Basic stored PROCEDURE tests
34
#

mysql-test/suite/gcol/r/innodb_virtual_fk.result

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,3 +826,203 @@ DROP TABLE email_stats;
826826
DROP TABLE emails_metadata;
827827
DROP TABLE emails;
828828
DROP DATABASE `a-b`;
829+
USE test;
830+
#
831+
# Bug#33053297 VIRTUAL INDEX CORRUPTED DURING CASCADE UPDATE ON CHILD TABLE
832+
#
833+
# Test-Case 1
834+
CREATE TABLE emails (
835+
id int unsigned NOT NULL AUTO_INCREMENT,
836+
PRIMARY KEY (id)
837+
) ENGINE=InnoDB;
838+
CREATE TABLE email_stats (
839+
id bigint unsigned NOT NULL AUTO_INCREMENT,
840+
email_id int unsigned DEFAULT NULL,
841+
date_sent datetime NOT NULL,
842+
generated_sent_date date GENERATED ALWAYS AS
843+
(concat(year(date_sent), '-', lpad(month(date_sent), 2, '0'),
844+
'-', lpad(dayofmonth(date_sent), 2, '0'))),
845+
PRIMARY KEY (id),
846+
KEY IDX_ES1 (email_id),
847+
KEY mautic_generated_sent_date_email_id(generated_sent_date, email_id),
848+
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
849+
) ENGINE = InnoDB;
850+
INSERT INTO emails VALUES (1);
851+
INSERT INTO email_stats (id, email_id, date_sent)
852+
VALUES (1, 1, '2020-10-22 13:32:41');
853+
SELECT * FROM email_stats;
854+
id email_id date_sent generated_sent_date
855+
1 1 2020-10-22 13:32:41 2020-10-22
856+
DELETE FROM emails;
857+
DELETE FROM email_stats;
858+
# Clean up.
859+
DROP TABLE email_stats;
860+
DROP TABLE emails;
861+
# Test-Case 2
862+
CREATE TABLE emails (
863+
id int unsigned NOT NULL AUTO_INCREMENT,
864+
PRIMARY KEY (id)
865+
) ENGINE = InnoDB
866+
DEFAULT CHARSET = utf8mb4
867+
COLLATE = utf8mb4_unicode_ci
868+
ROW_FORMAT = DYNAMIC;
869+
CREATE TABLE email_stats (
870+
id bigint unsigned NOT NULL AUTO_INCREMENT,
871+
email_id int unsigned DEFAULT NULL,
872+
date_sent datetime NOT NULL,
873+
generated_sent_date date GENERATED ALWAYS AS
874+
(concat(year(date_sent), '-', lpad(month(date_sent), 2, '0'),
875+
'-', lpad(dayofmonth(date_sent), 2, '0'))),
876+
PRIMARY KEY (id),
877+
KEY IDX_ES1 (email_id),
878+
KEY mautic_generated_sent_date_email_id(generated_sent_date, email_id),
879+
FOREIGN KEY (email_id) REFERENCES emails (id)
880+
ON DELETE SET NULL
881+
ON UPDATE SET NULL
882+
) ENGINE = InnoDB;
883+
INSERT INTO emails VALUES (1);
884+
INSERT INTO email_stats (id, email_id, date_sent)
885+
VALUES (1, 1, '2020-10-22 13:32:41');
886+
UPDATE emails SET id = 2 where id = 1;
887+
SELECT id FROM email_stats WHERE generated_sent_date IS NULL;
888+
id
889+
SELECT * FROM email_stats;
890+
id email_id date_sent generated_sent_date
891+
1 NULL 2020-10-22 13:32:41 2020-10-22
892+
UPDATE email_stats
893+
SET email_id=2
894+
WHERE DATE(generated_sent_date) = '2020-10-22';
895+
SELECT * FROM email_stats;
896+
id email_id date_sent generated_sent_date
897+
1 2 2020-10-22 13:32:41 2020-10-22
898+
# Clean up.
899+
DROP TABLE email_stats;
900+
DROP TABLE emails;
901+
# Test-case 3
902+
CREATE TABLE emails (
903+
id int unsigned NOT NULL AUTO_INCREMENT,
904+
PRIMARY KEY (id)
905+
) ENGINE = INNODB
906+
DEFAULT CHARSET = utf8mb4
907+
COLLATE = utf8mb4_unicode_ci
908+
ROW_FORMAT = DYNAMIC;
909+
CREATE TABLE email_stats (
910+
id bigint unsigned NOT NULL AUTO_INCREMENT,
911+
email_id int unsigned DEFAULT NULL,
912+
date_sent datetime NOT NULL,
913+
generated_sent_email varchar(20) GENERATED ALWAYS AS
914+
(CONCAT(YEAR(date_sent), '-', COALESCE(email_id, '$'))),
915+
PRIMARY KEY (id),
916+
KEY idx_es1 (email_id),
917+
KEY mautic_generated_sent_date_email(generated_sent_email, email_id),
918+
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
919+
) ENGINE = INNODB;
920+
INSERT INTO emails VALUES (1);
921+
INSERT INTO email_stats (id, email_id, date_sent)
922+
VALUES (1, 1, '2020-10-22 13:32:41');
923+
SELECT * FROM email_stats;
924+
id email_id date_sent generated_sent_email
925+
1 1 2020-10-22 13:32:41 2020-1
926+
SELECT date_sent FROM email_stats WHERE generated_sent_email = '2020-1';
927+
date_sent
928+
2020-10-22 13:32:41
929+
DELETE FROM emails;
930+
SELECT * FROM email_stats;
931+
id email_id date_sent generated_sent_email
932+
1 NULL 2020-10-22 13:32:41 2020-$
933+
SELECT date_sent FROM email_stats WHERE generated_sent_email = '2020-$';
934+
date_sent
935+
2020-10-22 13:32:41
936+
# Clean up.
937+
DROP TABLE email_stats;
938+
DROP TABLE emails;
939+
# Test-case 4
940+
CREATE TABLE emails (
941+
id int unsigned NOT NULL AUTO_INCREMENT,
942+
PRIMARY KEY (id)
943+
) ENGINE = INNODB;
944+
CREATE TABLE email_stats (
945+
id bigint unsigned NOT NULL AUTO_INCREMENT,
946+
email_id int unsigned DEFAULT NULL,
947+
date_sent datetime NOT NULL,
948+
generated_sent_email varchar(20) GENERATED ALWAYS AS
949+
(CONCAT(YEAR(date_sent), '-', COALESCE(email_id, '$'))),
950+
PRIMARY KEY (id),
951+
KEY idx_es1 (email_id),
952+
KEY mautic_generated_sent_date_email(generated_sent_email, email_id),
953+
FOREIGN KEY (email_id) REFERENCES emails (id) ON UPDATE SET NULL
954+
) ENGINE = INNODB;
955+
INSERT INTO emails VALUES (1);
956+
INSERT INTO email_stats (id, email_id, date_sent)
957+
VALUES (1, 1, '2020-10-22 13:32:41');
958+
SELECT * FROM email_stats;
959+
id email_id date_sent generated_sent_email
960+
1 1 2020-10-22 13:32:41 2020-1
961+
SELECT date_sent FROM email_stats WHERE generated_sent_email = '2020-1';
962+
date_sent
963+
2020-10-22 13:32:41
964+
UPDATE emails SET id = 2 WHERE id = 1;
965+
SELECT * FROM email_stats;
966+
id email_id date_sent generated_sent_email
967+
1 NULL 2020-10-22 13:32:41 2020-$
968+
SELECT date_sent FROM email_stats WHERE generated_sent_email = '2020-$';
969+
date_sent
970+
2020-10-22 13:32:41
971+
DROP TABLE email_stats;
972+
DROP TABLE emails;
973+
CREATE TABLE emails (breaker int unsigned,
974+
KEY (breaker),
975+
id int unsigned NOT NULL AUTO_INCREMENT,
976+
PRIMARY KEY (id)
977+
) ENGINE=INNODB;
978+
CREATE TABLE email_stats (
979+
id bigint unsigned NOT NULL AUTO_INCREMENT,
980+
email_id int unsigned DEFAULT NULL,
981+
date_sent datetime NOT NULL,
982+
generated_sent_email varchar(20) GENERATED ALWAYS AS
983+
(CONCAT(YEAR(date_sent),
984+
'-',
985+
COALESCE(email_id, '$'))),
986+
PRIMARY KEY (id),
987+
KEY idx_es1 (email_id),
988+
KEY mautic_generated_sent_date_email (generated_sent_email, email_id),
989+
FOREIGN KEY fk_ea1 (email_id) REFERENCES emails (breaker)
990+
ON DELETE SET NULL
991+
) ENGINE=INNODB;
992+
show create table email_stats;
993+
Table Create Table
994+
email_stats CREATE TABLE `email_stats` (
995+
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
996+
`email_id` int(10) unsigned DEFAULT NULL,
997+
`date_sent` datetime NOT NULL,
998+
`generated_sent_email` varchar(20) GENERATED ALWAYS AS (concat(year(`date_sent`),'-',coalesce(`email_id`,'$'))) VIRTUAL,
999+
PRIMARY KEY (`id`),
1000+
KEY `idx_es1` (`email_id`),
1001+
KEY `mautic_generated_sent_date_email` (`generated_sent_email`,`email_id`),
1002+
CONSTRAINT `fk_ea1` FOREIGN KEY (`email_id`) REFERENCES `emails` (`breaker`) ON DELETE SET NULL
1003+
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1004+
INSERT INTO emails VALUES (1,1);
1005+
INSERT INTO email_stats(id, email_id, date_sent)
1006+
VALUES (1, 1, '2020-10-22 13:32:41');
1007+
SELECT * FROM email_stats;
1008+
id email_id date_sent generated_sent_email
1009+
1 1 2020-10-22 13:32:41 2020-1
1010+
SELECT date_sent FROM email_stats WHERE generated_sent_email = '2020-1';
1011+
date_sent
1012+
2020-10-22 13:32:41
1013+
DELETE FROM emails;
1014+
SELECT * FROM email_stats;
1015+
id email_id date_sent generated_sent_email
1016+
1 NULL 2020-10-22 13:32:41 2020-$
1017+
SELECT date_sent
1018+
FROM email_stats force index (mautic_generated_sent_date_email)
1019+
WHERE generated_sent_email = '2020-$';
1020+
date_sent
1021+
2020-10-22 13:32:41
1022+
SELECT date_sent
1023+
FROM email_stats force index (idx_es1)
1024+
WHERE generated_sent_email = '2020-$';
1025+
date_sent
1026+
2020-10-22 13:32:41
1027+
DROP TABLE email_stats;
1028+
DROP TABLE emails;

0 commit comments

Comments
 (0)