Merge 10.4 into 10.5
This commit is contained in:
commit
8ec12e0d6d
@ -1 +1 @@
|
||||
Subproject commit 66596ad9e1d7efa8479656872cf09c9c1870a02e
|
||||
Subproject commit 3b3c175af0e993ffaae251871421e206cc41963f
|
@ -1 +1 @@
|
||||
Subproject commit 9155b19b462ac15fc69d0b58ae51370b7523ced5
|
||||
Subproject commit ae565eea90dd3053a5a7857e7cdad93342dbc645
|
@ -12,7 +12,6 @@ INSERT INTO t1 VALUES (1,REPEAT('a',100)),(2,REPEAT('v',200)),(3,REPEAT('r',300)
|
||||
INSERT INTO t1 VALUES (5,REPEAT('k',500)),(6,'April'),(7,7),(8,""),(9,"M"),(10,DEFAULT);
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
ALTER TABLE t1 CHECK PARTITION p2;
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -4215,4 +4215,38 @@ a
|
||||
drop table t1, t2;
|
||||
drop view v1;
|
||||
drop procedure aproc;
|
||||
#
|
||||
# MDEV-31305: Aggregation over materialized derived table
|
||||
#
|
||||
CREATE VIEW v AS
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3;
|
||||
SELECT v.*, SUM(p) from v;
|
||||
dim1 dim2 dim3 p SUM(p)
|
||||
100 10 1 2 371
|
||||
SELECT d.*, SUM(p)
|
||||
FROM (
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3
|
||||
) d;
|
||||
dim1 dim2 dim3 p SUM(p)
|
||||
100 10 1 2 371
|
||||
WITH demo AS
|
||||
(
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3
|
||||
)
|
||||
SELECT d.*, SUM(p) FROM demo d;
|
||||
dim1 dim2 dim3 p SUM(p)
|
||||
100 10 1 2 371
|
||||
DROP VIEW v;
|
||||
# End of 10.4 tests
|
||||
|
@ -2795,4 +2795,40 @@ drop table t1, t2;
|
||||
drop view v1;
|
||||
drop procedure aproc;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-31305: Aggregation over materialized derived table
|
||||
--echo #
|
||||
|
||||
--source include/have_sequence.inc
|
||||
|
||||
CREATE VIEW v AS
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3;
|
||||
|
||||
SELECT v.*, SUM(p) from v;
|
||||
|
||||
SELECT d.*, SUM(p)
|
||||
FROM (
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3
|
||||
) d;
|
||||
|
||||
WITH demo AS
|
||||
(
|
||||
SELECT seq1.seq AS dim1, seq2.seq AS dim2, seq3.seq AS dim3,
|
||||
FLOOR(RAND(13) * 5) AS p
|
||||
FROM seq_100_to_105 seq1
|
||||
JOIN seq_10_to_15 seq2
|
||||
JOIN seq_1_to_5 seq3
|
||||
)
|
||||
SELECT d.*, SUM(p) FROM demo d;
|
||||
|
||||
DROP VIEW v;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
0
mysql-test/main/lowercase_table2.result
Executable file → Normal file
0
mysql-test/main/lowercase_table2.result
Executable file → Normal file
@ -9028,6 +9028,25 @@ JS
|
||||
drop table t1,t2,t3,t10,t11;
|
||||
set optimizer_trace=DEFAULT;
|
||||
#
|
||||
# MDEV-29179 Condition pushdown from HAVING into WHERE is not shown in optimizer trace
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(1), KEY (a), KEY(b,a)) ENGINE=MEMORY;
|
||||
INSERT INTO t1 VALUES (4,'n'),(1,'h'),(NULL,'w');
|
||||
SET optimizer_trace= 'enabled=on';
|
||||
SELECT b, a FROM t1 WHERE b <> 'p' OR a = 4 GROUP BY b, a HAVING a <= 7;
|
||||
b a
|
||||
h 1
|
||||
n 4
|
||||
SELECT json_detailed(json_extract(trace, '$**.steps[*].join_optimization.steps[*].condition_pushdown_from_having') ), JSON_VALID(trace) FROM information_schema.optimizer_trace;
|
||||
json_detailed(json_extract(trace, '$**.steps[*].join_optimization.steps[*].condition_pushdown_from_having') ) JSON_VALID(trace)
|
||||
[
|
||||
{
|
||||
"conds": "(t1.b <> 'p' or multiple equal(4, t1.a)) and t1.a <= 7",
|
||||
"having": null
|
||||
}
|
||||
] 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
set optimizer_trace='enabled=on';
|
||||
|
@ -790,6 +790,17 @@ from information_schema.optimizer_trace;
|
||||
drop table t1,t2,t3,t10,t11;
|
||||
set optimizer_trace=DEFAULT;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-29179 Condition pushdown from HAVING into WHERE is not shown in optimizer trace
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(1), KEY (a), KEY(b,a)) ENGINE=MEMORY;
|
||||
INSERT INTO t1 VALUES (4,'n'),(1,'h'),(NULL,'w');
|
||||
SET optimizer_trace= 'enabled=on';
|
||||
SELECT b, a FROM t1 WHERE b <> 'p' OR a = 4 GROUP BY b, a HAVING a <= 7;
|
||||
SELECT json_detailed(json_extract(trace, '$**.steps[*].join_optimization.steps[*].condition_pushdown_from_having') ), JSON_VALID(trace) FROM information_schema.optimizer_trace;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo #
|
||||
|
@ -2063,7 +2063,6 @@ ALTER TABLE t1 ANALYZE PARTITION p1 EXTENDED;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXTENDED' at line 1
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
ALTER TABLE t1 CHECK PARTITION p1;
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -27,7 +27,6 @@ Table Op Msg_type Msg_text
|
||||
test.t1 repair error Error in list of partitions to test.t1
|
||||
ALTER TABLE t1 ANALYZE PARTITION p0;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
ALTER TABLE t1 CHECK PARTITION p0;
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -5811,5 +5811,123 @@ GROUP_CONCAT(@x)
|
||||
0
|
||||
DROP TABLE t;
|
||||
#
|
||||
# MDEV-15703: Crash in EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT
|
||||
#
|
||||
PREPARE stmt FROM 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)';
|
||||
EXECUTE stmt USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
DEALLOCATE PREPARE stmt;
|
||||
PREPARE stmt FROM 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)';
|
||||
EXECUTE stmt USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
DEALLOCATE PREPARE stmt;
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'BEGIN NOT ATOMIC DECLARE a INT DEFAULT ?; END' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'BEGIN NOT ATOMIC DECLARE a INT DEFAULT ?; END' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
CREATE PROCEDURE p1(a INT) SELECT 1;
|
||||
EXECUTE IMMEDIATE 'CALL p1(?)' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'CALL p1(?)' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
DROP PROCEDURE p1;
|
||||
EXECUTE IMMEDIATE 'SELECT ? UNION SELECT 1' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'SELECT ? UNION SELECT 1' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION ALL SELECT 1) AS derived' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION ALL SELECT 1) AS derived' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION DISTINCT SELECT 1) AS derived' USING DEFAULT;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION DISTINCT SELECT 1) AS derived' USING IGNORE;
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
# multi-update and DEFAULT
|
||||
CREATE TABLE t1 (a INT, b INT DEFAULT a);
|
||||
INSERT into t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT DEFAULT a);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
UPDATE t1,t2 SET t1.b = DEFAULT, t2.b = DEFAULT WHERE t1.a=t2.a;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
# re-check the case for Prepared Statement with parameters
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING DEFAULT, DEFAULT;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
DROP TABLE t1, t2;
|
||||
# multi-update and IGNORE
|
||||
CREATE TABLE t1 (a INT, b INT default a);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT default a);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
UPDATE t1,t2 SET t1.b = IGNORE, t2.b = IGNORE WHERE t1.a=t2.a;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 2
|
||||
2 3
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
# re-check the case for Prepared Statement with parameters
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING IGNORE, IGNORE;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 2
|
||||
2 3
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 10
|
||||
2 30
|
||||
DROP TABLE t1, t2;
|
||||
# multi-update and DEFAULT parameter (no default)
|
||||
CREATE TABLE t1 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING DEFAULT, DEFAULT;
|
||||
ERROR HY000: Field 'b' doesn't have a default value
|
||||
DROP TABLE t1, t2;
|
||||
# multi-update and IGNORE parameter (no default)
|
||||
CREATE TABLE t1 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING IGNORE, IGNORE;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 2
|
||||
2 3
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 10
|
||||
2 30
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
|
@ -5243,6 +5243,125 @@ EXECUTE IMMEDIATE 'SELECT GROUP_CONCAT(@x) FROM t GROUP BY @x := f';
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15703: Crash in EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT
|
||||
--echo #
|
||||
|
||||
PREPARE stmt FROM 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)';
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE stmt USING DEFAULT;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
PREPARE stmt FROM 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)';
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE stmt USING IGNORE;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING IGNORE;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'BEGIN NOT ATOMIC DECLARE a INT DEFAULT ?; END' USING DEFAULT;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'BEGIN NOT ATOMIC DECLARE a INT DEFAULT ?; END' USING IGNORE;
|
||||
|
||||
CREATE PROCEDURE p1(a INT) SELECT 1;
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'CALL p1(?)' USING DEFAULT;
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'CALL p1(?)' USING IGNORE;
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT ? UNION SELECT 1' USING DEFAULT;
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT ? UNION SELECT 1' USING IGNORE;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION ALL SELECT 1) AS derived' USING DEFAULT;
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION ALL SELECT 1) AS derived' USING IGNORE;
|
||||
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION DISTINCT SELECT 1) AS derived' USING DEFAULT;
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'SELECT * FROM (SELECT ? UNION DISTINCT SELECT 1) AS derived' USING IGNORE;
|
||||
|
||||
--echo # multi-update and DEFAULT
|
||||
CREATE TABLE t1 (a INT, b INT DEFAULT a);
|
||||
INSERT into t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT DEFAULT a);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
UPDATE t1,t2 SET t1.b = DEFAULT, t2.b = DEFAULT WHERE t1.a=t2.a;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
--echo # re-check the case for Prepared Statement with parameters
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING DEFAULT, DEFAULT;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo # multi-update and IGNORE
|
||||
CREATE TABLE t1 (a INT, b INT default a);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT default a);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
UPDATE t1,t2 SET t1.b = IGNORE, t2.b = IGNORE WHERE t1.a=t2.a;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
--echo # re-check the case for Prepared Statement with parameters
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING IGNORE, IGNORE;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo # multi-update and DEFAULT parameter (no default)
|
||||
CREATE TABLE t1 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
--error ER_NO_DEFAULT_FOR_FIELD
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING DEFAULT, DEFAULT;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo # multi-update and IGNORE parameter (no default)
|
||||
CREATE TABLE t1 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (1,2),(2,3);
|
||||
CREATE TABLE t2 (a INT, b INT NOT NULL);
|
||||
INSERT INTO t2 VALUES (1,10),(2,30);
|
||||
|
||||
EXECUTE IMMEDIATE 'UPDATE t1,t2 SET t1.b = ?, t2.b = ? WHERE t1.a=t2.a' USING IGNORE, IGNORE;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo #
|
||||
|
@ -34,13 +34,12 @@ set session use_stat_tables='preferably';
|
||||
# Must NOT show "Engine-independent statistics collected":
|
||||
alter table t1 analyze partition p0;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
# Should not have Handler_read_rnd_next=34
|
||||
show session status like 'Handler_read_rnd%';
|
||||
Variable_name Value
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_deleted 0
|
||||
Handler_read_rnd_next 34
|
||||
Handler_read_rnd_next 0
|
||||
drop table t1;
|
||||
SET use_stat_tables = DEFAULT;
|
||||
|
@ -17,7 +17,6 @@ SET use_stat_tables = PREFERABLY;
|
||||
CREATE TABLE t1 ( a INT ) ENGINE=MyISAM PARTITION BY HASH(a) PARTITIONS 2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
|
@ -2594,9 +2594,9 @@ ERROR HY000: 'ignore' is not allowed in this context
|
||||
VALUES (DEFAULT);
|
||||
ERROR HY000: 'default' is not allowed in this context
|
||||
EXECUTE IMMEDIATE 'VALUES (?)' USING IGNORE;
|
||||
ERROR HY000: 'ignore' is not allowed in this context
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
EXECUTE IMMEDIATE 'VALUES (?)' USING DEFAULT;
|
||||
ERROR HY000: 'default' is not allowed in this context
|
||||
ERROR HY000: Default/ignore value is not supported for such parameter usage
|
||||
#
|
||||
# MDEV-24675: TVC using subqueries
|
||||
#
|
||||
|
@ -1349,9 +1349,9 @@ DELIMITER ;$$
|
||||
VALUES (IGNORE);
|
||||
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
|
||||
VALUES (DEFAULT);
|
||||
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'VALUES (?)' USING IGNORE;
|
||||
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
|
||||
--error ER_INVALID_DEFAULT_PARAM
|
||||
EXECUTE IMMEDIATE 'VALUES (?)' USING DEFAULT;
|
||||
|
||||
--echo #
|
||||
|
6
mysql-test/std_data/mdev-25731.dat
Normal file
6
mysql-test/std_data/mdev-25731.dat
Normal file
@ -0,0 +1,6 @@
|
||||
1
|
||||
2
|
||||
3
|
||||
1
|
||||
5
|
||||
6
|
@ -33,7 +33,6 @@ t1 CREATE TABLE `t1` (
|
||||
PARTITION `p5` VALUES LESS THAN MAXVALUE ENGINE = ENGINE)
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1,p2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1 c2
|
||||
|
@ -13,7 +13,6 @@
|
||||
galera_as_slave_ctas : MDEV-28378 timeout
|
||||
galera_pc_recovery : MDEV-25199 cluster fails to start up
|
||||
galera_sequences : MDEV-32561 WSREP FSM failure: no such a transition REPLICATING -> COMMITTED
|
||||
galera_shutdown_nonprim : MDEV-32635 galera_shutdown_nonprim: mysql_shutdown failed
|
||||
versioning_trx_id : MDEV-18590 : galera.versioning_trx_id: Test failure: mysqltest: Result content mismatch
|
||||
galera_concurrent_ctas : MDEV-32779 galera_concurrent_ctas: assertion in the galera::ReplicatorSMM::finish_cert()
|
||||
galera_as_slave_replay : MDEV-32780 galera_as_slave_replay: assertion in the wsrep::transaction::before_rollback()
|
||||
|
@ -3,21 +3,21 @@ connection node_1;
|
||||
connect con1,127.0.0.1,root,,test,$NODE_MYPORT_1;
|
||||
--- CTAS with empty result set ---
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf_abort';
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_run WAIT_FOR bf_abort';
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
connection node_1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
|
||||
ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_run';
|
||||
TRUNCATE TABLE t1;
|
||||
connection con1;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
--- CTAS with non-empty result set ---
|
||||
INSERT INTO t1 VALUES (10), (20), (30);
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf_abort';
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_run WAIT_FOR bf_abort';
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
connection node_1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
|
||||
ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_run';
|
||||
TRUNCATE TABLE t1;
|
||||
connection con1;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
@ -14,7 +14,7 @@ c1
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(2);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'non-InnoDB sequences in Galera cluster'
|
||||
ALTER TABLE t1 DROP COLUMN c2;
|
||||
ERROR 42000: Can't DROP COLUMN `c2`; check that it exists
|
||||
SELECT get_lock ('test', 1.5);
|
||||
|
34
mysql-test/suite/galera/r/MDEV-25731.result
Normal file
34
mysql-test/suite/galera/r/MDEV-25731.result
Normal file
@ -0,0 +1,34 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_load_data_splitting=ON;
|
||||
Warnings:
|
||||
Warning 1287 '@@wsrep_load_data_splitting' is deprecated and will be removed in a future release
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
CREATE TABLE t1 (c1 int) ENGINE=MYISAM;
|
||||
LOAD DATA INFILE '../../std_data/mdev-25731.dat' IGNORE INTO TABLE t1 LINES TERMINATED BY '\n';
|
||||
Warnings:
|
||||
Warning 1235 wsrep_load_data_splitting for other than InnoDB tables
|
||||
SELECT COUNT(*) AS EXPECT_6 FROM t1;
|
||||
EXPECT_6
|
||||
6
|
||||
connection node_2;
|
||||
SELECT COUNT(*) AS EXPECT_6 FROM t1;
|
||||
EXPECT_6
|
||||
6
|
||||
connection node_1;
|
||||
ALTER TABLE t1 ENGINE=InnoDB;
|
||||
LOAD DATA INFILE '../../std_data/mdev-25731.dat' IGNORE INTO TABLE t1 LINES TERMINATED BY '\n';
|
||||
SELECT COUNT(*) AS EXPECT_12 FROM t1;
|
||||
EXPECT_12
|
||||
12
|
||||
connection node_2;
|
||||
SELECT COUNT(*) AS EXPECT_12 FROM t1;
|
||||
EXPECT_12
|
||||
12
|
||||
connection node_1;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL wsrep_load_data_splitting=OFF;
|
||||
Warnings:
|
||||
Warning 1287 '@@wsrep_load_data_splitting' is deprecated and will be removed in a future release
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
@ -1,7 +1,8 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
SET @wsrep_slave_threads_orig = @@wsrep_slave_threads;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) Engine=InnoDB;
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
# Set slave threads to 10 step 1
|
||||
SELECT VARIABLE_VALUE AS EXPECT_10 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
@ -9,7 +10,7 @@ EXPECT_10
|
||||
10
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
connection node_1;
|
||||
# Wait until one of the appliers has exited
|
||||
SELECT VARIABLE_VALUE AS EXPECT_9 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
@ -27,33 +28,14 @@ EXPECT_20
|
||||
20
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
INSERT INTO t1 VALUES (7);
|
||||
INSERT INTO t1 VALUES (8);
|
||||
INSERT INTO t1 VALUES (9);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (11);
|
||||
INSERT INTO t1 VALUES (12);
|
||||
INSERT INTO t1 VALUES (13);
|
||||
INSERT INTO t1 VALUES (14);
|
||||
INSERT INTO t1 VALUES (16);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (18);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (20);
|
||||
connection node_1;
|
||||
# Wait until 19 of the appliers has exited
|
||||
SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
20
|
||||
SELECT COUNT(*) AS EXPECT_51 FROM t1;
|
||||
EXPECT_51
|
||||
51
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
# Set slave threads to 10 step 3
|
||||
SELECT VARIABLE_VALUE AS EXPECT_10 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
@ -62,22 +44,12 @@ EXPECT_10
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (21);
|
||||
INSERT INTO t1 VALUES (22);
|
||||
INSERT INTO t1 VALUES (23);
|
||||
INSERT INTO t1 VALUES (24);
|
||||
INSERT INTO t1 VALUES (25);
|
||||
INSERT INTO t1 VALUES (26);
|
||||
INSERT INTO t1 VALUES (27);
|
||||
INSERT INTO t1 VALUES (28);
|
||||
INSERT INTO t1 VALUES (29);
|
||||
INSERT INTO t1 VALUES (30);
|
||||
connection node_1;
|
||||
# Wait until slave threads back to 1
|
||||
SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
30
|
||||
SELECT COUNT(*) AS EXPECT_101 FROM t1;
|
||||
EXPECT_101
|
||||
101
|
||||
DROP TABLE t1;
|
||||
|
@ -1,44 +1,68 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=innodb;
|
||||
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=innodb;
|
||||
INSERT INTO t1 VALUES (1, 'a');
|
||||
INSERT INTO t1 VALUES (2, 'a');
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT=ON;
|
||||
START TRANSACTION;
|
||||
UPDATE t1 SET f2 = 'b' WHERE f1 = 1;
|
||||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1a;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
LOCK TABLE t2 WRITE;
|
||||
connection node_1;
|
||||
SET @@debug_dbug = "d,sync.wsrep_before_mdl_wait";
|
||||
SET DEBUG_SYNC= 'wsrep_before_mdl_wait SIGNAL before_mdl_wait WAIT_FOR mdl_wait_continue';
|
||||
SELECT * FROM t2;;
|
||||
connection node_1a;
|
||||
# Wait until select is blocked before MDL lock wait
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR before_mdl_wait';
|
||||
connection node_1a;
|
||||
SET @@debug_dbug = "d,sync.wsrep_after_BF_victim_lock";
|
||||
connection node_2;
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 = 1;
|
||||
connection node_1a;
|
||||
SET @@debug_dbug = "";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_before_mdl_wait";
|
||||
connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1b;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
# Wait for conflicting update to block
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_after_BF_victim_lock";
|
||||
connect node_1c, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1c;
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = "now SIGNAL BF_victim_continue";
|
||||
UNLOCK TABLES;
|
||||
connection node_1;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'a';
|
||||
COUNT(*) = 1
|
||||
connection node_1;
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'a';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
COUNT(*) = 1
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'c';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 c
|
||||
2 a
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'a';
|
||||
COUNT(*) = 1
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'a';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
COUNT(*) = 1
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'c';
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 c
|
||||
2 a
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
connection node_1b;
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
connection node_1;
|
||||
disconnect node_1a;
|
||||
disconnect node_1b;
|
||||
disconnect node_1c;
|
||||
|
@ -1,5 +1,6 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2), (3);
|
||||
@ -14,14 +15,37 @@ UPDATE t1 SET f1 = 9;
|
||||
UPDATE t2 SET f1 = 9 WHERE f1 = 1;
|
||||
DELETE FROM t1 WHERE f1 = 9;
|
||||
DELETE FROM t2 WHERE f1 = 9;
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
f1
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
f1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM t2;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
f1
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
f1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
f1
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
f1
|
||||
connection node_2;
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
f1
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
f1
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
12
mysql-test/suite/galera/r/galera_sequence_engine.result
Normal file
12
mysql-test/suite/galera/r/galera_sequence_engine.result
Normal file
@ -0,0 +1,12 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_ignore_apply_errors=0;
|
||||
SET SESSION AUTOCOMMIT=0;
|
||||
SET SESSION max_error_count=0;
|
||||
CREATE TABLE t0 (id GEOMETRY,parent_id GEOMETRY)ENGINE=SEQUENCE;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'non-InnoDB sequences in Galera cluster'
|
||||
connection node_2;
|
||||
SHOW CREATE TABLE t0;
|
||||
ERROR 42S02: Table 'test.t0' doesn't exist
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_ignore_apply_errors=DEFAULT;
|
@ -5,7 +5,12 @@ connection node_2;
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=2';
|
||||
connection node_2;
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
Variable_name Value
|
||||
wsrep_cluster_status non-Primary
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight = 1';
|
||||
|
244
mysql-test/suite/galera/r/mdev-22063.result
Normal file
244
mysql-test/suite/galera/r/mdev-22063.result
Normal file
@ -0,0 +1,244 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
# Case 1 CREATE SEQUENCE with no NOCACHE
|
||||
CREATE SEQUENCE s ENGINE=InnoDB;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'CACHE without INCREMENT BY 0 in Galera cluster'
|
||||
CREATE SEQUENCE s NOCACHE ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
START TRANSACTION;
|
||||
REPLACE INTO s VALUES (1,1,9223372036854775806,1,1,1000,0,0);
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||
test.t1 optimize status OK
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
SELECT * FROM s;
|
||||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||
1 1 9223372036854775806 1 1 1000 0 0
|
||||
connection node_2;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
SELECT * FROM s;
|
||||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||
1 1 9223372036854775806 1 1 1000 0 0
|
||||
connection node_1;
|
||||
DROP TABLE t1;
|
||||
DROP SEQUENCE s;
|
||||
# Case 2 REPLACE INTO ... SELECT with error
|
||||
CREATE TABLE t (id INT KEY,a YEAR,INDEX (id,a)) engine=innodb;
|
||||
REPLACE INTO t (id,a)SELECT /*!99997 */ 1;
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
REPLACE INTO t (id,a)SELECT /*!99997 */ 1,2;
|
||||
SELECT * FROM t;
|
||||
id a
|
||||
1 2002
|
||||
CREATE TABLE t2 (id INT KEY,a YEAR,INDEX (id,a)) engine=myisam;
|
||||
REPLACE INTO t2 (id,a)SELECT /*!99997 */ 1;
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
REPLACE INTO t2 (id,a)SELECT /*!99997 */ 1,2;
|
||||
Warnings:
|
||||
Warning 138 Galera cluster does support consistency check only for InnoDB tables.
|
||||
SELECT * FROM t2;
|
||||
id a
|
||||
1 2002
|
||||
CREATE TABLE t3 (id INT KEY,a YEAR,INDEX (id,a)) engine=aria;
|
||||
REPLACE INTO t3 (id,a)SELECT /*!99997 */ 1;
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
REPLACE INTO t3 (id,a)SELECT /*!99997 */ 1,2;
|
||||
Warnings:
|
||||
Warning 138 Galera cluster does support consistency check only for InnoDB tables.
|
||||
SELECT * FROM t3;
|
||||
id a
|
||||
1 2002
|
||||
connection node_2;
|
||||
SELECT * FROM t;
|
||||
id a
|
||||
1 2002
|
||||
SELECT * FROM t2;
|
||||
id a
|
||||
1 2002
|
||||
SELECT * FROM t3;
|
||||
id a
|
||||
1 2002
|
||||
connection node_1;
|
||||
DROP TABLE t,t2,t3;
|
||||
# Bigger REPLACE ... AS SELECT test
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
CREATE TABLE t1(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t3(id int not null primary key ,b int) ENGINE=Aria;
|
||||
CREATE TABLE t4(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t7(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t8(id int not null primary key ,b int) ENGINE=Aria;
|
||||
INSERT INTO t1(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t2(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t3(id) SELECT seq FROM seq_1_to_1000;
|
||||
REPLACE INTO t4 SELECT * FROM t1;
|
||||
REPLACE INTO t5 SELECT * FROM t2;
|
||||
REPLACE INTO t6 SELECT * FROM t3;
|
||||
ERROR HY000: Transactional commit not supported by involved engine(s)
|
||||
REPLACE INTO t7 SELECT * FROM t2;
|
||||
REPLACE INTO t8 SELECT * FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
EXPECT_0
|
||||
0
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
EXPECT_1000
|
||||
1000
|
||||
connection node_2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
EXPECT_0
|
||||
0
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
EXPECT_1000
|
||||
1000
|
||||
connection node_1;
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
# Bigger INSERT INTO ... SELECT test
|
||||
CREATE TABLE t1(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t3(id int not null primary key ,b int) ENGINE=Aria;
|
||||
CREATE TABLE t4(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t7(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t8(id int not null primary key ,b int) ENGINE=Aria;
|
||||
INSERT INTO t1(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t2(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t3(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t4 SELECT * FROM t1;
|
||||
INSERT INTO t5 SELECT * FROM t2;
|
||||
INSERT INTO t6 SELECT * FROM t3;
|
||||
ERROR HY000: Transactional commit not supported by involved engine(s)
|
||||
INSERT INTO t7 SELECT * FROM t2;
|
||||
INSERT INTO t8 SELECT * FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
EXPECT_0
|
||||
0
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
EXPECT_1000
|
||||
1000
|
||||
connection node_2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
EXPECT_0
|
||||
0
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
EXPECT_1000
|
||||
1000
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
EXPECT_1000
|
||||
1000
|
||||
connection node_1;
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
CREATE TABLE t1(pk int not null primary key) engine=innodb;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
pk
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
CREATE TABLE t1(pk int not null primary key) engine=myisam;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
pk
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
CREATE TABLE t1(pk int not null primary key) engine=aria;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
pk
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
@ -1,23 +1,8 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE t ENGINE=InnoDB WITH SYSTEM VERSIONING AS SELECT 1 AS i;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'SYSTEM VERSIONING AS SELECT in Galera cluster'
|
||||
connection node_2;
|
||||
SHOW CREATE TABLE t;
|
||||
Table Create Table
|
||||
t CREATE TABLE `t` (
|
||||
`i` int(1) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||
SELECT * from t;
|
||||
i
|
||||
1
|
||||
DROP TABLE IF EXISTS t;
|
||||
COMMIT;
|
||||
connection node_2;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
Killing server ...
|
||||
Starting server ...
|
||||
connection node_2;
|
||||
call mtr.add_suppression("WSREP: Event .*Write_rows_v1 apply failed:.*");
|
||||
call mtr.add_suppression("SREP: Failed to apply write set: gtid:.*");
|
||||
ERROR 42S02: Table 'test.t' doesn't exist
|
||||
|
@ -18,19 +18,16 @@
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
|
||||
# Run CTAS until the resulting table gets created,
|
||||
# then it gets BF aborted by ALTER.
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf_abort';
|
||||
# then it gets BF aborted by other DDL.
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_run WAIT_FOR bf_abort';
|
||||
--send
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
|
||||
# Wait for CTAS to reach the table create point,
|
||||
# start executing ALTER and BF abort CTAS.
|
||||
# start executing other DDL and BF abort CTAS.
|
||||
--connection node_1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
|
||||
--disable_result_log
|
||||
--error ER_ERROR_ON_RENAME
|
||||
ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY;
|
||||
--enable_result_log
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_run';
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection con1
|
||||
# CTAS gets BF aborted.
|
||||
@ -46,19 +43,16 @@ SET DEBUG_SYNC = 'RESET';
|
||||
INSERT INTO t1 VALUES (10), (20), (30);
|
||||
|
||||
# Run CTAS until the resulting table gets created,
|
||||
# then it gets BF aborted by ALTER.
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf_abort';
|
||||
# then it gets BF aborted by other DDL.
|
||||
SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_run WAIT_FOR bf_abort';
|
||||
--send
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
|
||||
# Wait for CTAS to reach the table create point,
|
||||
# start executing ALTER and BF abort CTAS.
|
||||
# start executing other DDL and BF abort CTAS.
|
||||
--connection node_1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
|
||||
--disable_result_log
|
||||
--error ER_ERROR_ON_RENAME
|
||||
ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY;
|
||||
--enable_result_log
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR may_run';
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection con1
|
||||
# CTAS gets BF aborted.
|
||||
|
@ -11,7 +11,11 @@ SET SESSION autocommit=0;
|
||||
SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
|
||||
--error ER_LOCK_DEADLOCK
|
||||
INSERT INTO t1 VALUES (4),(3),(1),(2);
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
#
|
||||
# This is because support for CREATE TABLE ENGINE=SEQUENCE
|
||||
# is done before we check does table exists already.
|
||||
#
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
|
||||
--error ER_CANT_DROP_FIELD_OR_KEY
|
||||
ALTER TABLE t1 DROP COLUMN c2;
|
||||
|
27
mysql-test/suite/galera/t/MDEV-25731.test
Normal file
27
mysql-test/suite/galera/t/MDEV-25731.test
Normal file
@ -0,0 +1,27 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_aria.inc
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_load_data_splitting=ON;
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
CREATE TABLE t1 (c1 int) ENGINE=MYISAM;
|
||||
LOAD DATA INFILE '../../std_data/mdev-25731.dat' IGNORE INTO TABLE t1 LINES TERMINATED BY '\n';
|
||||
SELECT COUNT(*) AS EXPECT_6 FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) AS EXPECT_6 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
ALTER TABLE t1 ENGINE=InnoDB;
|
||||
LOAD DATA INFILE '../../std_data/mdev-25731.dat' IGNORE INTO TABLE t1 LINES TERMINATED BY '\n';
|
||||
SELECT COUNT(*) AS EXPECT_12 FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) AS EXPECT_12 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL wsrep_load_data_splitting=OFF;
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
[mysqld.1]
|
||||
wsrep-debug=SERVER
|
||||
loose-wsrep-mw-336=1
|
||||
|
||||
[mysqld.2]
|
||||
wsrep-debug=SERVER
|
||||
loose-wsrep-mw-336=2
|
||||
|
@ -3,11 +3,12 @@
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/force_restart.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
SET @wsrep_slave_threads_orig = @@wsrep_slave_threads;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) Engine=InnoDB;
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
|
||||
@ -22,7 +23,7 @@ SELECT VARIABLE_VALUE AS EXPECT_10 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE V
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
|
||||
--connection node_1
|
||||
--echo # Wait until one of the appliers has exited
|
||||
@ -54,27 +55,19 @@ SELECT VARIABLE_VALUE AS EXPECT_20 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE V
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
INSERT INTO t1 VALUES (7);
|
||||
INSERT INTO t1 VALUES (8);
|
||||
INSERT INTO t1 VALUES (9);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (11);
|
||||
INSERT INTO t1 VALUES (12);
|
||||
INSERT INTO t1 VALUES (13);
|
||||
INSERT INTO t1 VALUES (14);
|
||||
INSERT INTO t1 VALUES (16);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (18);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (20);
|
||||
--disable_query_log
|
||||
let $c = 50;
|
||||
while ($c) {
|
||||
INSERT INTO t1 VALUES(NULL); COMMIT;
|
||||
dec $c;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT COUNT(*) = 51 FROM t1;
|
||||
--let $wait_condition_on_error_output = SELECT COUNT(*) FROM t1;
|
||||
--source include/wait_condition_with_debug.inc
|
||||
|
||||
--echo # Wait until 19 of the appliers has exited
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
--let $wait_condition_on_error_output = SELECT COUNT(*), 1 as EXPECTED_VALUE FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'wsrep applier idle'; show processlist
|
||||
@ -82,7 +75,7 @@ INSERT INTO t1 VALUES (20);
|
||||
|
||||
SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_51 FROM t1;
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
--echo # Set slave threads to 10 step 3
|
||||
@ -96,16 +89,13 @@ SELECT VARIABLE_VALUE AS EXPECT_10 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE V
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (21);
|
||||
INSERT INTO t1 VALUES (22);
|
||||
INSERT INTO t1 VALUES (23);
|
||||
INSERT INTO t1 VALUES (24);
|
||||
INSERT INTO t1 VALUES (25);
|
||||
INSERT INTO t1 VALUES (26);
|
||||
INSERT INTO t1 VALUES (27);
|
||||
INSERT INTO t1 VALUES (28);
|
||||
INSERT INTO t1 VALUES (29);
|
||||
INSERT INTO t1 VALUES (30);
|
||||
--disable_query_log
|
||||
let $c = 50;
|
||||
while ($c) {
|
||||
INSERT INTO t1 VALUES(NULL); COMMIT;
|
||||
dec $c;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
--echo # Wait until slave threads back to 1
|
||||
@ -115,6 +105,10 @@ INSERT INTO t1 VALUES (30);
|
||||
|
||||
SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_101 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--disable_query_log
|
||||
SET GLOBAL wsrep_slave_threads = @wsrep_slave_threads_orig;
|
||||
--enable_query_log
|
||||
|
@ -3,70 +3,92 @@
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=innodb;
|
||||
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) engine=innodb;
|
||||
INSERT INTO t1 VALUES (1, 'a');
|
||||
INSERT INTO t1 VALUES (2, 'a');
|
||||
|
||||
--connection node_1
|
||||
SET AUTOCOMMIT=ON;
|
||||
START TRANSACTION;
|
||||
|
||||
UPDATE t1 SET f2 = 'b' WHERE f1 = 1;
|
||||
|
||||
# block access to t2
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1a
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
||||
--let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.TABLES
|
||||
--source include/wait_condition_with_debug.inc
|
||||
LOCK TABLE t2 WRITE;
|
||||
|
||||
# Block before MLD lock wait
|
||||
# Block before MDL lock wait
|
||||
--connection node_1
|
||||
SET @@debug_dbug = "d,sync.wsrep_before_mdl_wait";
|
||||
SET DEBUG_SYNC= 'wsrep_before_mdl_wait SIGNAL before_mdl_wait WAIT_FOR mdl_wait_continue';
|
||||
--send SELECT * FROM t2;
|
||||
|
||||
# Wait for SELECT to be blocked
|
||||
--connection node_1a
|
||||
#--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIS WHERE STATE = 'System lock';
|
||||
#--source include/wait_condition.inc
|
||||
#--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'init' AND INFO = 'COMMIT';
|
||||
#--source include/wait_condition.inc
|
||||
--echo # Wait until select is blocked before MDL lock wait
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR before_mdl_wait';
|
||||
|
||||
# block applier to wait after BF victim is locked
|
||||
--connection node_1a
|
||||
SET @@debug_dbug = "d,sync.wsrep_after_BF_victim_lock";
|
||||
|
||||
# Issue a conflicting update on node #2
|
||||
--connection node_2
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 = 1;
|
||||
|
||||
# Unblock the SELECT, to enter wsrep_thd_is_BF
|
||||
--connection node_1a
|
||||
SET @@debug_dbug = "";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_before_mdl_wait";
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1b
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--echo # Wait for conflicting update to block
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Update_rows_log_event:%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# unblock applier to try to BF the SELECT
|
||||
# Unblock the SELECT, to enter wsrep_thd_is_BF
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_after_BF_victim_lock";
|
||||
|
||||
--connect node_1c, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1c
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Update_rows_log_event:%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1a
|
||||
# unblock applier to try to BF the SELECT
|
||||
SET DEBUG_SYNC = "now SIGNAL BF_victim_continue";
|
||||
|
||||
# table lock is not needed anymore
|
||||
UNLOCK TABLES;
|
||||
|
||||
# SELECT succeeds
|
||||
# SELECT returns deadlock
|
||||
--connection node_1
|
||||
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'a';
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
--connection node_1
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'a';
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'c';
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'a';
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'a';
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM t1 WHERE f2 = 'c';
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
--connection node_1b
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
|
||||
--connection node_1
|
||||
--disconnect node_1a
|
||||
--disconnect node_1b
|
||||
--disconnect node_1c
|
||||
|
||||
|
@ -2,20 +2,24 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# This tests simple autocommit replication of MyISAM tables. No updates arrive on the slave.
|
||||
# This tests simple autocommit replication of MyISAM tables.
|
||||
#
|
||||
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
|
||||
# Without a PK
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2), (3);
|
||||
# This is TOI
|
||||
INSERT INTO t1 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL;
|
||||
|
||||
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3);
|
||||
# This is TOI
|
||||
INSERT INTO t2 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL;
|
||||
|
||||
# Error
|
||||
@ -32,14 +36,26 @@ UPDATE t2 SET f1 = 9 WHERE f1 = 1;
|
||||
DELETE FROM t1 WHERE f1 = 9;
|
||||
DELETE FROM t2 WHERE f1 = 9;
|
||||
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
|
||||
# TRUNCATE
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
SELECT COUNT(*) = 0 FROM t2;
|
||||
SELECT * FROM t1 ORDER BY f1;
|
||||
SELECT * FROM t2 ORDER BY f1;
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
16
mysql-test/suite/galera/t/galera_sequence_engine.test
Normal file
16
mysql-test/suite/galera/t/galera_sequence_engine.test
Normal file
@ -0,0 +1,16 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
SET GLOBAL wsrep_ignore_apply_errors=0;
|
||||
SET SESSION AUTOCOMMIT=0;
|
||||
SET SESSION max_error_count=0;
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
CREATE TABLE t0 (id GEOMETRY,parent_id GEOMETRY)ENGINE=SEQUENCE;
|
||||
|
||||
--connection node_2
|
||||
--error ER_NO_SUCH_TABLE
|
||||
SHOW CREATE TABLE t0;
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_ignore_apply_errors=DEFAULT;
|
||||
|
@ -16,21 +16,27 @@ SET GLOBAL wsrep_provider_options = 'pc.weight=2';
|
||||
|
||||
--connection node_2
|
||||
# Isolate node_2 from the group and wait until wsrep_ready becomes OFF.
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'OFF' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Verify that graceful shutdown succeeds.
|
||||
--source include/shutdown_mysqld.inc
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'OFF' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'
|
||||
--source include/wait_condition.inc
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
# Verify that graceful shutdown succeeds.
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Restore original settings.
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight = 1';
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
190
mysql-test/suite/galera/t/mdev-22063.test
Normal file
190
mysql-test/suite/galera/t/mdev-22063.test
Normal file
@ -0,0 +1,190 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_log_bin.inc
|
||||
--source include/have_sequence.inc
|
||||
--source include/have_aria.inc
|
||||
|
||||
--echo # Case 1 CREATE SEQUENCE with no NOCACHE
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
CREATE SEQUENCE s ENGINE=InnoDB;
|
||||
CREATE SEQUENCE s NOCACHE ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
START TRANSACTION;
|
||||
REPLACE INTO s VALUES (1,1,9223372036854775806,1,1,1000,0,0);
|
||||
OPTIMIZE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM s;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 's'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM test.s;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM s;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
DROP SEQUENCE s;
|
||||
|
||||
--echo # Case 2 REPLACE INTO ... SELECT with error
|
||||
CREATE TABLE t (id INT KEY,a YEAR,INDEX (id,a)) engine=innodb;
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
REPLACE INTO t (id,a)SELECT /*!99997 */ 1;
|
||||
REPLACE INTO t (id,a)SELECT /*!99997 */ 1,2;
|
||||
SELECT * FROM t;
|
||||
|
||||
CREATE TABLE t2 (id INT KEY,a YEAR,INDEX (id,a)) engine=myisam;
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
REPLACE INTO t2 (id,a)SELECT /*!99997 */ 1;
|
||||
REPLACE INTO t2 (id,a)SELECT /*!99997 */ 1,2;
|
||||
SELECT * FROM t2;
|
||||
|
||||
CREATE TABLE t3 (id INT KEY,a YEAR,INDEX (id,a)) engine=aria;
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
REPLACE INTO t3 (id,a)SELECT /*!99997 */ 1;
|
||||
REPLACE INTO t3 (id,a)SELECT /*!99997 */ 1,2;
|
||||
SELECT * FROM t3;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't3'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM test.t3;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT * FROM t;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t,t2,t3;
|
||||
|
||||
--echo # Bigger REPLACE ... AS SELECT test
|
||||
|
||||
SET GLOBAL wsrep_replicate_myisam=ON;
|
||||
|
||||
CREATE TABLE t1(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t3(id int not null primary key ,b int) ENGINE=Aria;
|
||||
CREATE TABLE t4(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t7(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t8(id int not null primary key ,b int) ENGINE=Aria;
|
||||
|
||||
INSERT INTO t1(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t2(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t3(id) SELECT seq FROM seq_1_to_1000;
|
||||
|
||||
REPLACE INTO t4 SELECT * FROM t1;
|
||||
REPLACE INTO t5 SELECT * FROM t2;
|
||||
# For some reason Aria storage engine does register_ha
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
REPLACE INTO t6 SELECT * FROM t3;
|
||||
REPLACE INTO t7 SELECT * FROM t2;
|
||||
REPLACE INTO t8 SELECT * FROM t3;
|
||||
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 8 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't_'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t8;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
|
||||
--echo # Bigger INSERT INTO ... SELECT test
|
||||
|
||||
CREATE TABLE t1(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t3(id int not null primary key ,b int) ENGINE=Aria;
|
||||
CREATE TABLE t4(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(id int not null primary key ,b int) ENGINE=InnoDB;
|
||||
CREATE TABLE t7(id int not null primary key ,b int) ENGINE=MyISAM;
|
||||
CREATE TABLE t8(id int not null primary key ,b int) ENGINE=Aria;
|
||||
|
||||
INSERT INTO t1(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t2(id) SELECT seq FROM seq_1_to_1000;
|
||||
INSERT INTO t3(id) SELECT seq FROM seq_1_to_1000;
|
||||
|
||||
INSERT INTO t4 SELECT * FROM t1;
|
||||
INSERT INTO t5 SELECT * FROM t2;
|
||||
# For some reason Aria storage engine does register_ha
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t6 SELECT * FROM t3;
|
||||
INSERT INTO t7 SELECT * FROM t2;
|
||||
INSERT INTO t8 SELECT * FROM t3;
|
||||
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 8 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't_'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1000 FROM test.t8;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t2;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t3;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t4;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t5;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t6;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t7;
|
||||
SELECT COUNT(*) AS EXPECT_1000 FROM t8;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
#
|
||||
# View
|
||||
#
|
||||
CREATE TABLE t1(pk int not null primary key) engine=innodb;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
CREATE TABLE t1(pk int not null primary key) engine=myisam;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
CREATE TABLE t1(pk int not null primary key) engine=aria;
|
||||
INSERT INTO t1 values (1),(2),(3),(4);
|
||||
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
||||
INSERT INTO view_t1 VALUES (5);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
SET GLOBAL wsrep_replicate_myisam=OFF;
|
@ -1,34 +1,15 @@
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
--let $node_1 = node_1
|
||||
--let $node_2 = node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
#
|
||||
# Below should not cause nodes to be inconsistent (they could if we
|
||||
# allow TOI as some error are ignored on applier
|
||||
#
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
CREATE TABLE t ENGINE=InnoDB WITH SYSTEM VERSIONING AS SELECT 1 AS i;
|
||||
|
||||
--connection node_2
|
||||
--error ER_NO_SUCH_TABLE
|
||||
SHOW CREATE TABLE t;
|
||||
SELECT * from t;
|
||||
DROP TABLE IF EXISTS t;
|
||||
COMMIT;
|
||||
|
||||
#
|
||||
# Restart node_2, force SST because database is inconsistent compared to node_1
|
||||
#
|
||||
--connection node_2
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--source include/kill_galera.inc
|
||||
--remove_file $MYSQLTEST_VARDIR/mysqld.2/data/grastate.dat
|
||||
--echo Starting server ...
|
||||
let $restart_noprint=2;
|
||||
--source include/start_mysqld.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
call mtr.add_suppression("WSREP: Event .*Write_rows_v1 apply failed:.*");
|
||||
call mtr.add_suppression("SREP: Failed to apply write set: gtid:.*");
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
@ -9,6 +9,7 @@ INSERT INTO t1 VALUES (01), (02), (03), (04), (05);
|
||||
connection node_2;
|
||||
Unloading wsrep provider ...
|
||||
SET GLOBAL wsrep_cluster_address = '';
|
||||
connection node_1;
|
||||
connection node_3;
|
||||
Unloading wsrep provider ...
|
||||
SET GLOBAL wsrep_cluster_address = '';
|
||||
@ -33,14 +34,16 @@ SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=ist_sender_send_after_get_buffers';
|
||||
INSERT INTO t1 VALUES (51), (52), (53), (54), (55);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_3;
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 30 FROM t1;
|
||||
COUNT(*) = 30
|
||||
1
|
||||
SELECT COUNT(*) = 3 FROM t2;
|
||||
COUNT(*) = 3
|
||||
1
|
||||
SELECT COUNT(*) AS EXPECT_30 FROM t1;
|
||||
EXPECT_30
|
||||
30
|
||||
SELECT COUNT(*) AS EXPECT_3 FROM t2;
|
||||
EXPECT_3
|
||||
3
|
||||
SELECT LENGTH(f1) = 512 * 1024 FROM t2;
|
||||
LENGTH(f1) = 512 * 1024
|
||||
1
|
||||
@ -48,12 +51,12 @@ LENGTH(f1) = 512 * 1024
|
||||
1
|
||||
CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled");
|
||||
connection node_3;
|
||||
SELECT COUNT(*) = 30 FROM t1;
|
||||
COUNT(*) = 30
|
||||
1
|
||||
SELECT COUNT(*) = 3 FROM t2;
|
||||
COUNT(*) = 3
|
||||
1
|
||||
SELECT COUNT(*) AS EXPECT_30 FROM t1;
|
||||
EXPECT_30
|
||||
30
|
||||
SELECT COUNT(*) AS EXPECT_3 FROM t2;
|
||||
EXPECT_3
|
||||
3
|
||||
SELECT LENGTH(f1) = 512 * 1024 FROM t2;
|
||||
LENGTH(f1) = 512 * 1024
|
||||
1
|
||||
|
@ -92,3 +92,7 @@ connection node_2;
|
||||
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
|
||||
connection node_3;
|
||||
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
|
||||
disconnect node_1a;
|
||||
disconnect node_3;
|
||||
disconnect node_2;
|
||||
disconnect node_1;
|
||||
|
@ -2,10 +2,22 @@
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.ignore_sb=true;gcache.size=1M'
|
||||
auto_increment_increment=1
|
||||
auto_increment_offset=1
|
||||
# this will force server restarts before this test
|
||||
loose-galera-ist-gcache-rollover=1
|
||||
wsrep-debug=1
|
||||
|
||||
[mysqld.2]
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.ignore_sb=true;gcache.size=1M'
|
||||
auto_increment_increment=2
|
||||
auto_increment_offset=2
|
||||
loose-galera-ist-gcache-rollover=2
|
||||
wsrep-debug=1
|
||||
|
||||
[mysqld.3]
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.3.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.ignore_sb=true;gcache.size=1M'
|
||||
|
||||
auto_increment_increment=3
|
||||
auto_increment_offset=3
|
||||
loose-galera-ist-gcache-rollover=3
|
||||
wsrep-debug=1
|
||||
|
@ -12,6 +12,7 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/galera_have_debug_sync.inc
|
||||
--source include/force_restart.inc
|
||||
|
||||
--let $galera_connection_name = node_3
|
||||
--let $galera_server_number = 3
|
||||
@ -24,6 +25,9 @@
|
||||
--source ../galera/include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE 'wsrep%'; show processlist
|
||||
--source include/wait_condition_with_debug.inc
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (01), (02), (03), (04), (05);
|
||||
|
||||
@ -32,12 +36,15 @@ INSERT INTO t1 VALUES (01), (02), (03), (04), (05);
|
||||
--let $wsrep_cluster_address_orig2 = `select @@wsrep_cluster_address`
|
||||
--source suite/galera/include/galera_stop_replication.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_3
|
||||
--let $wsrep_cluster_address_orig3 = `select @@wsrep_cluster_address`
|
||||
--source suite/galera/include/galera_stop_replication.inc
|
||||
|
||||
--connection node_1
|
||||
--source include/wait_until_connected_again.inc
|
||||
INSERT INTO t1 VALUES (11), (12), (13), (14), (15);
|
||||
|
||||
# Wait until nodes #2 and #3 have left
|
||||
@ -88,29 +95,39 @@ INSERT INTO t1 VALUES (51), (52), (53), (54), (55);
|
||||
--connection node_2
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 OR VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_3
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
sleep 5;
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Final checks
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 30 FROM t1;
|
||||
SELECT COUNT(*) = 3 FROM t2;
|
||||
--let $wait_condition = SELECT COUNT(*) = 30 FROM t1
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) AS EXPECT_30 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_3 FROM t2;
|
||||
SELECT LENGTH(f1) = 512 * 1024 FROM t2;
|
||||
CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled");
|
||||
|
||||
# Final checks
|
||||
--connection node_3
|
||||
SELECT COUNT(*) = 30 FROM t1;
|
||||
SELECT COUNT(*) = 3 FROM t2;
|
||||
--let $wait_condition = SELECT COUNT(*) = 30 FROM t1
|
||||
--source include/wait_condition.inc
|
||||
SELECT COUNT(*) AS EXPECT_30 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_3 FROM t2;
|
||||
SELECT LENGTH(f1) = 512 * 1024 FROM t2;
|
||||
CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled");
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--source ../galera/include/auto_increment_offset_restore.inc
|
||||
|
||||
--let $galera_cluster_size=3
|
||||
--source ../galera/include/auto_increment_offset_restore.inc
|
||||
--source include/galera_end.inc
|
||||
|
@ -278,4 +278,9 @@ call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State T
|
||||
--connection node_3
|
||||
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
|
||||
|
||||
--disconnect node_1a
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--let $galera_cluster_size=3
|
||||
--source ../galera/include/auto_increment_offset_restore.inc
|
||||
--source include/galera_end.inc
|
||||
|
@ -7,11 +7,11 @@ connection node_3;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t1;
|
||||
EXPECT_0
|
||||
0
|
||||
connection node_1;
|
||||
CREATE TABLE t2 (f1 INTEGER);
|
||||
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||
LOCK TABLE t2 WRITE;
|
||||
connection node_1;
|
||||
@ -37,12 +37,12 @@ count_match
|
||||
count_match
|
||||
1
|
||||
connection node_1;
|
||||
SELECT COUNT(*) FROM mysql.wsrep_streaming_log;
|
||||
COUNT(*)
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
EXPECT_0
|
||||
0
|
||||
connection node_2;
|
||||
SELECT COUNT(*) FROM mysql.wsrep_streaming_log;
|
||||
COUNT(*)
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
EXPECT_0
|
||||
0
|
||||
connection node_1;
|
||||
DROP TABLE t1;
|
||||
|
@ -15,18 +15,23 @@
|
||||
--source ../galera/include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
|
||||
# Block node #2's applier before table t1's inserts have come into play
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t2 (f1 INTEGER);
|
||||
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
||||
--source include/wait_condition.inc
|
||||
LOCK TABLE t2 WRITE;
|
||||
|
||||
--connection node_1
|
||||
@ -77,10 +82,10 @@ if ($mysql_errno == 1213) {
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
SELECT COUNT(*) FROM mysql.wsrep_streaming_log;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) FROM mysql.wsrep_streaming_log;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
|
@ -11,6 +11,22 @@ ERROR HY000: Schema mismatch (ROW_FORMAT mismatch)
|
||||
DROP TABLE imp_t1, t1;
|
||||
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
|
||||
#
|
||||
# MDEV-33400 Adaptive hash index corruption after DISCARD TABLESPACE
|
||||
#
|
||||
SET @save_adaptive=@@GLOBAL.innodb_adaptive_hash_index;
|
||||
SET GLOBAL innodb_adaptive_hash_index=ON;
|
||||
CREATE TABLE t (a INT PRIMARY KEY) ENGINE=INNODB;
|
||||
INSERT INTO t SELECT * FROM seq_1_to_131;
|
||||
ALTER TABLE t ADD hid INT DEFAULT 2;
|
||||
INSERT INTO t VALUES (251,1);
|
||||
ALTER TABLE t DISCARD TABLESPACE;
|
||||
CHECK TABLE mysql.innodb_table_stats;
|
||||
Table Op Msg_type Msg_text
|
||||
mysql.innodb_table_stats check status OK
|
||||
DROP TABLE t;
|
||||
SET GLOBAL innodb_adaptive_hash_index=@save_adaptive;
|
||||
# End of 10.4 tests
|
||||
#
|
||||
# MDEV-18288: Transportable Tablespaces leave AUTO_INCREMENT in mismatched
|
||||
# state, causing INSERT errors in newly imported tables when .cfg is not used.
|
||||
#
|
||||
@ -45,3 +61,4 @@ id
|
||||
4
|
||||
5
|
||||
DROP TABLE t2;
|
||||
# End of 10.5 tests
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
call mtr.add_suppression("Index for table 'imp_t1' is corrupt; try to repair it");
|
||||
|
||||
@ -18,6 +19,24 @@ DROP TABLE imp_t1, t1;
|
||||
|
||||
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-33400 Adaptive hash index corruption after DISCARD TABLESPACE
|
||||
--echo #
|
||||
|
||||
SET @save_adaptive=@@GLOBAL.innodb_adaptive_hash_index;
|
||||
SET GLOBAL innodb_adaptive_hash_index=ON;
|
||||
|
||||
CREATE TABLE t (a INT PRIMARY KEY) ENGINE=INNODB;
|
||||
INSERT INTO t SELECT * FROM seq_1_to_131;
|
||||
ALTER TABLE t ADD hid INT DEFAULT 2;
|
||||
INSERT INTO t VALUES (251,1);
|
||||
ALTER TABLE t DISCARD TABLESPACE;
|
||||
CHECK TABLE mysql.innodb_table_stats;
|
||||
DROP TABLE t;
|
||||
SET GLOBAL innodb_adaptive_hash_index=@save_adaptive;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18288: Transportable Tablespaces leave AUTO_INCREMENT in mismatched
|
||||
--echo # state, causing INSERT errors in newly imported tables when .cfg is not used.
|
||||
@ -58,3 +77,5 @@ INSERT INTO t2() VALUES();
|
||||
|
||||
SELECT * FROM t2 ORDER BY id;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # End of 10.5 tests
|
||||
|
@ -60,7 +60,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -521,7 +520,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -993,7 +991,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -1466,7 +1463,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -1933,7 +1929,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -2406,7 +2401,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -2884,7 +2878,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -3360,7 +3353,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -3826,7 +3818,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -4287,7 +4278,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -4759,7 +4749,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -5232,7 +5221,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -5699,7 +5687,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -6172,7 +6159,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -6650,7 +6636,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -7126,7 +7111,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -15108,7 +15092,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -15569,7 +15552,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -16041,7 +16023,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -16514,7 +16495,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -16981,7 +16961,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -17454,7 +17433,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -17932,7 +17910,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -18408,7 +18385,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
|
@ -60,7 +60,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -530,7 +529,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -1017,7 +1015,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -1511,7 +1508,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -1995,7 +1991,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -2489,7 +2484,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -2988,7 +2982,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -3485,7 +3478,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -3974,7 +3966,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -4444,7 +4435,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -4931,7 +4921,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -5425,7 +5414,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -5909,7 +5897,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -6403,7 +6390,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -6902,7 +6888,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -7399,7 +7384,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -15700,7 +15684,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -16170,7 +16153,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -16657,7 +16639,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -17151,7 +17132,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -17635,7 +17615,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -18129,7 +18108,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -18628,7 +18606,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
@ -19125,7 +19102,6 @@ SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
|
@ -1020,7 +1020,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
MySQL_Test_DB.t1 analyze status Engine-independent statistics collected
|
||||
MySQL_Test_DB.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -1020,7 +1020,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
MySQL_Test_DB.t1 analyze status Engine-independent statistics collected
|
||||
MySQL_Test_DB.t1 analyze note The storage engine for the table doesn't support analyze
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -1020,7 +1020,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
MySQL_Test_DB.t1 analyze status Engine-independent statistics collected
|
||||
MySQL_Test_DB.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -987,7 +987,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
mysql_test_db.t1 analyze status Engine-independent statistics collected
|
||||
mysql_test_db.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -987,7 +987,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
mysql_test_db.t1 analyze status Engine-independent statistics collected
|
||||
mysql_test_db.t1 analyze note The storage engine for the table doesn't support analyze
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -987,7 +987,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
mysql_test_db.t1 analyze status Engine-independent statistics collected
|
||||
mysql_test_db.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -55,7 +55,6 @@ PARTITION pmax VALUES LESS THAN (MAXVALUE));
|
||||
INSERT INTO t1 VALUES (1), (10), (100), (1000);
|
||||
ALTER TABLE t1 ANALYZE PARTITION p0;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
ALTER TABLE t1 OPTIMIZE PARTITION p0;
|
||||
Table Op Msg_type Msg_text
|
||||
|
27
sql/field.cc
27
sql/field.cc
@ -1430,6 +1430,9 @@ bool Field::sp_prepare_and_store_item(THD *thd, Item **value)
|
||||
if (!(expr_item= thd->sp_prepare_func_item(value, 1)))
|
||||
goto error;
|
||||
|
||||
if (expr_item->check_is_evaluable_expression_or_error())
|
||||
goto error;
|
||||
|
||||
/*
|
||||
expr_item is now fixed, it's safe to call cmp_type()
|
||||
*/
|
||||
@ -11253,6 +11256,30 @@ bool Field::validate_value_in_record_with_warn(THD *thd, const uchar *record)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Find which reaction should be for IGNORE value.
|
||||
*/
|
||||
|
||||
ignore_value_reaction find_ignore_reaction(THD *thd)
|
||||
{
|
||||
enum_sql_command com= thd->lex->sql_command;
|
||||
|
||||
// All insert-like commands
|
||||
if (com == SQLCOM_INSERT || com == SQLCOM_REPLACE ||
|
||||
com == SQLCOM_INSERT_SELECT || com == SQLCOM_REPLACE_SELECT ||
|
||||
com == SQLCOM_LOAD)
|
||||
{
|
||||
return IGNORE_MEANS_DEFAULT;
|
||||
}
|
||||
// Update commands
|
||||
if (com == SQLCOM_UPDATE || com == SQLCOM_UPDATE_MULTI)
|
||||
{
|
||||
return IGNORE_MEANS_FIELD_VALUE;
|
||||
}
|
||||
return IGNORE_MEANS_ERROR;
|
||||
}
|
||||
|
||||
|
||||
bool Field::save_in_field_default_value(bool view_error_processing)
|
||||
{
|
||||
THD *thd= table->in_use;
|
||||
|
@ -63,6 +63,15 @@ enum enum_check_fields
|
||||
CHECK_FIELD_ERROR_FOR_NULL,
|
||||
};
|
||||
|
||||
enum ignore_value_reaction
|
||||
{
|
||||
IGNORE_MEANS_ERROR,
|
||||
IGNORE_MEANS_DEFAULT,
|
||||
IGNORE_MEANS_FIELD_VALUE
|
||||
};
|
||||
|
||||
ignore_value_reaction find_ignore_reaction(THD *thd);
|
||||
|
||||
|
||||
enum enum_conv_type
|
||||
{
|
||||
|
@ -1739,12 +1739,17 @@ int ha_commit_trans(THD *thd, bool all)
|
||||
// Issue a message to the client and roll back the transaction.
|
||||
if (trans->no_2pc && rw_ha_count > 1)
|
||||
{
|
||||
my_message(ER_ERROR_DURING_COMMIT, "Transactional commit not supported "
|
||||
"by involved engine(s)", MYF(0));
|
||||
error= 1;
|
||||
// REPLACE|INSERT INTO ... SELECT uses TOI for MyISAM|Aria
|
||||
if (WSREP(thd) && thd->wsrep_cs().mode() != wsrep::client_state::m_toi)
|
||||
{
|
||||
my_message(ER_ERROR_DURING_COMMIT, "Transactional commit not supported "
|
||||
"by involved engine(s)", MYF(0));
|
||||
error= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
error= wsrep_before_commit(thd, all);
|
||||
|
||||
if (!error)
|
||||
error= wsrep_before_commit(thd, all);
|
||||
}
|
||||
if (error)
|
||||
{
|
||||
@ -2091,8 +2096,12 @@ int ha_rollback_trans(THD *thd, bool all)
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
(void) wsrep_before_rollback(thd, all);
|
||||
// REPLACE|INSERT INTO ... SELECT uses TOI in consistency check
|
||||
if (thd->wsrep_consistency_check != CONSISTENCY_CHECK_RUNNING)
|
||||
if (thd->wsrep_cs().mode() != wsrep::client_state::m_toi)
|
||||
(void) wsrep_before_rollback(thd, all);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (ha_info)
|
||||
{
|
||||
/* Close all cursors that can not survive ROLLBACK */
|
||||
@ -2129,7 +2138,11 @@ int ha_rollback_trans(THD *thd, bool all)
|
||||
thd->thread_id, all?"TRUE":"FALSE", wsrep_thd_query(thd),
|
||||
thd->get_stmt_da()->message(), is_real_trans);
|
||||
}
|
||||
(void) wsrep_after_rollback(thd, all);
|
||||
|
||||
// REPLACE|INSERT INTO ... SELECT uses TOI in consistency check
|
||||
if (thd->wsrep_consistency_check != CONSISTENCY_CHECK_RUNNING)
|
||||
if (thd->wsrep_cs().mode() != wsrep::client_state::m_toi)
|
||||
(void) wsrep_after_rollback(thd, all);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (all || !thd->in_active_multi_stmt_transaction())
|
||||
|
229
sql/item.cc
229
sql/item.cc
@ -4059,7 +4059,9 @@ Item_param::Item_param(THD *thd, const LEX_CSTRING *name_arg,
|
||||
as an actual parameter. See Item_param::set_from_item().
|
||||
*/
|
||||
m_is_settable_routine_parameter(true),
|
||||
m_clones(thd->mem_root)
|
||||
m_clones(thd->mem_root),
|
||||
m_associated_field(nullptr),
|
||||
m_default_field(nullptr)
|
||||
{
|
||||
name= *name_arg;
|
||||
/*
|
||||
@ -4465,10 +4467,29 @@ int Item_param::save_in_field(Field *field, bool no_conversions)
|
||||
case NULL_VALUE:
|
||||
return set_field_to_null_with_conversions(field, no_conversions);
|
||||
case DEFAULT_VALUE:
|
||||
if (m_associated_field)
|
||||
return assign_default(field);
|
||||
return field->save_in_field_default_value(field->table->pos_in_table_list->
|
||||
top_table() !=
|
||||
field->table->pos_in_table_list);
|
||||
case IGNORE_VALUE:
|
||||
if (m_associated_field)
|
||||
{
|
||||
switch (find_ignore_reaction(field->table->in_use))
|
||||
{
|
||||
case IGNORE_MEANS_DEFAULT:
|
||||
DBUG_ASSERT(0); // impossible now, but fully working code if needed
|
||||
return assign_default(field);
|
||||
case IGNORE_MEANS_FIELD_VALUE:
|
||||
m_associated_field->save_val(field);
|
||||
return false;
|
||||
default:
|
||||
; // fall through to error
|
||||
}
|
||||
DBUG_ASSERT(0); //impossible
|
||||
my_error(ER_INVALID_DEFAULT_PARAM, MYF(0));
|
||||
return true;
|
||||
}
|
||||
return field->save_in_field_ignore_value(field->table->pos_in_table_list->
|
||||
top_table() !=
|
||||
field->table->pos_in_table_list);
|
||||
@ -5036,6 +5057,82 @@ bool Item_param::append_for_log(THD *thd, String *str)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Allocate a memory and create on it a copy of Field object.
|
||||
|
||||
@param thd thread handler
|
||||
@param field_arg an instance of Field the new Field object be based on
|
||||
|
||||
@return a new created Field object on success, nullptr on error.
|
||||
*/
|
||||
|
||||
static Field *make_default_field(THD *thd, Field *field_arg)
|
||||
{
|
||||
Field *def_field;
|
||||
|
||||
if (!(def_field= (Field*) thd->alloc(field_arg->size_of())))
|
||||
return nullptr;
|
||||
|
||||
memcpy((void *)def_field, (void *)field_arg, field_arg->size_of());
|
||||
def_field->reset_fields();
|
||||
// If non-constant default value expression or a blob
|
||||
if (def_field->default_value &&
|
||||
(def_field->default_value->flags || (def_field->flags & BLOB_FLAG)))
|
||||
{
|
||||
uchar *newptr= (uchar*) thd->alloc(1+def_field->pack_length());
|
||||
if (!newptr)
|
||||
return nullptr;
|
||||
|
||||
if (should_mark_column(thd->column_usage))
|
||||
def_field->default_value->expr->update_used_tables();
|
||||
def_field->move_field(newptr + 1, def_field->maybe_null() ? newptr : 0, 1);
|
||||
}
|
||||
else
|
||||
def_field->move_field_offset((my_ptrdiff_t)
|
||||
(def_field->table->s->default_values -
|
||||
def_field->table->record[0]));
|
||||
return def_field;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Assign a default value of a table column to the positional parameter that
|
||||
is performed on execution of a prepared statement with the clause
|
||||
'USING DEFAULT'
|
||||
|
||||
@param field a field that should be assigned an actual value of positional
|
||||
parameter passed via the clause 'USING DEFAULT'
|
||||
|
||||
@return false on success, true on failure
|
||||
*/
|
||||
|
||||
bool Item_param::assign_default(Field *field)
|
||||
{
|
||||
DBUG_ASSERT(m_associated_field);
|
||||
|
||||
if (m_associated_field->field->flags & NO_DEFAULT_VALUE_FLAG)
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0),
|
||||
m_associated_field->field->field_name.str);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!m_default_field)
|
||||
{
|
||||
m_default_field= make_default_field(field->table->in_use,
|
||||
m_associated_field->field);
|
||||
|
||||
if (!m_default_field)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (m_default_field->default_value)
|
||||
m_default_field->set_default();
|
||||
|
||||
return field_conv(field, m_default_field);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Item_copy_string
|
||||
****************************************************************************/
|
||||
@ -9518,69 +9615,10 @@ bool Item_default_value::update_func_default_processor(void *)
|
||||
|
||||
bool Item_default_value::fix_fields(THD *thd, Item **items)
|
||||
{
|
||||
Item *real_arg;
|
||||
Item_field *field_arg;
|
||||
Field *def_field;
|
||||
DBUG_ASSERT(fixed == 0);
|
||||
DBUG_ASSERT(arg);
|
||||
|
||||
/*
|
||||
DEFAULT() do not need table field so should not ask handler to bring
|
||||
field value (mark column for read)
|
||||
*/
|
||||
enum_column_usage save_column_usage= thd->column_usage;
|
||||
/*
|
||||
Fields which has defult value could be read, so it is better hide system
|
||||
invisible columns.
|
||||
*/
|
||||
thd->column_usage= COLUMNS_WRITE;
|
||||
if (arg->fix_fields_if_needed(thd, &arg))
|
||||
{
|
||||
thd->column_usage= save_column_usage;
|
||||
goto error;
|
||||
}
|
||||
thd->column_usage= save_column_usage;
|
||||
|
||||
real_arg= arg->real_item();
|
||||
if (real_arg->type() != FIELD_ITEM)
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0), arg->name.str);
|
||||
goto error;
|
||||
}
|
||||
|
||||
field_arg= (Item_field *)real_arg;
|
||||
if ((field_arg->field->flags & NO_DEFAULT_VALUE_FLAG))
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0),
|
||||
field_arg->field->field_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (!(def_field= (Field*) thd->alloc(field_arg->field->size_of())))
|
||||
goto error;
|
||||
memcpy((void *)def_field, (void *)field_arg->field,
|
||||
field_arg->field->size_of());
|
||||
def_field->reset_fields();
|
||||
// If non-constant default value expression or a blob
|
||||
if (def_field->default_value &&
|
||||
(def_field->default_value->flags || (def_field->flags & BLOB_FLAG)))
|
||||
{
|
||||
uchar *newptr= (uchar*) thd->alloc(1+def_field->pack_length());
|
||||
if (!newptr)
|
||||
goto error;
|
||||
if (should_mark_column(thd->column_usage))
|
||||
def_field->default_value->expr->update_used_tables();
|
||||
def_field->move_field(newptr+1, def_field->maybe_null() ? newptr : 0, 1);
|
||||
}
|
||||
else
|
||||
def_field->move_field_offset((my_ptrdiff_t)
|
||||
(def_field->table->s->default_values -
|
||||
def_field->table->record[0]));
|
||||
set_field(def_field);
|
||||
return FALSE;
|
||||
|
||||
error:
|
||||
context->process_error(thd);
|
||||
return TRUE;
|
||||
return tie_field(thd);
|
||||
}
|
||||
|
||||
void Item_default_value::cleanup()
|
||||
@ -9769,6 +9807,75 @@ Item *Item_default_value::transform(THD *thd, Item_transformer transformer,
|
||||
}
|
||||
|
||||
|
||||
bool Item_default_value::associate_with_target_field(THD *thd,
|
||||
Item_field *field)
|
||||
{
|
||||
m_associated= true;
|
||||
arg= field;
|
||||
return tie_field(thd);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Call fix_fields for an item representing the default value, create
|
||||
an instance of Field for representing the default value and assign it
|
||||
to the Item_field::field.
|
||||
|
||||
@param thd thread handler
|
||||
|
||||
@return false on success, true on error
|
||||
*/
|
||||
|
||||
bool Item_default_value::tie_field(THD *thd)
|
||||
{
|
||||
Item *real_arg;
|
||||
Item_field *field_arg;
|
||||
Field *def_field;
|
||||
|
||||
/*
|
||||
DEFAULT() do not need table field so should not ask handler to bring
|
||||
field value (mark column for read)
|
||||
*/
|
||||
enum_column_usage save_column_usage= thd->column_usage;
|
||||
/*
|
||||
Fields which has defult value could be read, so it is better hide system
|
||||
invisible columns.
|
||||
*/
|
||||
thd->column_usage= COLUMNS_WRITE;
|
||||
if (arg->fix_fields_if_needed(thd, &arg))
|
||||
{
|
||||
thd->column_usage= save_column_usage;
|
||||
goto error;
|
||||
}
|
||||
thd->column_usage= save_column_usage;
|
||||
|
||||
real_arg= arg->real_item();
|
||||
if (real_arg->type() != FIELD_ITEM)
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0), arg->name.str);
|
||||
goto error;
|
||||
}
|
||||
|
||||
field_arg= (Item_field *)real_arg;
|
||||
if ((field_arg->field->flags & NO_DEFAULT_VALUE_FLAG))
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0),
|
||||
field_arg->field->field_name.str);
|
||||
goto error;
|
||||
}
|
||||
def_field= make_default_field(thd, field_arg->field);
|
||||
if (!def_field)
|
||||
goto error;
|
||||
|
||||
set_field(def_field);
|
||||
return false;
|
||||
|
||||
error:
|
||||
context->process_error(thd);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
bool Item_insert_value::eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
return item->type() == INSERT_VALUE_ITEM &&
|
||||
|
42
sql/item.h
42
sql/item.h
@ -846,7 +846,7 @@ protected:
|
||||
const Tmp_field_param *param,
|
||||
bool is_explicit_null);
|
||||
|
||||
void raise_error_not_evaluable();
|
||||
virtual void raise_error_not_evaluable();
|
||||
void push_note_converted_to_negative_complement(THD *thd);
|
||||
void push_note_converted_to_positive_complement(THD *thd);
|
||||
|
||||
@ -2515,6 +2515,18 @@ public:
|
||||
Checks if this item consists in the left part of arg IN subquery predicate
|
||||
*/
|
||||
bool pushable_equality_checker_for_subquery(uchar *arg);
|
||||
|
||||
/**
|
||||
This method is to set relationship between a positional parameter
|
||||
represented by the '?' and an actual argument value passed to the
|
||||
call of PS/SP by the USING clause. The method is overridden in classes
|
||||
Item_param and Item_default_value.
|
||||
*/
|
||||
virtual bool associate_with_target_field(THD *, Item_field *)
|
||||
{
|
||||
DBUG_ASSERT(is_fixed());
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
MEM_ROOT *get_thd_memroot(THD *thd);
|
||||
@ -4187,6 +4199,10 @@ public:
|
||||
void sync_clones();
|
||||
bool register_clone(Item_param *i) { return m_clones.push_back(i); }
|
||||
|
||||
void raise_error_not_evaluable() override
|
||||
{
|
||||
invalid_default_param();
|
||||
}
|
||||
private:
|
||||
void invalid_default_param() const;
|
||||
|
||||
@ -4201,6 +4217,17 @@ public:
|
||||
|
||||
void make_send_field(THD *thd, Send_field *field) override;
|
||||
|
||||
/**
|
||||
See comments on @see Item::associate_with_target_field for method
|
||||
description
|
||||
*/
|
||||
bool associate_with_target_field(THD *, Item_field *field) override
|
||||
{
|
||||
m_associated_field= field;
|
||||
return false;
|
||||
}
|
||||
bool assign_default(Field *field);
|
||||
|
||||
private:
|
||||
Send_field *m_out_param_info;
|
||||
bool m_is_settable_routine_parameter;
|
||||
@ -4210,6 +4237,8 @@ private:
|
||||
synchronize the actual value of the parameter with the values of the clones.
|
||||
*/
|
||||
Mem_root_array<Item_param *, true> m_clones;
|
||||
Item_field *m_associated_field;
|
||||
Field *m_default_field;
|
||||
};
|
||||
|
||||
|
||||
@ -6485,6 +6514,8 @@ public:
|
||||
class Item_default_value : public Item_field
|
||||
{
|
||||
bool vcol_assignment_ok;
|
||||
bool m_associated= false;
|
||||
|
||||
void calculate();
|
||||
public:
|
||||
Item *arg= nullptr;
|
||||
@ -6555,6 +6586,15 @@ public:
|
||||
override;
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param) override;
|
||||
|
||||
/**
|
||||
See comments on @see Item::associate_with_target_field for method
|
||||
description
|
||||
*/
|
||||
bool associate_with_target_field(THD *thd, Item_field *field) override;
|
||||
|
||||
private:
|
||||
bool tie_field(THD *thd);
|
||||
};
|
||||
|
||||
|
||||
|
11
sql/mdl.cc
11
sql/mdl.cc
@ -1195,15 +1195,8 @@ MDL_wait::timed_wait(MDL_context_owner *owner, struct timespec *abs_timeout,
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
# ifdef ENABLED_DEBUG_SYNC
|
||||
// Allow tests to block the applier thread using the DBUG facilities
|
||||
DBUG_EXECUTE_IF("sync.wsrep_before_mdl_wait",
|
||||
{
|
||||
const char act[]=
|
||||
"now "
|
||||
"wait_for signal.wsrep_before_mdl_wait";
|
||||
DBUG_ASSERT(!debug_sync_set_action((owner->get_thd()),
|
||||
STRING_WITH_LEN(act)));
|
||||
};);
|
||||
// Allow tests to block thread before MDL-wait
|
||||
DEBUG_SYNC(owner->get_thd(), "wsrep_before_mdl_wait");
|
||||
# endif
|
||||
if (WSREP_ON && wsrep_thd_is_BF(owner->get_thd(), false))
|
||||
{
|
||||
|
@ -863,7 +863,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
*/
|
||||
collect_eis=
|
||||
(table->table->s->table_category == TABLE_CATEGORY_USER &&
|
||||
!(lex->alter_info.flags & ALTER_PARTITION_ADMIN) &&
|
||||
!(lex->alter_info.partition_flags & ALTER_PARTITION_ADMIN) &&
|
||||
(check_eits_collection_allowed(thd) ||
|
||||
lex->with_persistent_for_clause));
|
||||
}
|
||||
|
@ -8807,6 +8807,9 @@ fill_record_n_invoke_before_triggers(THD *thd, TABLE *table,
|
||||
@param values values to fill with
|
||||
@param ignore_errors TRUE if we should ignore errors
|
||||
@param use_value forces usage of value of the items instead of result
|
||||
@param check_for_computability whether to check for ability to invoke val_*()
|
||||
methods (val_int () etc) against supplied
|
||||
values
|
||||
|
||||
@details
|
||||
fill_record() may set table->auto_increment_field_not_null and a
|
||||
@ -8820,7 +8823,7 @@ fill_record_n_invoke_before_triggers(THD *thd, TABLE *table,
|
||||
|
||||
bool
|
||||
fill_record(THD *thd, TABLE *table, Field **ptr, List<Item> &values,
|
||||
bool ignore_errors, bool use_value)
|
||||
bool ignore_errors, bool use_value, bool check_for_computability)
|
||||
{
|
||||
List_iterator_fast<Item> v(values);
|
||||
List<TABLE> tbl_list;
|
||||
@ -8858,6 +8861,10 @@ fill_record(THD *thd, TABLE *table, Field **ptr, List<Item> &values,
|
||||
|
||||
value=v++;
|
||||
|
||||
if (check_for_computability &&
|
||||
value->check_is_evaluable_expression_or_error())
|
||||
goto err;
|
||||
|
||||
bool vers_sys_field= table->versioned() && field->vers_sys_field();
|
||||
|
||||
if (field->field_index == autoinc_index)
|
||||
@ -8932,7 +8939,7 @@ fill_record_n_invoke_before_triggers(THD *thd, TABLE *table, Field **ptr,
|
||||
bool result;
|
||||
Table_triggers_list *triggers= table->triggers;
|
||||
|
||||
result= fill_record(thd, table, ptr, values, ignore_errors, FALSE);
|
||||
result= fill_record(thd, table, ptr, values, ignore_errors, false, false);
|
||||
|
||||
if (!result && triggers && *ptr)
|
||||
result= triggers->process_triggers(thd, event, TRG_ACTION_BEFORE, TRUE) ||
|
||||
|
@ -190,7 +190,8 @@ void unfix_fields(List<Item> &items);
|
||||
bool fill_record(THD * thd, TABLE *table_arg, List<Item> &fields,
|
||||
List<Item> &values, bool ignore_errors, bool update);
|
||||
bool fill_record(THD *thd, TABLE *table, Field **field, List<Item> &values,
|
||||
bool ignore_errors, bool use_value);
|
||||
bool ignore_errors, bool use_value,
|
||||
bool check_for_evaluability);
|
||||
|
||||
Field *
|
||||
find_field_in_tables(THD *thd, Item_ident *item,
|
||||
|
@ -271,7 +271,8 @@ my_bool Expression_cache_tmptable::put_value(Item *value)
|
||||
}
|
||||
|
||||
*(items.head_ref())= value;
|
||||
fill_record(table_thd, cache_table, cache_table->field, items, TRUE, TRUE);
|
||||
fill_record(table_thd, cache_table, cache_table->field, items, true, true,
|
||||
true);
|
||||
if (unlikely(table_thd->is_error()))
|
||||
goto err;;
|
||||
|
||||
|
@ -105,23 +105,41 @@ public:
|
||||
class Wsrep_load_data_split
|
||||
{
|
||||
public:
|
||||
Wsrep_load_data_split(THD *thd)
|
||||
Wsrep_load_data_split(THD *thd, TABLE *table)
|
||||
: m_thd(thd)
|
||||
, m_load_data_splitting(wsrep_load_data_splitting)
|
||||
, m_load_data_splitting(false)
|
||||
, m_fragment_unit(thd->wsrep_trx().streaming_context().fragment_unit())
|
||||
, m_fragment_size(thd->wsrep_trx().streaming_context().fragment_size())
|
||||
{
|
||||
if (WSREP(m_thd) && m_load_data_splitting)
|
||||
/*
|
||||
We support load data splitting for InnoDB only as it will use
|
||||
streaming replication (SR).
|
||||
*/
|
||||
if (WSREP(thd) && wsrep_load_data_splitting)
|
||||
{
|
||||
/* Override streaming settings with backward compatible values for
|
||||
load data splitting */
|
||||
m_thd->wsrep_cs().streaming_params(wsrep::streaming_context::row, 10000);
|
||||
handlerton *ht= table->s->db_type();
|
||||
// For partitioned tables find underlying hton
|
||||
if (table->file->partition_ht())
|
||||
ht= table->file->partition_ht();
|
||||
if (ht->db_type != DB_TYPE_INNODB)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_NOT_SUPPORTED_YET,
|
||||
"wsrep_load_data_splitting for other than InnoDB tables");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Override streaming settings with backward compatible values for
|
||||
load data splitting */
|
||||
m_thd->wsrep_cs().streaming_params(wsrep::streaming_context::row, 10000);
|
||||
m_load_data_splitting= true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
~Wsrep_load_data_split()
|
||||
{
|
||||
if (WSREP(m_thd) && m_load_data_splitting)
|
||||
if (m_load_data_splitting)
|
||||
{
|
||||
/* Restore original settings */
|
||||
m_thd->wsrep_cs().streaming_params(m_fragment_unit, m_fragment_size);
|
||||
@ -346,6 +364,7 @@ int mysql_load(THD *thd, const sql_exchange *ex, TABLE_LIST *table_list,
|
||||
bool is_concurrent;
|
||||
#endif
|
||||
const char *db= table_list->db.str; // This is never null
|
||||
|
||||
/*
|
||||
If path for file is not defined, we will use the current database.
|
||||
If this is not set, we will use the directory where the table to be
|
||||
@ -356,9 +375,6 @@ int mysql_load(THD *thd, const sql_exchange *ex, TABLE_LIST *table_list,
|
||||
bool transactional_table __attribute__((unused));
|
||||
DBUG_ENTER("mysql_load");
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
Wsrep_load_data_split wsrep_load_data_split(thd);
|
||||
#endif /* WITH_WSREP */
|
||||
/*
|
||||
Bug #34283
|
||||
mysqlbinlog leaves tmpfile after termination if binlog contains
|
||||
@ -423,6 +439,11 @@ int mysql_load(THD *thd, const sql_exchange *ex, TABLE_LIST *table_list,
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
Wsrep_load_data_split wsrep_load_data_split(thd, table_list->table);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
thd_proc_info(thd, "Executing");
|
||||
/*
|
||||
Let us emit an error if we are loading data to table which is used
|
||||
|
@ -4692,10 +4692,15 @@ mysql_execute_command(THD *thd)
|
||||
|
||||
if ((res= insert_precheck(thd, all_tables)))
|
||||
break;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd) && thd->wsrep_consistency_check == CONSISTENCY_CHECK_DECLARED)
|
||||
bool wsrep_toi= false;
|
||||
const bool wsrep= WSREP(thd);
|
||||
|
||||
if (wsrep && thd->wsrep_consistency_check == CONSISTENCY_CHECK_DECLARED)
|
||||
{
|
||||
thd->wsrep_consistency_check = CONSISTENCY_CHECK_RUNNING;
|
||||
wsrep_toi= true;
|
||||
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
@ -4730,6 +4735,27 @@ mysql_execute_command(THD *thd)
|
||||
if (!(res=open_and_lock_tables(thd, all_tables, TRUE, 0)))
|
||||
{
|
||||
MYSQL_INSERT_SELECT_START(thd->query());
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep && !first_table->view)
|
||||
{
|
||||
bool is_innodb= (first_table->table->file->ht->db_type == DB_TYPE_INNODB);
|
||||
|
||||
// For consistency check inserted table needs to be InnoDB
|
||||
if (!is_innodb && thd->wsrep_consistency_check != NO_CONSISTENCY_CHECK)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
HA_ERR_UNSUPPORTED,
|
||||
"Galera cluster does support consistency check only"
|
||||
" for InnoDB tables.");
|
||||
thd->wsrep_consistency_check= NO_CONSISTENCY_CHECK;
|
||||
}
|
||||
|
||||
// For !InnoDB we start TOI if it is not yet started and hope for the best
|
||||
if (!is_innodb && !wsrep_toi)
|
||||
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
/*
|
||||
Only the INSERT table should be merged. Other will be handled by
|
||||
select.
|
||||
|
@ -2143,6 +2143,10 @@ JOIN::optimize_inner()
|
||||
select_lex->attach_to_conds,
|
||||
&cond_value);
|
||||
sel->attach_to_conds.empty();
|
||||
Json_writer_object wrapper(thd);
|
||||
Json_writer_object pushd(thd, "condition_pushdown_from_having");
|
||||
pushd.add("conds", conds);
|
||||
pushd.add("having", having);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12846,7 +12850,8 @@ end_sj_materialize(JOIN *join, JOIN_TAB *join_tab, bool end_of_records)
|
||||
if (item->is_null())
|
||||
DBUG_RETURN(NESTED_LOOP_OK);
|
||||
}
|
||||
fill_record(thd, table, table->field, sjm->sjm_table_cols, TRUE, FALSE);
|
||||
fill_record(thd, table, table->field, sjm->sjm_table_cols, true, false,
|
||||
true);
|
||||
if (unlikely(thd->is_error()))
|
||||
DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */
|
||||
if (unlikely((error= table->file->ha_write_tmp_row(table->record[0]))))
|
||||
|
@ -28,6 +28,9 @@
|
||||
#include "sql_acl.h"
|
||||
#ifdef WITH_WSREP
|
||||
#include "wsrep_mysqld.h"
|
||||
bool wsrep_check_sequence(THD* thd,
|
||||
const sequence_definition *seq,
|
||||
const bool used_engine);
|
||||
#endif
|
||||
|
||||
struct Field_definition
|
||||
@ -942,7 +945,8 @@ bool Sql_cmd_alter_sequence::execute(THD *thd)
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd) && wsrep_thd_is_local(thd))
|
||||
{
|
||||
if (wsrep_check_sequence(thd, new_seq))
|
||||
const bool used_engine= lex->create_info.used_fields & HA_CREATE_USED_ENGINE;
|
||||
if (wsrep_check_sequence(thd, new_seq, used_engine))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (wsrep_to_isolation_begin(thd, first_table->db.str,
|
||||
|
@ -2994,7 +2994,7 @@ int select_result_explain_buffer::send_data(List<Item> &items)
|
||||
memory.
|
||||
*/
|
||||
set_current_thd(thd);
|
||||
fill_record(thd, dst_table, dst_table->field, items, TRUE, FALSE);
|
||||
fill_record(thd, dst_table, dst_table->field, items, true, false, false);
|
||||
res= dst_table->file->ha_write_tmp_row(dst_table->record[0]);
|
||||
set_current_thd(cur_thd);
|
||||
DBUG_RETURN(MY_TEST(res));
|
||||
|
106
sql/sql_table.cc
106
sql/sql_table.cc
@ -5531,18 +5531,21 @@ int mysql_create_table_no_lock(THD *thd, Table_specification_st *create_info,
|
||||
#ifdef WITH_WSREP
|
||||
/** Additional sequence checks for Galera cluster.
|
||||
|
||||
@param thd thread handle
|
||||
@param seq sequence definition
|
||||
@param thd thread handle
|
||||
@param seq sequence definition
|
||||
@param used_engine create used ENGINE=
|
||||
@retval false success
|
||||
@retval true failure
|
||||
*/
|
||||
bool wsrep_check_sequence(THD* thd, const sequence_definition *seq)
|
||||
bool wsrep_check_sequence(THD* thd,
|
||||
const sequence_definition *seq,
|
||||
const bool used_engine)
|
||||
{
|
||||
enum legacy_db_type db_type;
|
||||
|
||||
DBUG_ASSERT(WSREP(thd));
|
||||
|
||||
if (thd->lex->create_info.used_fields & HA_CREATE_USED_ENGINE)
|
||||
if (used_engine)
|
||||
{
|
||||
db_type= thd->lex->create_info.db_type->db_type;
|
||||
}
|
||||
@ -5573,6 +5576,57 @@ bool wsrep_check_sequence(THD* thd, const sequence_definition *seq)
|
||||
|
||||
return (false);
|
||||
}
|
||||
|
||||
/** Additional CREATE TABLE/SEQUENCE checks for Galera cluster.
|
||||
|
||||
@param thd thread handle
|
||||
@param wsrep_ctas CREATE TABLE AS SELECT ?
|
||||
@param used_engine CREATE TABLE ... ENGINE = ?
|
||||
@param create_info Create information
|
||||
|
||||
@retval false Galera cluster does support used clause
|
||||
@retval true Galera cluster does not support used clause
|
||||
*/
|
||||
static
|
||||
bool wsrep_check_support(THD* thd,
|
||||
const bool wsrep_ctas,
|
||||
const bool used_engine,
|
||||
const HA_CREATE_INFO* create_info)
|
||||
{
|
||||
/* CREATE TABLE ... AS SELECT */
|
||||
if (wsrep_ctas &&
|
||||
thd->variables.wsrep_trx_fragment_size > 0)
|
||||
{
|
||||
my_message(ER_NOT_ALLOWED_COMMAND,
|
||||
"CREATE TABLE AS SELECT is not supported with streaming replication",
|
||||
MYF(0));
|
||||
return true;
|
||||
}
|
||||
/* CREATE TABLE .. WITH SYSTEM VERSIONING AS SELECT
|
||||
is not supported in Galera cluster.
|
||||
*/
|
||||
if (wsrep_ctas &&
|
||||
create_info->versioned())
|
||||
{
|
||||
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
|
||||
"SYSTEM VERSIONING AS SELECT in Galera cluster");
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
CREATE TABLE ... ENGINE=SEQUENCE is not supported in
|
||||
Galera cluster.
|
||||
CREATE SEQUENCE ... ENGINE=xxx Galera cluster supports
|
||||
only InnoDB-sequences.
|
||||
*/
|
||||
if (((used_engine && create_info->db_type &&
|
||||
(create_info->db_type->db_type == DB_TYPE_SEQUENCE ||
|
||||
create_info->db_type->db_type >= DB_TYPE_FIRST_DYNAMIC)) ||
|
||||
thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE) &&
|
||||
wsrep_check_sequence(thd, create_info->seq_create_info, used_engine))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/**
|
||||
@ -5639,15 +5693,6 @@ bool mysql_create_table(THD *thd, TABLE_LIST *create_table,
|
||||
if (!(thd->variables.option_bits & OPTION_EXPLICIT_DEF_TIMESTAMP))
|
||||
promote_first_timestamp_column(&alter_info->create_list);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE &&
|
||||
WSREP(thd) && wsrep_thd_is_local_toi(thd))
|
||||
{
|
||||
if (wsrep_check_sequence(thd, create_info->seq_create_info))
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/* We can abort create table for any table type */
|
||||
thd->abort_on_warning= thd->is_strict_mode();
|
||||
|
||||
@ -10154,6 +10199,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
|
||||
TODO: this design is obsolete and will be removed.
|
||||
*/
|
||||
int table_kind= check_if_log_table(table_list, FALSE, NullS);
|
||||
const bool used_engine= create_info->used_fields & HA_CREATE_USED_ENGINE;
|
||||
|
||||
if (table_kind)
|
||||
{
|
||||
@ -10165,7 +10211,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
|
||||
}
|
||||
|
||||
/* Disable alter of log tables to unsupported engine */
|
||||
if ((create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
||||
if ((used_engine) &&
|
||||
(!create_info->db_type || /* unknown engine */
|
||||
!(create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
|
||||
{
|
||||
@ -10247,7 +10293,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
|
||||
if we can support implementing storage engine.
|
||||
*/
|
||||
if (WSREP(thd) && table && table->s->sequence &&
|
||||
wsrep_check_sequence(thd, thd->lex->create_info.seq_create_info))
|
||||
wsrep_check_sequence(thd, thd->lex->create_info.seq_create_info, used_engine))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (WSREP(thd) &&
|
||||
@ -10738,12 +10784,10 @@ do_continue:;
|
||||
#endif
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
// ALTER TABLE for sequence object, check can we support it
|
||||
if (table->s->sequence && WSREP(thd) &&
|
||||
wsrep_thd_is_local_toi(thd))
|
||||
{
|
||||
if (wsrep_check_sequence(thd, create_info->seq_create_info))
|
||||
wsrep_check_sequence(thd, create_info->seq_create_info, used_engine))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/*
|
||||
@ -12318,17 +12362,11 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
|
||||
#endif
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep_ctas)
|
||||
if (WSREP(thd) &&
|
||||
wsrep_check_support(thd, wsrep_ctas, used_engine, &create_info))
|
||||
{
|
||||
if (thd->variables.wsrep_trx_fragment_size > 0)
|
||||
{
|
||||
my_message(
|
||||
ER_NOT_ALLOWED_COMMAND,
|
||||
"CREATE TABLE AS SELECT is not supported with streaming replication",
|
||||
MYF(0));
|
||||
res= 1;
|
||||
goto end_with_restore_list;
|
||||
}
|
||||
res= 1;
|
||||
goto end_with_restore_list;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
@ -12480,6 +12518,7 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
|
||||
create_table->table_name, create_table->db))
|
||||
goto end_with_restore_list;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
/*
|
||||
In STATEMENT format, we probably have to replicate also temporary
|
||||
tables, like mysql replication does. Also check if the requested
|
||||
@ -12488,15 +12527,15 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
|
||||
if (WSREP(thd))
|
||||
{
|
||||
handlerton *orig_ht= create_info.db_type;
|
||||
|
||||
if (!check_engine(thd, create_table->db.str,
|
||||
create_table->table_name.str,
|
||||
&create_info) &&
|
||||
(!thd->is_current_stmt_binlog_format_row() ||
|
||||
!create_info.tmp_table()))
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE &&
|
||||
wsrep_check_sequence(thd, lex->create_info.seq_create_info))
|
||||
wsrep_check_sequence(thd, lex->create_info.seq_create_info, used_engine))
|
||||
DBUG_RETURN(true);
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN_ALTER(create_table->db.str,
|
||||
@ -12507,14 +12546,15 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
|
||||
WSREP_WARN("CREATE TABLE isolation failure");
|
||||
res= true;
|
||||
goto end_with_restore_list;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
}
|
||||
// check_engine will set db_type to NULL if e.g. TEMPORARY is
|
||||
// not supported by the storage engine, this case is checked
|
||||
// again in mysql_create_table
|
||||
create_info.db_type= orig_ht;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/* Regular CREATE TABLE */
|
||||
res= mysql_create_table(thd, create_table, &create_info, &alter_info);
|
||||
}
|
||||
|
@ -285,8 +285,4 @@ extern mysql_mutex_t LOCK_gdl;
|
||||
|
||||
bool check_engine(THD *, const char *, const char *, HA_CREATE_INFO *);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
bool wsrep_check_sequence(THD* thd, const class sequence_definition *seq);
|
||||
#endif
|
||||
|
||||
#endif /* SQL_TABLE_INCLUDED */
|
||||
|
@ -116,12 +116,12 @@ int select_unit::send_data(List<Item> &values)
|
||||
if (table->no_rows_with_nulls)
|
||||
table->null_catch_flags= CHECK_ROW_FOR_NULLS_TO_REJECT;
|
||||
|
||||
fill_record(thd, table, table->field + addon_cnt, values, true, false);
|
||||
fill_record(thd, table, table->field + addon_cnt, values, true, false, true);
|
||||
/* set up initial values for records to be written */
|
||||
if (addon_cnt && step == UNION_TYPE)
|
||||
{
|
||||
DBUG_ASSERT(addon_cnt == 1);
|
||||
table->field[0]->store((longlong) curr_step, 1);
|
||||
table->field[0]->store((ulonglong) curr_step, 1);
|
||||
}
|
||||
|
||||
if (unlikely(thd->is_error()))
|
||||
@ -619,7 +619,7 @@ int select_unit_ext::send_data(List<Item> &values)
|
||||
if (table->no_rows_with_nulls)
|
||||
table->null_catch_flags= CHECK_ROW_FOR_NULLS_TO_REJECT;
|
||||
|
||||
fill_record(thd, table, table->field + addon_cnt, values, true, false);
|
||||
fill_record(thd, table, table->field + addon_cnt, values, true, false, true);
|
||||
/* set up initial values for records to be written */
|
||||
if ( step == UNION_TYPE )
|
||||
{
|
||||
@ -1003,7 +1003,7 @@ int select_union_direct::send_data(List<Item> &items)
|
||||
}
|
||||
|
||||
send_records++;
|
||||
fill_record(thd, table, table->field, items, true, false);
|
||||
fill_record(thd, table, table->field, items, true, false, true);
|
||||
if (unlikely(thd->is_error()))
|
||||
return true; /* purecov: inspected */
|
||||
|
||||
|
@ -2161,6 +2161,10 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
||||
{
|
||||
Item *value= value_it++;
|
||||
uint offset= item->field->table->pos_in_table_list->shared;
|
||||
|
||||
if (value->associate_with_target_field(thd, item))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
fields_for_table[offset]->push_back(item, thd->mem_root);
|
||||
values_for_table[offset]->push_back(value, thd->mem_root);
|
||||
}
|
||||
@ -2658,7 +2662,7 @@ int multi_update::send_data(List<Item> ¬_used_values)
|
||||
tmp_table_param[offset].func_count);
|
||||
fill_record(thd, tmp_table,
|
||||
tmp_table->field + 1 + unupdated_check_opt_tables.elements,
|
||||
*values_for_table[offset], TRUE, FALSE);
|
||||
*values_for_table[offset], true, false, false);
|
||||
|
||||
/* Write row, ignoring duplicated updates to a row */
|
||||
error= tmp_table->file->ha_write_tmp_row(tmp_table->record[0]);
|
||||
|
@ -771,7 +771,15 @@ static bool pack_vcols(THD *thd, String *buf, List<Create_field> &create_fields,
|
||||
? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL))
|
||||
return 1;
|
||||
if (field->has_default_expression() && !field->has_default_now_unireg_check())
|
||||
if (pack_expression(buf, field->default_value, field_nr, VCOL_DEFAULT))
|
||||
if (pack_expression(buf, field->default_value, field_nr, VCOL_DEFAULT) ||
|
||||
/*
|
||||
field->has_default_expression() can return error (e.g. because
|
||||
the method Item_param::basic_const_item invokes
|
||||
invalid_default_param()
|
||||
in case either DEFAULT_VALUE or IGNORE_VALUE is handled).
|
||||
Take this fact into account and return error in this case.
|
||||
*/
|
||||
thd->is_error())
|
||||
return 1;
|
||||
if (field->check_constraint)
|
||||
if (pack_expression(buf, field->check_constraint, field_nr,
|
||||
|
@ -14865,16 +14865,6 @@ ha_innobase::check(
|
||||
table->s->table_name.str);
|
||||
|
||||
DBUG_RETURN(HA_ADMIN_CORRUPT);
|
||||
|
||||
} else if (!m_prebuilt->table->is_readable() &&
|
||||
!m_prebuilt->table->space) {
|
||||
|
||||
ib_senderrf(
|
||||
thd, IB_LOG_LEVEL_ERROR,
|
||||
ER_TABLESPACE_MISSING,
|
||||
table->s->table_name.str);
|
||||
|
||||
DBUG_RETURN(HA_ADMIN_CORRUPT);
|
||||
}
|
||||
|
||||
m_prebuilt->trx->op_info = "checking table";
|
||||
|
@ -4393,6 +4393,23 @@ row_import_for_mysql(
|
||||
|
||||
ibuf_delete_for_discarded_space(table->space_id);
|
||||
|
||||
#ifdef BTR_CUR_HASH_ADAPT
|
||||
/* On DISCARD TABLESPACE, we did not drop any adaptive hash
|
||||
index entries. If we replaced the discarded tablespace with a
|
||||
smaller one here, there could still be some adaptive hash
|
||||
index entries that point to cached garbage pages in the buffer
|
||||
pool, because PageConverter::operator() only evicted those
|
||||
pages that were replaced by the imported pages. We must
|
||||
detach any remaining adaptive hash index entries, because the
|
||||
adaptive hash index must be a subset of the table contents;
|
||||
false positives are not tolerated. */
|
||||
for (dict_index_t* index = UT_LIST_GET_FIRST(table->indexes); index;
|
||||
index = UT_LIST_GET_NEXT(indexes, index)) {
|
||||
index = index->clone_if_needed();
|
||||
}
|
||||
#endif /* BTR_CUR_HASH_ADAPT */
|
||||
UT_LIST_GET_FIRST(table->indexes)->clear_instant_alter();
|
||||
|
||||
trx_start_if_not_started(prebuilt->trx, true);
|
||||
|
||||
trx = trx_create();
|
||||
@ -4547,21 +4564,6 @@ row_import_for_mysql(
|
||||
|
||||
DBUG_EXECUTE_IF("ib_import_reset_space_and_lsn_failure",
|
||||
err = DB_TOO_MANY_CONCURRENT_TRXS;);
|
||||
#ifdef BTR_CUR_HASH_ADAPT
|
||||
/* On DISCARD TABLESPACE, we did not drop any adaptive hash
|
||||
index entries. If we replaced the discarded tablespace with a
|
||||
smaller one here, there could still be some adaptive hash
|
||||
index entries that point to cached garbage pages in the buffer
|
||||
pool, because PageConverter::operator() only evicted those
|
||||
pages that were replaced by the imported pages. We must
|
||||
detach any remaining adaptive hash index entries, because the
|
||||
adaptive hash index must be a subset of the table contents;
|
||||
false positives are not tolerated. */
|
||||
for (dict_index_t* index = UT_LIST_GET_FIRST(table->indexes); index;
|
||||
index = UT_LIST_GET_NEXT(indexes, index)) {
|
||||
index = index->clone_if_needed();
|
||||
}
|
||||
#endif /* BTR_CUR_HASH_ADAPT */
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
char table_name[MAX_FULL_NAME_LEN + 1];
|
||||
|
@ -3040,7 +3040,6 @@ row_discard_tablespace(
|
||||
dict_table_change_id_in_cache(table, new_id);
|
||||
|
||||
dict_index_t* index = UT_LIST_GET_FIRST(table->indexes);
|
||||
if (index) index->clear_instant_alter();
|
||||
|
||||
/* Reset the root page numbers. */
|
||||
for (; index; index = UT_LIST_GET_NEXT(indexes, index)) {
|
||||
|
@ -4395,13 +4395,11 @@ early_not_found:
|
||||
DBUG_RETURN(DB_RECORD_NOT_FOUND);
|
||||
}
|
||||
|
||||
#if SIZEOF_SIZE_T < 8
|
||||
if (UNIV_LIKELY(~prebuilt->n_rows_fetched))
|
||||
#endif
|
||||
prebuilt->n_rows_fetched++;
|
||||
|
||||
if (prebuilt->n_rows_fetched > 1000000000) {
|
||||
/* Prevent wrap-over */
|
||||
prebuilt->n_rows_fetched = 500000000;
|
||||
}
|
||||
|
||||
mode = pcur->search_mode;
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,6 @@ CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i)) ENGINE = ROCKSDB PARTITIO
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
|
@ -13,7 +13,6 @@ t 1 x 1 x A 5 NULL NULL YES BTREE
|
||||
t 1 y 1 y A 5 NULL NULL YES BTREE
|
||||
alter table t analyze partition p0;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t analyze status Engine-independent statistics collected
|
||||
test.t analyze status OK
|
||||
show indexes from t;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
@ -22,7 +21,6 @@ t 1 x 1 x A 5 NULL NULL YES BTREE
|
||||
t 1 y 1 y A 5 NULL NULL YES BTREE
|
||||
alter table t analyze partition p1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t analyze status Engine-independent statistics collected
|
||||
test.t analyze status OK
|
||||
show indexes from t;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
@ -37,7 +35,6 @@ t 1 x 1 x A 9 NULL NULL YES BTREE
|
||||
t 1 y 1 y A 9 NULL NULL YES BTREE
|
||||
alter table t analyze partition p0;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t analyze status Engine-independent statistics collected
|
||||
test.t analyze status OK
|
||||
show indexes from t;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
@ -46,7 +43,6 @@ t 1 x 1 x A 9 NULL NULL YES BTREE
|
||||
t 1 y 1 y A 9 NULL NULL YES BTREE
|
||||
alter table t analyze partition p1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t analyze status Engine-independent statistics collected
|
||||
test.t analyze status OK
|
||||
show indexes from t;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
|
@ -1020,7 +1020,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
MySQL_Test_DB.t1 analyze status Engine-independent statistics collected
|
||||
MySQL_Test_DB.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -949,7 +949,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
MySQL_Test_DB.t1 analyze status Engine-independent statistics collected
|
||||
MySQL_Test_DB.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
@ -987,7 +987,6 @@ a b
|
||||
2001 Second in MAX
|
||||
ALTER TABLE t1 ANALYZE PARTITION MAX;
|
||||
Table Op Msg_type Msg_text
|
||||
mysql_test_db.t1 analyze status Engine-independent statistics collected
|
||||
mysql_test_db.t1 analyze status OK
|
||||
# Truncate without FLUSH
|
||||
ALTER TABLE t1 TRUNCATE PARTITION MAX;
|
||||
|
Loading…
x
Reference in New Issue
Block a user