From 7355f7b1f5cec0f3db60053941d0c78288917c43 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 7 Apr 2022 06:13:22 +0400 Subject: [PATCH 1/9] Adding MTR tests to cover how keywords of different kinds behave in various contexts --- mysql-test/main/keywords.result | 421 ++++++++++++++++++++++++++++++++ mysql-test/main/keywords.test | 77 ++++++ 2 files changed, 498 insertions(+) diff --git a/mysql-test/main/keywords.result b/mysql-test/main/keywords.result index 2765c05b3cbe7..8db364ac1568d 100644 --- a/mysql-test/main/keywords.result +++ b/mysql-test/main/keywords.result @@ -391,3 +391,424 @@ END $$ compressed 1 +# +# Testing various keywords in various contexts +# +CREATE PROCEDURE p1(query TEXT, var TEXT) +BEGIN +DECLARE errmsg TEXT DEFAULT ''; +DECLARE CONTINUE HANDLER +FOR SQLEXCEPTION +BEGIN +GET DIAGNOSTICS CONDITION 1 errmsg = MESSAGE_TEXT; +SET errmsg= REPLACE(errmsg, 'You have an error in your SQL ', '..'); +SET errmsg= REPLACE(errmsg, '; check the manual that corresponds to your MariaDB server version for the right syntax to use', '..'); +END; +SET query=REPLACE(query, '$(VAR)', var); +EXECUTE IMMEDIATE query; +SELECT CONCAT(query, '; -- ', LEFT(COALESCE(errmsg,''),40)) AS `--------`; +END; +$$ +CREATE PROCEDURE p2(query TEXT) +BEGIN +FOR row IN (SELECT word FROM t1 ORDER BY category, word) +DO +CALL p1(query, row.word); +END FOR; +END; +$$ +CREATE TABLE t1 (word TEXT, category TEXT); +INSERT INTO t1 VALUES ('non_keyword', '00 Simple identifier'); +INSERT INTO t1 VALUES ('lpad', '01 Built-in native function'); +INSERT INTO t1 VALUES ('rpad', '01 Built-in native function'); +INSERT INTO t1 VALUES ('adddate', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('substr', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('substring', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('trim_oracle', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('ascii', '03 function_call_conflict'); +INSERT INTO t1 VALUES ('replace', '03 function_call_conflict'); +INSERT INTO t1 VALUES ('weight_string', '03 function_call_conflict'); +INSERT INTO t1 VALUES ('char', '04 function_call_keyword'); +INSERT INTO t1 VALUES ('trim', '04 function_call_keyword'); +INSERT INTO t1 VALUES ('year', '04 function_call_keyword'); +INSERT INTO t1 VALUES ('create', '05 Reserved keyword'); +CALL p2('SELECT @@$(VAR)'); +-------- +SELECT @@non_keyword; -- Unknown system variable 'non_keyword' +-------- +SELECT @@lpad; -- Unknown system variable 'lpad' +-------- +SELECT @@rpad; -- Unknown system variable 'rpad' +-------- +SELECT @@adddate; -- Unknown system variable 'adddate' +-------- +SELECT @@substr; -- Unknown system variable 'substr' +-------- +SELECT @@substring; -- Unknown system variable 'substring' +-------- +SELECT @@trim_oracle; -- Unknown system variable 'trim_oracle' +-------- +SELECT @@ascii; -- Unknown system variable 'ascii' +-------- +SELECT @@replace; -- ..syntax.. near 'replace' at line 1 +-------- +SELECT @@weight_string; -- Unknown system variable 'weight_string' +-------- +SELECT @@char; -- ..syntax.. near 'char' at line 1 +-------- +SELECT @@trim; -- Unknown system variable 'trim' +-------- +SELECT @@year; -- Unknown system variable 'year' +-------- +SELECT @@create; -- ..syntax.. near 'create' at line 1 +CALL p2('SELECT @@global.$(VAR)'); +-------- +SELECT @@global.non_keyword; -- Unknown system variable 'non_keyword' +-------- +SELECT @@global.lpad; -- Unknown system variable 'lpad' +-------- +SELECT @@global.rpad; -- Unknown system variable 'rpad' +-------- +SELECT @@global.adddate; -- Unknown system variable 'adddate' +-------- +SELECT @@global.substr; -- Unknown system variable 'substr' +-------- +SELECT @@global.substring; -- Unknown system variable 'substring' +-------- +SELECT @@global.trim_oracle; -- Unknown system variable 'trim_oracle' +-------- +SELECT @@global.ascii; -- Unknown system variable 'ascii' +-------- +SELECT @@global.replace; -- Unknown system variable 'replace' +-------- +SELECT @@global.weight_string; -- Unknown system variable 'weight_string' +-------- +SELECT @@global.char; -- Unknown system variable 'char' +-------- +SELECT @@global.trim; -- Unknown system variable 'trim' +-------- +SELECT @@global.year; -- Unknown system variable 'year' +-------- +SELECT @@global.create; -- Unknown system variable 'create' +CALL p2('SELECT @@global.$(VAR)()'); +-------- +SELECT @@global.non_keyword(); -- Unknown system variable 'non_keyword' +-------- +SELECT @@global.lpad(); -- Unknown system variable 'lpad' +-------- +SELECT @@global.rpad(); -- Unknown system variable 'rpad' +-------- +SELECT @@global.adddate(); -- Unknown system variable 'adddate' +-------- +SELECT @@global.substr(); -- Unknown system variable 'substr' +-------- +SELECT @@global.substring(); -- Unknown system variable 'substring' +-------- +SELECT @@global.trim_oracle(); -- Unknown system variable 'trim_oracle' +-------- +SELECT @@global.ascii(); -- Unknown system variable 'ascii' +-------- +SELECT @@global.replace(); -- Unknown system variable 'replace' +-------- +SELECT @@global.weight_string(); -- Unknown system variable 'weight_string' +-------- +SELECT @@global.char(); -- Unknown system variable 'char' +-------- +SELECT @@global.trim(); -- Unknown system variable 'trim' +-------- +SELECT @@global.year(); -- Unknown system variable 'year' +-------- +SELECT @@global.create(); -- Unknown system variable 'create' +CALL p2('SELECT $(VAR)()'); +-------- +SELECT non_keyword(); -- FUNCTION test.non_keyword does not exist +-------- +SELECT lpad(); -- Incorrect parameter count in the call to +-------- +SELECT rpad(); -- Incorrect parameter count in the call to +-------- +SELECT adddate(); -- ..syntax.. near ')' at line 1 +-------- +SELECT substr(); -- ..syntax.. near ')' at line 1 +-------- +SELECT substring(); -- ..syntax.. near ')' at line 1 +-------- +SELECT trim_oracle(); -- ..syntax.. near ')' at line 1 +-------- +SELECT ascii(); -- ..syntax.. near ')' at line 1 +-------- +SELECT replace(); -- ..syntax.. near ')' at line 1 +-------- +SELECT weight_string(); -- ..syntax.. near ')' at line 1 +-------- +SELECT char(); -- ..syntax.. near ')' at line 1 +-------- +SELECT trim(); -- ..syntax.. near ')' at line 1 +-------- +SELECT year(); -- ..syntax.. near ')' at line 1 +-------- +SELECT create(); -- ..syntax.. near 'create()' at line 1 +CALL p2('SELECT test.$(VAR)()'); +-------- +SELECT test.non_keyword(); -- FUNCTION test.non_keyword does not exist +-------- +SELECT test.lpad(); -- FUNCTION test.lpad does not exist +-------- +SELECT test.rpad(); -- FUNCTION test.rpad does not exist +-------- +SELECT test.adddate(); -- FUNCTION test.adddate does not exist. Ch +-------- +SELECT test.substr(); -- FUNCTION test.substr does not exist. Che +-------- +SELECT test.substring(); -- FUNCTION test.substring does not exist. +-------- +SELECT test.trim_oracle(); -- FUNCTION test.trim_oracle does not exist +-------- +SELECT test.ascii(); -- FUNCTION test.ascii does not exist. Chec +-------- +SELECT test.replace(); -- FUNCTION test.replace does not exist. Ch +-------- +SELECT test.weight_string(); -- FUNCTION test.weight_string does not exi +-------- +SELECT test.char(); -- FUNCTION test.char does not exist. Check +-------- +SELECT test.trim(); -- FUNCTION test.trim does not exist. Check +-------- +SELECT test.year(); -- FUNCTION test.year does not exist. Check +-------- +SELECT test.create(); -- FUNCTION test.create does not exist. Che +CALL p2('SELECT $(VAR) FROM t1'); +-------- +SELECT non_keyword FROM t1; -- Unknown column 'non_keyword' in 'field l +-------- +SELECT lpad FROM t1; -- Unknown column 'lpad' in 'field list' +-------- +SELECT rpad FROM t1; -- Unknown column 'rpad' in 'field list' +-------- +SELECT adddate FROM t1; -- Unknown column 'adddate' in 'field list' +-------- +SELECT substr FROM t1; -- Unknown column 'substr' in 'field list' +-------- +SELECT substring FROM t1; -- Unknown column 'substring' in 'field lis +-------- +SELECT trim_oracle FROM t1; -- Unknown column 'trim_oracle' in 'field l +-------- +SELECT ascii FROM t1; -- Unknown column 'ascii' in 'field list' +-------- +SELECT replace FROM t1; -- ..syntax.. near 'FROM t1' at line 1 +-------- +SELECT weight_string FROM t1; -- Unknown column 'weight_string' in 'field +-------- +SELECT char FROM t1; -- ..syntax.. near 'FROM t1' at line 1 +-------- +SELECT trim FROM t1; -- Unknown column 'trim' in 'field list' +-------- +SELECT year FROM t1; -- Unknown column 'year' in 'field list' +-------- +SELECT create FROM t1; -- ..syntax.. near 'create FROM t1' at line +CALL p2('SELECT t1.$(VAR) FROM t1'); +-------- +SELECT t1.non_keyword FROM t1; -- Unknown column 't1.non_keyword' in 'fiel +-------- +SELECT t1.lpad FROM t1; -- Unknown column 't1.lpad' in 'field list' +-------- +SELECT t1.rpad FROM t1; -- Unknown column 't1.rpad' in 'field list' +-------- +SELECT t1.adddate FROM t1; -- Unknown column 't1.adddate' in 'field li +-------- +SELECT t1.substr FROM t1; -- Unknown column 't1.substr' in 'field lis +-------- +SELECT t1.substring FROM t1; -- Unknown column 't1.substring' in 'field +-------- +SELECT t1.trim_oracle FROM t1; -- Unknown column 't1.trim_oracle' in 'fiel +-------- +SELECT t1.ascii FROM t1; -- Unknown column 't1.ascii' in 'field list +-------- +SELECT t1.replace FROM t1; -- Unknown column 't1.replace' in 'field li +-------- +SELECT t1.weight_string FROM t1; -- Unknown column 't1.weight_string' in 'fi +-------- +SELECT t1.char FROM t1; -- Unknown column 't1.char' in 'field list' +-------- +SELECT t1.trim FROM t1; -- Unknown column 't1.trim' in 'field list' +-------- +SELECT t1.year FROM t1; -- Unknown column 't1.year' in 'field list' +-------- +SELECT t1.create FROM t1; -- Unknown column 't1.create' in 'field lis +CALL p2('DROP TABLE $(VAR)'); +-------- +DROP TABLE non_keyword; -- Unknown table 'test.non_keyword' +-------- +DROP TABLE lpad; -- Unknown table 'test.lpad' +-------- +DROP TABLE rpad; -- Unknown table 'test.rpad' +-------- +DROP TABLE adddate; -- Unknown table 'test.adddate' +-------- +DROP TABLE substr; -- Unknown table 'test.substr' +-------- +DROP TABLE substring; -- Unknown table 'test.substring' +-------- +DROP TABLE trim_oracle; -- Unknown table 'test.trim_oracle' +-------- +DROP TABLE ascii; -- Unknown table 'test.ascii' +-------- +DROP TABLE replace; -- ..syntax.. near 'replace' at line 1 +-------- +DROP TABLE weight_string; -- Unknown table 'test.weight_string' +-------- +DROP TABLE char; -- ..syntax.. near 'char' at line 1 +-------- +DROP TABLE trim; -- Unknown table 'test.trim' +-------- +DROP TABLE year; -- Unknown table 'test.year' +-------- +DROP TABLE create; -- ..syntax.. near 'create' at line 1 +CALL p2('DROP TABLE test.$(VAR)'); +-------- +DROP TABLE test.non_keyword; -- Unknown table 'test.non_keyword' +-------- +DROP TABLE test.lpad; -- Unknown table 'test.lpad' +-------- +DROP TABLE test.rpad; -- Unknown table 'test.rpad' +-------- +DROP TABLE test.adddate; -- Unknown table 'test.adddate' +-------- +DROP TABLE test.substr; -- Unknown table 'test.substr' +-------- +DROP TABLE test.substring; -- Unknown table 'test.substring' +-------- +DROP TABLE test.trim_oracle; -- Unknown table 'test.trim_oracle' +-------- +DROP TABLE test.ascii; -- Unknown table 'test.ascii' +-------- +DROP TABLE test.replace; -- Unknown table 'test.replace' +-------- +DROP TABLE test.weight_string; -- Unknown table 'test.weight_string' +-------- +DROP TABLE test.char; -- Unknown table 'test.char' +-------- +DROP TABLE test.trim; -- Unknown table 'test.trim' +-------- +DROP TABLE test.year; -- Unknown table 'test.year' +-------- +DROP TABLE test.create; -- Unknown table 'test.create' +CALL p2('CREATE FUNCTION $(VAR)() RETURNS OOPS'); +-------- +CREATE FUNCTION non_keyword() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION lpad() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION rpad() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION adddate() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION substr() RETURNS OOPS; -- ..syntax.. near 'substr() RETURNS OOPS' +-------- +CREATE FUNCTION substring() RETURNS OOPS; -- ..syntax.. near 'substring() RETURNS OOP +-------- +CREATE FUNCTION trim_oracle() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION ascii() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION replace() RETURNS OOPS; -- ..syntax.. near 'replace() RETURNS OOPS' +-------- +CREATE FUNCTION weight_string() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION char() RETURNS OOPS; -- ..syntax.. near 'char() RETURNS OOPS' at +-------- +CREATE FUNCTION trim() RETURNS OOPS; -- ..syntax.. near 'trim() RETURNS OOPS' at +-------- +CREATE FUNCTION year() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION create() RETURNS OOPS; -- ..syntax.. near 'create() RETURNS OOPS' +CALL p2('CREATE FUNCTION test.$(VAR)() RETURNS OOPS'); +-------- +CREATE FUNCTION test.non_keyword() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.lpad() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.rpad() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.adddate() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.substr() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.substring() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.trim_oracle() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.ascii() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.replace() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.weight_string() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.char() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.trim() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.year() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +-------- +CREATE FUNCTION test.create() RETURNS OOPS; -- ..syntax.. near 'OOPS' at line 1 +CALL p2('DROP FUNCTION $(VAR)'); +-------- +DROP FUNCTION non_keyword; -- This command is not supported in the pre +-------- +DROP FUNCTION lpad; -- This command is not supported in the pre +-------- +DROP FUNCTION rpad; -- This command is not supported in the pre +-------- +DROP FUNCTION adddate; -- This command is not supported in the pre +-------- +DROP FUNCTION substr; -- This command is not supported in the pre +-------- +DROP FUNCTION substring; -- This command is not supported in the pre +-------- +DROP FUNCTION trim_oracle; -- This command is not supported in the pre +-------- +DROP FUNCTION ascii; -- This command is not supported in the pre +-------- +DROP FUNCTION replace; -- ..syntax.. near 'replace' at line 1 +-------- +DROP FUNCTION weight_string; -- This command is not supported in the pre +-------- +DROP FUNCTION char; -- ..syntax.. near 'char' at line 1 +-------- +DROP FUNCTION trim; -- This command is not supported in the pre +-------- +DROP FUNCTION year; -- This command is not supported in the pre +-------- +DROP FUNCTION create; -- ..syntax.. near 'create' at line 1 +CALL p2('DROP FUNCTION test.$(VAR)'); +-------- +DROP FUNCTION test.non_keyword; -- This command is not supported in the pre +-------- +DROP FUNCTION test.lpad; -- This command is not supported in the pre +-------- +DROP FUNCTION test.rpad; -- This command is not supported in the pre +-------- +DROP FUNCTION test.adddate; -- This command is not supported in the pre +-------- +DROP FUNCTION test.substr; -- This command is not supported in the pre +-------- +DROP FUNCTION test.substring; -- This command is not supported in the pre +-------- +DROP FUNCTION test.trim_oracle; -- This command is not supported in the pre +-------- +DROP FUNCTION test.ascii; -- This command is not supported in the pre +-------- +DROP FUNCTION test.replace; -- This command is not supported in the pre +-------- +DROP FUNCTION test.weight_string; -- This command is not supported in the pre +-------- +DROP FUNCTION test.char; -- This command is not supported in the pre +-------- +DROP FUNCTION test.trim; -- This command is not supported in the pre +-------- +DROP FUNCTION test.year; -- This command is not supported in the pre +-------- +DROP FUNCTION test.create; -- This command is not supported in the pre +DROP TABLE t1; +DROP PROCEDURE p1; +DROP PROCEDURE p2; diff --git a/mysql-test/main/keywords.test b/mysql-test/main/keywords.test index a745aada1065f..e6a3fc4953d13 100644 --- a/mysql-test/main/keywords.test +++ b/mysql-test/main/keywords.test @@ -295,3 +295,80 @@ BEGIN NOT ATOMIC END $$ DELIMITER ;$$ + + +--echo # +--echo # Testing various keywords in various contexts +--echo # + +DELIMITER $$; +CREATE PROCEDURE p1(query TEXT, var TEXT) +BEGIN + DECLARE errmsg TEXT DEFAULT ''; + DECLARE CONTINUE HANDLER + FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 errmsg = MESSAGE_TEXT; + SET errmsg= REPLACE(errmsg, 'You have an error in your SQL ', '..'); + SET errmsg= REPLACE(errmsg, '; check the manual that corresponds to your MariaDB server version for the right syntax to use', '..'); + END; + SET query=REPLACE(query, '$(VAR)', var); + EXECUTE IMMEDIATE query; + SELECT CONCAT(query, '; -- ', LEFT(COALESCE(errmsg,''),40)) AS `--------`; +END; +$$ +CREATE PROCEDURE p2(query TEXT) +BEGIN + FOR row IN (SELECT word FROM t1 ORDER BY category, word) + DO + CALL p1(query, row.word); + END FOR; +END; +$$ +DELIMITER ;$$ + +CREATE TABLE t1 (word TEXT, category TEXT); + +INSERT INTO t1 VALUES ('non_keyword', '00 Simple identifier'); + +INSERT INTO t1 VALUES ('lpad', '01 Built-in native function'); +INSERT INTO t1 VALUES ('rpad', '01 Built-in native function'); + +INSERT INTO t1 VALUES ('adddate', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('substr', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('substring', '02 function_call_nonkeyword'); +INSERT INTO t1 VALUES ('trim_oracle', '02 function_call_nonkeyword'); + +INSERT INTO t1 VALUES ('ascii', '03 function_call_conflict'); +INSERT INTO t1 VALUES ('replace', '03 function_call_conflict'); +INSERT INTO t1 VALUES ('weight_string', '03 function_call_conflict'); + +INSERT INTO t1 VALUES ('char', '04 function_call_keyword'); +INSERT INTO t1 VALUES ('trim', '04 function_call_keyword'); +INSERT INTO t1 VALUES ('year', '04 function_call_keyword'); + +INSERT INTO t1 VALUES ('create', '05 Reserved keyword'); + +CALL p2('SELECT @@$(VAR)'); +CALL p2('SELECT @@global.$(VAR)'); +CALL p2('SELECT @@global.$(VAR)()'); + +CALL p2('SELECT $(VAR)()'); +CALL p2('SELECT test.$(VAR)()'); + +CALL p2('SELECT $(VAR) FROM t1'); +CALL p2('SELECT t1.$(VAR) FROM t1'); + +CALL p2('DROP TABLE $(VAR)'); +CALL p2('DROP TABLE test.$(VAR)'); + +CALL p2('CREATE FUNCTION $(VAR)() RETURNS OOPS'); +CALL p2('CREATE FUNCTION test.$(VAR)() RETURNS OOPS'); + +CALL p2('DROP FUNCTION $(VAR)'); +CALL p2('DROP FUNCTION test.$(VAR)'); + +DROP TABLE t1; + +DROP PROCEDURE p1; +DROP PROCEDURE p2; From e84e134a9100f1d04f9fff56c2097ab4d020b57c Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 7 Apr 2022 09:30:26 +1000 Subject: [PATCH 2/9] main.thread_pool_info - no threadpool on aix --- mysql-test/main/thread_pool_info.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/main/thread_pool_info.test b/mysql-test/main/thread_pool_info.test index cd906454d8c88..84dce94d778e8 100644 --- a/mysql-test/main/thread_pool_info.test +++ b/mysql-test/main/thread_pool_info.test @@ -1,4 +1,5 @@ source include/not_embedded.inc; +source include/not_aix.inc; let $have_plugin = `SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_STATUS='ACTIVE' AND PLUGIN_NAME = 'THREAD_POOL_GROUPS'`; if(!$have_plugin) From 4ee00a29e34d80555b6d1b4eb3f7b44b2f8049fa Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 7 Apr 2022 10:50:04 +1000 Subject: [PATCH 3/9] MDEV-28250 aix test case failure innodb_zip.innochecksum_3,4k,crc32,innodb As discovered by tracing, but also presenting in AIX fseeko documentation, seeking beyond the EOF is acceptable, as you can write there. To display the same error in AIX to other implementations that return errors on seek, we take the EFBIG error code on reading and error the same way. An AIX truss of an aspect of the test: truss extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd statx("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", 0x0FFFFFFFFFFFF610, 176, 010) = 0 kopen("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", O_RDONLY|O_LARGEFILE) = 3 kfcntl(3, 12, 0x00000001100006C8) = 0 kfcntl(3, F_GETFL, 0x00000001100A6CF8) = 67108864 kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0) = 0 kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096) = 4096 klseek(3, 0, 1, 0x0FFFFFFFFFFFF450) = 0 klseek(3, 17592186040320, 0, 0x0FFFFFFFFFFFF450) = 0 klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0) = 0 kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096) Err#27 EFBIG An equivalent Linux trace: ltrace extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd stat64(0x7fff10ea2dc3, 0x7fff10ea0670, 88, 0x8026be41) = 0 open64("./mysql-test/var/log/innodb_zip."..., 0, 02072403160) = 3 fcntl64(3, 6, 0x139f180, 1) = 0 fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 0) = 0 fseeko64(0x615000000080, 0xffffffff000, 0, 5 pthread_getspecific(0, 0x4d0eb8, 0x7fff10ea0490, 0) = 0x7f7b2806d000 <... fseeko64 resumed> ) = 0 fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 1) = 0 feof(0x615000000080) = 0 feof(0x615000000080) = 1 Error: Unable to seek to necessary offset --- extra/innochecksum.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/extra/innochecksum.cc b/extra/innochecksum.cc index 3c3c027591529..5ac48f57fb151 100644 --- a/extra/innochecksum.cc +++ b/extra/innochecksum.cc @@ -1893,6 +1893,18 @@ int main( } if (ferror(fil_in)) { +#ifdef _AIX + /* + AIX fseeko can go past eof without error. + the error occurs on read, hence output the + same error here as would show up on other + platforms. This shows up in the mtr test + innodb_zip.innochecksum_3-4k,crc32,innodb + */ + if (errno == EFBIG) { + goto unexpected_eof; + } +#endif fprintf(stderr, "Error reading " ULINTPF " bytes", physical_page_size); perror(" "); From 3c99a48db31c8601a5eb0a9465dc96d8f7f72999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Wed, 6 Apr 2022 15:54:59 +0300 Subject: [PATCH 4/9] MDEV-28247 : Disable background ibuf merge during Galera SST This failure was caused by MDEV-25975, which removed the parameter innodb_disallow_writes. Added a check for wsrep_sst_disable_writes to the function ibuf_merge_in_background(). --- storage/innobase/ibuf/ibuf0ibuf.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 60496f2023007..f530ed75b6137 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -27,6 +27,13 @@ Created 7/19/1997 Heikki Tuuri #include "ibuf0ibuf.h" #include "sync0sync.h" #include "btr0sea.h" +#ifdef WITH_WSREP +extern uint32 wsrep_sst_disable_writes; +# define wsrep_sst_disable_writes \ + my_atomic_load32_explicit(&wsrep_sst_disable_writes, MY_MEMORY_ORDER_RELAXED) +#else +# define wsrep_sst_disable_writes false +#endif using st_::span; @@ -2653,6 +2660,10 @@ ibuf_merge_in_background( } #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ + if (wsrep_sst_disable_writes) { + return(0); + } + if (full) { /* Caller has requested a full batch */ n_pages = PCT_IO(100); From 8990ffe62adce06001c4c950cfcc977a4d8ea4db Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 25 Mar 2022 17:25:11 +1100 Subject: [PATCH 5/9] MDEV-28153: Debian autobake to generate control Without doing the full build. Autobake now includes a dependency on lsb-release. As the BB CI images (https://github.com/MariaDB/mariadb.org-tools/blob/master/buildbot.mariadb.org/ci_build_images/debian.Dockerfile) have explicit dependencies, there's no point maintaining them in two places. We don't want do the full autobake-deb.sh there, just enough to have the control file containing the correct dependencies. Helps: https://github.com/MariaDB/mariadb.org-tools/pull/130 --- debian/autobake-deb.sh | 14 +++++++++++--- debian/salsa-ci.yml | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh index 08c83a8634961..50d839439e599 100755 --- a/debian/autobake-deb.sh +++ b/debian/autobake-deb.sh @@ -30,9 +30,12 @@ then # build is not running on Travis or Gitlab-CI sed '/-DPLUGIN_COLUMNSTORE=NO/d' -i debian/rules # Take the files and part of control from MCS directory - cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/ - echo >> debian/control - cat storage/columnstore/columnstore/debian/control >> debian/control + if [ ! -f debian/mariadb-plugin-columnstore.install ] + then + cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/ + echo >> debian/control + cat storage/columnstore/columnstore/debian/control >> debian/control + fi fi # Look up distro-version specific stuff @@ -91,6 +94,11 @@ case "${CODENAME}" in exit 1 esac +if [ -n "${AUTOBAKE_PREP_CONTROL_RULES_ONLY:-}" ] +then + exit 0 +fi + # Adjust changelog, add new version echo "Incrementing changelog and starting build scripts" diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml index 24f59aae22171..6fc90193e0600 100644 --- a/debian/salsa-ci.yml +++ b/debian/salsa-ci.yml @@ -34,7 +34,7 @@ build: - mv ${CCACHE_WORK_DIR} ${CCACHE_TMP_DIR} # Run Salsa-CI .build-script equivalent, with extra devscripts so autobake-deb.sh can run 'dch' - export CCACHE_DIR=${CCACHE_TMP_DIR} - - apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts + - apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts lsb-release - cd ${WORKING_DIR}/${SOURCE_DIR} - eatmydata apt-get build-dep --no-install-recommends -y . - update-ccache-symlinks; ccache -z # Zero out ccache counters From dea4e178fe2bbefc08133de44513ba47cb2d8bf2 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 7 Apr 2022 14:55:52 +1000 Subject: [PATCH 6/9] deb: make --output-sync=target Rather than Debian logs containing a barely decipherable mix of build command and the output of some other command, we use the make option --output-sync=target. This make the compile line and the output stay together in the output stream. This option exists even in the make version in debian;stretch so should work everywhere. Test on debian:stretch, ubuntu:18.04, the two lowest version that use the debian/rules. --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index 967dfe9c43411..57636eb028a63 100755 --- a/debian/rules +++ b/debian/rules @@ -108,7 +108,7 @@ override_dh_auto_build: @echo "RULES.$@" # Print build env info to help debug builds on different platforms dpkg-architecture - cd $(BUILDDIR) && $(MAKE) + cd $(BUILDDIR) && $(MAKE) --output-sync=target override_dh_auto_test: @echo "RULES.$@" From d8463b64b3f3a601ee39666fd0b758313e373519 Mon Sep 17 00:00:00 2001 From: Nayuta Yanagisawa Date: Fri, 21 Jan 2022 01:59:25 +0900 Subject: [PATCH 7/9] MDEV-27239 Spider: Assertion `thd->transaction->stmt.ha_list == __null || trans == &thd->transaction->stmt' failed in ha_commit_trans on BEGIN WORK after FTWRL The check on the SQL command type, in ha_spider::external_lock() is deleted by e954d9de. This resulted in the wrong call of spider_internal_start_trx() (and thus Ha_trx_info::register_ha()). I reverted the check and refactored ha_spider::external_lock(). --- storage/spider/ha_spider.cc | 153 +++++++----------- .../spider/bugfix/r/mdev_27239.result | 20 +++ .../mysql-test/spider/bugfix/t/mdev_27239.cnf | 2 + .../spider/bugfix/t/mdev_27239.test | 24 +++ 4 files changed, 105 insertions(+), 94 deletions(-) create mode 100644 storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result create mode 100644 storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf create mode 100644 storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc index 48bf8f4c664ff..974e096510eb8 100644 --- a/storage/spider/ha_spider.cc +++ b/storage/spider/ha_spider.cc @@ -1182,75 +1182,83 @@ int ha_spider::external_lock( int error_num = 0; SPIDER_TRX *trx; backup_error_status(); + DBUG_ENTER("ha_spider::external_lock"); DBUG_PRINT("info",("spider this=%p", this)); DBUG_PRINT("info",("spider lock_type=%x", lock_type)); -#if MYSQL_VERSION_ID < 50500 - DBUG_PRINT("info",("spider thd->options=%x", (int) thd->options)); -#endif -#ifdef WITH_PARTITION_STORAGE_ENGINE - if ( - wide_handler->stage == SPD_HND_STAGE_EXTERNAL_LOCK && - wide_handler->stage_executor != this) + DBUG_PRINT("info", ("spider sql_command=%d", thd_sql_command(thd))); + + if (wide_handler->stage == SPD_HND_STAGE_EXTERNAL_LOCK) { - DBUG_RETURN(0); + /* Only the stage executor deals with table locks. */ + if (wide_handler->stage_executor != this) + { + DBUG_RETURN(0); + } + } + else + { + /* Update the stage executor when the stage changes */ + wide_handler->stage= SPD_HND_STAGE_EXTERNAL_LOCK; + wide_handler->stage_executor= this; } - wide_handler->stage = SPD_HND_STAGE_EXTERNAL_LOCK; - wide_handler->stage_executor = this; -#endif -#ifdef HANDLER_HAS_NEED_INFO_FOR_AUTO_INC - info_auto_called = FALSE; -#endif + info_auto_called = FALSE; + wide_handler->external_lock_type= lock_type; wide_handler->sql_command = thd_sql_command(thd); + + /* We treat BEGIN as if UNLOCK TABLE. */ if (wide_handler->sql_command == SQLCOM_BEGIN) + { wide_handler->sql_command = SQLCOM_UNLOCK_TABLES; + } + if (lock_type == F_UNLCK && + wide_handler->sql_command != SQLCOM_UNLOCK_TABLES) + { + DBUG_RETURN(0); + } trx = spider_get_trx(thd, TRUE, &error_num); if (error_num) + { DBUG_RETURN(error_num); + } wide_handler->trx = trx; - DBUG_PRINT("info",("spider sql_command=%d", wide_handler->sql_command)); -#ifdef HA_CAN_BULK_ACCESS - wide_handler->external_lock_cnt++; -#endif - if ( - lock_type == F_UNLCK && - wide_handler->sql_command != SQLCOM_UNLOCK_TABLES - ) - DBUG_RETURN(0); + /* Question: Why the following if block is necessary? Why here? */ if (store_error_num) + { DBUG_RETURN(store_error_num); - wide_handler->external_lock_type = lock_type; -#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) - if ((conn_kinds & SPIDER_CONN_KIND_MYSQL)) + } + + DBUG_ASSERT(wide_handler->sql_command != SQLCOM_RENAME_TABLE && + wide_handler->sql_command != SQLCOM_DROP_DB); + + if (wide_handler->sql_command == SQLCOM_DROP_TABLE || + wide_handler->sql_command == SQLCOM_ALTER_TABLE) { -#endif - if ( - /* SQLCOM_RENAME_TABLE and SQLCOM_DROP_DB don't come here */ - wide_handler->sql_command == SQLCOM_DROP_TABLE || - wide_handler->sql_command == SQLCOM_ALTER_TABLE - ) { - if (trx->locked_connections) - { - my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM, - ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0)); - DBUG_RETURN(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM); - } - DBUG_RETURN(0); + if (trx->locked_connections) + { + my_message(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM, + ER_SPIDER_ALTER_BEFORE_UNLOCK_STR, MYF(0)); + DBUG_RETURN(ER_SPIDER_ALTER_BEFORE_UNLOCK_NUM); } - if (unlikely((error_num = spider_internal_start_trx(this)))) + DBUG_RETURN(0); + } + + if (lock_type != F_UNLCK) + { + if (unlikely((error_num= spider_internal_start_trx(this)))) { DBUG_RETURN(error_num); } -#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) - } else { - trans_register_ha(trx->thd, FALSE, spider_hton_ptr); - if (thd_test_options(trx->thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) - trans_register_ha(trx->thd, TRUE, spider_hton_ptr); + if (wide_handler->sql_command != SQLCOM_SELECT && + wide_handler->sql_command != SQLCOM_HA_READ) + { + trx->updated_in_this_trx= TRUE; + DBUG_PRINT("info", ("spider trx->updated_in_this_trx=TRUE")); + } } -#endif if (wide_handler->lock_table_type > 0 || wide_handler->sql_command == SQLCOM_UNLOCK_TABLES) @@ -1263,12 +1271,10 @@ int ha_spider::external_lock( } /* lock/unlock tables */ -#ifdef WITH_PARTITION_STORAGE_ENGINE if (partition_handler && partition_handler->handlers) { - uint roop_count; - for (roop_count = 0; roop_count < partition_handler->no_parts; - ++roop_count) + for (uint roop_count= 0; roop_count < partition_handler->no_parts; + ++roop_count) { if (unlikely((error_num = partition_handler->handlers[roop_count]->lock_tables()))) @@ -1276,54 +1282,13 @@ int ha_spider::external_lock( DBUG_RETURN(error_num); } } - } else { -#endif - if (unlikely((error_num = lock_tables()))) - { - DBUG_RETURN(error_num); - } -#ifdef WITH_PARTITION_STORAGE_ENGINE } -#endif - } - - DBUG_PRINT("info",("spider trx_start=%s", - trx->trx_start ? "TRUE" : "FALSE")); - /* need to check after spider_internal_start_trx() */ - if (trx->trx_start) - { - switch (wide_handler->sql_command) + else if (unlikely((error_num= lock_tables()))) { - case SQLCOM_SELECT: - case SQLCOM_HA_READ: -#ifdef HS_HAS_SQLCOM - case SQLCOM_HS_READ: -#endif - /* nothing to do */ - break; - case SQLCOM_UPDATE: - case SQLCOM_UPDATE_MULTI: -#ifdef HS_HAS_SQLCOM - case SQLCOM_HS_UPDATE: -#endif - case SQLCOM_CREATE_TABLE: - case SQLCOM_INSERT: - case SQLCOM_INSERT_SELECT: - case SQLCOM_DELETE: - case SQLCOM_LOAD: - case SQLCOM_REPLACE: - case SQLCOM_REPLACE_SELECT: - case SQLCOM_DELETE_MULTI: -#ifdef HS_HAS_SQLCOM - case SQLCOM_HS_INSERT: - case SQLCOM_HS_DELETE: -#endif - default: - trx->updated_in_this_trx = TRUE; - DBUG_PRINT("info",("spider trx->updated_in_this_trx=TRUE")); - break; + DBUG_RETURN(error_num); } } + DBUG_RETURN(0); } diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result new file mode 100644 index 0000000000000..de135972a22a8 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_27239.result @@ -0,0 +1,20 @@ +# +# MDEV-27239 Spider: Assertion `thd->transaction->stmt.ha_list == __null || trans == &thd->transaction->stmt' failed in ha_commit_trans on BEGIN WORK after FTWRL +# +for master_1 +for child2 +for child3 +CREATE DATABASE auto_test_local; +USE auto_test_local; +CREATE TABLE tbl_a (a INT) ENGINE=SPIDER; +FLUSH TABLE tbl_a WITH READ LOCK; +Warnings: +Error 1429 Unable to connect to foreign data source: localhost +Error 1429 Unable to connect to foreign data source: localhost +Error 1429 Unable to connect to foreign data source: localhost +Error 1429 Unable to connect to foreign data source: localhost +BEGIN; +DROP DATABASE auto_test_local; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf new file mode 100644 index 0000000000000..b0853e32654d9 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.cnf @@ -0,0 +1,2 @@ +!include include/default_mysqld.cnf +!include ../my_1_1.cnf diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test new file mode 100644 index 0000000000000..3cf4bebd36922 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27239.test @@ -0,0 +1,24 @@ +--echo # +--echo # MDEV-27239 Spider: Assertion `thd->transaction->stmt.ha_list == __null || trans == &thd->transaction->stmt' failed in ha_commit_trans on BEGIN WORK after FTWRL +--echo # + +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +CREATE DATABASE auto_test_local; +USE auto_test_local; + +CREATE TABLE tbl_a (a INT) ENGINE=SPIDER; +FLUSH TABLE tbl_a WITH READ LOCK; +BEGIN; + +DROP DATABASE auto_test_local; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log From cfdb621243b97e38c0ff849456d8dac0a5224ef3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 8 Apr 2022 14:17:36 +0200 Subject: [PATCH 8/9] MDEV-28255 "Error" instead of NULL in P_S.THREADS_CONNECTION_TYPE for background threads use vio_type_names[] values as in MySQL --- mysql-test/suite/perfschema/r/threads_mysql.result | 8 ++++++-- mysql-test/suite/perfschema/t/threads_mysql.test | 2 +- vio/viosocket.c | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/perfschema/r/threads_mysql.result b/mysql-test/suite/perfschema/r/threads_mysql.result index 40e6360fec7bf..d0748349af371 100644 --- a/mysql-test/suite/perfschema/r/threads_mysql.result +++ b/mysql-test/suite/perfschema/r/threads_mysql.result @@ -1,6 +1,6 @@ SET GLOBAL event_scheduler = OFF; SELECT name, type, processlist_user, processlist_host, processlist_db, -processlist_command, processlist_info, +processlist_command, processlist_info, connection_type, IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') AS unified_parent_thread_id, role, instrumented @@ -14,6 +14,7 @@ processlist_host NULL processlist_db mysql processlist_command NULL processlist_info NULL +connection_type NULL unified_parent_thread_id NULL role NULL instrumented YES @@ -24,6 +25,7 @@ processlist_host NULL processlist_db NULL processlist_command NULL processlist_info NULL +connection_type NULL unified_parent_thread_id unified parent_thread_id role NULL instrumented YES @@ -34,13 +36,14 @@ processlist_host localhost processlist_db test processlist_command Query processlist_info SELECT name, type, processlist_user, processlist_host, processlist_db, -processlist_command, processlist_info, +processlist_command, processlist_info, connection_type, IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') AS unified_parent_thread_id, role, instrumented FROM performance_schema.threads WHERE name LIKE 'thread/sql%' ORDER BY name +connection_type Socket unified_parent_thread_id unified parent_thread_id role NULL instrumented YES @@ -51,6 +54,7 @@ processlist_host NULL processlist_db NULL processlist_command NULL processlist_info NULL +connection_type NULL unified_parent_thread_id unified parent_thread_id role NULL instrumented YES diff --git a/mysql-test/suite/perfschema/t/threads_mysql.test b/mysql-test/suite/perfschema/t/threads_mysql.test index c33f421863e2b..8a021055d4436 100644 --- a/mysql-test/suite/perfschema/t/threads_mysql.test +++ b/mysql-test/suite/perfschema/t/threads_mysql.test @@ -32,7 +32,7 @@ SET GLOBAL event_scheduler = OFF; # Therefore we have to disable this protocol for the next statement. --disable_ps_protocol SELECT name, type, processlist_user, processlist_host, processlist_db, - processlist_command, processlist_info, + processlist_command, processlist_info, connection_type, IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') AS unified_parent_thread_id, role, instrumented diff --git a/vio/viosocket.c b/vio/viosocket.c index 9cad035161c4a..0ce351f124259 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -647,7 +647,7 @@ enum enum_vio_type vio_type(Vio* vio) static const LEX_CSTRING vio_type_names[] = { - { STRING_WITH_LEN("Error") }, // cannot happen + { STRING_WITH_LEN("") }, // internal threads { STRING_WITH_LEN("TCP/IP") }, { STRING_WITH_LEN("Socket") }, { STRING_WITH_LEN("Named Pipe") }, From bf70532e3d64011e0d5319317fc938539fc42c28 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Sun, 10 Apr 2022 14:36:47 +0400 Subject: [PATCH 9/9] 10.5 tests for MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed The fix for MDEV-27673 (in 10.3) fixed MDEV-26507 as well. This patch only adds MTR tests. --- mysql-test/main/information_schema.result | 21 ++++++++++++++++ mysql-test/main/information_schema.test | 24 ++++++++++++++++++ mysql-test/suite/innodb_i_s/innodb_trx.result | 18 +++++++++++++ mysql-test/suite/innodb_i_s/innodb_trx.test | 25 +++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/mysql-test/main/information_schema.result b/mysql-test/main/information_schema.result index 54307546f0231..aded33a1e73b7 100644 --- a/mysql-test/main/information_schema.result +++ b/mysql-test/main/information_schema.result @@ -2400,3 +2400,24 @@ progress # # End of 10.3 tests # +# +# Start of 10.5 tests +# +# +# MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed +# +CREATE TABLE t1 (a int); +CREATE ALGORITHM=TEMPTABLE VIEW i AS +SELECT a.created +FROM t1 w JOIN INFORMATION_SCHEMA.routines a +WHERE a.routine_name='not existing' + ORDER BY a.last_altered; +SET SESSION sql_mode='ALLOW_INVALID_DATES'; +SELECT * FROM i; +created +SET SESSION sql_mode=DEFAULT; +DROP VIEW i; +DROP TABLE t1; +# +# End of 10.5 tests +# diff --git a/mysql-test/main/information_schema.test b/mysql-test/main/information_schema.test index 4c231d94160dc..fa27dcdf8f3e9 100644 --- a/mysql-test/main/information_schema.test +++ b/mysql-test/main/information_schema.test @@ -2110,3 +2110,27 @@ select progress from information_schema.processlist limit 1; --echo # --echo # End of 10.3 tests --echo # + +--echo # +--echo # Start of 10.5 tests +--echo # + +--echo # +--echo # MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed +--echo # + +CREATE TABLE t1 (a int); +CREATE ALGORITHM=TEMPTABLE VIEW i AS + SELECT a.created + FROM t1 w JOIN INFORMATION_SCHEMA.routines a + WHERE a.routine_name='not existing' + ORDER BY a.last_altered; +SET SESSION sql_mode='ALLOW_INVALID_DATES'; +SELECT * FROM i; +SET SESSION sql_mode=DEFAULT; +DROP VIEW i; +DROP TABLE t1; + +--echo # +--echo # End of 10.5 tests +--echo # diff --git a/mysql-test/suite/innodb_i_s/innodb_trx.result b/mysql-test/suite/innodb_i_s/innodb_trx.result index b9e0b05297d42..cdcbe64b14130 100644 --- a/mysql-test/suite/innodb_i_s/innodb_trx.result +++ b/mysql-test/suite/innodb_i_s/innodb_trx.result @@ -28,3 +28,21 @@ CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_TRX; DROP TEMPORARY TABLE t1; CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0; DROP TEMPORARY TABLE t1; +# +# Start of 10.5 tests +# +# +# MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed +# +CREATE ALGORITHM=TEMPTABLE VIEW i AS +SELECT a.trx_started +FROM INFORMATION_SCHEMA.innodb_lock_waits w +JOIN INFORMATION_SCHEMA.innodb_trx a +ORDER BY a.trx_wait_started; +SET SESSION sql_mode='ALLOW_INVALID_DATES'; +SELECT * FROM i; +SET SESSION sql_mode=DEFAULT; +DROP VIEW i; +# +# End of 10.5 tests +# diff --git a/mysql-test/suite/innodb_i_s/innodb_trx.test b/mysql-test/suite/innodb_i_s/innodb_trx.test index 90fa3467b50f2..2a66750ed9ffc 100644 --- a/mysql-test/suite/innodb_i_s/innodb_trx.test +++ b/mysql-test/suite/innodb_i_s/innodb_trx.test @@ -7,3 +7,28 @@ DROP TEMPORARY TABLE t1; CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0; DROP TEMPORARY TABLE t1; + + +--echo # +--echo # Start of 10.5 tests +--echo # + +--echo # +--echo # MDEV-26507 Assertion `tmp != ((long long) 0x8000000000000000LL)' failed in TIME_from_longlong_datetime_packed +--echo # + +CREATE ALGORITHM=TEMPTABLE VIEW i AS + SELECT a.trx_started + FROM INFORMATION_SCHEMA.innodb_lock_waits w + JOIN INFORMATION_SCHEMA.innodb_trx a + ORDER BY a.trx_wait_started; +SET SESSION sql_mode='ALLOW_INVALID_DATES'; +--disable_result_log +SELECT * FROM i; +--enable_result_log +SET SESSION sql_mode=DEFAULT; +DROP VIEW i; + +--echo # +--echo # End of 10.5 tests +--echo #