mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
fcd99c156b
Problematic query: insert ignore into `t1_federated` (`c1`) select `c1` from `t1_local` a where not exists (select 1 from `t1_federated` b where a.c1 = b.c1); When this query is killed in another connection it could lead to crash. The problem is follwing: An attempt to obtain table statistics for subselect table in killed query fails with an error. So JOIN::optimize() for subquery is failed but it does not prevent further subquery evaluation. At the first subquery execution JOIN::optimize() is called (see subselect_single_select_engine::exec()) and fails with an error. 'executed' flag is set to TRUE and it prevents further subquery evaluation. At the second call JOIN::optimize() does not happen as 'JOIN::optimized' is TRUE and in case of uncacheable subquery the 'executed' flag is set to FALSE before subquery evaluation. So we loose 'optimize stage' error indication (see subselect_single_select_engine::exec()). In other words 'executed' flag is used for two purposes, for error indication at JOIN::optimize() stage and for an indication of subquery execution. And it seems it's wrong as the flag could be reset.
100 lines
3.2 KiB
Text
100 lines
3.2 KiB
Text
DROP TABLE IF EXISTS t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE t1 (
|
|
a varchar(32) character set utf8 collate utf8_bin NOT NULL,
|
|
b varchar(32) character set utf8 collate utf8_bin NOT NULL )
|
|
ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
|
INSERT INTO t1 VALUES
|
|
('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '),
|
|
('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'),
|
|
('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'),
|
|
('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'),
|
|
('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'),
|
|
('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK');
|
|
set tmp_table_size=1024;
|
|
set session debug="d,raise_error";
|
|
SELECT MAX(a) FROM t1 GROUP BY a,b;
|
|
ERROR 23000: Can't write; duplicate key in table 'tmp_table'
|
|
set tmp_table_size=default;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug #50946: fast index creation still seems to copy the table
|
|
#
|
|
CREATE TABLE t1 (a INT(100) NOT NULL);
|
|
INSERT INTO t1 VALUES (1), (0), (2);
|
|
SET SESSION debug='+d,alter_table_only_index_change';
|
|
ALTER TABLE t1 ADD INDEX a(a);
|
|
SET SESSION debug=DEFAULT;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(100) NOT NULL,
|
|
KEY `a` (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SELECT * FROM t1;
|
|
a
|
|
0
|
|
1
|
|
2
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#42064: low memory crash when importing hex strings, in Item_hex_string::Item_hex_string
|
|
#
|
|
CREATE TABLE t1(a BLOB);
|
|
SET SESSION debug="+d,bug42064_simulate_oom";
|
|
INSERT INTO t1 VALUES("");
|
|
Got one of the listed errors
|
|
SET SESSION debug=DEFAULT;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#41660: Sort-index_merge for non-first join table may require
|
|
# O(#scans) memory
|
|
#
|
|
CREATE TABLE t1 (a INT);
|
|
INSERT INTO t1 VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
|
|
CREATE TABLE t2 (a INT, b INT, filler CHAR(100), KEY(a), KEY(b));
|
|
INSERT INTO t2 SELECT 1000, 1000, 'filler' FROM t1 A, t1 B, t1 C;
|
|
INSERT INTO t2 VALUES (1, 1, 'data');
|
|
# the example query uses LEFT JOIN only for the sake of being able to
|
|
# demonstrate the issue with a very small dataset. (left outer join
|
|
# disables the use of join buffering, so we get the second table
|
|
# re-scanned for every record in the outer table. if we used inner join,
|
|
# we would need to have thousands of records and/or more columns in both
|
|
# tables so that the join buffer is filled and re-scans are triggered).
|
|
SET SESSION debug = '+d,only_one_Unique_may_be_created';
|
|
EXPLAIN
|
|
SELECT * FROM t1 LEFT JOIN t2 ON ( t2.a < 10 OR t2.b < 10 );
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
x x x x x x x x x
|
|
x x x x x x x x x Using sort_union(a,b); Using where
|
|
SELECT * FROM t1 LEFT JOIN t2 ON ( t2.a < 10 OR t2.b < 10 );
|
|
a a b filler
|
|
0 1 1 data
|
|
1 1 1 data
|
|
2 1 1 data
|
|
3 1 1 data
|
|
4 1 1 data
|
|
5 1 1 data
|
|
6 1 1 data
|
|
7 1 1 data
|
|
8 1 1 data
|
|
9 1 1 data
|
|
SET SESSION debug = DEFAULT;
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# Bug#11747970 34660: CRASH WHEN FEDERATED TABLE LOSES CONNECTION DURING INSERT ... SELECT
|
|
#
|
|
CREATE TABLE t1(f1 INT, KEY(f1));
|
|
CREATE TABLE t2(f1 INT);
|
|
INSERT INTO t1 VALUES (1),(2);
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
SET SESSION debug='d,bug11747970_simulate_error';
|
|
INSERT IGNORE INTO t2 SELECT f1 FROM t1 a WHERE NOT EXISTS (SELECT 1 FROM t2 b WHERE a.f1 = b.f1);
|
|
Warnings:
|
|
Error 1105 Unknown error
|
|
SET SESSION debug = DEFAULT;
|
|
DROP TABLE t1,t2;
|
|
#
|
|
# End of 5.1 tests
|
|
#
|