Merge branch '10.5' into mariadb-10.5.26

This commit is contained in:
Oleksandr Byelkin 2024-08-09 08:47:24 +02:00
commit 662bb50784
45 changed files with 664 additions and 198 deletions

View file

@ -1,4 +1,4 @@
MYSQL_VERSION_MAJOR=10
MYSQL_VERSION_MINOR=5
MYSQL_VERSION_PATCH=26
MYSQL_VERSION_PATCH=27
SERVER_MATURITY=stable

View file

@ -249,7 +249,6 @@ get_one_option(const struct my_option *opt, const char *argument,
#ifdef __WIN__
case 'W':
opt_protocol = MYSQL_PROTOCOL_PIPE;
opt_local_file=1;
break;
#endif
case OPT_MYSQL_PROTOCOL:

View file

@ -220,8 +220,9 @@ SETA(CPACK_RPM_server_PACKAGE_REQUIRES
IF(WITH_WSREP)
SETA(CPACK_RPM_server_PACKAGE_REQUIRES
"galera-4" "rsync" "lsof" "grep" "gawk" "iproute"
"galera-4" "rsync" "grep" "gawk" "iproute"
"coreutils" "findutils" "tar")
SETA(CPACK_RPM_server_PACKAGE_RECOMMENDS "lsof")
ENDIF()
SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh)

View file

@ -8,15 +8,17 @@ SET(CONC_WITH_SIGNCODE ${SIGNCODE})
SET(SIGN_OPTIONS ${SIGNTOOL_PARAMETERS})
SET(CONC_WITH_EXTERNAL_ZLIB ON)
IF(SSL_DEFINES MATCHES "WOLFSSL")
IF(WIN32)
SET(CONC_WITH_SSL "SCHANNEL")
IF(NOT CONC_WITH_SSL)
IF(SSL_DEFINES MATCHES "WOLFSSL")
IF(WIN32)
SET(CONC_WITH_SSL "SCHANNEL")
ELSE()
SET(CONC_WITH_SSL "GNUTLS") # that's what debian wants, right?
ENDIF()
ELSE()
SET(CONC_WITH_SSL "GNUTLS") # that's what debian wants, right?
SET(CONC_WITH_SSL "OPENSSL")
SET(OPENSSL_FOUND TRUE)
ENDIF()
ELSE()
SET(CONC_WITH_SSL "OPENSSL")
SET(OPENSSL_FOUND TRUE)
ENDIF()
SET(CONC_WITH_CURL OFF)

View file

@ -206,7 +206,8 @@ static my_bool print_win_error_msg(DWORD error, my_bool verbose)
char *s;
if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, error, 0, (char *)&s, 0,
NULL, error, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
(char *) &s, 0,
NULL))
{
char* end = s + strlen(s) - 1;

View file

@ -955,3 +955,47 @@ DROP TABLE t;
#
# End of 10.4 tests
#
#
# MDEV-23983: Crash caused by query containing constant having clause
#
CREATE TABLE t1 (id INT PRIMARY KEY, a INT, b TEXT, c INT);
INSERT INTO t1 VALUES (3, 7, 'b', 1), (4, 7, 'b', 1);
SELECT * FROM t1
WHERE t1.id = 3
GROUP BY t1.a
HAVING t1.b = 'b' and t1.c = 1;
id a b c
3 7 b 1
SELECT * FROM t1
WHERE t1.id = 3
GROUP BY t1.a
HAVING t1.b = 'b' and t1.c = 2;
id a b c
explain SELECT * FROM t1
WHERE t1.id = 3
GROUP BY t1.a
HAVING t1.b = 'b' and t1.c = 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible HAVING noticed after reading const tables
DROP TABLE t1;
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
CREATE TABLE t2 (id INT, b TEXT, c INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3, 'b', 1);
SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id = t1.a
GROUP BY t2.id
HAVING t2.b = 'b' and t2.c = 1;
id b c
3 b 1
SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id = t1.a
GROUP BY t2.id
HAVING t2.b = 'b' and t2.c = 2;
id b c
explain SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id = t1.a
GROUP BY t2.id
HAVING t2.b = 'b' and t2.c = 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible HAVING noticed after reading const tables
DROP TABLE t1,t2;
#
# End of 10.5 tests
#

View file

@ -1011,3 +1011,48 @@ DROP TABLE t;
--echo #
--echo # End of 10.4 tests
--echo #
--echo #
--echo # MDEV-23983: Crash caused by query containing constant having clause
--echo #
CREATE TABLE t1 (id INT PRIMARY KEY, a INT, b TEXT, c INT);
INSERT INTO t1 VALUES (3, 7, 'b', 1), (4, 7, 'b', 1);
SELECT * FROM t1
WHERE t1.id = 3
GROUP BY t1.a
HAVING t1.b = 'b' and t1.c = 1;
let $q=
SELECT * FROM t1
WHERE t1.id = 3
GROUP BY t1.a
HAVING t1.b = 'b' and t1.c = 2;
eval $q;
eval explain $q;
DROP TABLE t1;
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
CREATE TABLE t2 (id INT, b TEXT, c INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3, 'b', 1);
SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id = t1.a
GROUP BY t2.id
HAVING t2.b = 'b' and t2.c = 1;
let $q=
SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id = t1.a
GROUP BY t2.id
HAVING t2.b = 'b' and t2.c = 2;
eval $q;
eval explain $q;
DROP TABLE t1,t2;
--echo #
--echo # End of 10.5 tests
--echo #

View file

@ -14,3 +14,17 @@ SELECT * FROM t1 JOIN t2 ON t1.c=t2.c WHERE t1.c<=>5;
c c
DROP TABLE t1, t2;
SET optimizer_switch=default;
#
# MDEV-34683 Types mismatch when cloning items causes debug assertion
#
CREATE TABLE t1 (a date);
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
SELECT a FROM v1 WHERE a IN ('a', 'b', 'c');
a
CREATE VIEW v2 AS SELECT '' as a;
SELECT * FROM v2 WHERE a='' AND CASE '' WHEN '' THEN '' ELSE a END='';
a
DROP TABLE t1;
DROP VIEW v1, v2;
# End of 10.5 tests

View file

@ -13,3 +13,21 @@ SELECT * FROM t1 JOIN t2 ON t1.c=t2.c WHERE t1.c<=>5;
DROP TABLE t1, t2;
SET optimizer_switch=default;
--echo #
--echo # MDEV-34683 Types mismatch when cloning items causes debug assertion
--echo #
CREATE TABLE t1 (a date);
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
--disable_warnings
SELECT a FROM v1 WHERE a IN ('a', 'b', 'c');
--enable_warnings
CREATE VIEW v2 AS SELECT '' as a;
SELECT * FROM v2 WHERE a='' AND CASE '' WHEN '' THEN '' ELSE a END='';
DROP TABLE t1;
DROP VIEW v1, v2;
--echo # End of 10.5 tests

View file

@ -16,5 +16,3 @@ galera_sequences : MDEV-32561 WSREP FSM failure: no such a transition REPLICATIN
galera_concurrent_ctas : MDEV-32779 galera_concurrent_ctas: assertion in the galera::ReplicatorSMM::finish_cert()
galera_as_slave_replay : MDEV-32780 galera_as_slave_replay: assertion in the wsrep::transaction::before_rollback()
galera_slave_replay : MDEV-32780 galera_as_slave_replay: assertion in the wsrep::transaction::before_rollback()
galera_sst_mysqldump_with_key : MDEV-32782 galera_sst_mysqldump_with_key test failed
galera_var_ignore_apply_errors : MENT-1997 galera_var_ignore_apply_errors test freezes

View file

@ -0,0 +1,100 @@
connection node_2;
connection node_1;
create table t1(id serial, val varchar(100)) engine=myisam;
insert into t1 values(null, 'a');
insert into t1 values(null, 'b');
insert into t1 select null, 'c';
insert into t1 select null, 'd' from t1;
select * from t1;
id val
1 a
3 b
5 c
7 d
9 d
11 d
create table t2(id serial, val varchar(100)) engine=aria;
insert into t2 values(null, 'a');
insert into t2 values(null, 'b');
insert into t2 select null, 'c';
insert into t2 select null, 'd' from t2;
select * from t2;
id val
1 a
3 b
5 c
7 d
9 d
11 d
create table t3(id serial, val varchar(100)) engine=innodb;
insert into t3 values(null, 'a');
insert into t3 values(null, 'b');
insert into t3 select null, 'c';
insert into t3 select null, 'd' from t3;
select * from t3;
id val
1 a
3 b
5 c
7 d
9 d
11 d
set global wsrep_replicate_myisam=ON;
create table t4(id serial, val varchar(100)) engine=myisam;
insert into t4 values(null, 'a');
insert into t4 values(null, 'b');
insert into t4 select null, 'c';
insert into t4 select null, 'd' from t4;
select * from t4;
id val
1 a
2 b
3 c
4 d
5 d
6 d
create table t5(id serial, val varchar(100)) engine=myisam;
insert into t5 values(null, 'a');
insert into t5 values(null, 'b');
insert into t5 select null, 'c';
insert into t5 select null, 'd' from t5;
select * from t2;
id val
1 a
3 b
5 c
7 d
9 d
11 d
connection node_2;
select * from t1;
id val
select * from t2;
id val
select * from t3;
id val
1 a
3 b
5 c
7 d
9 d
11 d
select * from t4;
id val
1 a
2 b
3 c
4 d
5 d
6 d
select * from t5;
id val
1 a
2 b
3 c
4 d
5 d
6 d
connection node_1;
drop table t1,t2,t3,t4,t5;
set global wsrep_replicate_myisam=default;

View file

@ -7,27 +7,60 @@ SET GLOBAL wsrep_on = OFF;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = ON;
DROP TABLE t1;
connection node_2;
SHOW TABLES;
Tables_in_test
connection node_1;
SET GLOBAL wsrep_on = OFF;
CREATE SCHEMA s1;
SET GLOBAL wsrep_on = ON;
DROP SCHEMA s1;
connection node_2;
SHOW SCHEMAS;
Database
information_schema
mtr
mysql
performance_schema
test
connection node_1;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
CREATE INDEX idx1 ON t1 (f1);
SET GLOBAL wsrep_on = ON;
DROP INDEX idx1 ON t1;
connection node_2;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
connection node_1;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
CREATE INDEX idx1 ON t1 (f1);
SET GLOBAL wsrep_on = ON;
ALTER TABLE t1 DROP INDEX idx1;
connection node_2;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
connection node_1;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
SET GLOBAL wsrep_on = ON;
ALTER TABLE t1 DROP COLUMN f2;
connection node_2;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
connection node_2;
SET GLOBAL wsrep_ignore_apply_errors = 2;
@ -37,12 +70,11 @@ SET GLOBAL wsrep_on = OFF;
INSERT INTO t1 VALUES (1);
SET GLOBAL wsrep_on = ON;
DELETE FROM t1 WHERE f1 = 1;
connection node_1;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
connection node_2;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
DROP TABLE t1;
@ -57,12 +89,11 @@ INSERT INTO t1 VALUES (3);
DELETE FROM t1 WHERE f1 = 1;
DELETE FROM t1 WHERE f1 = 2;
COMMIT;
connection node_1;
SELECT COUNT(*) as expect_1 FROM t1;
SELECT COUNT(*) AS expect_1 FROM t1;
expect_1
1
connection node_2;
SELECT COUNT(*) as expect_1 FROM t1;
SELECT COUNT(*) AS expect_1 FROM t1;
expect_1
1
DROP TABLE t1;
@ -75,14 +106,14 @@ DELETE FROM t1 WHERE f1 = 3;
SET SESSION wsrep_on = ON;
connection node_1;
DELETE FROM t1;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
connection node_2;
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
VARIABLE_VALUE = 'Primary'
1
SELECT COUNT(*) as expect_0 FROM t1;
SELECT VARIABLE_VALUE expect_Primary FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
expect_Primary
Primary
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
DROP TABLE t1;
@ -103,14 +134,14 @@ DELETE FROM t1 WHERE f1 = 4;
DELETE FROM t1 WHERE f1 = 5;
COMMIT;
SET AUTOCOMMIT=ON;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
connection node_2;
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
VARIABLE_VALUE = 'Primary'
1
SELECT COUNT(*) as expect_0 FROM t1;
SELECT VARIABLE_VALUE expect_Primary FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
expect_Primary
Primary
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
DROP TABLE t1;
@ -126,14 +157,14 @@ DELETE FROM t1 WHERE f1 = 3;
SET SESSION wsrep_on = ON;
connection node_1;
DELETE t1, t2 FROM t1 JOIN t2 WHERE t1.f1 = t2.f1;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) expect_0 FROM t1;
expect_0
0
connection node_2;
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT VARIABLE_VALUE = 'Primary' FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
VARIABLE_VALUE = 'Primary'
1
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) expect_0 FROM t1;
expect_0
0
DROP TABLE t1,t2;
@ -148,20 +179,20 @@ DELETE FROM child WHERE parent_id = 2;
SET SESSION wsrep_on = ON;
connection node_1;
DELETE FROM parent;
SELECT COUNT(*) as expect_0 FROM parent;
SELECT COUNT(*) AS expect_0 FROM parent;
expect_0
0
SELECT COUNT(*) as expect_0 FROM child;
SELECT COUNT(*) AS expect_0 FROM child;
expect_0
0
connection node_2;
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT VARIABLE_VALUE = 'Primary' FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
VARIABLE_VALUE = 'Primary'
1
SELECT COUNT(*) as expect_0 FROM parent;
SELECT COUNT(*) AS expect_0 FROM parent;
expect_0
0
SELECT COUNT(*) as expect_0 FROM child;
SELECT COUNT(*) AS expect_0 FROM child;
expect_0
0
DROP TABLE child, parent;
@ -175,8 +206,10 @@ connection node_1;
CREATE TABLE t1 (f1 INTEGER, f2 INTEGER);
DROP TABLE t1;
connection node_2;
SELECT * FROM t1;
ERROR 42S02: Table 'test.t1' doesn't exist
SET GLOBAL wsrep_ignore_apply_errors = 7;
CALL mtr.add_suppression("Can't find record in 't.*'");
CALL mtr.add_suppression("Can't find record in ");
CALL mtr.add_suppression("Slave SQL: Could not execute Delete_rows event");
CALL mtr.add_suppression("Slave SQL: Error 'Unknown table 'test\\.t1'' on query\\. Default database: 'test'\\. Query: 'DROP TABLE t1', Error_code: 1051");
CALL mtr.add_suppression("Slave SQL: Error 'Can't drop database 's1'; database doesn't exist' on query\\. Default database: 'test'\\. Query: 'DROP SCHEMA s1', Error_code: 1008");

View file

@ -114,7 +114,7 @@ EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
EXPECT_1000
1000
0
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
EXPECT_1000
1000
@ -127,9 +127,9 @@ EXPECT_1000
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_0 FROM t8;
EXPECT_0
0
connection node_1;
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
# Bigger INSERT INTO ... SELECT test
@ -182,7 +182,7 @@ EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
EXPECT_1000
1000
0
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
EXPECT_1000
1000
@ -195,9 +195,9 @@ EXPECT_1000
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_0 FROM t8;
EXPECT_0
0
connection node_1;
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
CREATE TABLE t1(pk int not null primary key) engine=innodb;

View file

@ -0,0 +1,53 @@
--source include/galera_cluster.inc
--source include/have_aria.inc
create table t1(id serial, val varchar(100)) engine=myisam;
insert into t1 values(null, 'a');
insert into t1 values(null, 'b');
insert into t1 select null, 'c';
insert into t1 select null, 'd' from t1;
select * from t1;
create table t2(id serial, val varchar(100)) engine=aria;
insert into t2 values(null, 'a');
insert into t2 values(null, 'b');
insert into t2 select null, 'c';
insert into t2 select null, 'd' from t2;
select * from t2;
create table t3(id serial, val varchar(100)) engine=innodb;
insert into t3 values(null, 'a');
insert into t3 values(null, 'b');
insert into t3 select null, 'c';
insert into t3 select null, 'd' from t3;
select * from t3;
set global wsrep_replicate_myisam=ON;
create table t4(id serial, val varchar(100)) engine=myisam;
insert into t4 values(null, 'a');
insert into t4 values(null, 'b');
insert into t4 select null, 'c';
insert into t4 select null, 'd' from t4;
select * from t4;
create table t5(id serial, val varchar(100)) engine=myisam;
insert into t5 values(null, 'a');
insert into t5 values(null, 'b');
insert into t5 select null, 'c';
insert into t5 select null, 'd' from t5;
select * from t2;
--connection node_2
select * from t1;
select * from t2;
select * from t3;
select * from t4;
select * from t5;
--connection node_1
drop table t1,t2,t3,t4,t5;
set global wsrep_replicate_myisam=default;

View file

@ -3,6 +3,11 @@
# We do not set mysqldump-related SST options here because doing so on startup
# causes the first MTR connection to be forefully dropped by Galera, which in turn confuses MTR
[mysqld]
wsrep-debug=1
wsrep-sync_wait=15
loose-galera_sst_mysqldump_with_key=1
[mysqld.1]
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'

View file

@ -6,6 +6,7 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_ssl_communication.inc
--source include/force_restart.inc
--source suite/galera/include/galera_sst_set_mysqldump.inc
--let $node_1=node_1

View file

@ -1,7 +1,6 @@
!include ../galera_2nodes.cnf
[mysqld.1]
wsrep_debug=1
[mysqld.2]
[mysqld]
wsrep_debug=1
wsrep_sync_wait=15
loose-galera-var-ignore-apply-errors=1

View file

@ -3,7 +3,7 @@
#
--source include/galera_cluster.inc
--source include/force_restart.inc
#
# Ignore reconciling DDL errors on node_2
@ -17,41 +17,55 @@ SET GLOBAL wsrep_ignore_apply_errors = 1;
SET GLOBAL wsrep_on = OFF;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
DROP TABLE t1;
--connection node_2
SHOW TABLES;
# Drop schema that does not exist
--connection node_1
SET GLOBAL wsrep_on = OFF;
CREATE SCHEMA s1;
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
DROP SCHEMA s1;
--connection node_2
SHOW SCHEMAS;
# Drop index that does not exist using DROP INDEX
--connection node_1
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
CREATE INDEX idx1 ON t1 (f1);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
DROP INDEX idx1 ON t1;
--connection node_2
SHOW CREATE TABLE t1;
DROP TABLE t1;
# Drop index that does not exist using ALTER TABLE
--connection node_1
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
CREATE INDEX idx1 ON t1 (f1);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
ALTER TABLE t1 DROP INDEX idx1;
--connection node_2
SHOW CREATE TABLE t1;
DROP TABLE t1;
# Drop column that does not exist
--connection node_1
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
ALTER TABLE t1 DROP COLUMN f2;
--connection node_2
SHOW CREATE TABLE t1;
DROP TABLE t1;
@ -68,21 +82,11 @@ CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = OFF;
INSERT INTO t1 VALUES (1);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
DELETE FROM t1 WHERE f1 = 1;
SELECT COUNT(*) AS expect_0 FROM t1;
--connection node_1
--let $wait_condition = SELECT COUNT(*) = 0 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM t1;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 0 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
DROP TABLE t1;
# Delete row that does not exist in a multi statement transaction
@ -92,25 +96,15 @@ INSERT INTO t1 VALUES (2);
SET GLOBAL wsrep_on = OFF;
INSERT INTO t1 VALUES (1);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
START TRANSACTION;
INSERT INTO t1 VALUES (3);
DELETE FROM t1 WHERE f1 = 1;
DELETE FROM t1 WHERE f1 = 2;
COMMIT;
SELECT COUNT(*) AS expect_1 FROM t1;
--connection node_1
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_1 FROM t1;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_1 FROM t1;
SELECT COUNT(*) AS expect_1 FROM t1;
DROP TABLE t1;
#
@ -127,21 +121,16 @@ INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
SET SESSION wsrep_on = OFF;
DELETE FROM t1 WHERE f1 = 3;
SET SESSION wsrep_on = ON;
--source include/galera_wait_ready.inc
--connection node_1
DELETE FROM t1;
SELECT COUNT(*) AS expect_0 FROM t1;
SELECT COUNT(*) as expect_0 FROM t1;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--let $wait_condition = SELECT COUNT(*) = 0 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM t1;
SELECT VARIABLE_VALUE expect_Primary FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT COUNT(*) AS expect_0 FROM t1;
DROP TABLE t1;
#
@ -158,10 +147,8 @@ INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
SET SESSION wsrep_on = OFF;
DELETE FROM t1 WHERE f1 = 3;
SET SESSION wsrep_on = ON;
--source include/galera_wait_ready.inc
--connection node_1
SET AUTOCOMMIT=OFF;
START TRANSACTION;
DELETE FROM t1 WHERE f1 = 1;
@ -171,18 +158,13 @@ DELETE FROM t1 WHERE f1 = 4;
DELETE FROM t1 WHERE f1 = 5;
COMMIT;
SET AUTOCOMMIT=ON;
SELECT COUNT(*) AS expect_0 FROM t1;
SELECT COUNT(*) as expect_0 FROM t1;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--let $wait_condition = SELECT COUNT(*) = 0 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM t1;
SELECT VARIABLE_VALUE expect_Primary FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT COUNT(*) AS expect_0 FROM t1;
DROP TABLE t1;
#
@ -203,22 +185,16 @@ SET SESSION wsrep_on = OFF;
DELETE FROM t2 WHERE f1 = 2;
DELETE FROM t1 WHERE f1 = 3;
SET SESSION wsrep_on = ON;
--source include/galera_wait_ready.inc
--connection node_1
DELETE t1, t2 FROM t1 JOIN t2 WHERE t1.f1 = t2.f1;
SELECT COUNT(*) as expect_0 FROM t1;
SELECT COUNT(*) expect_0 FROM t1;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--let $wait_condition = SELECT COUNT(*) = 0 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM t1;
SELECT VARIABLE_VALUE = 'Primary' FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT COUNT(*) expect_0 FROM t1;
DROP TABLE t1,t2;
#
@ -238,26 +214,18 @@ INSERT INTO child VALUES (1,1),(2,2),(3,3);
SET SESSION wsrep_on = OFF;
DELETE FROM child WHERE parent_id = 2;
SET SESSION wsrep_on = ON;
--source include/galera_wait_ready.inc
--connection node_1
DELETE FROM parent;
SELECT COUNT(*) as expect_0 FROM parent;
SELECT COUNT(*) as expect_0 FROM child;
SELECT COUNT(*) AS expect_0 FROM parent;
SELECT COUNT(*) AS expect_0 FROM child;
--connection node_2
--source include/galera_wait_ready.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--let $wait_condition = SELECT COUNT(*) = 0 FROM parent;
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 0 FROM child;
--source include/wait_condition.inc
SELECT COUNT(*) as expect_0 FROM parent;
SELECT COUNT(*) as expect_0 FROM child;
SELECT VARIABLE_VALUE = 'Primary' FROM performance_schema.global_status WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SELECT COUNT(*) AS expect_0 FROM parent;
SELECT COUNT(*) AS expect_0 FROM child;
DROP TABLE child, parent;
#
@ -272,15 +240,17 @@ SET GLOBAL wsrep_ignore_apply_errors = 4;
SET GLOBAL wsrep_on = OFF;
CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_on = ON;
--source include/galera_wait_ready.inc
--connection node_1
CREATE TABLE t1 (f1 INTEGER, f2 INTEGER);
DROP TABLE t1;
--connection node_2
--error ER_NO_SUCH_TABLE
SELECT * FROM t1;
SET GLOBAL wsrep_ignore_apply_errors = 7;
CALL mtr.add_suppression("Can't find record in 't.*'");
CALL mtr.add_suppression("Can't find record in ");
CALL mtr.add_suppression("Slave SQL: Could not execute Delete_rows event");
CALL mtr.add_suppression("Slave SQL: Error 'Unknown table 'test\\.t1'' on query\\. Default database: 'test'\\. Query: 'DROP TABLE t1', Error_code: 1051");
CALL mtr.add_suppression("Slave SQL: Error 'Can't drop database 's1'; database doesn't exist' on query\\. Default database: 'test'\\. Query: 'DROP SCHEMA s1', Error_code: 1008");

View file

@ -97,7 +97,7 @@ SELECT COUNT(*) AS EXPECT_1000 FROM t8;
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 8 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't_'
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t8;
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t7;
--source include/wait_condition.inc
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
@ -107,7 +107,7 @@ SELECT COUNT(*) AS EXPECT_1000 FROM t4;
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
SELECT COUNT(*) AS EXPECT_1000 FROM t6;
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
SELECT COUNT(*) AS EXPECT_0 FROM t8;
--connection node_1
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
@ -145,7 +145,7 @@ SELECT COUNT(*) AS EXPECT_1000 FROM t8;
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 8 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't_'
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t8;
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t7;
--source include/wait_condition.inc
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
@ -155,7 +155,7 @@ SELECT COUNT(*) AS EXPECT_1000 FROM t4;
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
SELECT COUNT(*) AS EXPECT_1000 FROM t6;
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
SELECT COUNT(*) AS EXPECT_0 FROM t8;
--connection node_1
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;

View file

@ -11,7 +11,5 @@
##############################################################################
galera_2_cluster : MDEV-32631 galera_2_cluster: before_rollback(): Assertion `0' failed
galera_ssl_reload : MDEV-32778 galera_ssl_reload failed with warning message
galera_pc_bootstrap : temporarily disabled at the request of Codership
galera_ipv6_mariabackup_section : temporarily disabled at the request of Codership
GCF-354 : MDEV-25614 Galera test failure on GCF-354

View file

@ -1,17 +1,20 @@
connection node_2;
connection node_1;
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
connection node_1;
connection node_2;
connection node_3;
connection node_2;
SET SESSION wsrep_on=OFF;
SET wsrep_on=OFF;
DROP SCHEMA test;
connection node_3;
SET SESSION wsrep_on=OFF;
SET wsrep_on=OFF;
CREATE TABLE test.t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
connection node_1;
CREATE TABLE test.t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO test.t1 values (1);
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE
1
SHOW STATUS LIKE 'wsrep_cluster_status';
Variable_name Value
wsrep_cluster_status Primary

View file

@ -14,3 +14,9 @@ connection node_3;
# restart: with restart_parameters
connection node_2;
FLUSH SSL;
connection node_3;
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");
connection node_2;
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");
connection node_1;
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");

View file

@ -3,3 +3,14 @@
[mysqld]
wsrep-ignore-apply-errors=0
wsrep_sync_wait=0
loose-gcf-354=0
wsrep-debug=1
[mysqld.1]
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=1G;pc.weight=4'
[mysqld.2]
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=1G'
[mysqld.3]
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.3.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=1G'

View file

@ -2,9 +2,7 @@
--source include/have_innodb.inc
--source include/force_restart.inc
--let $galera_connection_name = node_3
--let $galera_server_number = 3
--source include/galera_connect.inc
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
# Save original auto_increment_offset values.
--let $node_1=node_1
@ -16,11 +14,11 @@
# 1. Create different inconsistencies on nodes 2 and 3
#
--connection node_2
SET SESSION wsrep_on=OFF;
SET wsrep_on=OFF;
DROP SCHEMA test;
--connection node_3
SET SESSION wsrep_on=OFF;
SET wsrep_on=OFF;
CREATE TABLE test.t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
#
# 2. The following should generate different errors on nodes 2 and 3 and
@ -29,10 +27,10 @@ CREATE TABLE test.t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
#
--connection node_1
CREATE TABLE test.t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO test.t1 values (1);
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
--source include/wait_condition.inc
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'
--source include/wait_condition.inc
SHOW STATUS LIKE 'wsrep_cluster_status';

View file

@ -1,10 +1,14 @@
!include ../galera_3nodes.cnf
[mysqld]
wsrep-debug=1
loose-galera-ssl-reload=1
[mysqld.1]
wsrep_provider_options='base_port=@mysqld.1.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.root.crt;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.crt;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.key'
wsrep_provider_options='base_port=@mysqld.1.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/client-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/client-key.pem'
[mysqld.2]
wsrep_provider_options='base_port=@mysqld.2.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.root.crt;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.crt;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.key'
wsrep_provider_options='base_port=@mysqld.2.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/client-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/client-key.pem'
[mysqld.3]
wsrep_provider_options='base_port=@mysqld.3.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.root.crt;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.crt;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera_certs/galera.1.key'
wsrep_provider_options='base_port=@mysqld.3.#galera_port;socket.ssl=yes;socket.ssl_ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/client-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/client-key.pem'

View file

@ -5,6 +5,7 @@
--source include/galera_cluster.inc
--source include/have_openssl.inc
--source include/have_ssl_communication.inc
--source include/force_restart.inc
--let $galera_version=26.4.8
source ../../wsrep/include/check_galera_version.inc;
@ -31,22 +32,22 @@ let $ssl_cert = $MYSQLTEST_VARDIR/tmp/ssl_cert.pem;
let $ssl_key = $MYSQLTEST_VARDIR/tmp/ssl_key.pem;
let $ssl_ca = $MYSQLTEST_VARDIR/tmp/ssl_ca.pem;
copy_file std_data/galera_certs/galera.root.crt $ssl_ca;
copy_file std_data/galera_certs/galera.1.crt $ssl_cert;
copy_file std_data/galera_certs/galera.1.key $ssl_key;
copy_file std_data/cacert.pem $ssl_ca;
copy_file std_data/client-cert.pem $ssl_cert;
copy_file std_data/client-key.pem $ssl_key;
--connection node_2
--source include/shutdown_mysqld.inc
--let $restart_noprint=1
--let $restart_parameters = --wsrep_cluster_address=gcomm://127.0.0.1:$NODE_GALERAPORT_1 --wsrep_provider_options=base_port=$NODE_GALERAPORT_2;socket.ssl=yes;socket.ssl_ca=$MYSQL_TEST_DIR/std_data/galera_certs/galera.root.crt;socket.ssl_cert=$MYSQLTEST_VARDIR/tmp/ssl_cert.pem;socket.ssl_key=$MYSQLTEST_VARDIR/tmp/ssl_key.pem
--let $restart_parameters = --wsrep_cluster_address=gcomm://127.0.0.1:$NODE_GALERAPORT_1 --wsrep_provider_options=base_port=$NODE_GALERAPORT_2;socket.ssl=yes;socket.ssl_ca=$MYSQL_TEST_DIR/std_data/cacert.pem;socket.ssl_cert=$MYSQLTEST_VARDIR/tmp/ssl_cert.pem;socket.ssl_key=$MYSQLTEST_VARDIR/tmp/ssl_key.pem
--source include/start_mysqld.inc
--source include/galera_wait_ready.inc
# Set certificate and key and reload by setting directly `wsrep_provider_options`
remove_file $ssl_cert;
remove_file $ssl_key;
copy_file std_data/galera_certs/galera.2.crt $ssl_cert;
copy_file std_data/galera_certs/galera.2.key $ssl_key;
copy_file std_data/client-cert.pem $ssl_cert;
copy_file std_data/client-key.pem $ssl_key;
SET GLOBAL wsrep_provider_options = 'socket.ssl_reload=1';
--connection node_3
@ -67,5 +68,12 @@ remove_file $ssl_ca;
remove_file $ssl_cert;
remove_file $ssl_key;
--connection node_3
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");
--connection node_2
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");
--connection node_1
call mtr.add_suppression("WSREP: Handshake failed: unexpected eof while reading");
# Restore original auto_increment_offset values.
--source ../galera/include/auto_increment_offset_restore.inc

View file

@ -521,3 +521,12 @@ COUNT(*)
1
DROP TABLE t1;
# End of 10.4 tests
#
# MDEV-29010 Table cannot be loaded after instant ALTER
#
CREATE TABLE t1 (a CHAR(255), b INT,
c INT as (b) VIRTUAL)ENGINE=InnoDB CHARACTER SET utf32;
ALTER TABLE t1 DROP COLUMN a;
ALTER TABLE t1 DROP COLUMN c;
DROP TABLE t1;
# End of 10.5 tests

View file

@ -553,3 +553,14 @@ SELECT COUNT(*) FROM t1;
DROP TABLE t1;
--echo # End of 10.4 tests
--echo #
--echo # MDEV-29010 Table cannot be loaded after instant ALTER
--echo #
CREATE TABLE t1 (a CHAR(255), b INT,
c INT as (b) VIRTUAL)ENGINE=InnoDB CHARACTER SET utf32;
ALTER TABLE t1 DROP COLUMN a;
ALTER TABLE t1 DROP COLUMN c;
DROP TABLE t1;
--echo # End of 10.5 tests

View file

@ -15,6 +15,8 @@
################################################################################
--source include/have_sequence.inc
--echo # - UNIQUE KEY
--echo # - INDEX
--echo # - FULLTEXT INDEX
@ -231,3 +233,18 @@ CREATE TABLE t1 (
DELETE FROM t1 WHERE vc IS NULL ORDER BY pk;
DROP TABLE t1;
#
# MDEV-34632 Assertion `table->field[0]->ptr >= table->record[0] &&
# table->field[0]->ptr <= table->record[0] + table->s->reclength' failed in
# void handler::assert_icp_limitations(uchar*)
#
SET sql_mode='';
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 FROM seq_1_to_2 ;
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 UNION SELECT 1;
SELECT * FROM t1;
DROP TABLE t1;

View file

@ -215,6 +215,25 @@ INDEX(vc(32))
);
DELETE FROM t1 WHERE vc IS NULL ORDER BY pk;
DROP TABLE t1;
SET sql_mode='';
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 FROM seq_1_to_2 ;
Warnings:
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
SELECT * FROM t1;
a
1
1
DROP TABLE t1;
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 UNION SELECT 1;
Warnings:
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
SELECT * FROM t1;
a
1
DROP TABLE t1;
#
# MDEV-11737 Failing assertion: block->magic_n == MEM_BLOCK_MAGIC_N
#

View file

@ -209,6 +209,25 @@ INDEX(vc(32))
);
DELETE FROM t1 WHERE vc IS NULL ORDER BY pk;
DROP TABLE t1;
SET sql_mode='';
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 FROM seq_1_to_2 ;
Warnings:
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
SELECT * FROM t1;
a
1
1
DROP TABLE t1;
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL,KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 SELECT 1 UNION SELECT 1;
Warnings:
Warning 1906 The value specified for generated column 'a' in table 't1' has been ignored
SELECT * FROM t1;
a
1
DROP TABLE t1;
#
# Original test
#

View file

@ -47,12 +47,25 @@ static void *coc_malloc(size_t size, const char *f __attribute__((unused)),
return malloc(size);
}
static void *coc_realloc(void *addr, size_t num,
const char *file __attribute__((unused)),
int line __attribute__((unused)))
{
return realloc(addr, num);
}
static void coc_free(void *addr, const char *file __attribute__((unused)),
int line __attribute__((unused)))
{
free(addr);
}
int check_openssl_compatibility()
{
EVP_CIPHER_CTX *evp_ctx;
EVP_MD_CTX *md5_ctx;
if (!CRYPTO_set_mem_functions(coc_malloc, NULL, NULL))
if (!CRYPTO_set_mem_functions(coc_malloc, coc_realloc, coc_free))
return 0;
testing= 1;

View file

@ -5225,6 +5225,9 @@ public:
cached_time.copy_to_mysql_time(ltime);
return (null_value= false);
}
Item *do_get_copy(THD *thd) const override
{ return get_item_copy<Item_date_literal_for_invalid_dates>(thd, this); }
Item *do_build_clone(THD *thd) const override { return get_copy(thd); }
};
@ -6699,7 +6702,9 @@ public:
description
*/
bool associate_with_target_field(THD *thd, Item_field *field) override;
Item *do_get_copy(THD *thd) const override
{ return get_item_copy<Item_default_value>(thd, this); }
Item* do_build_clone(THD *thd) const override { return get_copy(thd); }
private:
bool tie_field(THD *thd);
};

View file

@ -1814,6 +1814,16 @@ longlong Item_func_eq::val_int()
}
Item *Item_func_eq::do_build_clone(THD *thd) const
{
/*
Clone the parent and cast to the child class since there is nothing
specific for Item_func_eq
*/
return (Item_func_eq*) Item_bool_rowready_func2::do_build_clone(thd);
}
/** Same as Item_func_eq, but NULL = NULL. */
bool Item_func_equal::fix_length_and_dec()

View file

@ -765,6 +765,7 @@ public:
friend class Arg_comparator;
Item *do_get_copy(THD *thd) const override
{ return get_item_copy<Item_func_eq>(thd, this); }
Item *do_build_clone(THD *thd) const override;
};
class Item_func_equal final :public Item_bool_rowready_func2
@ -2324,7 +2325,7 @@ public:
Item *do_build_clone(THD *thd) const override
{
Item_func_case_simple *clone= (Item_func_case_simple *)
Item_func_case::build_clone(thd);
Item_func_case::do_build_clone(thd);
uint ncases= when_count();
if (clone && clone->Predicant_to_list_comparator::init_clone(thd, ncases))
return NULL;

View file

@ -9215,6 +9215,25 @@ static void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
#ifndef EMBEDDED_LIBRARY
#ifndef _WIN32
#define fprintf_stderr(format, ...) fprintf(stderr, format, __VA_ARGS__)
#else
/*
On Windows, if FILE* is unbuffered, fprintf() writes output byte by byte.
This is suboptimal for printing to error log, we want full message at once.
*/
#define fprintf_stderr(format, ...) \
do \
{ \
char buf[256]; \
size_t len= snprintf(buf, sizeof(buf), format, __VA_ARGS__); \
if (len >= sizeof(buf)) \
fprintf(stderr, format, __VA_ARGS__); \
else \
fwrite(buf, len, 1, stderr); \
} while (0)
#endif
static void print_buffer_to_file(enum loglevel level, const char *buffer,
size_t length)
{
@ -9248,7 +9267,7 @@ static void print_buffer_to_file(enum loglevel level, const char *buffer,
localtime_r(&skr, &tm_tmp);
start=&tm_tmp;
fprintf(stderr, "%d-%02d-%02d %2d:%02d:%02d %lu [%s] %.*s%.*s\n",
fprintf_stderr( "%d-%02d-%02d %2d:%02d:%02d %lu [%s] %.*s%.*s\n",
start->tm_year + 1900,
start->tm_mon+1,
start->tm_mday,

View file

@ -4761,7 +4761,13 @@ mysql_execute_command(THD *thd)
// For !InnoDB we start TOI if it is not yet started and hope for the best
if (!is_innodb && !wsrep_toi)
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
{
const legacy_db_type db_type= first_table->table->file->partition_ht()->db_type;
/* Currently we support TOI for MyISAM only. */
if (db_type == DB_TYPE_MYISAM && wsrep_replicate_myisam)
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
}
}
#endif /* WITH_WSREP */
/*

View file

@ -2971,19 +2971,22 @@ int JOIN::optimize_stage2()
which do not use aggregate functions. In such case
temporary table may not be used and const condition
elements may be lost during further having
condition transformation in JOIN::exec.
condition transformation.
*/
if (having && const_table_map && !having->with_sum_func())
{
having->update_used_tables();
having= having->remove_eq_conds(thd, &select_lex->having_value, true);
if (select_lex->having_value == Item::COND_FALSE)
if (having->const_item() && !having->is_expensive())
{
having= new (thd->mem_root) Item_bool(thd, false);
zero_result_cause= "Impossible HAVING noticed after reading const tables";
error= 0;
select_lex->mark_const_derived(zero_result_cause);
goto setup_subq_exit;
bool having_value= having->val_int();
having= new (thd->mem_root) Item_bool(thd, having_value);
if (!having_value)
{
zero_result_cause= "Impossible HAVING noticed after reading const tables";
error= 0;
select_lex->mark_const_derived(zero_result_cause);
goto setup_subq_exit;
}
}
}

View file

@ -181,6 +181,13 @@ inline void dict_table_t::init_instant(const dict_table_t& table)
auto fixed_len = dict_col_get_fixed_size(
f.col, not_redundant());
/* Long fixed length can be treated as variable
length fields that needs external storage */
if (fixed_len > DICT_MAX_FIXED_COL_LEN) {
fixed_len = 0;
}
field_map_it->set_dropped();
if (!f.col->is_nullable()) {
field_map_it->set_not_null();

View file

@ -721,29 +721,32 @@ static void init_compute_vcols(void *table)
static int compute_vcols(MI_INFO *info, uchar *record, int keynum)
{
int error= 0;
/* This mutex is needed for parallel repair */
mysql_mutex_lock(&info->s->intern_lock);
TABLE *table= (TABLE*)(info->external_ref);
table->move_fields(table->field, record, table->field[0]->record_ptr());
table->move_fields(table->field, record, table->record[0]);
if (keynum == -1) // update all vcols
{
int error= table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_READ);
error= table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_READ);
if (table->update_virtual_fields(table->file, VCOL_UPDATE_INDEXED))
error= 1;
mysql_mutex_unlock(&info->s->intern_lock);
return error;
}
// update only one key
KEY *key= table->key_info + keynum;
KEY_PART_INFO *kp= key->key_part, *end= kp + key->ext_key_parts;
for (; kp < end; kp++)
else
{
Field *f= table->field[kp->fieldnr - 1];
if (f->vcol_info && !f->vcol_info->stored_in_db)
table->update_virtual_field(f, false);
// update only one key
KEY *key= table->key_info + keynum;
KEY_PART_INFO *kp= key->key_part, *end= kp + key->ext_key_parts;
for (; kp < end; kp++)
{
Field *f= table->field[kp->fieldnr - 1];
if (f->vcol_info && !f->vcol_info->stored_in_db)
table->update_virtual_field(f, false);
}
}
table->move_fields(table->field, table->record[0], record);
mysql_mutex_unlock(&info->s->intern_lock);
return 0;
return error;
}
}
@ -1025,16 +1028,6 @@ void ha_myisam::setup_vcols_for_repair(HA_CHECK *param)
table->use_all_columns();
}
void ha_myisam::restore_vcos_after_repair()
{
if (file->s->base.reclength < file->s->vreclength)
{
table->move_fields(table->field, table->record[0],
table->field[0]->record_ptr());
table->default_column_bitmaps();
}
}
int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
{
if (!file) return HA_ADMIN_INTERNAL_ERROR;
@ -1131,8 +1124,6 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
file->update |= HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
}
restore_vcos_after_repair();
thd_proc_info(thd, old_proc_info);
return error ? HA_ADMIN_CORRUPT : HA_ADMIN_OK;
}
@ -1178,8 +1169,6 @@ int ha_myisam::analyze(THD *thd, HA_CHECK_OPT* check_opt)
else if (!mi_is_crashed(file) && !thd->killed)
mi_mark_crashed(file);
restore_vcos_after_repair();
return error ? HA_ADMIN_CORRUPT : HA_ADMIN_OK;
}
@ -1229,8 +1218,6 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
break;
}
restore_vcos_after_repair();
if (!error && start_records != file->state->records &&
!(check_opt->flags & T_VERY_SILENT))
{
@ -1268,8 +1255,6 @@ int ha_myisam::optimize(THD* thd, HA_CHECK_OPT *check_opt)
error= repair(thd,*param,1);
}
restore_vcos_after_repair();
return error;
}
@ -1707,8 +1692,6 @@ int ha_myisam::enable_indexes(key_map map, bool persist)
}
info(HA_STATUS_CONST);
thd_proc_info(thd, save_proc_info);
restore_vcos_after_repair();
}
DBUG_RETURN(error);
}

View file

@ -49,7 +49,6 @@ class ha_myisam final : public handler
bool can_enable_indexes;
int repair(THD *thd, HA_CHECK &param, bool optimize);
void setup_vcols_for_repair(HA_CHECK *param);
void restore_vcos_after_repair();
public:
ha_myisam(handlerton *hton, TABLE_SHARE *table_arg);

View file

@ -0,0 +1,19 @@
set @old_aria_encrypt_tables=@@global.aria_encrypt_tables;
set global aria_encrypt_tables=ON;
CREATE FUNCTION spider_direct_sql RETURNS INT SONAME 'ha_spider.so';
call mtr.add_suppression(".*\\[ERROR\\] SPIDER plugin initialization failed at.* by 'Initialization of encryption failed for");
call mtr.add_suppression(".*\\[ERROR\\] Plugin 'SPIDER' registration as a STORAGE ENGINE failed.");
INSTALL PLUGIN spider SONAME 'ha_spider.so';
ERROR HY000: Can't initialize function 'spider'; Plugin initialization function failed.
SELECT spider_direct_sql ('SELECT * FROM s','a','srv "b"');
ERROR HY000: Can't initialize function 'spider_direct_sql'; Plugin 'SPIDER' is not loaded
Warnings:
Note 1305 FUNCTION test.spider_flush_table_mon_cache does not exist
Warnings:
Note 1305 FUNCTION test.spider_copy_tables does not exist
Warnings:
Note 1305 FUNCTION test.spider_ping_table does not exist
Warnings:
Note 1305 FUNCTION test.spider_bg_direct_sql does not exist
Warnings:
Note 1305 SONAME ha_spider.so does not exist

View file

@ -0,0 +1,14 @@
set @old_aria_encrypt_tables=@@global.aria_encrypt_tables;
set global aria_encrypt_tables=ON;
CREATE FUNCTION spider_direct_sql RETURNS INT SONAME 'ha_spider.so';
call mtr.add_suppression(".*\\[ERROR\\] SPIDER plugin initialization failed at.* by 'Initialization of encryption failed for");
call mtr.add_suppression(".*\\[ERROR\\] Plugin 'SPIDER' registration as a STORAGE ENGINE failed.");
--error ER_CANT_INITIALIZE_UDF
INSTALL PLUGIN spider SONAME 'ha_spider.so';
--error ER_CANT_INITIALIZE_UDF
SELECT spider_direct_sql ('SELECT * FROM s','a','srv "b"');
--disable_query_log
--source ../../include/clean_up_spider.inc
set global aria_encrypt_tables=@old_aria_encrypt_tables;

View file

@ -1,8 +1,8 @@
DROP FUNCTION spider_flush_table_mon_cache;
DROP FUNCTION spider_copy_tables;
DROP FUNCTION spider_ping_table;
DROP FUNCTION spider_bg_direct_sql;
DROP FUNCTION spider_direct_sql;
DROP FUNCTION IF EXISTS spider_flush_table_mon_cache;
DROP FUNCTION IF EXISTS spider_copy_tables;
DROP FUNCTION IF EXISTS spider_ping_table;
DROP FUNCTION IF EXISTS spider_bg_direct_sql;
DROP FUNCTION IF EXISTS spider_direct_sql;
UNINSTALL SONAME IF EXISTS 'ha_spider';
DROP TABLE IF EXISTS mysql.spider_xa;
DROP TABLE IF EXISTS mysql.spider_xa_member;

View file

@ -6805,6 +6805,7 @@ error_pt_attr_setstate:
pthread_attr_destroy(&spider_pt_attr);
error_pt_attr_init:
#endif
spider_hton_ptr= NULL;
DBUG_RETURN(error_num);
}