Merge branch '10.1' into 10.2
This commit is contained in:
commit
5ae8fce50b
4
CREDITS
4
CREDITS
@ -10,9 +10,11 @@ Microsoft https://microsoft.com/ (2017)
|
||||
Tencent Cloud https://cloud.tencent.com (2017)
|
||||
Development Bank of Singapore https://dbs.com (2016)
|
||||
IBM https://www.ibm.com (2017)
|
||||
Tencent Games http://game.qq.com/ (2018)
|
||||
Visma https://visma.com (2015)
|
||||
Acronis http://acronis.com (2016)
|
||||
Acronis https://acronis.com (2016)
|
||||
Nexedi https://www.nexedi.com (2016)
|
||||
Percona https://www.percona.com (2018)
|
||||
Tencent Game DBA http://tencentdba.com/about (2016)
|
||||
Tencent TDSQL http://tdsql.org (2016)
|
||||
Verkkokauppa.com https://www.verkkokauppa.com (2015)
|
||||
|
@ -694,6 +694,38 @@ static void backup_truncate_fail()
|
||||
: " Use --lock-ddl-per-table to lock all tables before backup.");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Retrieve default data directory, to be used with --copy-back.
|
||||
|
||||
On Windows, default datadir is ..\data, relative to the
|
||||
directory where mariabackup.exe is located(usually "bin")
|
||||
|
||||
Elsewhere, the compiled-in constant MYSQL_DATADIR is used.
|
||||
*/
|
||||
static char *get_default_datadir() {
|
||||
static char ddir[] = MYSQL_DATADIR;
|
||||
#ifdef _WIN32
|
||||
static char buf[MAX_PATH];
|
||||
DWORD size = (DWORD)sizeof(buf) - 1;
|
||||
if (GetModuleFileName(NULL, buf, size) <= size)
|
||||
{
|
||||
char *p;
|
||||
if ((p = strrchr(buf, '\\')))
|
||||
{
|
||||
*p = 0;
|
||||
if ((p = strrchr(buf, '\\')))
|
||||
{
|
||||
strncpy(p + 1, "data", buf + MAX_PATH - p);
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return ddir;
|
||||
}
|
||||
|
||||
|
||||
/* ======== Date copying thread context ======== */
|
||||
|
||||
typedef struct {
|
||||
@ -6313,8 +6345,7 @@ static int main_low(char** argv)
|
||||
|
||||
if (xtrabackup_copy_back || xtrabackup_move_back) {
|
||||
if (!check_if_param_set("datadir")) {
|
||||
msg("Error: datadir must be specified.\n");
|
||||
return(EXIT_FAILURE);
|
||||
mysql_data_home = get_default_datadir();
|
||||
}
|
||||
if (!copy_back())
|
||||
return(EXIT_FAILURE);
|
||||
|
@ -8,12 +8,14 @@ MariaDB Corporation https://mariadb.com Founding member, Platinum Sponsor of the
|
||||
Visma https://visma.com Gold Sponsor of the MariaDB Foundation
|
||||
DBS https://dbs.com Gold Sponsor of the MariaDB Foundation
|
||||
IBM https://www.ibm.com Gold Sponsor of the MariaDB Foundation
|
||||
Tencent Games http://game.qq.com/ Gold Sponsor of the MariaDB Foundation
|
||||
Nexedi https://www.nexedi.com Silver Sponsor of the MariaDB Foundation
|
||||
Acronis http://www.acronis.com Silver Sponsor of the MariaDB Foundation
|
||||
Acronis https://www.acronis.com Silver Sponsor of the MariaDB Foundation
|
||||
Verkkokauppa.com https://www.verkkokauppa.com Bronze Sponsor of the MariaDB Foundation
|
||||
Virtuozzo https://virtuozzo.com Bronze Sponsor of the MariaDB Foundation
|
||||
Tencent Game DBA http://tencentdba.com/about Bronze Sponsor of the MariaDB Foundation
|
||||
Tencent TDSQL http://tdsql.org Bronze Sponsor of the MariaDB Foundation
|
||||
Percona https://www.percona.com/ Bronze Sponsor of the MariaDB Foundation
|
||||
Google USA Sponsoring encryption, parallel replication and GTID
|
||||
Facebook USA Sponsoring non-blocking API, LIMIT ROWS EXAMINED etc
|
||||
Ronald Bradford Brisbane, Australia EFF contribution for UC2006 Auction
|
||||
|
@ -479,6 +479,21 @@ UNLOCK TABLES;
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-14410 - Assertion `table->pos_in_locked_tables == __null ||
|
||||
# table->pos_in_locked_tables->table == table' failed in
|
||||
# mark_used_tables_as_free_for_reuse
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (b INT);
|
||||
CREATE TABLE t3 (c INT);
|
||||
CREATE TRIGGER tr1 BEFORE INSERT ON t3 FOR EACH ROW INSERT INTO t1 VALUES ();
|
||||
CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW INSERT INTO t3 SELECT * FROM t1;
|
||||
LOCK TABLE t1 WRITE, t2 WRITE;
|
||||
CREATE OR REPLACE TABLE t1 (i INT);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
DROP TABLE t1, t2, t3;
|
||||
#
|
||||
# MDEV-11071 - Assertion `thd->transaction.stmt.is_empty()' failed in
|
||||
# Locked_tables_list::unlock_locked_tables
|
||||
#
|
||||
|
@ -2803,6 +2803,164 @@ PERIOD_DIFF(2018, AES_ENCRYPT('Rae Bareli', 'Rae Bareli'))
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '-3S\xFA\xDE?\x00\x00\xCA\xB3\xEEE\xA4\xD1\xC1\xA8'
|
||||
#
|
||||
# MDEV-17249 MAKETIME(-1e50,0,0) returns a wrong result
|
||||
#
|
||||
SELECT
|
||||
MAKETIME(1e10,0,0),
|
||||
MAKETIME(-1e10,0,0),
|
||||
MAKETIME(1e50,0,0),
|
||||
MAKETIME(-1e50,0,0),
|
||||
MAKETIME(COALESCE(1e50),0,0),
|
||||
MAKETIME(COALESCE(-1e50),0,0);
|
||||
MAKETIME(1e10,0,0) 838:59:59
|
||||
MAKETIME(-1e10,0,0) -838:59:59
|
||||
MAKETIME(1e50,0,0) 838:59:59
|
||||
MAKETIME(-1e50,0,0) -838:59:59
|
||||
MAKETIME(COALESCE(1e50),0,0) 838:59:59
|
||||
MAKETIME(COALESCE(-1e50),0,0) -838:59:59
|
||||
Warnings:
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '10000000000:00:00'
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '-10000000000:00:00'
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '9223372036854775807:00:00'
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '-9223372036854775808:00:00'
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '9223372036854775807:00:00'
|
||||
Level Warning
|
||||
Code 1292
|
||||
Message Truncated incorrect time value: '-9223372036854775808:00:00'
|
||||
CREATE TABLE t1 (a FLOAT);
|
||||
INSERT INTO t1 VALUES (1e30),(-1e30);
|
||||
SELECT MAKETIME(a,0,0) FROM t1;
|
||||
MAKETIME(a,0,0)
|
||||
838:59:59
|
||||
-838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '9223372036854775807:00:00'
|
||||
Warning 1292 Truncated incorrect time value: '-9223372036854775808:00:00'
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-17244 MAKETIME(900,0,0.111) returns a wrong result
|
||||
#
|
||||
SELECT MAKETIME(900,0,0);
|
||||
MAKETIME(900,0,0)
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.1);
|
||||
MAKETIME(900,0,0.1)
|
||||
838:59:59.9
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.11);
|
||||
MAKETIME(900,0,0.11)
|
||||
838:59:59.99
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.111);
|
||||
MAKETIME(900,0,0.111)
|
||||
838:59:59.999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.1111);
|
||||
MAKETIME(900,0,0.1111)
|
||||
838:59:59.9999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.11111);
|
||||
MAKETIME(900,0,0.11111)
|
||||
838:59:59.99999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.111111);
|
||||
MAKETIME(900,0,0.111111)
|
||||
838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.1111111);
|
||||
MAKETIME(900,0,0.1111111)
|
||||
838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.11111111);
|
||||
MAKETIME(900,0,0.11111111)
|
||||
838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,0.111111111);
|
||||
MAKETIME(900,0,0.111111111)
|
||||
838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:00'
|
||||
SELECT MAKETIME(900,0,EXP(1));
|
||||
MAKETIME(900,0,EXP(1))
|
||||
838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '900:00:02'
|
||||
SELECT MAKETIME(-900,0,0);
|
||||
MAKETIME(-900,0,0)
|
||||
-838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.1);
|
||||
MAKETIME(-900,0,0.1)
|
||||
-838:59:59.9
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.11);
|
||||
MAKETIME(-900,0,0.11)
|
||||
-838:59:59.99
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.111);
|
||||
MAKETIME(-900,0,0.111)
|
||||
-838:59:59.999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.1111);
|
||||
MAKETIME(-900,0,0.1111)
|
||||
-838:59:59.9999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.11111);
|
||||
MAKETIME(-900,0,0.11111)
|
||||
-838:59:59.99999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.111111);
|
||||
MAKETIME(-900,0,0.111111)
|
||||
-838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.1111111);
|
||||
MAKETIME(-900,0,0.1111111)
|
||||
-838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.11111111);
|
||||
MAKETIME(-900,0,0.11111111)
|
||||
-838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,0.111111111);
|
||||
MAKETIME(-900,0,0.111111111)
|
||||
-838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:00'
|
||||
SELECT MAKETIME(-900,0,EXP(1));
|
||||
MAKETIME(-900,0,EXP(1))
|
||||
-838:59:59.999999
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-900:00:02'
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
#
|
||||
|
@ -2666,6 +2666,38 @@ disconnect conn2;
|
||||
disconnect conn3;
|
||||
DROP USER foo@'127.0.0.1';
|
||||
# End of Bug#12766319
|
||||
create user foo@localhost;
|
||||
create database foodb;
|
||||
grant create routine on foodb.* to foo@localhost;
|
||||
connect con1,localhost,foo;
|
||||
create procedure fooproc() select 'i am fooproc';
|
||||
show grants;
|
||||
Grants for foo@localhost
|
||||
GRANT USAGE ON *.* TO 'foo'@'localhost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'localhost'
|
||||
GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `test`.`fooproc` TO 'foo'@'localhost'
|
||||
disconnect con1;
|
||||
connection default;
|
||||
rename table mysql.procs_priv to mysql.procs_priv1;
|
||||
flush privileges;
|
||||
show grants for foo@localhost;
|
||||
Grants for foo@localhost
|
||||
GRANT USAGE ON *.* TO 'foo'@'localhost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'localhost'
|
||||
rename table mysql.procs_priv1 to mysql.procs_priv;
|
||||
show grants for foo@localhost;
|
||||
Grants for foo@localhost
|
||||
GRANT USAGE ON *.* TO 'foo'@'localhost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'localhost'
|
||||
flush privileges;
|
||||
show grants for foo@localhost;
|
||||
Grants for foo@localhost
|
||||
GRANT USAGE ON *.* TO 'foo'@'localhost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'localhost'
|
||||
GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `test`.`fooproc` TO 'foo'@'localhost'
|
||||
drop user foo@localhost;
|
||||
drop procedure fooproc;
|
||||
drop database foodb;
|
||||
#
|
||||
# Bug#11756966 - 48958: STORED PROCEDURES CAN BE LEVERAGED TO BYPASS
|
||||
# DATABASE SECURITY
|
||||
|
@ -710,6 +710,32 @@ connection default;
|
||||
disconnect con2;
|
||||
DROP USER user2@localhost;
|
||||
DROP DATABASE db1;
|
||||
create user foo@local_ost;
|
||||
create user foo@`local\_ost`;
|
||||
update mysql.user set plugin='foobar' where host='local\\_ost';
|
||||
flush privileges;
|
||||
create database foodb;
|
||||
grant create routine on foodb.* to foo@local_ost;
|
||||
connect con1,localhost,foo;
|
||||
select user(), current_user();
|
||||
user() current_user()
|
||||
foo@localhost foo@local_ost
|
||||
show grants;
|
||||
Grants for foo@local_ost
|
||||
GRANT USAGE ON *.* TO 'foo'@'local_ost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'local_ost'
|
||||
create procedure fooproc() select 'i am fooproc';
|
||||
show grants;
|
||||
Grants for foo@local_ost
|
||||
GRANT USAGE ON *.* TO 'foo'@'local_ost'
|
||||
GRANT CREATE ROUTINE ON `foodb`.* TO 'foo'@'local_ost'
|
||||
GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `test`.`fooproc` TO 'foo'@'local_ost'
|
||||
disconnect con1;
|
||||
connection default;
|
||||
drop user foo@local_ost;
|
||||
drop user foo@`local\_ost`;
|
||||
drop procedure fooproc;
|
||||
drop database foodb;
|
||||
#
|
||||
# Test for bug#12602983 - User without privilege on routine can discover
|
||||
# its existence by executing "select non_existing_func();" or by
|
||||
|
@ -591,59 +591,6 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, t TEXT);
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze Warning Engine-independent statistics are not collected for column 't'
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
DELETE FROM mysql.column_stats
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='t';
|
||||
INSERT INTO mysql.column_stats VALUES
|
||||
('test','t1','t','bar','foo', 0.0, 3.0, 1.0, 0, NULL, NULL);
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
test t1 t bar foo 0.0000 3.0000 1.0000 0 NULL NULL
|
||||
SELECT pk FROM t1;
|
||||
pk
|
||||
1
|
||||
2
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16760: CREATE OR REPLACE TABLE after ANALYZE TABLE
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
CREATE TABLE t1 (pk int PRIMARY KEY, c varchar(32));
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM t1;
|
||||
pk c
|
||||
1 foo
|
||||
2 bar
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
test t1 c bar foo 0.0000 3.0000 1.0000 0 NULL NULL
|
||||
CREATE OR REPLACE TABLE t1 (pk int PRIMARY KEY, a char(7));
|
||||
SELECT * FROM t1;
|
||||
pk a
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16711:CREATE OR REPLACE TABLE introducing BLOB column
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
@ -618,59 +618,6 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, t TEXT);
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze Warning Engine-independent statistics are not collected for column 't'
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
DELETE FROM mysql.column_stats
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='t';
|
||||
INSERT INTO mysql.column_stats VALUES
|
||||
('test','t1','t','bar','foo', 0.0, 3.0, 1.0, 0, NULL, NULL);
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
test t1 t bar foo 0.0000 3.0000 1.0000 0 NULL NULL
|
||||
SELECT pk FROM t1;
|
||||
pk
|
||||
1
|
||||
2
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16760: CREATE OR REPLACE TABLE after ANALYZE TABLE
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
CREATE TABLE t1 (pk int PRIMARY KEY, c varchar(32));
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM t1;
|
||||
pk c
|
||||
1 foo
|
||||
2 bar
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
test t1 pk 1 2 0.0000 4.0000 1.0000 0 NULL NULL
|
||||
test t1 c bar foo 0.0000 3.0000 1.0000 0 NULL NULL
|
||||
CREATE OR REPLACE TABLE t1 (pk int PRIMARY KEY, a char(7));
|
||||
SELECT * FROM t1;
|
||||
pk a
|
||||
SELECT * FROM mysql.column_stats;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16711:CREATE OR REPLACE TABLE introducing BLOB column
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
@ -448,6 +448,46 @@ select format(truncate('1.7976931348623157E+308',-12),1,'fr_BE') as foo;
|
||||
foo
|
||||
0
|
||||
#
|
||||
# MDEV-17249 MAKETIME(-1e50,0,0) returns a wrong result
|
||||
#
|
||||
SELECT LEFT('a',EXP(50));
|
||||
LEFT('a',EXP(50))
|
||||
a
|
||||
SELECT LEFT('a', COALESCE(1e30));
|
||||
LEFT('a', COALESCE(1e30))
|
||||
a
|
||||
CREATE TABLE t1 (a FLOAT);
|
||||
INSERT INTO t1 VALUES (1e30);
|
||||
SELECT LEFT('a',a), LEFT('a',1e30) FROM t1;
|
||||
LEFT('a',a) LEFT('a',1e30)
|
||||
a a
|
||||
DROP TABLE t1;
|
||||
PREPARE stmt FROM 'SELECT LEFT(111,?)';
|
||||
SET @a=1e30;
|
||||
EXECUTE stmt USING @a;
|
||||
LEFT(111,?)
|
||||
111
|
||||
DEALLOCATE PREPARE stmt;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT LEFT('a',(SELECT 1e30 FROM t1 LIMIT 1));
|
||||
LEFT('a',(SELECT 1e30 FROM t1 LIMIT 1))
|
||||
a
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a DOUBLE);
|
||||
INSERT INTO t1 VALUES (1e30),(0);
|
||||
SELECT LEFT('a', SUM(a)) FROM t1;
|
||||
LEFT('a', SUM(a))
|
||||
a
|
||||
Warnings:
|
||||
Warning 1916 Got overflow when converting '1e30' to INT. Value truncated
|
||||
SELECT LEFT('a', AVG(a)) FROM t1;
|
||||
LEFT('a', AVG(a))
|
||||
a
|
||||
Warnings:
|
||||
Warning 1916 Got overflow when converting '5e29' to INT. Value truncated
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #13500371 63704: CONVERSION OF '1.' TO A NUMBER GIVES ERROR 1265
|
||||
# (WARN_DATA_TRUNCATED)
|
||||
#
|
||||
|
@ -25,10 +25,7 @@ galera_gcache_recover_full_gcache : MDEV-13549 Galera test failures
|
||||
galera_gcache_recover_manytrx : MDEV-13549 Galera test failures
|
||||
galera_ssl_upgrade : MDEV-13549 Galera test failures
|
||||
galera.MW-329 : wsrep_local_replays not stable
|
||||
galera.MW-328A : have_deadlocks test not stable
|
||||
query_cache : MDEV-15805 Test failure on galera.query_cache
|
||||
MW-416 : MDEV-13549 Galera test failures
|
||||
galera_wan : MDEV-13549 Galera test failures
|
||||
MW-388 : MDEV-13549 Galera test failures
|
||||
galera.MW-44 : MDEV-15809 Test failure on galera.MW-44
|
||||
galera.galera_pc_ignore_sb : MDEV-15811 Test failure on galera_pc_ignore_sb
|
||||
@ -36,7 +33,11 @@ galera_kill_applier : race condition at the start of the test
|
||||
galera_ist_progress: MDEV-15236 galera_ist_progress fails when trying to read transfer status
|
||||
pxc-421: Lock timeout exceeded
|
||||
galera_sst_mysqldump_with_key : MDEV-16890 Galera test failure
|
||||
galera.galera_kill_ddl : MDEV-17108 Test failure on galera.galera_kill_ddl
|
||||
galera.galera_binlog_stmt_autoinc : MDEV-17106 Test failure on galera.galera_binlog_stmt_autoinc
|
||||
galera.galera_kill_ddl : MDEV-17108 Test failure on galera.galera_kill_ddl
|
||||
galera.galera_var_node_address : MDEV-17151 Galera test failure on galera.galera_var_node_address
|
||||
galera_binlog_stmt_autoinc: MDEV-17106 Test failure on galera.galera_binlog_stmt_autoinc
|
||||
galera_gc_fc_limit : MDEV-17061 Test failure on galera.galera_gc_fc_limit
|
||||
partition : MDEV-13881 galera.partition failed in buildbot with wrong result
|
||||
galera_as_slave_replication_budle : MDEV-15785 Test case galera_as_slave_replication_bundle caused debug assertion
|
||||
galera_wan : MDEV-17259: Test failure on galera.galera_wan
|
||||
|
11
mysql-test/suite/galera/include/reset_query_cache.inc
Normal file
11
mysql-test/suite/galera/include/reset_query_cache.inc
Normal file
@ -0,0 +1,11 @@
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--connection node_1
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
|
||||
--connection node_2
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
@ -2,12 +2,6 @@ TRUNCATE TABLE mysql.general_log;
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
Argument
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%'
|
||||
SELECT Argument FROM mysql.general_log
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
Argument
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%'
|
||||
SELECT Argument FROM mysql.general_log
|
||||
SET GLOBAL general_log='ON';
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
@ -18,8 +12,8 @@ SELECT argument FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument
|
||||
argument
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
COUNT(*) = 0
|
||||
0
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
Argument
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL general_log='OFF';
|
||||
SET GLOBAL general_log='OFF';
|
||||
|
@ -1,3 +1,6 @@
|
||||
connection node_1;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_sync_wait=DEFAULT;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
SHOW GLOBAL VARIABLES LIKE 'wsrep_provider_options';
|
||||
Variable_name Value
|
||||
|
147
mysql-test/suite/galera/r/galera_binlog_stmt_autoinc.result
Normal file
147
mysql-test/suite/galera/r/galera_binlog_stmt_autoinc.result
Normal file
@ -0,0 +1,147 @@
|
||||
SET GLOBAL wsrep_forced_binlog_format='STATEMENT';
|
||||
SET GLOBAL wsrep_forced_binlog_format='STATEMENT';
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
insert into t1(i) values(null);
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
5 dummy_text
|
||||
7 dummy_text
|
||||
9 dummy_text
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
5 dummy_text
|
||||
7 dummy_text
|
||||
9 dummy_text
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
drop table t1;
|
||||
SET SESSION binlog_format='STATEMENT';
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
SET SESSION auto_increment_increment = 3;
|
||||
SET SESSION auto_increment_offset = 1;
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
insert into t1(i) values(null);
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
7 dummy_text
|
||||
10 dummy_text
|
||||
13 dummy_text
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
7 dummy_text
|
||||
10 dummy_text
|
||||
13 dummy_text
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
SET SESSION binlog_format='ROW';
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show variables like '%auto_increment%';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
auto_increment_offset 1
|
||||
wsrep_auto_increment_control ON
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
show variables like '%auto_increment%';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
auto_increment_offset 1
|
||||
wsrep_auto_increment_control OFF
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
drop table t1;
|
||||
SET GLOBAL wsrep_forced_binlog_format='ROW';
|
||||
SET GLOBAL wsrep_forced_binlog_format='ROW';
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
insert into t1(i) values(null);
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
5 dummy_text
|
||||
7 dummy_text
|
||||
9 dummy_text
|
||||
select * from t1;
|
||||
i c
|
||||
3 dummy_text
|
||||
5 dummy_text
|
||||
7 dummy_text
|
||||
9 dummy_text
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
drop table t1;
|
||||
SET SESSION binlog_format='ROW';
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
SET SESSION auto_increment_increment = 3;
|
||||
SET SESSION auto_increment_offset = 1;
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
insert into t1(i) values(null);
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
7 dummy_text
|
||||
10 dummy_text
|
||||
13 dummy_text
|
||||
select * from t1;
|
||||
i c
|
||||
4 dummy_text
|
||||
7 dummy_text
|
||||
10 dummy_text
|
||||
13 dummy_text
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show variables like '%auto_increment%';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
auto_increment_offset 1
|
||||
wsrep_auto_increment_control ON
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
show variables like '%auto_increment%';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
auto_increment_offset 1
|
||||
wsrep_auto_increment_control OFF
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
drop table t1;
|
@ -0,0 +1,103 @@
|
||||
--- r/galera_ist_innodb_flush_logs.result 2018-09-05 10:34:36.192439933 +0300
|
||||
+++ r/galera_ist_innodb_flush_logs.reject 2018-09-17 10:20:06.039150838 +0300
|
||||
@@ -86,3 +86,100 @@
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
+Performing State Transfer on a server that has been killed and restarted
|
||||
+while a DDL was in progress on it
|
||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+COMMIT;
|
||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
+SET wsrep_sync_wait = 0;
|
||||
+Killing server ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+COMMIT;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+Performing --wsrep-recover ...
|
||||
+Starting server ...
|
||||
+Using --wsrep-start-position when starting mysqld ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+ROLLBACK;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+DROP TABLE t1;
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SET GLOBAL debug_dbug = $debug_orig;
|
106
mysql-test/suite/galera/r/galera_ist_mysqldump,debug.rdiff
Normal file
106
mysql-test/suite/galera/r/galera_ist_mysqldump,debug.rdiff
Normal file
@ -0,0 +1,106 @@
|
||||
--- r/galera_ist_mysqldump.result 2018-09-11 12:38:42.027479411 +0300
|
||||
+++ r/galera_ist_mysqldump.reject 2018-09-17 10:28:44.483441364 +0300
|
||||
@@ -180,6 +180,103 @@
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
+Performing State Transfer on a server that has been killed and restarted
|
||||
+while a DDL was in progress on it
|
||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+COMMIT;
|
||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
+SET wsrep_sync_wait = 0;
|
||||
+Killing server ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+COMMIT;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+Performing --wsrep-recover ...
|
||||
+Starting server ...
|
||||
+Using --wsrep-start-position when starting mysqld ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+ROLLBACK;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+DROP TABLE t1;
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SET GLOBAL debug_dbug = $debug_orig;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
|
||||
DROP USER sst;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
|
103
mysql-test/suite/galera/r/galera_ist_rsync,debug.rdiff
Normal file
103
mysql-test/suite/galera/r/galera_ist_rsync,debug.rdiff
Normal file
@ -0,0 +1,103 @@
|
||||
--- r/galera_ist_rsync.result 2018-09-11 12:38:42.027479411 +0300
|
||||
+++ r/galera_ist_rsync.reject 2018-09-17 10:50:16.527307668 +0300
|
||||
@@ -259,3 +259,100 @@
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
+Performing State Transfer on a server that has been killed and restarted
|
||||
+while a DDL was in progress on it
|
||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+COMMIT;
|
||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
+SET wsrep_sync_wait = 0;
|
||||
+Killing server ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+COMMIT;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+Performing --wsrep-recover ...
|
||||
+Starting server ...
|
||||
+Using --wsrep-start-position when starting mysqld ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+ROLLBACK;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+DROP TABLE t1;
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SET GLOBAL debug_dbug = $debug_orig;
|
103
mysql-test/suite/galera/r/galera_ist_xtrabackup-v2,debug.rdiff
Normal file
103
mysql-test/suite/galera/r/galera_ist_xtrabackup-v2,debug.rdiff
Normal file
@ -0,0 +1,103 @@
|
||||
--- r/galera_ist_xtrabackup-v2.result 2018-09-05 10:34:36.192439933 +0300
|
||||
+++ r/galera_ist_xtrabackup-v2.reject 2018-09-17 11:13:33.395264800 +0300
|
||||
@@ -259,3 +259,100 @@
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
+Performing State Transfer on a server that has been killed and restarted
|
||||
+while a DDL was in progress on it
|
||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+COMMIT;
|
||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
+SET wsrep_sync_wait = 0;
|
||||
+Killing server ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+COMMIT;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+Performing --wsrep-recover ...
|
||||
+Starting server ...
|
||||
+Using --wsrep-start-position when starting mysqld ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+COMMIT;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+ROLLBACK;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+DROP TABLE t1;
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SET GLOBAL debug_dbug = $debug_orig;
|
@ -1,3 +1,4 @@
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true';
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
|
@ -1,3 +1,4 @@
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true';
|
||||
CREATE TABLE ten (f1 INTEGER);
|
||||
|
@ -1,3 +1,4 @@
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true';
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
|
@ -7,9 +7,11 @@ disconnect node_2;
|
||||
connection node_1;
|
||||
Suspending node_2 ...
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_sync_wait = 15;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
Got one of the listed errors
|
||||
Resuming node_2 ...
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connection node_2a;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
|
@ -4,6 +4,8 @@ INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
connection node_2;
|
||||
SET SESSION wsrep_retry_autocommit = 0;
|
||||
INSERT INTO t1(f1) SELECT 1 FROM ten as a1, ten AS a2;
|
||||
set debug_sync='ha_commit_trans_after_prepare WAIT_FOR go';
|
||||
INSERT INTO t1 (f1) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6;;
|
||||
connection node_1;
|
||||
TRUNCATE TABLE t1;;
|
||||
|
@ -8,7 +8,7 @@ CREATE TABLE `table with space` (
|
||||
`column with space` INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||
`second column with space` INTEGER,
|
||||
UNIQUE `index name with space` (`second column with space`)
|
||||
);
|
||||
) engine=innodb;
|
||||
INSERT INTO `table with space` VALUES (1, 1);
|
||||
CREATE DATABASE `база`;
|
||||
USE `база`;
|
||||
@ -16,7 +16,7 @@ CREATE TABLE `таблица` (
|
||||
`първа_колона` INTEGER PRIMARY KEY,
|
||||
`втора_колона` INTEGER,
|
||||
UNIQUE `индекс` (`втора_колона`)
|
||||
);
|
||||
) engine=innodb;
|
||||
INSERT INTO `таблица` VALUES (1, 1);
|
||||
CREATE DATABASE `втора база`;
|
||||
USE `втора база`;
|
||||
@ -24,7 +24,7 @@ CREATE TABLE `втора таблица` (
|
||||
`първа колона` INTEGER,
|
||||
`втора колона` INTEGER,
|
||||
KEY `първи индекс` (`първа колона`)
|
||||
);
|
||||
) engine=innodb;
|
||||
INSERT INTO `втора таблица` VALUES (1, 1);
|
||||
connection node_2;
|
||||
USE `database with space`;
|
||||
|
@ -5,7 +5,7 @@ SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
VARIABLE_VALUE = 4
|
||||
1
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER);
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
|
||||
|
@ -1,3 +1,7 @@
|
||||
CALL mtr.add_suppression("WSREP: Stray state UUID msg:.*");
|
||||
CALL mtr.add_suppression("WSREP: Sending JOIN failed:.*");
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed:.*");
|
||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 4
|
||||
1
|
||||
@ -6,7 +10,6 @@ CREATE TABLE t1 (f1 INTEGER);
|
||||
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
|
||||
connection node_3;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4;
|
||||
connection node_4;
|
||||
SELECT VARIABLE_VALUE LIKE '%gmcast.segment = 3%' FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'wsrep_provider_options';
|
||||
@ -16,4 +19,3 @@ SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
|
@ -421,24 +421,6 @@ Qcache_queries_in_cache 1
|
||||
set query_cache_type=on;
|
||||
# On node-1
|
||||
connection node_1;
|
||||
reset query cache;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 4
|
||||
# On node-2
|
||||
connection node_2;
|
||||
reset query cache;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 3
|
||||
# On node-1
|
||||
connection node_1;
|
||||
select sql_no_cache * from t1;
|
||||
a
|
||||
1
|
||||
@ -1318,9 +1300,6 @@ Qcache_queries_in_cache 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 12
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
70
|
||||
# On node-2
|
||||
connection node_2;
|
||||
select count(*) from t1;
|
||||
@ -1328,7 +1307,7 @@ count(*)
|
||||
70
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
Qcache_queries_in_cache 2
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 11
|
||||
@ -1515,7 +1494,7 @@ Variable_name Value
|
||||
Qcache_hits 11
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 34
|
||||
Qcache_inserts 35
|
||||
unlock table;
|
||||
drop view v1;
|
||||
set query_cache_wlock_invalidate=default;
|
||||
@ -1626,7 +1605,7 @@ Variable_name Value
|
||||
Qcache_hits 11
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 36
|
||||
Qcache_inserts 37
|
||||
set character_set_client=cp1251;
|
||||
SELECT a,'Â','â'='Â' FROM t1;
|
||||
a ?? '??'='?‚'
|
||||
@ -1640,7 +1619,7 @@ Variable_name Value
|
||||
Qcache_hits 11
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 37
|
||||
Qcache_inserts 38
|
||||
set character_set_results=cp1251;
|
||||
SELECT a,'Â','â'='Â' FROM t1;
|
||||
a � 'â'='Â'
|
||||
@ -1654,7 +1633,7 @@ Variable_name Value
|
||||
Qcache_hits 11
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 38
|
||||
Qcache_inserts 39
|
||||
drop table t1;
|
||||
#
|
||||
# Comments before command
|
||||
@ -1665,9 +1644,6 @@ create table t1 (a int) engine=innodb;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 46
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 12
|
||||
@ -1678,9 +1654,6 @@ a
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 47
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 13
|
||||
@ -1689,9 +1662,6 @@ connection node_2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 38
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 11
|
||||
@ -1702,9 +1672,6 @@ a
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 39
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 12
|
||||
|
@ -7,6 +7,7 @@
|
||||
# a success was reported.
|
||||
#
|
||||
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source suite/galera/t/MW-328-header.inc
|
||||
|
@ -7,6 +7,7 @@
|
||||
# gets the deadlock error
|
||||
#
|
||||
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source suite/galera/t/MW-328-header.inc
|
||||
|
@ -7,6 +7,7 @@
|
||||
# masks all deadlock errors
|
||||
#
|
||||
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source suite/galera/t/MW-328-header.inc
|
||||
|
@ -1 +1,2 @@
|
||||
--log-output=TABLE
|
||||
--general-log=OFF
|
||||
|
@ -10,14 +10,13 @@ TRUNCATE TABLE mysql.general_log;
|
||||
|
||||
--sleep 1
|
||||
--connection node_2
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%';
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log;
|
||||
--source include/wait_condition.inc
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
|
||||
--sleep 1
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%';
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log;
|
||||
--source include/wait_condition.inc
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
|
||||
@ -34,7 +33,10 @@ SET SESSION wsrep_osu_method=TOI;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL general_log='OFF';
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL general_log='OFF';
|
||||
|
||||
|
230
mysql-test/suite/galera/t/galera_binlog_stmt_autoinc.test
Normal file
230
mysql-test/suite/galera/t/galera_binlog_stmt_autoinc.test
Normal file
@ -0,0 +1,230 @@
|
||||
##
|
||||
## Tests the auto-increment with binlog in STATEMENT mode.
|
||||
##
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
##
|
||||
## Verify the correct operation of the auto-increment when the binlog
|
||||
## format artificially set to the 'STATEMENT' (although this mode is
|
||||
## not recommended in the current version):
|
||||
##
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL wsrep_forced_binlog_format='STATEMENT';
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_forced_binlog_format='STATEMENT';
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1(i) values(null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
select * from t1;
|
||||
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
|
||||
--connection node_1
|
||||
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
|
||||
drop table t1;
|
||||
|
||||
##
|
||||
## Check the operation when the automatic control over the auto-increment
|
||||
## settings is switched off, that is, when we use the increment step and
|
||||
## the offset specified by the user. In the current session, the binlog
|
||||
## format is set to 'STATEMENT'. It is important that the values of the
|
||||
## auto-increment options does not changed on other node - it allows us
|
||||
## to check the correct transmission of the auto-increment options to
|
||||
## other nodes:
|
||||
##
|
||||
|
||||
--disable_warnings
|
||||
SET SESSION binlog_format='STATEMENT';
|
||||
--enable_warnings
|
||||
|
||||
show variables like 'binlog_format';
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
|
||||
SET SESSION auto_increment_increment = 3;
|
||||
SET SESSION auto_increment_offset = 1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1(i) values(null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_1
|
||||
|
||||
##
|
||||
## Verify the return to automatic calculation of the step
|
||||
## and offset of the auto-increment:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
|
||||
SET SESSION binlog_format='ROW';
|
||||
|
||||
show variables like 'binlog_format';
|
||||
show variables like '%auto_increment%';
|
||||
|
||||
##
|
||||
## Verify the recovery of original user-defined values after
|
||||
## stopping the automatic control over auto-increment:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
|
||||
show variables like '%auto_increment%';
|
||||
|
||||
##
|
||||
## Restore original options and drop test table:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
|
||||
drop table t1;
|
||||
|
||||
##
|
||||
## Verify the correct operation of the auto-increment when the binlog
|
||||
## format set to the 'ROW':
|
||||
##
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL wsrep_forced_binlog_format='ROW';
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_forced_binlog_format='ROW';
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1(i) values(null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select * from t1;
|
||||
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
|
||||
--connection node_1
|
||||
|
||||
SET GLOBAL wsrep_forced_binlog_format='none';
|
||||
|
||||
drop table t1;
|
||||
|
||||
##
|
||||
## Check the operation when the automatic control over the auto-increment
|
||||
## settings is switched off, that is, when we use the increment step and
|
||||
## the offset specified by the user. In the current session, the binlog
|
||||
## format is set to 'ROW'. It is important that the values of the
|
||||
## auto-increment options does not changed on other node - it allows us
|
||||
## to check the correct transmission of the auto-increment options to
|
||||
## other nodes:
|
||||
##
|
||||
|
||||
SET SESSION binlog_format='ROW';
|
||||
|
||||
show variables like 'binlog_format';
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
|
||||
SET SESSION auto_increment_increment = 3;
|
||||
SET SESSION auto_increment_offset = 1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1(i) values(null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select * from t1;
|
||||
|
||||
--connection node_1
|
||||
|
||||
##
|
||||
## Verify the return to automatic calculation of the step
|
||||
## and offset of the auto-increment:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
|
||||
show variables like 'binlog_format';
|
||||
show variables like '%auto_increment%';
|
||||
|
||||
##
|
||||
## Verify the recovery of original user-defined values after
|
||||
## stopping the automatic control over auto-increment:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='OFF';
|
||||
|
||||
show variables like '%auto_increment%';
|
||||
|
||||
##
|
||||
## Restore original options and drop test table:
|
||||
##
|
||||
|
||||
SET GLOBAL wsrep_auto_increment_control='ON';
|
||||
|
||||
drop table t1;
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
@ -5,6 +5,8 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
|
||||
--connection node_1
|
||||
|
||||
# Enable the master to continue running during the split-brain situation that
|
||||
|
@ -6,6 +6,8 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
|
||||
--connection node_1
|
||||
# Enable the master to continue running during the split-brain situation that
|
||||
# occurs when the slave is killed
|
||||
|
@ -5,6 +5,8 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("WSREP: Last Applied Action message in non-primary configuration from member .*");
|
||||
|
||||
--connection node_1
|
||||
|
||||
# Enable the master to continue running during the split-brain situation that
|
||||
|
@ -34,6 +34,8 @@ SET SESSION wsrep_sync_wait = 0;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET SESSION wsrep_sync_wait = 15;
|
||||
|
||||
--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
@ -46,6 +48,7 @@ INSERT INTO t1 VALUES (1);
|
||||
exit(0);
|
||||
EOF
|
||||
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
--source include/wait_until_ready.inc
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# INSERT and TRUNCATE on different nodes
|
||||
@ -16,14 +18,23 @@ INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
|
||||
# Insert 100K rows
|
||||
# Insert 1m rows
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 10 FROM ten;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Prevent autocommit retring from masking the deadlock error we expect to get
|
||||
SET SESSION wsrep_retry_autocommit = 0;
|
||||
INSERT INTO t1(f1) SELECT 1 FROM ten as a1, ten AS a2;
|
||||
|
||||
set debug_sync='ha_commit_trans_after_prepare WAIT_FOR go';
|
||||
--send INSERT INTO t1 (f1) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6;
|
||||
|
||||
--connection node_1
|
||||
--sleep 1
|
||||
# Wait for a above insert to start
|
||||
--let $wait_condition = SELECT COUNT(*) >= 100 from t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--send TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1
|
||||
@ -38,6 +49,5 @@ SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE ten;
|
||||
|
@ -13,6 +13,8 @@ SET GLOBAL wsrep_sync_wait = 15;
|
||||
|
||||
--connection node_1
|
||||
|
||||
--let $innodb_num_tables_orig = `SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES`
|
||||
|
||||
# Spaces in identifiers
|
||||
|
||||
CREATE DATABASE `database with space`;
|
||||
@ -21,7 +23,7 @@ CREATE TABLE `table with space` (
|
||||
`column with space` INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||
`second column with space` INTEGER,
|
||||
UNIQUE `index name with space` (`second column with space`)
|
||||
);
|
||||
) engine=innodb;
|
||||
INSERT INTO `table with space` VALUES (1, 1);
|
||||
|
||||
# Unicode identifiers
|
||||
@ -32,7 +34,7 @@ CREATE TABLE `таблица` (
|
||||
`първа_колона` INTEGER PRIMARY KEY,
|
||||
`втора_колона` INTEGER,
|
||||
UNIQUE `индекс` (`втора_колона`)
|
||||
);
|
||||
) engine=innodb;
|
||||
|
||||
INSERT INTO `таблица` VALUES (1, 1);
|
||||
|
||||
@ -44,11 +46,15 @@ CREATE TABLE `втора таблица` (
|
||||
`първа колона` INTEGER,
|
||||
`втора колона` INTEGER,
|
||||
KEY `първи индекс` (`първа колона`)
|
||||
);
|
||||
) engine=innodb;
|
||||
|
||||
INSERT INTO `втора таблица` VALUES (1, 1);
|
||||
|
||||
--connection node_2
|
||||
# Wait until 3 above tables with databases are created also to this node
|
||||
--let $wait_condition = SELECT COUNT(*) = $innodb_num_tables_orig + 3 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
USE `database with space`;
|
||||
SELECT `second column with space` FROM `table with space`;
|
||||
|
||||
|
@ -13,13 +13,19 @@ call mtr.add_suppression("WSREP: Sending JOIN failed: -[0-9]+ (Transport endpoi
|
||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER);
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||
|
||||
--connection node_2
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||
--connection node_3
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
|
@ -9,6 +9,12 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CALL mtr.add_suppression("WSREP: Stray state UUID msg:.*");
|
||||
CALL mtr.add_suppression("WSREP: Sending JOIN failed:.*");
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
call mtr.add_suppression("WSREP: Sending JOIN failed:.*");
|
||||
|
||||
|
||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
--connection node_1
|
||||
@ -16,15 +22,19 @@ CREATE TABLE t1 (f1 INTEGER);
|
||||
|
||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||
--connection node_3
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
|
||||
--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4
|
||||
--connection node_4
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
SELECT VARIABLE_VALUE LIKE '%gmcast.segment = 3%' FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'wsrep_provider_options';
|
||||
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||
|
@ -113,6 +113,11 @@ show status like "Qcache_hits";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# MERGE TABLES with INSERT/UPDATE and DELETE
|
||||
#
|
||||
@ -180,6 +185,11 @@ show status like "Qcache_hits";
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# SELECT SQL_CACHE ...
|
||||
#
|
||||
@ -214,16 +224,7 @@ set query_cache_type=on;
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--echo # On node-1
|
||||
--connection node_1
|
||||
reset query cache;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
--echo # On node-2
|
||||
--connection node_2
|
||||
reset query cache;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# SELECT SQL_NO_CACHE
|
||||
@ -240,6 +241,11 @@ show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Check that queries that uses NOW(), LAST_INSERT_ID()... are not cached.
|
||||
#
|
||||
@ -282,6 +288,11 @@ show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Non-cachable ODBC work around (and prepare cache for drop database)
|
||||
#
|
||||
@ -316,6 +327,11 @@ show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Charset conversion (cp1251_koi8 always present)
|
||||
# Note: Queries using different default character sets are cached separately.
|
||||
@ -343,6 +359,11 @@ show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Same tables in different dbs
|
||||
#
|
||||
@ -376,6 +397,11 @@ show status like "Qcache_hits";
|
||||
drop database mysqltest;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# FOUND_ROWS()
|
||||
#
|
||||
@ -428,6 +454,11 @@ show status like "Qcache_queries_in_cache";
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Test insert delayed (MYISAM)
|
||||
#
|
||||
@ -531,6 +562,11 @@ drop table t2;
|
||||
set GLOBAL query_cache_min_res_unit=default;
|
||||
show global variables like "query_cache_min_res_unit";
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Case sensitive test
|
||||
#
|
||||
@ -553,6 +589,11 @@ show status like "Qcache_hits";
|
||||
show status like "Qcache_inserts";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Test of query cache resizing
|
||||
#
|
||||
@ -619,6 +660,11 @@ select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Temporary tables (ignored by Galera)
|
||||
#
|
||||
@ -652,6 +698,11 @@ show status like "Qcache_hits";
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# System databse test (no need to perform it on node_2)
|
||||
# Note: Queries on system tables are not cached.
|
||||
@ -704,6 +755,11 @@ show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
drop table t2;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Load data invalidation test
|
||||
#
|
||||
@ -717,13 +773,13 @@ show status like "Qcache_hits";
|
||||
eval load data infile '$MYSQLTEST_VARDIR/std_data/words.dat' into table t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
select count(*) from t1;
|
||||
|
||||
# Wait for "load data" to replicate.
|
||||
--sleep 5
|
||||
--let $wait_condition = SELECT COUNT(*) = 70 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # On node-2
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 70 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
select count(*) from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
@ -735,6 +791,11 @@ select count(*) from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo #
|
||||
--echo # INTO OUTFILE/DUMPFILE test
|
||||
--echo #
|
||||
@ -756,6 +817,11 @@ let $datadir=`select @@datadir`;
|
||||
--remove_file $datadir/test/query_cache.dump.file
|
||||
--remove_file $datadir/test/query_cache.out.file
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test of SQL_SELECT_LIMIT
|
||||
--echo #
|
||||
@ -786,6 +852,11 @@ SET SQL_SELECT_LIMIT=DEFAULT;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo #
|
||||
--echo # WRITE LOCK & QC
|
||||
--echo #
|
||||
@ -856,6 +927,11 @@ select * from t1;
|
||||
drop table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
#
|
||||
# Test character set related variables:
|
||||
# character_set_result
|
||||
@ -944,6 +1020,11 @@ show status like "Qcache_inserts";
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo #
|
||||
--echo # Comments before command
|
||||
--echo #
|
||||
@ -952,27 +1033,28 @@ drop table t1;
|
||||
--connection node_1
|
||||
create table t1 (a int) engine=innodb;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
/**/ select * from t1;
|
||||
/**/ select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
|
||||
--echo # On node-2
|
||||
--connection node_2
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
/**/ select * from t1;
|
||||
/**/ select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo #
|
||||
--echo # Information schema & query cache test
|
||||
--echo #
|
||||
@ -1011,6 +1093,11 @@ show status like 'qcache_queries_in_cache';
|
||||
show status like "Qcache_hits";
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# RESET QUERY CACHE
|
||||
#
|
||||
--source include/reset_query_cache.inc
|
||||
|
||||
--echo # Restore original settings.
|
||||
--echo # On node-1
|
||||
--connection node_1
|
||||
|
7
mysql-test/suite/parts/r/update_and_cache.result
Normal file
7
mysql-test/suite/parts/r/update_and_cache.result
Normal file
@ -0,0 +1,7 @@
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, a INT);
|
||||
INSERT INTO t1 VALUES (1,10),(2,20);
|
||||
CREATE TABLE t2 (b INT) PARTITION BY KEY (b) PARTITIONS 2;
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
DELETE t2 FROM t2 WHERE b BETWEEN 5 AND 9;
|
||||
UPDATE t2 JOIN t1 SET b = 5;
|
||||
DROP TABLE t1, t2;
|
12
mysql-test/suite/parts/t/update_and_cache.test
Normal file
12
mysql-test/suite/parts/t/update_and_cache.test
Normal file
@ -0,0 +1,12 @@
|
||||
--source include/have_partition.inc
|
||||
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, a INT);
|
||||
INSERT INTO t1 VALUES (1,10),(2,20);
|
||||
|
||||
CREATE TABLE t2 (b INT) PARTITION BY KEY (b) PARTITIONS 2;
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
|
||||
DELETE t2 FROM t2 WHERE b BETWEEN 5 AND 9;
|
||||
UPDATE t2 JOIN t1 SET b = 5;
|
||||
|
||||
DROP TABLE t1, t2;
|
@ -60,6 +60,8 @@ wsrep_local_send_queue_min #
|
||||
wsrep_local_state #
|
||||
wsrep_local_state_comment #
|
||||
wsrep_local_state_uuid #
|
||||
wsrep_open_connections #
|
||||
wsrep_open_transactions #
|
||||
wsrep_protocol_version #
|
||||
wsrep_provider_name #
|
||||
wsrep_provider_vendor #
|
||||
|
@ -422,6 +422,27 @@ UNLOCK TABLES;
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-14410 - Assertion `table->pos_in_locked_tables == __null ||
|
||||
--echo # table->pos_in_locked_tables->table == table' failed in
|
||||
--echo # mark_used_tables_as_free_for_reuse
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (b INT);
|
||||
CREATE TABLE t3 (c INT);
|
||||
|
||||
CREATE TRIGGER tr1 BEFORE INSERT ON t3 FOR EACH ROW INSERT INTO t1 VALUES ();
|
||||
CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW INSERT INTO t3 SELECT * FROM t1;
|
||||
|
||||
LOCK TABLE t1 WRITE, t2 WRITE;
|
||||
CREATE OR REPLACE TABLE t1 (i INT);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11071 - Assertion `thd->transaction.stmt.is_empty()' failed in
|
||||
--echo # Locked_tables_list::unlock_locked_tables
|
||||
|
@ -1707,6 +1707,55 @@ SELECT SEC_TO_TIME(MAKEDATE(0,RAND(~0)));
|
||||
#
|
||||
SELECT PERIOD_DIFF(2018, AES_ENCRYPT('Rae Bareli', 'Rae Bareli'));
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17249 MAKETIME(-1e50,0,0) returns a wrong result
|
||||
--echo #
|
||||
|
||||
--vertical_results
|
||||
SELECT
|
||||
MAKETIME(1e10,0,0),
|
||||
MAKETIME(-1e10,0,0),
|
||||
MAKETIME(1e50,0,0),
|
||||
MAKETIME(-1e50,0,0),
|
||||
MAKETIME(COALESCE(1e50),0,0),
|
||||
MAKETIME(COALESCE(-1e50),0,0);
|
||||
--horizontal_results
|
||||
|
||||
CREATE TABLE t1 (a FLOAT);
|
||||
INSERT INTO t1 VALUES (1e30),(-1e30);
|
||||
SELECT MAKETIME(a,0,0) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17244 MAKETIME(900,0,0.111) returns a wrong result
|
||||
--echo #
|
||||
|
||||
SELECT MAKETIME(900,0,0);
|
||||
SELECT MAKETIME(900,0,0.1);
|
||||
SELECT MAKETIME(900,0,0.11);
|
||||
SELECT MAKETIME(900,0,0.111);
|
||||
SELECT MAKETIME(900,0,0.1111);
|
||||
SELECT MAKETIME(900,0,0.11111);
|
||||
SELECT MAKETIME(900,0,0.111111);
|
||||
SELECT MAKETIME(900,0,0.1111111);
|
||||
SELECT MAKETIME(900,0,0.11111111);
|
||||
SELECT MAKETIME(900,0,0.111111111);
|
||||
SELECT MAKETIME(900,0,EXP(1));
|
||||
|
||||
SELECT MAKETIME(-900,0,0);
|
||||
SELECT MAKETIME(-900,0,0.1);
|
||||
SELECT MAKETIME(-900,0,0.11);
|
||||
SELECT MAKETIME(-900,0,0.111);
|
||||
SELECT MAKETIME(-900,0,0.1111);
|
||||
SELECT MAKETIME(-900,0,0.11111);
|
||||
SELECT MAKETIME(-900,0,0.111111);
|
||||
SELECT MAKETIME(-900,0,0.1111111);
|
||||
SELECT MAKETIME(-900,0,0.11111111);
|
||||
SELECT MAKETIME(-900,0,0.111111111);
|
||||
SELECT MAKETIME(-900,0,EXP(1));
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -2175,6 +2175,28 @@ DROP USER foo@'127.0.0.1';
|
||||
|
||||
--echo # End of Bug#12766319
|
||||
|
||||
#
|
||||
# Bug#27230925: HANDLE_FATAL_SIGNAL (SIG=11) IN SHOW_ROUTINE_GRANTS
|
||||
#
|
||||
create user foo@localhost;
|
||||
create database foodb;
|
||||
grant create routine on foodb.* to foo@localhost;
|
||||
connect con1,localhost,foo;
|
||||
create procedure fooproc() select 'i am fooproc';
|
||||
show grants;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
rename table mysql.procs_priv to mysql.procs_priv1;
|
||||
flush privileges;
|
||||
show grants for foo@localhost;
|
||||
rename table mysql.procs_priv1 to mysql.procs_priv;
|
||||
show grants for foo@localhost;
|
||||
flush privileges;
|
||||
show grants for foo@localhost;
|
||||
drop user foo@localhost;
|
||||
drop procedure fooproc;
|
||||
drop database foodb;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11756966 - 48958: STORED PROCEDURES CAN BE LEVERAGED TO BYPASS
|
||||
|
@ -973,6 +973,34 @@ disconnect con2;
|
||||
DROP USER user2@localhost;
|
||||
DROP DATABASE db1;
|
||||
|
||||
#
|
||||
# Bug#27407480: AUTOMATIC_SP_PRIVILEGES REQUIRES NEED THE INSERT PRIVILEGES FOR MYSQL.USER TABLE
|
||||
#
|
||||
create user foo@local_ost;
|
||||
#
|
||||
# Create a user with an authentification plugin 'foobar'.
|
||||
# Instead of using a normal "CREATE USER <user> IDENTIFIED VIA <plugin>"
|
||||
# we do CREATE (without VIA) followed by UPDATE and FLUSH.
|
||||
# This is to avoid installing a real plugin and thus avoid the test dependency.
|
||||
# We won't login under this user in the below test, so this is fine.
|
||||
#
|
||||
create user foo@`local\_ost`;
|
||||
update mysql.user set plugin='foobar' where host='local\\_ost';
|
||||
flush privileges;
|
||||
create database foodb;
|
||||
grant create routine on foodb.* to foo@local_ost;
|
||||
connect con1,localhost,foo;
|
||||
select user(), current_user();
|
||||
show grants;
|
||||
create procedure fooproc() select 'i am fooproc';
|
||||
show grants;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
drop user foo@local_ost;
|
||||
drop user foo@`local\_ost`;
|
||||
drop procedure fooproc;
|
||||
drop database foodb;
|
||||
|
||||
--echo #
|
||||
--echo # Test for bug#12602983 - User without privilege on routine can discover
|
||||
--echo # its existence by executing "select non_existing_func();" or by
|
||||
|
@ -369,51 +369,6 @@ SELECT * FROM INFORMATION_SCHEMA.PROFILING, mysql.user;
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
--echo #
|
||||
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, t TEXT);
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
--sorted_result
|
||||
SELECT * FROM mysql.column_stats;
|
||||
DELETE FROM mysql.column_stats
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='t';
|
||||
INSERT INTO mysql.column_stats VALUES
|
||||
('test','t1','t','bar','foo', 0.0, 3.0, 1.0, 0, NULL, NULL);
|
||||
--sorted_result
|
||||
SELECT * FROM mysql.column_stats;
|
||||
|
||||
SELECT pk FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16760: CREATE OR REPLACE TABLE after ANALYZE TABLE
|
||||
--echo #
|
||||
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
||||
CREATE TABLE t1 (pk int PRIMARY KEY, c varchar(32));
|
||||
INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
|
||||
ANALYZE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM mysql.column_stats;
|
||||
|
||||
CREATE OR REPLACE TABLE t1 (pk int PRIMARY KEY, a char(7));
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM mysql.column_stats;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16711:CREATE OR REPLACE TABLE introducing BLOB column
|
||||
--echo #
|
||||
|
@ -332,6 +332,36 @@ eval select concat((truncate((-1.7976931348623157E+307),(0x1e))),
|
||||
|
||||
select format(truncate('1.7976931348623157E+308',-12),1,'fr_BE') as foo;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17249 MAKETIME(-1e50,0,0) returns a wrong result
|
||||
--echo #
|
||||
|
||||
SELECT LEFT('a',EXP(50));
|
||||
SELECT LEFT('a', COALESCE(1e30));
|
||||
|
||||
CREATE TABLE t1 (a FLOAT);
|
||||
INSERT INTO t1 VALUES (1e30);
|
||||
SELECT LEFT('a',a), LEFT('a',1e30) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
PREPARE stmt FROM 'SELECT LEFT(111,?)';
|
||||
SET @a=1e30;
|
||||
EXECUTE stmt USING @a;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT LEFT('a',(SELECT 1e30 FROM t1 LIMIT 1));
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (a DOUBLE);
|
||||
INSERT INTO t1 VALUES (1e30),(0);
|
||||
SELECT LEFT('a', SUM(a)) FROM t1;
|
||||
SELECT LEFT('a', AVG(a)) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #13500371 63704: CONVERSION OF '1.' TO A NUMBER GIVES ERROR 1265
|
||||
--echo # (WARN_DATA_TRUNCATED)
|
||||
|
@ -204,6 +204,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
|
||||
uchar* point;
|
||||
reg1 USED_MEM *next= 0;
|
||||
reg2 USED_MEM **prev;
|
||||
size_t original_length = length;
|
||||
DBUG_ENTER("alloc_root");
|
||||
DBUG_PRINT("enter",("root: %p", mem_root));
|
||||
DBUG_ASSERT(alloc_root_inited(mem_root));
|
||||
@ -264,7 +265,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
|
||||
mem_root->used= next;
|
||||
mem_root->first_block_usage= 0;
|
||||
}
|
||||
TRASH_ALLOC(point, length);
|
||||
TRASH_ALLOC(point, original_length);
|
||||
DBUG_PRINT("exit",("ptr: %p", point));
|
||||
DBUG_RETURN((void*) point);
|
||||
#endif
|
||||
|
@ -57,9 +57,18 @@ case "$1" in
|
||||
readonly WSREP_SST_OPT_MODULE=${remain%%/*}
|
||||
readonly WSREP_SST_OPT_PATH=${WSREP_SST_OPT_ADDR#*/}
|
||||
remain=${WSREP_SST_OPT_PATH#*/}
|
||||
readonly WSREP_SST_OPT_LSN=${remain%%/*}
|
||||
remain=${remain#*/}
|
||||
readonly WSREP_SST_OPT_SST_VER=${remain%%/*}
|
||||
if [ "$remain" != "${WSREP_SST_OPT_PATH}" ]; then
|
||||
readonly WSREP_SST_OPT_LSN=${remain%%/*}
|
||||
remain=${remain#*/}
|
||||
if [ "$remain" != "${WSREP_SST_OPT_LSN}" ]; then
|
||||
readonly WSREP_SST_OPT_SST_VER=${remain%%/*}
|
||||
else
|
||||
readonly WSREP_SST_OPT_SST_VER=""
|
||||
fi
|
||||
else
|
||||
readonly WSREP_SST_OPT_LSN=""
|
||||
readonly WSREP_SST_OPT_SST_VER=""
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
'--bypass')
|
||||
|
@ -45,12 +45,14 @@ struct show_table_contributors_st show_table_contributors[]= {
|
||||
{"Visma", "https://visma.com", "Gold Sponsor of the MariaDB Foundation"},
|
||||
{"DBS", "https://dbs.com", "Gold Sponsor of the MariaDB Foundation"},
|
||||
{"IBM", "https://www.ibm.com", "Gold Sponsor of the MariaDB Foundation"},
|
||||
{"Tencent Games", "http://game.qq.com/", "Gold Sponsor of the MariaDB Foundation"},
|
||||
{"Nexedi", "https://www.nexedi.com", "Silver Sponsor of the MariaDB Foundation"},
|
||||
{"Acronis", "http://www.acronis.com", "Silver Sponsor of the MariaDB Foundation"},
|
||||
{"Acronis", "https://www.acronis.com", "Silver Sponsor of the MariaDB Foundation"},
|
||||
{"Verkkokauppa.com", "https://www.verkkokauppa.com", "Bronze Sponsor of the MariaDB Foundation"},
|
||||
{"Virtuozzo", "https://virtuozzo.com", "Bronze Sponsor of the MariaDB Foundation"},
|
||||
{"Tencent Game DBA", "http://tencentdba.com/about", "Bronze Sponsor of the MariaDB Foundation"},
|
||||
{"Tencent TDSQL", "http://tdsql.org", "Bronze Sponsor of the MariaDB Foundation"},
|
||||
{"Percona", "https://www.percona.com/", "Bronze Sponsor of the MariaDB Foundation"},
|
||||
|
||||
/* Sponsors of important features */
|
||||
{"Google", "USA", "Sponsoring encryption, parallel replication and GTID"},
|
||||
|
@ -4526,7 +4526,7 @@ longlong Field_float::val_int(void)
|
||||
{
|
||||
float j;
|
||||
float4get(j,ptr);
|
||||
return (longlong) rint(j);
|
||||
return Converter_double_to_longlong(j, false).result();
|
||||
}
|
||||
|
||||
|
||||
|
180
sql/item.cc
180
sql/item.cc
@ -3949,7 +3949,7 @@ longlong Item_param::val_int()
|
||||
// There's no "default". See comments in Item_param::save_in_field().
|
||||
switch (state) {
|
||||
case REAL_VALUE:
|
||||
return (longlong) rint(value.real);
|
||||
return Converter_double_to_longlong(value.real, unsigned_flag).result();
|
||||
case INT_VALUE:
|
||||
return value.integer;
|
||||
case DECIMAL_VALUE:
|
||||
@ -4490,32 +4490,6 @@ bool Item_param::append_for_log(THD *thd, String *str)
|
||||
return str->append(*val);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy
|
||||
****************************************************************************/
|
||||
|
||||
Item_copy *Item_copy::create(THD *thd, Item *item)
|
||||
{
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
switch (item->result_type())
|
||||
{
|
||||
case STRING_RESULT:
|
||||
return new (mem_root) Item_copy_string(thd, item);
|
||||
case REAL_RESULT:
|
||||
return new (mem_root) Item_copy_float(thd, item);
|
||||
case INT_RESULT:
|
||||
return item->unsigned_flag ?
|
||||
new (mem_root) Item_copy_uint(thd, item) :
|
||||
new (mem_root) Item_copy_int(thd, item);
|
||||
case DECIMAL_RESULT:
|
||||
return new (mem_root) Item_copy_decimal(thd, item);
|
||||
case TIME_RESULT:
|
||||
case ROW_RESULT:
|
||||
DBUG_ASSERT (0);
|
||||
}
|
||||
/* should not happen */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_string
|
||||
@ -4573,156 +4547,6 @@ my_decimal *Item_copy_string::val_decimal(my_decimal *decimal_value)
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_int
|
||||
****************************************************************************/
|
||||
|
||||
void Item_copy_int::copy()
|
||||
{
|
||||
cached_value= item->val_int();
|
||||
null_value=item->null_value;
|
||||
}
|
||||
|
||||
static int save_int_value_in_field (Field *, longlong, bool, bool);
|
||||
|
||||
int Item_copy_int::save_in_field(Field *field, bool no_conversions)
|
||||
{
|
||||
return save_int_value_in_field(field, cached_value,
|
||||
null_value, unsigned_flag);
|
||||
}
|
||||
|
||||
|
||||
String *Item_copy_int::val_str(String *str)
|
||||
{
|
||||
if (null_value)
|
||||
return (String *) 0;
|
||||
|
||||
str->set(cached_value, &my_charset_bin);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
my_decimal *Item_copy_int::val_decimal(my_decimal *decimal_value)
|
||||
{
|
||||
if (null_value)
|
||||
return (my_decimal *) 0;
|
||||
|
||||
int2my_decimal(E_DEC_FATAL_ERROR, cached_value, unsigned_flag, decimal_value);
|
||||
return decimal_value;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_uint
|
||||
****************************************************************************/
|
||||
|
||||
String *Item_copy_uint::val_str(String *str)
|
||||
{
|
||||
if (null_value)
|
||||
return (String *) 0;
|
||||
|
||||
str->set((ulonglong) cached_value, &my_charset_bin);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_float
|
||||
****************************************************************************/
|
||||
|
||||
String *Item_copy_float::val_str(String *str)
|
||||
{
|
||||
if (null_value)
|
||||
return (String *) 0;
|
||||
else
|
||||
{
|
||||
double nr= val_real();
|
||||
str->set_real(nr,decimals, &my_charset_bin);
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
my_decimal *Item_copy_float::val_decimal(my_decimal *decimal_value)
|
||||
{
|
||||
if (null_value)
|
||||
return (my_decimal *) 0;
|
||||
else
|
||||
{
|
||||
double nr= val_real();
|
||||
double2my_decimal(E_DEC_FATAL_ERROR, nr, decimal_value);
|
||||
return decimal_value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int Item_copy_float::save_in_field(Field *field, bool no_conversions)
|
||||
{
|
||||
if (null_value)
|
||||
return set_field_to_null(field);
|
||||
field->set_notnull();
|
||||
return field->store(cached_value);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_decimal
|
||||
****************************************************************************/
|
||||
|
||||
int Item_copy_decimal::save_in_field(Field *field, bool no_conversions)
|
||||
{
|
||||
if (null_value)
|
||||
return set_field_to_null(field);
|
||||
field->set_notnull();
|
||||
return field->store_decimal(&cached_value);
|
||||
}
|
||||
|
||||
|
||||
String *Item_copy_decimal::val_str(String *result)
|
||||
{
|
||||
if (null_value)
|
||||
return (String *) 0;
|
||||
result->set_charset(&my_charset_bin);
|
||||
my_decimal2string(E_DEC_FATAL_ERROR, &cached_value, 0, 0, 0, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
double Item_copy_decimal::val_real()
|
||||
{
|
||||
if (null_value)
|
||||
return 0.0;
|
||||
else
|
||||
{
|
||||
double result;
|
||||
my_decimal2double(E_DEC_FATAL_ERROR, &cached_value, &result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
longlong Item_copy_decimal::val_int()
|
||||
{
|
||||
if (null_value)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
longlong result;
|
||||
my_decimal2int(E_DEC_FATAL_ERROR, &cached_value, unsigned_flag, &result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Item_copy_decimal::copy()
|
||||
{
|
||||
my_decimal *nr= item->val_decimal(&cached_value);
|
||||
if (nr && nr != &cached_value)
|
||||
my_decimal2decimal (nr, &cached_value);
|
||||
null_value= item->null_value;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Functions to convert item to field (for send_result_set_metadata)
|
||||
*/
|
||||
@ -9983,7 +9807,7 @@ longlong Item_cache_real::val_int()
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
if (!has_value())
|
||||
return 0;
|
||||
return (longlong) rint(value);
|
||||
return Converter_double_to_longlong(value, unsigned_flag).result();
|
||||
}
|
||||
|
||||
|
||||
|
100
sql/item.h
100
sql/item.h
@ -4970,7 +4970,7 @@ public:
|
||||
Base class to implement typed value caching Item classes
|
||||
|
||||
Item_copy_ classes are very similar to the corresponding Item_
|
||||
classes (e.g. Item_copy_int is similar to Item_int) but they add
|
||||
classes (e.g. Item_copy_string is similar to Item_string) but they add
|
||||
the following additional functionality to Item_ :
|
||||
1. Nullability
|
||||
2. Possibility to store the value not only on instantiation time,
|
||||
@ -5017,13 +5017,6 @@ protected:
|
||||
}
|
||||
|
||||
public:
|
||||
/**
|
||||
Factory method to create the appropriate subclass dependent on the type of
|
||||
the original item.
|
||||
|
||||
@param item the original item.
|
||||
*/
|
||||
static Item_copy *create(THD *thd, Item *item);
|
||||
|
||||
/**
|
||||
Update the cache with the value of the original item
|
||||
@ -5092,97 +5085,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class Item_copy_int : public Item_copy
|
||||
{
|
||||
protected:
|
||||
longlong cached_value;
|
||||
public:
|
||||
Item_copy_int(THD *thd, Item *i): Item_copy(thd, i) {}
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
|
||||
virtual String *val_str(String*);
|
||||
virtual my_decimal *val_decimal(my_decimal *);
|
||||
virtual double val_real()
|
||||
{
|
||||
return null_value ? 0.0 : (double) cached_value;
|
||||
}
|
||||
virtual longlong val_int()
|
||||
{
|
||||
return null_value ? 0 : cached_value;
|
||||
}
|
||||
virtual void copy();
|
||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||
{ return get_item_copy<Item_copy_int>(thd, mem_root, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_copy_uint : public Item_copy_int
|
||||
{
|
||||
public:
|
||||
Item_copy_uint(THD *thd, Item *item_arg): Item_copy_int(thd, item_arg)
|
||||
{
|
||||
unsigned_flag= 1;
|
||||
}
|
||||
|
||||
String *val_str(String*);
|
||||
double val_real()
|
||||
{
|
||||
return null_value ? 0.0 : (double) (ulonglong) cached_value;
|
||||
}
|
||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||
{ return get_item_copy<Item_copy_uint>(thd, mem_root, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_copy_float : public Item_copy
|
||||
{
|
||||
protected:
|
||||
double cached_value;
|
||||
public:
|
||||
Item_copy_float(THD *thd, Item *i): Item_copy(thd, i) {}
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
|
||||
String *val_str(String*);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
double val_real()
|
||||
{
|
||||
return null_value ? 0.0 : cached_value;
|
||||
}
|
||||
longlong val_int()
|
||||
{
|
||||
return (longlong) rint(val_real());
|
||||
}
|
||||
void copy()
|
||||
{
|
||||
cached_value= item->val_real();
|
||||
null_value= item->null_value;
|
||||
}
|
||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||
{ return get_item_copy<Item_copy_float>(thd, mem_root, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_copy_decimal : public Item_copy
|
||||
{
|
||||
protected:
|
||||
my_decimal cached_value;
|
||||
public:
|
||||
Item_copy_decimal(THD *thd, Item *i): Item_copy(thd, i) {}
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
|
||||
String *val_str(String*);
|
||||
my_decimal *val_decimal(my_decimal *)
|
||||
{
|
||||
return null_value ? NULL: &cached_value;
|
||||
}
|
||||
double val_real();
|
||||
longlong val_int();
|
||||
void copy();
|
||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||
{ return get_item_copy<Item_copy_decimal>(thd, mem_root, this); }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Cached_item_XXX objects are not exactly caches. They do the following:
|
||||
|
||||
|
@ -945,7 +945,7 @@ longlong Item_func_hybrid_field_type::val_int()
|
||||
case INT_RESULT:
|
||||
return int_op();
|
||||
case REAL_RESULT:
|
||||
return (longlong) rint(real_op());
|
||||
return Converter_double_to_longlong(real_op(), unsigned_flag).result();
|
||||
case TIME_RESULT:
|
||||
{
|
||||
MYSQL_TIME ltime;
|
||||
|
@ -396,7 +396,10 @@ public:
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *decimal_value);
|
||||
longlong val_int()
|
||||
{ DBUG_ASSERT(fixed == 1); return (longlong) rint(val_real()); }
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return Converter_double_to_longlong(val_real(), unsigned_flag).result();
|
||||
}
|
||||
enum Item_result result_type () const { return REAL_RESULT; }
|
||||
enum_field_types field_type() const { return MYSQL_TYPE_DOUBLE; }
|
||||
bool fix_length_and_dec()
|
||||
@ -1643,7 +1646,8 @@ class Item_func_udf_float :public Item_udf_func
|
||||
longlong val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return (longlong) rint(Item_func_udf_float::val_real());
|
||||
return Converter_double_to_longlong(Item_func_udf_float::val_real(),
|
||||
unsigned_flag).result();
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *dec_buf)
|
||||
{
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "set_var.h"
|
||||
#include "sql_locale.h" // MY_LOCALE my_locale_en_US
|
||||
#include "strfunc.h" // check_word
|
||||
#include "sql_type_int.h" // Longlong_hybrid
|
||||
#include "sql_time.h" // make_truncated_value_warning,
|
||||
// get_date_from_daynr,
|
||||
// calc_weekday, calc_week,
|
||||
@ -2861,8 +2862,7 @@ bool Item_func_timediff::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
||||
bool Item_func_maketime::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
bool overflow= 0;
|
||||
longlong hour= args[0]->val_int();
|
||||
Longlong_hybrid hour(args[0]->val_int(), args[0]->unsigned_flag);
|
||||
longlong minute= args[1]->val_int();
|
||||
ulonglong second;
|
||||
ulong microsecond;
|
||||
@ -2874,32 +2874,23 @@ bool Item_func_maketime::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
||||
|
||||
bzero(ltime, sizeof(*ltime));
|
||||
ltime->time_type= MYSQL_TIMESTAMP_TIME;
|
||||
ltime->neg= hour.neg();
|
||||
|
||||
/* Check for integer overflows */
|
||||
if (hour < 0)
|
||||
if (hour.abs() <= TIME_MAX_HOUR)
|
||||
{
|
||||
if (args[0]->unsigned_flag)
|
||||
overflow= 1;
|
||||
else
|
||||
ltime->neg= 1;
|
||||
}
|
||||
if (-hour > TIME_MAX_HOUR || hour > TIME_MAX_HOUR)
|
||||
overflow= 1;
|
||||
|
||||
if (!overflow)
|
||||
{
|
||||
ltime->hour= (uint) ((hour < 0 ? -hour : hour));
|
||||
ltime->hour= (uint) hour.abs();
|
||||
ltime->minute= (uint) minute;
|
||||
ltime->second= (uint) second;
|
||||
ltime->second_part= microsecond;
|
||||
}
|
||||
else
|
||||
{
|
||||
ltime->hour= TIME_MAX_HOUR;
|
||||
ltime->minute= TIME_MAX_MINUTE;
|
||||
ltime->second= TIME_MAX_SECOND;
|
||||
// use check_time_range() to set ltime to the max value depending on dec
|
||||
int unused;
|
||||
ltime->hour= TIME_MAX_HOUR + 1;
|
||||
check_time_range(ltime, decimals, &unused);
|
||||
char buf[28];
|
||||
char *ptr= longlong10_to_str(hour, buf, args[0]->unsigned_flag ? 10 : -10);
|
||||
char *ptr= longlong10_to_str(hour.value(), buf, hour.is_unsigned() ? 10 : -10);
|
||||
int len = (int)(ptr - buf) + sprintf(ptr, ":%02u:%02u", (uint)minute, (uint)second);
|
||||
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
buf, len, MYSQL_TIMESTAMP_TIME,
|
||||
|
@ -10942,9 +10942,8 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name,
|
||||
combo->user.str= (char *) sctx->priv_user;
|
||||
|
||||
mysql_mutex_lock(&acl_cache->lock);
|
||||
|
||||
if ((au= find_user_wild(combo->host.str= (char *) sctx->priv_host,
|
||||
combo->user.str)))
|
||||
if ((au= find_user_exact(combo->host.str= (char *) sctx->priv_host,
|
||||
combo->user.str)))
|
||||
goto found_acl;
|
||||
|
||||
mysql_mutex_unlock(&acl_cache->lock);
|
||||
|
@ -646,6 +646,7 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share,
|
||||
uint key_length= share->table_cache_key.length;
|
||||
const char *db= key;
|
||||
const char *table_name= db + share->db.length + 1;
|
||||
bool remove_from_locked_tables= extra != HA_EXTRA_NOT_USED;
|
||||
|
||||
memcpy(key, share->table_cache_key.str, key_length);
|
||||
|
||||
@ -659,7 +660,7 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share,
|
||||
{
|
||||
thd->locked_tables_list.unlink_from_list(thd,
|
||||
table->pos_in_locked_tables,
|
||||
extra != HA_EXTRA_NOT_USED);
|
||||
remove_from_locked_tables);
|
||||
/* Inform handler that there is a drop table or a rename going on */
|
||||
if (extra != HA_EXTRA_NOT_USED && table->db_stat)
|
||||
{
|
||||
@ -3745,6 +3746,10 @@ lock_table_names(THD *thd, const DDL_options_st &options,
|
||||
mdl_requests.push_front(&global_request);
|
||||
|
||||
if (create_table)
|
||||
#ifdef WITH_WSREP
|
||||
if (thd->lex->sql_command != SQLCOM_CREATE_TABLE &&
|
||||
thd->wsrep_exec_mode != REPL_RECV)
|
||||
#endif
|
||||
lock_wait_timeout= 0; // Don't wait for timeout
|
||||
}
|
||||
|
||||
|
@ -1025,6 +1025,7 @@ multi_delete::~multi_delete()
|
||||
{
|
||||
TABLE *table= table_being_deleted->table;
|
||||
table->no_keyread=0;
|
||||
table->no_cache= 0;
|
||||
}
|
||||
|
||||
for (uint counter= 0; counter < num_of_tables; counter++)
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
#include "sql_list.h" /* Sql_alloc, MEM_ROOT */
|
||||
#include "m_string.h" /* LEX_STRING */
|
||||
#include "sql_type_int.h" // Longlong_hybrid
|
||||
#include "sql_string.h" /* String */
|
||||
#include "sql_plist.h" /* I_P_List */
|
||||
#include "mysql_com.h" /* MYSQL_ERRMSG_SIZE */
|
||||
@ -577,13 +578,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class ErrConvInteger : public ErrConv
|
||||
class ErrConvInteger : public ErrConv, public Longlong_hybrid
|
||||
{
|
||||
longlong m_value;
|
||||
bool m_unsigned;
|
||||
public:
|
||||
ErrConvInteger(longlong num_arg, bool unsigned_flag= false) :
|
||||
ErrConv(), m_value(num_arg), m_unsigned(unsigned_flag) {}
|
||||
ErrConv(), Longlong_hybrid(num_arg, unsigned_flag) {}
|
||||
const char *ptr() const
|
||||
{
|
||||
return m_unsigned ? ullstr(m_value, err_buffer) :
|
||||
|
@ -21561,11 +21561,30 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
||||
tmp_map.clear_all(); // Force the creation of quick select
|
||||
tmp_map.set_bit(best_key); // only best_key.
|
||||
select->quick= 0;
|
||||
|
||||
bool cond_saved= false;
|
||||
Item *saved_cond;
|
||||
|
||||
/*
|
||||
Index Condition Pushdown may have removed parts of the condition for
|
||||
this table. Temporarily put them back because we want the whole
|
||||
condition for the range analysis.
|
||||
*/
|
||||
if (select->pre_idx_push_select_cond)
|
||||
{
|
||||
saved_cond= select->cond;
|
||||
select->cond= select->pre_idx_push_select_cond;
|
||||
cond_saved= true;
|
||||
}
|
||||
|
||||
select->test_quick_select(join->thd, tmp_map, 0,
|
||||
join->select_options & OPTION_FOUND_ROWS ?
|
||||
HA_POS_ERROR :
|
||||
join->unit->select_limit_cnt,
|
||||
TRUE, FALSE, FALSE);
|
||||
|
||||
if (cond_saved)
|
||||
select->cond= saved_cond;
|
||||
}
|
||||
order_direction= best_key_direction;
|
||||
/*
|
||||
|
44
sql/sql_type_int.h
Normal file
44
sql/sql_type_int.h
Normal file
@ -0,0 +1,44 @@
|
||||
/* Copyright (c) 2006, 2010, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2016, MariaDB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||
|
||||
#ifndef SQL_TYPE_INT_INCLUDED
|
||||
#define SQL_TYPE_INT_INCLUDED
|
||||
|
||||
|
||||
// A longlong/ulonglong hybrid. Good to store results of val_int().
|
||||
class Longlong_hybrid
|
||||
{
|
||||
protected:
|
||||
longlong m_value;
|
||||
bool m_unsigned;
|
||||
public:
|
||||
Longlong_hybrid(longlong nr, bool unsigned_flag)
|
||||
:m_value(nr), m_unsigned(unsigned_flag)
|
||||
{ }
|
||||
longlong value() const { return m_value; }
|
||||
bool is_unsigned() const { return m_unsigned; }
|
||||
bool neg() const { return m_value < 0 && !m_unsigned; }
|
||||
ulonglong abs() const
|
||||
{
|
||||
if (m_unsigned)
|
||||
return (ulonglong) m_value;
|
||||
if (m_value == LONGLONG_MIN) // avoid undefined behavior
|
||||
return ((ulonglong) LONGLONG_MAX) + 1;
|
||||
return m_value < 0 ? -m_value : m_value;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // SQL_TYPE_INT_INCLUDED
|
@ -2049,7 +2049,7 @@ multi_update::~multi_update()
|
||||
TABLE_LIST *table;
|
||||
for (table= update_tables ; table; table= table->next_local)
|
||||
{
|
||||
table->table->no_keyread= table->table->no_cache= 0;
|
||||
table->table->no_keyread= 0;
|
||||
if (ignore)
|
||||
table->table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||
}
|
||||
|
@ -450,6 +450,7 @@ void tc_release_table(TABLE *table)
|
||||
uint32 i= table->instance;
|
||||
DBUG_ASSERT(table->in_use);
|
||||
DBUG_ASSERT(table->file);
|
||||
DBUG_ASSERT(!table->pos_in_locked_tables);
|
||||
|
||||
mysql_mutex_lock(&tc[i].LOCK_table_cache);
|
||||
if (table->needs_reopen() || table->s->tdc->flushed ||
|
||||
|
@ -263,6 +263,54 @@ a b c d e f
|
||||
51ECF2C0CD3C48D99C91792E99D3C1A0 017B8A460DBC444682B791305EF75356 51041110620308 2018-08-02 13:48:29 510411 0
|
||||
093B37A93A534DF883787AF5F6799674 996C7F14989D480589A553717D735E3E 51041110620302 2018-08-02 13:48:30 510411 0
|
||||
|
||||
Test ORDER BY with LIMIT and OFFSET
|
||||
CREATE TABLE ta_ob (
|
||||
a VARCHAR(50) NOT NULL,
|
||||
b VARCHAR(50) NULL DEFAULT NULL,
|
||||
c VARCHAR(100) NULL DEFAULT NULL,
|
||||
d DATETIME(0) NULL DEFAULT NULL,
|
||||
e INT(11) NOT NULL,
|
||||
f INT(10) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (a, e)
|
||||
) ENGINE=Spider COMMENT='database "auto_test_remote", table "ta_ob"'
|
||||
PARTITION BY LIST COLUMNS (e) PARTITIONS 1
|
||||
(PARTITION pt1 values in (510411) COMMENT = 'srv "s_2_1"')
|
||||
INSERT INTO ta_ob VALUES ('0B95CD65DF994BC9A09A6AABE53A2733',
|
||||
'6CFED89FF6A84C7AA55C3C432663D094',
|
||||
'51041110620304', '2018-08-02 13:41:13',
|
||||
510411, 1);
|
||||
INSERT INTO ta_ob VALUES ('15E8D55EF099443BAEE639E60A4650BD',
|
||||
'879DC2A0B6AC46D9A62E8EA47E2970F2',
|
||||
'51041110620301', NULL,
|
||||
510411, 0);
|
||||
INSERT INTO ta_ob VALUES ('51ECF2C0CD3C48D99C91792E99D3C1A0',
|
||||
'017B8A460DBC444682B791305EF75356',
|
||||
'51041110620308', '2018-08-02 13:48:29',
|
||||
510411, 0);
|
||||
INSERT INTO ta_ob VALUES ('093B37A93A534DF883787AF5F6799674',
|
||||
'996C7F14989D480589A553717D735E3E',
|
||||
'51041110620302', '2018-08-02 13:48:30',
|
||||
510411, 0);
|
||||
INSERT INTO ta_ob VALUES ('53F5266FB069499AB6234755CACA2583',
|
||||
'017B8A460DBC444682B791305EF75356',
|
||||
'51041110620308', '2018-08-02 13:48:28',
|
||||
510411, 0);
|
||||
INSERT INTO ta_ob VALUES ('56E59BC4BDC143868D4A219C2D07A24B',
|
||||
'821E71E6ABB4404EBAA349BB681089F8',
|
||||
'51041110620310', '2018-08-02 13:48:27',
|
||||
510411, 0);
|
||||
INSERT INTO ta_ob VALUES ('56B68DA68D6D4A04A08B453D09AD7B70',
|
||||
'821E71E6ABB4404EBAA349BB681089F8',
|
||||
'51041110620310', '2018-08-02 13:48:28',
|
||||
510411, 0);
|
||||
SELECT * FROM ta_ob WHERE c LIKE "%510411106%" AND e = 510411 AND f != 1 ORDER BY d,c LIMIT 5 OFFSET 1;
|
||||
a b c d e f
|
||||
56E59BC4BDC143868D4A219C2D07A24B 821E71E6ABB4404EBAA349BB681089F8 51041110620310 2018-08-02 13:48:27 510411 0
|
||||
53F5266FB069499AB6234755CACA2583 017B8A460DBC444682B791305EF75356 51041110620308 2018-08-02 13:48:28 510411 0
|
||||
56B68DA68D6D4A04A08B453D09AD7B70 821E71E6ABB4404EBAA349BB681089F8 51041110620310 2018-08-02 13:48:28 510411 0
|
||||
51ECF2C0CD3C48D99C91792E99D3C1A0 017B8A460DBC444682B791305EF75356 51041110620308 2018-08-02 13:48:29 510411 0
|
||||
093B37A93A534DF883787AF5F6799674 996C7F14989D480589A553717D735E3E 51041110620302 2018-08-02 13:48:30 510411 0
|
||||
|
||||
deinit
|
||||
connection master_1;
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
|
@ -48,7 +48,7 @@ static inline uint get_ext_key_parts(const KEY *key) {
|
||||
#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS
|
||||
|
||||
std::unordered_map<std::string, TOKUDB_SHARE*> TOKUDB_SHARE::_open_tables;
|
||||
tokudb::thread::mutex_t TOKUDB_SHARE::_open_tables_mutex;
|
||||
tokudb::thread::mutex_t* TOKUDB_SHARE::_open_tables_mutex;
|
||||
|
||||
static const char* ha_tokudb_exts[] = {
|
||||
ha_tokudb_ext,
|
||||
@ -154,6 +154,7 @@ static void free_key_and_col_info (KEY_AND_COL_INFO* kc_info) {
|
||||
|
||||
void TOKUDB_SHARE::static_init() {
|
||||
assert_always(_open_tables.size() == 0);
|
||||
_open_tables_mutex = new tokudb::thread::mutex_t();
|
||||
}
|
||||
void TOKUDB_SHARE::static_destroy() {
|
||||
for (auto it = _open_tables.cbegin(); it != _open_tables.cend(); it++) {
|
||||
@ -164,6 +165,7 @@ void TOKUDB_SHARE::static_destroy() {
|
||||
}
|
||||
_open_tables.clear();
|
||||
assert_always(_open_tables.size() == 0);
|
||||
delete _open_tables_mutex;
|
||||
}
|
||||
const char* TOKUDB_SHARE::get_state_string(share_state_t state) {
|
||||
static const char* state_string[] = {
|
||||
@ -218,7 +220,7 @@ TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name,
|
||||
THR_LOCK_DATA* data,
|
||||
bool create_new) {
|
||||
std::string find_table_name(table_name);
|
||||
mutex_t_lock(_open_tables_mutex);
|
||||
mutex_t_lock(*_open_tables_mutex);
|
||||
auto it = _open_tables.find(find_table_name);
|
||||
TOKUDB_SHARE *share = nullptr;
|
||||
if (it != _open_tables.end()) {
|
||||
@ -251,7 +253,7 @@ TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name,
|
||||
thr_lock_data_init(&(share->_thr_lock), data, NULL);
|
||||
|
||||
exit:
|
||||
mutex_t_unlock(_open_tables_mutex);
|
||||
mutex_t_unlock(*_open_tables_mutex);
|
||||
return share;
|
||||
}
|
||||
void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) {
|
||||
@ -262,12 +264,12 @@ void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) {
|
||||
get_state_string(share->_state),
|
||||
share->_use_count);
|
||||
|
||||
mutex_t_lock(_open_tables_mutex);
|
||||
mutex_t_lock(*_open_tables_mutex);
|
||||
size_t n = _open_tables.erase(std::string(share->full_table_name()));
|
||||
assert_always(n == 1);
|
||||
share->destroy();
|
||||
delete share;
|
||||
mutex_t_unlock(_open_tables_mutex);
|
||||
mutex_t_unlock(*_open_tables_mutex);
|
||||
}
|
||||
TOKUDB_SHARE::share_state_t TOKUDB_SHARE::addref() {
|
||||
TOKUDB_SHARE_TRACE_FOR_FLAGS((TOKUDB_DEBUG_ENTER & TOKUDB_DEBUG_SHARE),
|
||||
|
@ -274,7 +274,7 @@ public:
|
||||
|
||||
private:
|
||||
static std::unordered_map<std::string, TOKUDB_SHARE*> _open_tables;
|
||||
static tokudb::thread::mutex_t _open_tables_mutex;
|
||||
static tokudb::thread::mutex_t* _open_tables_mutex;
|
||||
|
||||
//*********************************
|
||||
// Spans open-close-open
|
||||
|
@ -290,23 +290,23 @@ inline uint tokudb_uint3korr(const uchar *a) {
|
||||
typedef unsigned int pfs_key_t;
|
||||
|
||||
#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE)
|
||||
#define mutex_t_lock(M) M.lock(__FILE__, __LINE__)
|
||||
#define mutex_t_lock(M) (M).lock(__FILE__, __LINE__)
|
||||
#else // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE
|
||||
#define mutex_t_lock(M) M.lock()
|
||||
#define mutex_t_lock(M) (M).lock()
|
||||
#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE
|
||||
|
||||
#if defined(SAFE_MUTEX)
|
||||
#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__)
|
||||
#define mutex_t_unlock(M) (M).unlock(__FILE__, __LINE__)
|
||||
#else // SAFE_MUTEX
|
||||
#define mutex_t_unlock(M) M.unlock()
|
||||
#define mutex_t_unlock(M) (M).unlock()
|
||||
#endif // SAFE_MUTEX
|
||||
|
||||
#if defined(HAVE_PSI_RWLOCK_INTERFACE)
|
||||
#define rwlock_t_lock_read(M) M.lock_read(__FILE__, __LINE__)
|
||||
#define rwlock_t_lock_write(M) M.lock_write(__FILE__, __LINE__)
|
||||
#define rwlock_t_lock_read(M) (M).lock_read(__FILE__, __LINE__)
|
||||
#define rwlock_t_lock_write(M) (M).lock_write(__FILE__, __LINE__)
|
||||
#else // HAVE_PSI_RWLOCK_INTERFACE
|
||||
#define rwlock_t_lock_read(M) M.lock_read()
|
||||
#define rwlock_t_lock_write(M) M.lock_write()
|
||||
#define rwlock_t_lock_read(M) (M).lock_read()
|
||||
#define rwlock_t_lock_write(M) (M).lock_write()
|
||||
#endif // HAVE_PSI_RWLOCK_INTERFACE
|
||||
|
||||
#endif // _HATOKU_DEFINES_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user