Merge 10.3 into 10.4

In is_eits_usable(), we disable an assertion that fails due to
MDEV-19334.
This commit is contained in:
Marko Mäkelä 2019-04-25 16:05:20 +03:00
commit e6bdf77e4b
88 changed files with 1762 additions and 342 deletions

View File

@ -1,5 +1,5 @@
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2008, 2018, MariaDB Corporation
# Copyright (c) 2008, 2019, MariaDB Corporation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@ -1984,10 +1984,8 @@ static bool innodb_init()
}
if (err != DB_SUCCESS) {
msg("mariabackup: innodb_init() returned %d (%s).",
die("mariabackup: innodb_init() returned %d (%s).",
err, ut_strerr(err));
innodb_shutdown();
return(TRUE);
}
return(FALSE);

View File

@ -1,6 +1,6 @@
'\" t
.\"
.TH "\FBMYSQL_INSTALL_DB\" "1" "28 March 2019" "MariaDB 10\&.4" "MariaDB Database System"
.TH "\FBMYSQL_INSTALL_DB\FR" "1" "4 April 2019" "MariaDB 10\&.4" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
@ -198,6 +198,21 @@ Must be given as first option\&.
.sp -1
.IP \(bu 2.3
.\}
.\" mysql_install_db: defaults-group-suffix option
.\" defaults-group-suffix option: mysql_install_db
\fB\-\-defaults\-group\-suffix=\fR\fB\fIname\fR\fR
.sp
In addition to the given groups, also read groups with this suffix\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
.\" mysql_install_db: force option
.\" force option: mysql_install_db
\fB\-\-force\fR
@ -354,7 +369,7 @@ For internal use\&. This option is used for creating Windows distributions\&.
.SH "COPYRIGHT"
.br
.PP
Copyright 2007-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc., 2010-2015 MariaDB Foundation
Copyright 2007-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc., 2010-2019 MariaDB Foundation
.PP
This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.
.PP

View File

@ -11300,5 +11300,73 @@ t1 CREATE TABLE `t1` (
DROP TABLE t1;
SET sql_mode=DEFAULT;
#
# MDEV-19239 ERROR 1300 (HY000): Invalid utf8 character string in 10.3.13-MariaDB
#
SET NAMES utf8;
SELECT
x.消息ID,
x.消息TITLE,
x.消息类型,
x.发送时间,
x.阅读时间,x.老师ID,
IF(x.四天内最近一次登录时间='2100-01-01 00:00:00','',x.四天内最近一次登录时间) 四天内最近一次登录时间
FROM (
SELECT
msg.*,
CASE
WHEN login.login_time BETWEEN msg.发送时间 AND DATE_ADD(msg.发送时间,INTERVAL 4 DAY)
THEN login.login_time
WHEN (login.login_time NOT BETWEEN msg.发送时间 AND DATE_ADD(msg.发送时间,INTERVAL 4 DAY)) AND login.login_time>0
THEN '2100-01-01 00:00:00' ELSE ''
END 四天内最近一次登录时间
FROM (
SELECT
me.id 消息ID,
me.title 消息TITLE,
CASE
WHEN me.type=1
THEN 'Interview Message'
WHEN me.type=2
THEN 'Orientation Message'
WHEN me.type=3
THEN 'Warning Message'
WHEN me.type=4
THEN 'Fail Message'
WHEN me.type=5
THEN 'FM Message'
WHEN me.type=6
THEN 'Training Message'
WHEN me.type=7
THEN 'TUrgent Message'
END 消息类型,
FROM_UNIXTIME(me.sending_time) 发送时间,
IF(tar.is_read=1,FROM_UNIXTIME(tar.read_time),'') 阅读时间,
tar.tid 老师ID
FROM ebk_message me
LEFT JOIN ebk_message_target tar
ON me.id=tar.msg_id
WHERE
FROM_UNIXTIME(me.sending_time,'%Y-%m-%d') BETWEEN 'start' AND 'end' AND me.status=1 AND tar.tid>0
GROUP BY
tar.tid,
me.sending_time,me.id) msg
LEFT JOIN (
SELECT tid,FROM_UNIXTIME(login_time) login_time
FROM ebk_teacher_login_log
WHERE FROM_UNIXTIME(login_time,'%Y-%m-%d') BETWEEN 'start' AND DATE_ADD('end',INTERVAL 4 DAY)
ORDER BY tid,FROM_UNIXTIME(login_time)) login
ON
msg.老师ID=login.tid
ORDER BY msg.消息ID,msg.发送时间,msg.老师ID,login_time) x
GROUP BY x.消息ID,x.发送时间,x.老师ID;
ERROR 42S02: Table 'test.ebk_message' doesn't exist
SET NAMES utf8;
CREATE TABLE t1 (x INT);
INSERT INTO t1 VALUES (1);
SELECT x AS 5天内最近一次登录时间 FROM t1;
5天内最近一次登录时间
1
DROP TABLE t1;
#
# End of 10.3 tests
#

View File

@ -2180,6 +2180,81 @@ DROP TABLE t1;
SET sql_mode=DEFAULT;
--echo #
--echo # MDEV-19239 ERROR 1300 (HY000): Invalid utf8 character string in 10.3.13-MariaDB
--echo #
#
# Test that the following query does not fail on "Invalid utf8 character string"
#
SET NAMES utf8;
--error ER_NO_SUCH_TABLE
SELECT
x.消息ID,
x.消息TITLE,
x.消息类型,
x.发送时间,
x.阅读时间,x.老师ID,
IF(x.四天内最近一次登录时间='2100-01-01 00:00:00','',x.四天内最近一次登录时间) 四天内最近一次登录时间
FROM (
SELECT
msg.*,
CASE
WHEN login.login_time BETWEEN msg.发送时间 AND DATE_ADD(msg.发送时间,INTERVAL 4 DAY)
THEN login.login_time
WHEN (login.login_time NOT BETWEEN msg.发送时间 AND DATE_ADD(msg.发送时间,INTERVAL 4 DAY)) AND login.login_time>0
THEN '2100-01-01 00:00:00' ELSE ''
END 四天内最近一次登录时间
FROM (
SELECT
me.id 消息ID,
me.title 消息TITLE,
CASE
WHEN me.type=1
THEN 'Interview Message'
WHEN me.type=2
THEN 'Orientation Message'
WHEN me.type=3
THEN 'Warning Message'
WHEN me.type=4
THEN 'Fail Message'
WHEN me.type=5
THEN 'FM Message'
WHEN me.type=6
THEN 'Training Message'
WHEN me.type=7
THEN 'TUrgent Message'
END 消息类型,
FROM_UNIXTIME(me.sending_time) 发送时间,
IF(tar.is_read=1,FROM_UNIXTIME(tar.read_time),'') 阅读时间,
tar.tid 老师ID
FROM ebk_message me
LEFT JOIN ebk_message_target tar
ON me.id=tar.msg_id
WHERE
FROM_UNIXTIME(me.sending_time,'%Y-%m-%d') BETWEEN 'start' AND 'end' AND me.status=1 AND tar.tid>0
GROUP BY
tar.tid,
me.sending_time,me.id) msg
LEFT JOIN (
SELECT tid,FROM_UNIXTIME(login_time) login_time
FROM ebk_teacher_login_log
WHERE FROM_UNIXTIME(login_time,'%Y-%m-%d') BETWEEN 'start' AND DATE_ADD('end',INTERVAL 4 DAY)
ORDER BY tid,FROM_UNIXTIME(login_time)) login
ON
msg.老师ID=login.tid
ORDER BY msg.消息ID,msg.发送时间,msg.老师ID,login_time) x
GROUP BY x.消息ID,x.发送时间,x.老师ID;
SET NAMES utf8;
CREATE TABLE t1 (x INT);
INSERT INTO t1 VALUES (1);
SELECT x AS 5天内最近一次登录时间 FROM t1;
DROP TABLE t1;
--echo #
--echo # End of 10.3 tests
--echo #

View File

@ -3771,12 +3771,123 @@ t2 CREATE TABLE `t2` (
DROP TABLE t1, t2;
SET sql_mode=DEFAULT;
#
# MDEV-17325 NULL-ability problems with LEAST() in combination with NO_ZERO_DATE and NO_ZERO_IN_DATE
#
SET sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE';
SELECT
LEAST('0000-00-00',DATE'2001-01-01') AS s1,
LEAST('0001-00-01',DATE'2001-01-01') AS s2,
LEAST('0000-00-00',TIMESTAMP'2001-01-01 00:00:00') AS s3,
LEAST('0001-00-01',TIMESTAMP'2001-01-01 00:00:00') AS s4,
LEAST(0,DATE'2001-01-01') AS i1,
LEAST(20010001,DATE'2001-01-01') AS i2,
LEAST(0,TIMESTAMP'2001-01-01 00:00:00') AS i3,
LEAST(20010001,TIMESTAMP'2001-01-01 00:00:00') AS i4;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def s1 10 10 0 Y 128 0 63
def s2 10 10 0 Y 128 0 63
def s3 12 26 0 Y 128 0 63
def s4 12 26 0 Y 128 0 63
def i1 10 10 0 Y 128 0 63
def i2 10 10 0 Y 128 0 63
def i3 12 19 0 Y 128 0 63
def i4 12 19 0 Y 128 0 63
s1 s2 s3 s4 i1 i2 i3 i4
NULL NULL NULL NULL NULL NULL NULL NULL
Warnings:
Warning 1292 Incorrect datetime value: '0000-00-00'
Warning 1292 Incorrect datetime value: '0001-00-01'
Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00'
Warning 1292 Incorrect datetime value: '0001-00-01 00:00:00'
Warning 1292 Incorrect datetime value: '0000-00-00'
Warning 1292 Incorrect datetime value: '2001-00-01'
Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00'
Warning 1292 Incorrect datetime value: '2001-00-01 00:00:00'
SET sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE';
CREATE TABLE t1 AS SELECT
LEAST('0000-00-00',DATE'2001-01-01') AS s1,
LEAST('0001-00-01',DATE'2001-01-01') AS s2,
LEAST('0000-00-00',TIMESTAMP'2001-01-01 00:00:00') AS s3,
LEAST('0001-00-01',TIMESTAMP'2001-01-01 00:00:00') AS s4,
LEAST(0,DATE'2001-01-01') AS i1,
LEAST(20010001,DATE'2001-01-01') AS i2,
LEAST(0,TIMESTAMP'2001-01-01 00:00:00') AS i3,
LEAST(20010001,TIMESTAMP'2001-01-01 00:00:00') AS i4;
Warnings:
Warning 1292 Incorrect datetime value: '0000-00-00'
Warning 1292 Incorrect datetime value: '0001-00-01'
Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00'
Warning 1292 Incorrect datetime value: '0001-00-01 00:00:00'
Warning 1292 Incorrect datetime value: '0000-00-00'
Warning 1292 Incorrect datetime value: '2001-00-01'
Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00'
Warning 1292 Incorrect datetime value: '2001-00-01 00:00:00'
SELECT * FROM t1;
s1 s2 s3 s4 i1 i2 i3 i4
NULL NULL NULL NULL NULL NULL NULL NULL
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`s1` date DEFAULT NULL,
`s2` date DEFAULT NULL,
`s3` datetime DEFAULT NULL,
`s4` datetime DEFAULT NULL,
`i1` date DEFAULT NULL,
`i2` date DEFAULT NULL,
`i3` datetime DEFAULT NULL,
`i4` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TABLE t1 AS SELECT LEAST(CURRENT_DATE,CURRENT_TIME) AS c1;
SELECT * FROM t1;
c1
2001-01-01 00:00:00
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
SET old_mode=ZERO_DATE_TIME_CAST;
CREATE TABLE t1 AS SELECT LEAST(CURRENT_DATE,CURRENT_TIME) AS c1;
Warnings:
Warning 1292 Incorrect datetime value: '0000-00-00 10:20:30'
SELECT * FROM t1;
c1
NULL
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
SET old_mode=DEFAULT;
SET timestamp=DEFAULT;
SET sql_mode=DEFAULT;
SET sql_mode='';
SELECT LEAST(999,TIME'10:20:30') AS c1;
c1
NULL
Warnings:
Warning 1292 Incorrect time value: '999'
CREATE TABLE t1 AS SELECT LEAST(999,TIME'10:20:30') AS c1;
Warnings:
Warning 1292 Incorrect time value: '999'
SELECT * FROM t1;
c1
NULL
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` time DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
SET sql_mode=DEFAULT;
#
# End of 10.3 tests
#
#
# Start of 10.4 tests
#
#
# MDEV-17325 NULL-ability problems with LEAST() in combination with NO_ZERO_DATE and NO_ZERO_IN_DATE
#
SET sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE';

View File

@ -628,11 +628,70 @@ SET sql_mode=DEFAULT;
--echo #
--echo # End of 10.3 tests
--echo # MDEV-17325 NULL-ability problems with LEAST() in combination with NO_ZERO_DATE and NO_ZERO_IN_DATE
--echo #
SET sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE';
--disable_ps_protocol
--enable_metadata
SELECT
LEAST('0000-00-00',DATE'2001-01-01') AS s1,
LEAST('0001-00-01',DATE'2001-01-01') AS s2,
LEAST('0000-00-00',TIMESTAMP'2001-01-01 00:00:00') AS s3,
LEAST('0001-00-01',TIMESTAMP'2001-01-01 00:00:00') AS s4,
LEAST(0,DATE'2001-01-01') AS i1,
LEAST(20010001,DATE'2001-01-01') AS i2,
LEAST(0,TIMESTAMP'2001-01-01 00:00:00') AS i3,
LEAST(20010001,TIMESTAMP'2001-01-01 00:00:00') AS i4;
--disable_metadata
--enable_ps_protocol
SET sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE';
CREATE TABLE t1 AS SELECT
LEAST('0000-00-00',DATE'2001-01-01') AS s1,
LEAST('0001-00-01',DATE'2001-01-01') AS s2,
LEAST('0000-00-00',TIMESTAMP'2001-01-01 00:00:00') AS s3,
LEAST('0001-00-01',TIMESTAMP'2001-01-01 00:00:00') AS s4,
LEAST(0,DATE'2001-01-01') AS i1,
LEAST(20010001,DATE'2001-01-01') AS i2,
LEAST(0,TIMESTAMP'2001-01-01 00:00:00') AS i3,
LEAST(20010001,TIMESTAMP'2001-01-01 00:00:00') AS i4;
SELECT * FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
# A TIME always converts to a non-NULL DATETIME with the new CAST style
# Expect a NOT NULL column
CREATE TABLE t1 AS SELECT LEAST(CURRENT_DATE,CURRENT_TIME) AS c1;
SELECT * FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
# A TIME can convert to a NULL DATETIME with old CAST style
# Expect a NULL-able column
SET old_mode=ZERO_DATE_TIME_CAST;
CREATE TABLE t1 AS SELECT LEAST(CURRENT_DATE,CURRENT_TIME) AS c1;
SELECT * FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET old_mode=DEFAULT;
SET timestamp=DEFAULT;
SET sql_mode=DEFAULT;
SET sql_mode='';
SELECT LEAST(999,TIME'10:20:30') AS c1;
CREATE TABLE t1 AS SELECT LEAST(999,TIME'10:20:30') AS c1;
SELECT * FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET sql_mode=DEFAULT;
--echo #
--echo # Start of 10.4 tests
--echo # End of 10.3 tests
--echo #
--echo #

View File

@ -504,6 +504,10 @@ GEOMETRYFROMTEXT('POINT(4599 60359)'),
) as relate_res;
relate_res
0
prepare s from 'do st_convexhull(st_aswkb(multipoint(point(-11702,15179),point(-5031,27960),point(-30557,11158),point(-27804,30314))))';
execute s;
execute s;
deallocate prepare s;
with cte1 as( select (st_symdifference(point(1,1),point(1,1))) as a1 ), cte2 as(select 1 as a2) select 1 from cte1 where cte1.a1 < '1';
1
1

View File

@ -382,6 +382,12 @@ SELECT ST_RELATE(
'F*FFFF**F'
) as relate_res;
# MDEV-18920 Prepared statements with st_convexhull hang and eat 100% cpu.
prepare s from 'do st_convexhull(st_aswkb(multipoint(point(-11702,15179),point(-5031,27960),point(-30557,11158),point(-27804,30314))))';
execute s;
execute s;
deallocate prepare s;
# MDEV- 16050 cte + geometry functions lead to crash.
with cte1 as( select (st_symdifference(point(1,1),point(1,1))) as a1 ), cte2 as(select 1 as a2) select 1 from cte1 where cte1.a1 < '1';

View File

@ -690,6 +690,8 @@ show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 10 NULL NULL YES BTREE
set myisam_stats_method=nulls_equal;
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
show variables like 'myisam_stats_method';
Variable_name Value
myisam_stats_method NULLS_EQUAL
@ -709,7 +711,8 @@ Table Op Msg_type Msg_text
test.t1 check status OK
show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 10 NULL NULL YES BTREE
t1 1 a 1 a A 5 NULL NULL YES BTREE
set @@use_stat_tables = @save_use_stat_tables;
set myisam_stats_method=DEFAULT;
show variables like 'myisam_stats_method';
Variable_name Value
@ -736,6 +739,8 @@ set myisam_stats_method=nulls_ignored;
show variables like 'myisam_stats_method';
Variable_name Value
myisam_stats_method NULLS_IGNORED
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
create table t1 (
a char(3), b char(4), c char(5), d char(6),
key(a,b,c,d)
@ -767,6 +772,7 @@ t1 1 a 3 c A 0 NULL NULL YES BTREE
t1 1 a 4 d A 0 NULL NULL YES BTREE
set myisam_stats_method=DEFAULT;
drop table t1;
set @@use_stat_tables = @save_use_stat_tables;
create table t1(
cip INT NOT NULL,
time TIME NOT NULL,

View File

@ -641,6 +641,9 @@ show index from t1;
# Set nulls to be equal:
set myisam_stats_method=nulls_equal;
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
show variables like 'myisam_stats_method';
insert into t1 values (11);
delete from t1 where a=11;
@ -655,6 +658,7 @@ check table t1;
show index from t1;
# Set nulls back to be equal
set @@use_stat_tables = @save_use_stat_tables;
set myisam_stats_method=DEFAULT;
show variables like 'myisam_stats_method';
insert into t1 values (11);
@ -675,6 +679,9 @@ drop table t1;
set myisam_stats_method=nulls_ignored;
show variables like 'myisam_stats_method';
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
create table t1 (
a char(3), b char(4), c char(5), d char(6),
key(a,b,c,d)
@ -691,6 +698,7 @@ show index from t1;
set myisam_stats_method=DEFAULT;
drop table t1;
set @@use_stat_tables = @save_use_stat_tables;
# BUG#13814 - key value packed incorrectly for TINYBLOBs

View File

@ -19,6 +19,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 2
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a < 10;
@ -37,6 +38,7 @@ Handler_read_key 2
Handler_read_rnd_next 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 2
Handler_read_rnd_next 4
Handler_update 3
@ -150,6 +152,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1, t2 WHERE t1.a = 1;
@ -169,6 +172,7 @@ Handler_read_key 4
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 8
Handler_update 1
@ -198,6 +202,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 t11, (SELECT * FROM t2) t12 WHERE t11.a = 1;
@ -217,6 +222,7 @@ Handler_read_key 4
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 12
Handler_update 1
@ -244,6 +250,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 1
FLUSH STATUS;
FLUSH TABLES;
@ -265,6 +272,7 @@ Handler_read_key 5
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 5
Handler_update 3
@ -294,6 +302,7 @@ Warnings:
Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a IN (SELECT b FROM t2 WHERE t1.a < 3);
@ -314,6 +323,7 @@ Handler_read_key 4
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 7
Handler_update 2
@ -345,6 +355,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 100.00 Using where
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1, t2 WHERE a IN (SELECT b FROM t2 WHERE t2.b < 3);
@ -366,7 +377,7 @@ Handler_read_key 7
Handler_read_rnd_next 12
# Status of testing query execution:
Variable_name Value
Handler_read_key 3
Handler_read_key 7
Handler_read_rnd_next 16
Handler_update 2
@ -396,6 +407,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 t11, (SELECT * FROM t2) t12;
@ -415,6 +427,7 @@ Handler_read_key 4
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd 3
Handler_read_rnd_deleted 1
Handler_read_rnd_next 24
@ -446,6 +459,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 2
Handler_read_rnd_next 1
FLUSH STATUS;
FLUSH TABLES;
@ -468,6 +482,7 @@ Handler_read_key 2
Handler_read_rnd_next 5
# Status of testing query execution:
Variable_name Value
Handler_read_key 2
Handler_read_rnd 3
Handler_read_rnd_next 9
Handler_update 3
@ -498,6 +513,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 t11, (SELECT * FROM t2) t12 WHERE t11.a > 1;
@ -517,6 +533,7 @@ Handler_read_key 4
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 16
Handler_update 2
@ -980,6 +997,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a IN (SELECT a FROM t2);
@ -1000,6 +1018,7 @@ Handler_read_key 7
Handler_read_rnd_next 8
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd_next 10
Handler_update 3
@ -1117,6 +1136,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 3
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1;
@ -1135,6 +1155,7 @@ Handler_read_key 3
Handler_read_rnd_next 6
# Status of testing query execution:
Variable_name Value
Handler_read_key 3
Handler_read_rnd_next 6
Handler_update 5
@ -1898,6 +1919,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 range PRIMARY PRIMARY 4 NULL 5 100.00 Using where; Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE i > 10 AND i <= 18 ORDER BY i LIMIT 5;
@ -1916,7 +1938,7 @@ Handler_read_key 5
Handler_read_next 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 5
Handler_read_next 4
Handler_read_rnd 5
Handler_update 5
@ -1945,6 +1967,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 26 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE i > 10 AND i <= 18 ORDER BY i LIMIT 5;
@ -1966,6 +1989,7 @@ Sort_rows 5
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 4
Handler_read_rnd 5
Handler_read_rnd_next 27
Handler_update 5
@ -1997,6 +2021,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 26 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 8
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5;
@ -2018,6 +2043,7 @@ Sort_rows 1
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 8
Handler_read_rnd 1
Handler_read_rnd_next 27
Handler_update 1
@ -2050,6 +2076,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 index NULL a 15 NULL 5 100.00 Using where; Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 8
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5;
@ -2070,6 +2097,7 @@ Handler_read_next 4
# Status of testing query execution:
Variable_name Value
Handler_read_first 1
Handler_read_key 8
Handler_read_next 4
Handler_read_rnd 5
Handler_update 5
@ -2098,6 +2126,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 26 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 8
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5;
@ -2119,6 +2148,7 @@ Sort_rows 1
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 8
Handler_read_rnd 1
Handler_read_rnd_next 27
Sort_priority_queue_sorts 1
@ -2150,6 +2180,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 26 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 8
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5;
@ -2172,6 +2203,7 @@ Sort_rows 1
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 8
Handler_read_rnd 1
Handler_read_rnd_next 27
Sort_priority_queue_sorts 1
@ -2203,6 +2235,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 index_merge key1,key2 key1,key2 5,5 NULL 7 100.00 Using sort_union(key1,key2); Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 6
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE key1 < 13 or key2 < 14 ORDER BY key1;
@ -2224,7 +2257,7 @@ Sort_range 1
Sort_rows 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 2
Handler_read_key 8
Handler_read_next 7
Handler_read_rnd 8
Handler_update 4
@ -2255,6 +2288,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 range PRIMARY PRIMARY 4 NULL 5 100.00 Using where; Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 WHERE i > 10 AND i <= 18 ORDER BY i DESC LIMIT 5;
@ -2273,7 +2307,7 @@ Handler_read_key 5
Handler_read_prev 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 5
Handler_read_prev 4
Handler_read_rnd 5
Handler_update 5
@ -2302,6 +2336,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 26 100.00 Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 6
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 ORDER BY a, b DESC LIMIT 5;
@ -2323,6 +2358,7 @@ Sort_rows 5
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 6
Handler_read_rnd 5
Handler_read_rnd_next 27
Handler_update 4
@ -2355,6 +2391,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 index NULL a 6 NULL 5 100.00 Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 6
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t2 ORDER BY a DESC, b DESC LIMIT 5;
@ -2374,6 +2411,7 @@ Handler_read_last 1
Handler_read_prev 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 6
Handler_read_last 1
Handler_read_prev 4
Handler_read_rnd 5
@ -2405,6 +2443,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range c1_idx c1_idx 2 NULL 2 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 6
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1_idx = 'y' ORDER BY pk DESC LIMIT 2;
@ -2426,7 +2465,7 @@ Sort_range 1
Sort_rows 2
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 7
Handler_read_next 2
Handler_read_rnd 2
Handler_update 2
@ -2499,6 +2538,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 3
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a > 34;
@ -2517,7 +2557,7 @@ Handler_read_key 4
Handler_read_next 2
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 4
Handler_read_next 2
Handler_read_rnd 2
Handler_update 2
@ -2545,6 +2585,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 7
Handler_read_rnd_next 1
FLUSH STATUS;
FLUSH TABLES;
@ -2566,6 +2607,7 @@ Handler_read_key 7
Handler_read_rnd_next 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 7
Handler_read_rnd_next 4
#
@ -2586,6 +2628,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 7
Handler_read_rnd_next 1
FLUSH STATUS;
FLUSH TABLES;
@ -2607,6 +2650,7 @@ Handler_read_key 7
Handler_read_rnd_next 4
# Status of testing query execution:
Variable_name Value
Handler_read_key 7
Handler_read_rnd_next 4
DROP TABLE t1, t2;
@ -2636,6 +2680,7 @@ Warnings:
Note 1276 Field or reference 'test.t1.f1' of SELECT #2 was resolved in SELECT #1
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 7
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT (SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1) FROM t1;
@ -2656,6 +2701,7 @@ Handler_read_key 9
Handler_read_rnd_next 9
# Status of testing query execution:
Variable_name Value
Handler_read_key 7
Handler_read_rnd_next 9
Handler_update 2
@ -2705,6 +2751,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t12 ALL NULL NULL NULL NULL 2 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 2
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM v1 WHERE a > 0;
@ -2724,6 +2771,7 @@ Handler_read_key 2
Handler_read_rnd_next 6
# Status of testing query execution:
Variable_name Value
Handler_read_key 2
Handler_read_rnd 1
Handler_read_rnd_deleted 1
Handler_read_rnd_next 8
@ -2748,6 +2796,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t12 ALL NULL NULL NULL NULL 2 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 2
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1, v1 WHERE t1.a = v1.a;
@ -2768,6 +2817,7 @@ Handler_read_key 2
Handler_read_rnd_next 9
# Status of testing query execution:
Variable_name Value
Handler_read_key 2
Handler_read_rnd 2
Handler_read_rnd_deleted 1
Handler_read_rnd_next 18
@ -3038,6 +3088,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
3 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00 Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a IN (SELECT * FROM (SELECT b FROM t2 ORDER BY b LIMIT 2,2) x);
@ -3062,7 +3113,7 @@ Sort_rows 3
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 3
Handler_read_key 7
Handler_read_rnd_next 8
Handler_update 1
Sort_priority_queue_sorts 1
@ -3093,6 +3144,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
3 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00 Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1, t2 WHERE a IN (SELECT * FROM (SELECT b FROM t2 ORDER BY b LIMIT 2,2) x);
@ -3118,7 +3170,7 @@ Sort_rows 3
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 3
Handler_read_key 7
Handler_read_rnd_next 10
Sort_priority_queue_sorts 1
Sort_rows 3
@ -3150,6 +3202,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DERIVED t2 ALL NULL NULL NULL NULL 3 100.00
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 4
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT * FROM t1, (SELECT * FROM t2) y WHERE a IN (SELECT * FROM (SELECT b FROM t2 ORDER BY b LIMIT 2,2) x);
@ -3175,7 +3228,7 @@ Sort_rows 3
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 3
Handler_read_key 7
Handler_read_rnd_next 10
Sort_priority_queue_sorts 1
Sort_rows 3
@ -3227,6 +3280,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 100.00 Using where; Using buffer
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 3
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT a t1 FROM t1 WHERE a>10;
@ -3246,7 +3300,7 @@ Handler_read_key 3
Handler_read_next 5
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 4
# used key is modified & Using filesort
#
@ -3265,6 +3319,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 100.00 Using where; Using filesort
# Status of EXPLAIN EXTENDED query
Variable_name Value
Handler_read_key 3
FLUSH STATUS;
FLUSH TABLES;
EXPLAIN EXTENDED SELECT a t1 FROM t1 WHERE a>10 ORDER BY a+20;
@ -3284,7 +3339,7 @@ Handler_read_rnd_next 6
Sort_scan 1
# Status of testing query execution:
Variable_name Value
Handler_read_key 1
Handler_read_key 4
Sort_range 1
DROP TABLE t1;

View File

@ -786,6 +786,66 @@ t COUNT(*)
12:12:13 1
DROP TABLE t1;
#
# MDEV-17830 Server crashes in Item_null_result::field_type upon SELECT with CHARSET(date) and ROLLUP
#
# Note, different MariaDB versions can return different results
# in the two rows (such as "latin1" vs "binary"). This is wrong.
# Both lines should return equal values.
# The point in this test is to make sure it does not crash.
# As this is a minor issue, bad result will be fixed
# in a later version, presumably in 10.4.
CREATE TABLE t (d DATE) ENGINE=MyISAM;
INSERT INTO t VALUES ('2018-12-12');
SELECT CHARSET(d) AS f FROM t GROUP BY d WITH ROLLUP;
f
binary
latin1
DROP TABLE t;
#
# MDEV-14041 Server crashes in String::length on queries with functions and ROLLUP
#
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
SELECT GET_LOCK( 'foo', 0 );
GET_LOCK( 'foo', 0 )
1
SELECT HEX( RELEASE_LOCK( 'foo' ) ) AS f FROM t1 GROUP BY f WITH ROLLUP;
f
NULL
1
NULL
DROP TABLE t1;
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
SELECT i FROM t1 GROUP BY i WITH ROLLUP
UNION ALL
SELECT ELT( FOUND_ROWS(), 1 ) f FROM t1 GROUP BY f WITH ROLLUP;
i
1
2
NULL
NULL
NULL
DROP TABLE t1;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
SELECT a FROM t1 GROUP BY NULLIF( CONVERT('', DATE), '2015-10-15' ) WITH ROLLUP;
a
1
1
Warnings:
Warning 1292 Truncated incorrect datetime value: ''
Warning 1292 Incorrect datetime value: ''
Warning 1292 Truncated incorrect datetime value: ''
Warning 1292 Incorrect datetime value: ''
Warning 1292 Truncated incorrect datetime value: ''
Warning 1292 Incorrect datetime value: ''
Warning 1292 Truncated incorrect datetime value: ''
Warning 1292 Incorrect datetime value: ''
Warning 1292 Truncated incorrect datetime value: ''
Warning 1292 Incorrect datetime value: ''
DROP TABLE t1;
#
# End of 10.1 tests
#
#

View File

@ -423,6 +423,45 @@ SELECT t, COUNT(*) FROM t1 GROUP BY t WITH ROLLUP HAVING t > '00:00:00';
DROP TABLE t1;
--echo #
--echo # MDEV-17830 Server crashes in Item_null_result::field_type upon SELECT with CHARSET(date) and ROLLUP
--echo #
--echo # Note, different MariaDB versions can return different results
--echo # in the two rows (such as "latin1" vs "binary"). This is wrong.
--echo # Both lines should return equal values.
--echo # The point in this test is to make sure it does not crash.
--echo # As this is a minor issue, bad result will be fixed
--echo # in a later version, presumably in 10.4.
CREATE TABLE t (d DATE) ENGINE=MyISAM;
INSERT INTO t VALUES ('2018-12-12');
SELECT CHARSET(d) AS f FROM t GROUP BY d WITH ROLLUP;
DROP TABLE t;
--echo #
--echo # MDEV-14041 Server crashes in String::length on queries with functions and ROLLUP
--echo #
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
SELECT GET_LOCK( 'foo', 0 );
SELECT HEX( RELEASE_LOCK( 'foo' ) ) AS f FROM t1 GROUP BY f WITH ROLLUP;
DROP TABLE t1;
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
SELECT i FROM t1 GROUP BY i WITH ROLLUP
UNION ALL
SELECT ELT( FOUND_ROWS(), 1 ) f FROM t1 GROUP BY f WITH ROLLUP;
DROP TABLE t1;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
SELECT a FROM t1 GROUP BY NULLIF( CONVERT('', DATE), '2015-10-15' ) WITH ROLLUP;
DROP TABLE t1;
--echo #
--echo # End of 10.1 tests
--echo #

View File

@ -3330,6 +3330,19 @@ Note 1003 select `test`.`wings`.`id` AS `wing_id`,`test`.`wings`.`department_id`
set optimizer_switch= @save_optimizer_switch;
DROP TABLE books, wings;
#
# MDEV-17796: query with DISTINCT, GROUP BY and ORDER BY
#
CREATE TABLE t1 (id int, gr int, v1 varchar(10));
INSERT INTO t1 VALUES (1,1,'A'), (2,2,'B'), (3,3,NULL), (4,4,'C');
SELECT DISTINCT NULLIF(GROUP_CONCAT(v1), null) FROM t1
WHERE gr in (4,2)
GROUP BY id
ORDER BY id+1 DESC;
NULLIF(GROUP_CONCAT(v1), null)
C
B
DROP TABLE t1;
#
# MDEV-17761: Odd optimizer choice with ORDER BY LIMIT and condition selectivity
#
create table t1(a int);

View File

@ -2189,6 +2189,21 @@ set optimizer_switch= @save_optimizer_switch;
DROP TABLE books, wings;
--echo #
--echo # MDEV-17796: query with DISTINCT, GROUP BY and ORDER BY
--echo #
CREATE TABLE t1 (id int, gr int, v1 varchar(10));
INSERT INTO t1 VALUES (1,1,'A'), (2,2,'B'), (3,3,NULL), (4,4,'C');
SELECT DISTINCT NULLIF(GROUP_CONCAT(v1), null) FROM t1
WHERE gr in (4,2)
GROUP BY id
ORDER BY id+1 DESC;
DROP TABLE t1;
--echo #
--echo # MDEV-17761: Odd optimizer choice with ORDER BY LIMIT and condition selectivity
--echo #
@ -2224,4 +2239,3 @@ set histogram_size=@tmp_h, histogram_type=@tmp_ht, use_stat_tables=@tmp_u,
optimizer_use_condition_selectivity=@tmp_o;
drop table t1,t2,t3,t4;

View File

@ -290,7 +290,7 @@ test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
show indexes from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 1 NULL NULL YES BTREE
t1 1 a 1 a A 2 NULL NULL YES BTREE
drop table t1;
create table t1 (a int)
partition by hash (a);

View File

@ -777,6 +777,7 @@ SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
VARIABLE_NAME VARIABLE_VALUE
HANDLER_COMMIT 1
HANDLER_READ_KEY 8
HANDLER_READ_RND_NEXT 2
HANDLER_TMP_WRITE 24
HANDLER_UPDATE 2

View File

@ -7622,6 +7622,22 @@ c1 c2 count(c3)
2012-03-01 02:00:00 3 1
DROP PROCEDURE p1;
# End of 5.5 test
CREATE PROCEDURE sp() ALTER TABLE non_existing_table OPTIMIZE PARTITION p0;
CALL sp;
Table Op Msg_type Msg_text
test.non_existing_table optimize Error Table 'test.non_existing_table' doesn't exist
test.non_existing_table optimize status Operation failed
SELECT 1;
1
1
DROP PROCEDURE sp;
CREATE PROCEDURE sp() SHOW USER_STATISTICS;
CALL sp;
User Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_read Rows_sent Rows_deleted Rows_inserted Rows_updated Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections Max_statement_time_exceeded
SELECT 1;
1
1
DROP PROCEDURE sp;
#
# Bug#12663165 SP DEAD CODE REMOVAL DOESN'T UNDERSTAND CONTINUE HANDLERS
#
@ -7711,7 +7727,7 @@ UPDATE t1 SET a = '+' WHERE daynum=tdn();
SHOW STATUS LIKE '%Handler_read%';
Variable_name Value
Handler_read_first 0
Handler_read_key 2
Handler_read_key 9
Handler_read_last 0
Handler_read_next 4097
Handler_read_prev 0

View File

@ -9056,6 +9056,15 @@ DROP PROCEDURE p1;
--echo # End of 5.5 test
#MDEV-17610
CREATE PROCEDURE sp() ALTER TABLE non_existing_table OPTIMIZE PARTITION p0;
CALL sp;
SELECT 1;
DROP PROCEDURE sp;
CREATE PROCEDURE sp() SHOW USER_STATISTICS;
CALL sp;
SELECT 1;
DROP PROCEDURE sp;
--echo #
--echo # Bug#12663165 SP DEAD CODE REMOVAL DOESN'T UNDERSTAND CONTINUE HANDLERS

View File

@ -628,6 +628,76 @@ NULL
DROP TABLE t1;
set use_stat_tables=@save_use_stat_tables;
#
# MDEV-17605: SHOW INDEXES with use_stat_tables='preferably'
#
set use_stat_tables='preferably';
CREATE DATABASE dbt3_s001;
use dbt3_s001;
set @save_optimizer_switch=@@optimizer_switch;
set optimizer_switch='extended_keys=off';
select * from mysql.table_stats;
db_name table_name cardinality
dbt3_s001 lineitem 6005
select * from mysql.index_stats;
db_name table_name index_name prefix_arity avg_frequency
dbt3_s001 lineitem PRIMARY 1 4.0033
dbt3_s001 lineitem PRIMARY 2 1.0000
dbt3_s001 lineitem i_l_shipdate 1 2.6500
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
dbt3_s001 lineitem i_l_partkey 1 30.0250
dbt3_s001 lineitem i_l_suppkey 1 600.5000
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
dbt3_s001 lineitem i_l_orderkey 1 4.0033
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
dbt3_s001 lineitem i_l_commitdate 1 2.7160
SHOW INDEXES FROM lineitem;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
lineitem 0 PRIMARY 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 0 PRIMARY 2 l_linenumber A 6005 NULL NULL BTREE
lineitem 1 i_l_shipdate 1 l_shipDATE A 2266 NULL NULL YES BTREE
lineitem 1 i_l_suppkey_partkey 1 l_partkey A 200 NULL NULL YES BTREE
lineitem 1 i_l_suppkey_partkey 2 l_suppkey A 699 NULL NULL YES BTREE
lineitem 1 i_l_partkey 1 l_partkey A 200 NULL NULL YES BTREE
lineitem 1 i_l_suppkey 1 l_suppkey A 10 NULL NULL YES BTREE
lineitem 1 i_l_receiptdate 1 l_receiptDATE A 2268 NULL NULL YES BTREE
lineitem 1 i_l_orderkey 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 1 i_l_orderkey_quantity 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 1 i_l_orderkey_quantity 2 l_quantity A 5771 NULL NULL YES BTREE
lineitem 1 i_l_commitdate 1 l_commitDATE A 2210 NULL NULL YES BTREE
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name='lineitem';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT INDEX_COMMENT
def dbt3_s001 lineitem 0 dbt3_s001 PRIMARY 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 0 dbt3_s001 PRIMARY 2 l_linenumber A 6005 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_shipdate 1 l_shipDATE A 2266 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey_partkey 1 l_partkey A 200 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey_partkey 2 l_suppkey A 699 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_partkey 1 l_partkey A 200 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey 1 l_suppkey A 10 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_receiptdate 1 l_receiptDATE A 2268 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey_quantity 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey_quantity 2 l_quantity A 5771 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_commitdate 1 l_commitDATE A 2210 NULL NULL YES BTREE
SELECT
COUNT(DISTINCT l_orderkey), COUNT(DISTINCT l_orderkey,l_linenumber),
COUNT(DISTINCT l_shipDATE),
COUNT(DISTINCT l_partkey), COUNT(DISTINCT l_partkey,l_suppkey),
COUNT(DISTINCT l_suppkey), COUNT(DISTINCT l_receiptDATE),
COUNT(DISTINCT l_orderkey, l_quantity), COUNT(DISTINCT l_commitDATE)
FROM lineitem;
COUNT(DISTINCT l_orderkey) COUNT(DISTINCT l_orderkey,l_linenumber) COUNT(DISTINCT l_shipDATE) COUNT(DISTINCT l_partkey) COUNT(DISTINCT l_partkey,l_suppkey) COUNT(DISTINCT l_suppkey) COUNT(DISTINCT l_receiptDATE) COUNT(DISTINCT l_orderkey, l_quantity) COUNT(DISTINCT l_commitDATE)
1500 6005 2266 200 700 10 2268 5772 2211
set optimizer_switch=@save_optimizer_switch;
DROP DATABASE dbt3_s001;
USE test;
delete from mysql.table_stats;
delete from mysql.column_stats;
delete from mysql.index_stats;
set @save_optimizer_switch=@@optimizer_switch;
set use_stat_tables=@save_use_stat_tables;
#
# MDEV-18899: Server crashes in Field::set_warning_truncated_wrong_value
#
set names utf8;

View File

@ -405,6 +405,61 @@ DROP TABLE t1;
set use_stat_tables=@save_use_stat_tables;
--echo #
--echo # MDEV-17605: SHOW INDEXES with use_stat_tables='preferably'
--echo #
set use_stat_tables='preferably';
CREATE DATABASE dbt3_s001;
use dbt3_s001;
set @save_optimizer_switch=@@optimizer_switch;
set optimizer_switch='extended_keys=off';
--disable_query_log
--disable_result_log
--disable_warnings
--source include/dbt3_s001.inc
create index i_p_retailprice on part(p_retailprice);
delete from mysql.table_stats;
delete from mysql.column_stats;
delete from mysql.index_stats;
ANALYZE TABLE lineitem;
FLUSH TABLE mysql.table_stats, mysql.index_stats;
--enable_warnings
--enable_result_log
--enable_query_log
select * from mysql.table_stats;
select * from mysql.index_stats;
SHOW INDEXES FROM lineitem;
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name='lineitem';
SELECT
COUNT(DISTINCT l_orderkey), COUNT(DISTINCT l_orderkey,l_linenumber),
COUNT(DISTINCT l_shipDATE),
COUNT(DISTINCT l_partkey), COUNT(DISTINCT l_partkey,l_suppkey),
COUNT(DISTINCT l_suppkey), COUNT(DISTINCT l_receiptDATE),
COUNT(DISTINCT l_orderkey, l_quantity), COUNT(DISTINCT l_commitDATE)
FROM lineitem;
set optimizer_switch=@save_optimizer_switch;
DROP DATABASE dbt3_s001;
USE test;
delete from mysql.table_stats;
delete from mysql.column_stats;
delete from mysql.index_stats;
set @save_optimizer_switch=@@optimizer_switch;
set use_stat_tables=@save_use_stat_tables;
--echo #
--echo # MDEV-18899: Server crashes in Field::set_warning_truncated_wrong_value
--echo #

View File

@ -660,6 +660,76 @@ NULL
DROP TABLE t1;
set use_stat_tables=@save_use_stat_tables;
#
# MDEV-17605: SHOW INDEXES with use_stat_tables='preferably'
#
set use_stat_tables='preferably';
CREATE DATABASE dbt3_s001;
use dbt3_s001;
set @save_optimizer_switch=@@optimizer_switch;
set optimizer_switch='extended_keys=off';
select * from mysql.table_stats;
db_name table_name cardinality
dbt3_s001 lineitem 6005
select * from mysql.index_stats;
db_name table_name index_name prefix_arity avg_frequency
dbt3_s001 lineitem PRIMARY 1 4.0033
dbt3_s001 lineitem PRIMARY 2 1.0000
dbt3_s001 lineitem i_l_shipdate 1 2.6500
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
dbt3_s001 lineitem i_l_partkey 1 30.0250
dbt3_s001 lineitem i_l_suppkey 1 600.5000
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
dbt3_s001 lineitem i_l_orderkey 1 4.0033
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
dbt3_s001 lineitem i_l_commitdate 1 2.7160
SHOW INDEXES FROM lineitem;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
lineitem 0 PRIMARY 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 0 PRIMARY 2 l_linenumber A 6005 NULL NULL BTREE
lineitem 1 i_l_shipdate 1 l_shipDATE A 2266 NULL NULL YES BTREE
lineitem 1 i_l_suppkey_partkey 1 l_partkey A 200 NULL NULL YES BTREE
lineitem 1 i_l_suppkey_partkey 2 l_suppkey A 699 NULL NULL YES BTREE
lineitem 1 i_l_partkey 1 l_partkey A 200 NULL NULL YES BTREE
lineitem 1 i_l_suppkey 1 l_suppkey A 10 NULL NULL YES BTREE
lineitem 1 i_l_receiptdate 1 l_receiptDATE A 2268 NULL NULL YES BTREE
lineitem 1 i_l_orderkey 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 1 i_l_orderkey_quantity 1 l_orderkey A 1500 NULL NULL BTREE
lineitem 1 i_l_orderkey_quantity 2 l_quantity A 5771 NULL NULL YES BTREE
lineitem 1 i_l_commitdate 1 l_commitDATE A 2210 NULL NULL YES BTREE
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name='lineitem';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT INDEX_COMMENT
def dbt3_s001 lineitem 0 dbt3_s001 PRIMARY 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 0 dbt3_s001 PRIMARY 2 l_linenumber A 6005 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_shipdate 1 l_shipDATE A 2266 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey_partkey 1 l_partkey A 200 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey_partkey 2 l_suppkey A 699 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_partkey 1 l_partkey A 200 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_suppkey 1 l_suppkey A 10 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_receiptdate 1 l_receiptDATE A 2268 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey_quantity 1 l_orderkey A 1500 NULL NULL BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_orderkey_quantity 2 l_quantity A 5771 NULL NULL YES BTREE
def dbt3_s001 lineitem 1 dbt3_s001 i_l_commitdate 1 l_commitDATE A 2210 NULL NULL YES BTREE
SELECT
COUNT(DISTINCT l_orderkey), COUNT(DISTINCT l_orderkey,l_linenumber),
COUNT(DISTINCT l_shipDATE),
COUNT(DISTINCT l_partkey), COUNT(DISTINCT l_partkey,l_suppkey),
COUNT(DISTINCT l_suppkey), COUNT(DISTINCT l_receiptDATE),
COUNT(DISTINCT l_orderkey, l_quantity), COUNT(DISTINCT l_commitDATE)
FROM lineitem;
COUNT(DISTINCT l_orderkey) COUNT(DISTINCT l_orderkey,l_linenumber) COUNT(DISTINCT l_shipDATE) COUNT(DISTINCT l_partkey) COUNT(DISTINCT l_partkey,l_suppkey) COUNT(DISTINCT l_suppkey) COUNT(DISTINCT l_receiptDATE) COUNT(DISTINCT l_orderkey, l_quantity) COUNT(DISTINCT l_commitDATE)
1500 6005 2266 200 700 10 2268 5772 2211
set optimizer_switch=@save_optimizer_switch;
DROP DATABASE dbt3_s001;
USE test;
delete from mysql.table_stats;
delete from mysql.column_stats;
delete from mysql.index_stats;
set @save_optimizer_switch=@@optimizer_switch;
set use_stat_tables=@save_use_stat_tables;
#
# MDEV-18899: Server crashes in Field::set_warning_truncated_wrong_value
#
set names utf8;

View File

@ -863,6 +863,33 @@ d COUNT(*)
NULL 2
DROP TABLE t1;
#
# MDEV-17299 Assertion `maybe_null' failed in make_sortkey
#
CREATE TABLE t1 (pk int NOT NULL, d1 date, d2 date NOT NULL);
INSERT INTO t1 values (1,'2018-06-22','2018-06-22'),(2,'2018-07-11','2018-07-11');
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT group_concat(d1/(CASE 'b' WHEN 'j' THEN 'c' END))
FROM v1 GROUP BY greatest(pk, 0, d2);
group_concat(d1/(CASE 'b' WHEN 'j' THEN 'c' END))
NULL
NULL
Warnings:
Warning 1292 Incorrect datetime value: '1' for column `test`.`t1`.`pk` at row 1
Warning 1292 Incorrect datetime value: '2' for column `test`.`t1`.`pk` at row 1
Warning 1292 Incorrect datetime value: '1' for column `test`.`t1`.`pk` at row 1
Warning 1292 Incorrect datetime value: '1' for column `test`.`t1`.`pk` at row 1
Warning 1292 Incorrect datetime value: '2' for column `test`.`t1`.`pk` at row 2
Warning 1292 Incorrect datetime value: '2' for column `test`.`t1`.`pk` at row 2
CREATE TABLE t2 AS SELECT greatest(pk, 0, d2) AS c1 FROM t1 LIMIT 0;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`c1` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t2;
DROP VIEW v1;
DROP TABLE t1;
#
# End of 10.1 tests
#
#

View File

@ -591,6 +591,20 @@ INSERT INTO t1 VALUES ('1985-05-13'),('1989-12-24');
SELECT d, COUNT(*) FROM t1 GROUP BY d WITH ROLLUP HAVING CASE d WHEN '2017-05-25' THEN 0 ELSE 1 END;
DROP TABLE t1;
--echo #
--echo # MDEV-17299 Assertion `maybe_null' failed in make_sortkey
--echo #
CREATE TABLE t1 (pk int NOT NULL, d1 date, d2 date NOT NULL);
INSERT INTO t1 values (1,'2018-06-22','2018-06-22'),(2,'2018-07-11','2018-07-11');
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT group_concat(d1/(CASE 'b' WHEN 'j' THEN 'c' END))
FROM v1 GROUP BY greatest(pk, 0, d2);
CREATE TABLE t2 AS SELECT greatest(pk, 0, d2) AS c1 FROM t1 LIMIT 0;
SHOW CREATE TABLE t2;
DROP TABLE t2;
DROP VIEW v1;
DROP TABLE t1;
--echo #
--echo # End of 10.1 tests

View File

@ -65,8 +65,32 @@ SELECT * FROM t1;
a_id b_id c_id
1 NULL NULL
drop table t1,t2;
CREATE OR REPLACE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE OR REPLACE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
#
# MDEV-18300: ASAN error in Field_blob::get_key_image upon UPDATE with subquery
#
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
set @save_use_stat_tables= @@use_stat_tables;
set use_stat_tables=preferably;
set optimizer_use_condition_selectivity=4;
CREATE TABLE t1 (a INT, b CHAR(8)) ENGINE=InnoDB;
insert into t1 values (1,'foo'),(2, 'abc');
CREATE TABLE t2 (c CHAR(8), d BLOB) ENGINE=InnoDB;
insert into t2 values ('abc', 'foo'),('edf', 'food');
ANALYZE TABLE t1,t2;
UPDATE t1 SET a = 1 WHERE b = ( SELECT c FROM t2 WHERE d = 'foo' );
SELECT * FROM t1;
a b
1 foo
1 abc
DROP TABLE t1, t2;
create table t1 (a int not null, b int, c int) engine=InnoDB;
create table t2 (d int, e int) engine=InnoDB;
update t1, t2 set a=NULL, b=2, c=NULL where b=d and e=200;
drop table t1,t2;
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
set @@use_stat_tables= @save_use_stat_tables;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);
BEGIN;
@ -90,8 +114,8 @@ a
commit;
connection default;
drop table t1,t2;
CREATE OR REPLACE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE OR REPLACE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);
BEGIN;

View File

@ -77,10 +77,37 @@ SELECT * FROM t1;
drop table t1,t2;
--source include/have_innodb.inc
--echo #
--echo # MDEV-18300: ASAN error in Field_blob::get_key_image upon UPDATE with subquery
--echo #
CREATE OR REPLACE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE OR REPLACE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
set @save_use_stat_tables= @@use_stat_tables;
set use_stat_tables=preferably;
set optimizer_use_condition_selectivity=4;
CREATE TABLE t1 (a INT, b CHAR(8)) ENGINE=InnoDB;
insert into t1 values (1,'foo'),(2, 'abc');
CREATE TABLE t2 (c CHAR(8), d BLOB) ENGINE=InnoDB;
insert into t2 values ('abc', 'foo'),('edf', 'food');
--disable_result_log
ANALYZE TABLE t1,t2;
--enable_result_log
UPDATE t1 SET a = 1 WHERE b = ( SELECT c FROM t2 WHERE d = 'foo' );
SELECT * FROM t1;
DROP TABLE t1, t2;
create table t1 (a int not null, b int, c int) engine=InnoDB;
create table t2 (d int, e int) engine=InnoDB;
update t1, t2 set a=NULL, b=2, c=NULL where b=d and e=200;
drop table t1,t2;
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
set @@use_stat_tables= @save_use_stat_tables;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);
BEGIN;
@ -105,8 +132,8 @@ commit;
drop table t1,t2;
CREATE OR REPLACE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE OR REPLACE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2 (a INT NOT NULL PRIMARY KEY) engine=innodb;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);
BEGIN;

View File

@ -3506,6 +3506,18 @@ id a b sum_a_b
2 2 2 4
drop table t1;
#
# MDEV-15837: Assertion `item1->type() == Item::FIELD_ITEM && item2->type() == Item::FIELD_ITEM'
# failed in compare_order_elements function
#
CREATE TABLE t1 (a1 int);
insert into t1 values (1),(2),(3);
SELECT rank() OVER (ORDER BY 1), ROW_NUMBER() OVER (ORDER BY (EXPORT_SET(5,'Y','N',',',4))) FROM t1;
rank() OVER (ORDER BY 1) ROW_NUMBER() OVER (ORDER BY (EXPORT_SET(5,'Y','N',',',4)))
1 1
1 2
1 3
drop table t1;
#
# End of 10.2 tests
#
#

View File

@ -2255,6 +2255,16 @@ select e.id,
from t1 e;
drop table t1;
--echo #
--echo # MDEV-15837: Assertion `item1->type() == Item::FIELD_ITEM && item2->type() == Item::FIELD_ITEM'
--echo # failed in compare_order_elements function
--echo #
CREATE TABLE t1 (a1 int);
insert into t1 values (1),(2),(3);
SELECT rank() OVER (ORDER BY 1), ROW_NUMBER() OVER (ORDER BY (EXPORT_SET(5,'Y','N',',',4))) FROM t1;
drop table t1;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -0,0 +1,24 @@
drop table if exists t1;
#
# MDEV-17297: stats.records=0 for a table of Archive engine when it has rows, when we run ANALYZE command
#
CREATE TABLE t1 (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g POINT)engine=archive;
INSERT INTO t1 VALUES
(101, PointFromText('POINT(10 10)')),
(102, PointFromText('POINT(20 10)')),
(103, PointFromText('POINT(20 20)')),
(104, PointFromWKB(AsWKB(PointFromText('POINT(10 20)'))));
set @tmp1= @@optimizer_use_condition_selectivity;
set @tmp2= @@use_stat_tables;
set optimizer_use_condition_selectivity=4;
set use_stat_tables=PREFERABLY;
ANALYZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze note The storage engine for the table doesn't support analyze
select * from mysql.table_stats where table_name='t1' and db_name=database();
db_name table_name cardinality
test t1 4
drop table t1;
set optimizer_use_condition_selectivity=@tmp1;
set use_stat_tables=@tmp2;

View File

@ -0,0 +1,32 @@
-- source include/have_archive.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
--echo #
--echo # MDEV-17297: stats.records=0 for a table of Archive engine when it has rows, when we run ANALYZE command
--echo #
CREATE TABLE t1 (fid INTEGER PRIMARY KEY AUTO_INCREMENT, g POINT)engine=archive;
INSERT INTO t1 VALUES
(101, PointFromText('POINT(10 10)')),
(102, PointFromText('POINT(20 10)')),
(103, PointFromText('POINT(20 20)')),
(104, PointFromWKB(AsWKB(PointFromText('POINT(10 20)'))));
set @tmp1= @@optimizer_use_condition_selectivity;
set @tmp2= @@use_stat_tables;
set optimizer_use_condition_selectivity=4;
set use_stat_tables=PREFERABLY;
ANALYZE TABLE t1;
select * from mysql.table_stats where table_name='t1' and db_name=database();
drop table t1;
set optimizer_use_condition_selectivity=@tmp1;
set use_stat_tables=@tmp2;

View File

@ -814,3 +814,41 @@ DTD_IDENTIFIER ROW
ROUTINE_TYPE FUNCTION
-------- --------
DROP FUNCTION f1;
#
# MDEV 18092 Query with the table I_S.PARAMETERS stop working
# after a package is created
#
SET sql_mode=ORACLE;
CREATE DATABASE db1_mdev18092;
USE db1_mdev18092;
CREATE PROCEDURE p1(a INT)
AS BEGIN
NULL;
END;
$$
CREATE OR REPLACE PACKAGE employee_tools AS
FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);
PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));
PROCEDURE raiseSalaryStd(eid INT);
PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));
END;
$$
SELECT *, '---------------' FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_SCHEMA='db1_mdev18092';
SPECIFIC_CATALOG def
SPECIFIC_SCHEMA db1_mdev18092
SPECIFIC_NAME p1
ORDINAL_POSITION 1
PARAMETER_MODE IN
PARAMETER_NAME a
DATA_TYPE int
CHARACTER_MAXIMUM_LENGTH NULL
CHARACTER_OCTET_LENGTH NULL
NUMERIC_PRECISION 10
NUMERIC_SCALE 0
DATETIME_PRECISION NULL
CHARACTER_SET_NAME NULL
COLLATION_NAME NULL
DTD_IDENTIFIER int(11)
ROUTINE_TYPE PROCEDURE
--------------- ---------------
DROP DATABASE db1_mdev18092;

View File

@ -92,3 +92,36 @@ SET sql_mode=ORACLE;
SELECT *, '--------' FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME='f1';
--horizontal_results
DROP FUNCTION f1;
--echo #
--echo # MDEV 18092 Query with the table I_S.PARAMETERS stop working
--echo # after a package is created
--echo #
SET sql_mode=ORACLE;
CREATE DATABASE db1_mdev18092;
USE db1_mdev18092;
DELIMITER $$;
CREATE PROCEDURE p1(a INT)
AS BEGIN
NULL;
END;
$$
CREATE OR REPLACE PACKAGE employee_tools AS
FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);
PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));
PROCEDURE raiseSalaryStd(eid INT);
PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));
END;
$$
DELIMITER ;$$
--vertical_results
SELECT *, '---------------' FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_SCHEMA='db1_mdev18092';
--horizontal_results
DROP DATABASE db1_mdev18092;

View File

@ -262,10 +262,18 @@ ALTER IGNORE TABLE t1 ADD FOREIGN KEY (a) REFERENCES t2 (b);
ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
SHOW WARNINGS;
Level Code Message
Warning 150 Alter table test/#sql-temporary with foreign key constraint failed. Referenced table `test`.`t2` not found in the data dictionary near 'FOREIGN KEY (a) REFERENCES t2 (b)'.
Warning 150 Alter table `test`.`t1` with foreign key constraint failed. Referenced table `test`.`t2` not found in the data dictionary near 'FOREIGN KEY (a) REFERENCES t2 (b)'.
Error 1005 Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
Warning 1215 Cannot add foreign key constraint for `t1`
DROP TABLE t1;
#
# MDEV-18139 ALTER IGNORE ... ADD FOREIGN KEY causes bogus error
#
CREATE TABLE t1 (f1 INT, f2 INT, f3 INT, KEY(f1)) ENGINE=InnoDB;
CREATE TABLE t2 (f INT, KEY(f)) ENGINE=InnoDB;
ALTER TABLE t1 ADD FOREIGN KEY (f2) REFERENCES t2 (f);
ALTER IGNORE TABLE t1 ADD FOREIGN KEY (f3) REFERENCES t1 (f1);
DROP TABLE t1, t2;
# Start of 10.2 tests
#
# MDEV-13246 Stale rows despite ON DELETE CASCADE constraint

View File

@ -1,3 +1,5 @@
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
CREATE TABLE test_ps_fetch
(a INT, b INT, c INT, d INT, PRIMARY KEY (a, b), INDEX idx (c, d))
ENGINE=INNODB STATS_PERSISTENT=1;
@ -147,3 +149,4 @@ avg_row_length 81
max_data_length 0
index_length 16384
DROP TABLE test_ps_fetch;
set @@use_stat_tables = @save_use_stat_tables;

View File

@ -0,0 +1,361 @@
call mtr.add_suppression("Found 50 prepared XA transactions");
create table t1 (a int) engine=innodb;
insert into t1 values(1);
connect con$trial, localhost, root,,;
xa start 'test50';
insert into t1 values(1);
xa end 'test50';
xa prepare 'test50';
connect con$trial, localhost, root,,;
xa start 'test49';
insert into t1 values(1);
xa end 'test49';
xa prepare 'test49';
connect con$trial, localhost, root,,;
xa start 'test48';
insert into t1 values(1);
xa end 'test48';
xa prepare 'test48';
connect con$trial, localhost, root,,;
xa start 'test47';
insert into t1 values(1);
xa end 'test47';
xa prepare 'test47';
connect con$trial, localhost, root,,;
xa start 'test46';
insert into t1 values(1);
xa end 'test46';
xa prepare 'test46';
connect con$trial, localhost, root,,;
xa start 'test45';
insert into t1 values(1);
xa end 'test45';
xa prepare 'test45';
connect con$trial, localhost, root,,;
xa start 'test44';
insert into t1 values(1);
xa end 'test44';
xa prepare 'test44';
connect con$trial, localhost, root,,;
xa start 'test43';
insert into t1 values(1);
xa end 'test43';
xa prepare 'test43';
connect con$trial, localhost, root,,;
xa start 'test42';
insert into t1 values(1);
xa end 'test42';
xa prepare 'test42';
connect con$trial, localhost, root,,;
xa start 'test41';
insert into t1 values(1);
xa end 'test41';
xa prepare 'test41';
connect con$trial, localhost, root,,;
xa start 'test40';
insert into t1 values(1);
xa end 'test40';
xa prepare 'test40';
connect con$trial, localhost, root,,;
xa start 'test39';
insert into t1 values(1);
xa end 'test39';
xa prepare 'test39';
connect con$trial, localhost, root,,;
xa start 'test38';
insert into t1 values(1);
xa end 'test38';
xa prepare 'test38';
connect con$trial, localhost, root,,;
xa start 'test37';
insert into t1 values(1);
xa end 'test37';
xa prepare 'test37';
connect con$trial, localhost, root,,;
xa start 'test36';
insert into t1 values(1);
xa end 'test36';
xa prepare 'test36';
connect con$trial, localhost, root,,;
xa start 'test35';
insert into t1 values(1);
xa end 'test35';
xa prepare 'test35';
connect con$trial, localhost, root,,;
xa start 'test34';
insert into t1 values(1);
xa end 'test34';
xa prepare 'test34';
connect con$trial, localhost, root,,;
xa start 'test33';
insert into t1 values(1);
xa end 'test33';
xa prepare 'test33';
connect con$trial, localhost, root,,;
xa start 'test32';
insert into t1 values(1);
xa end 'test32';
xa prepare 'test32';
connect con$trial, localhost, root,,;
xa start 'test31';
insert into t1 values(1);
xa end 'test31';
xa prepare 'test31';
connect con$trial, localhost, root,,;
xa start 'test30';
insert into t1 values(1);
xa end 'test30';
xa prepare 'test30';
connect con$trial, localhost, root,,;
xa start 'test29';
insert into t1 values(1);
xa end 'test29';
xa prepare 'test29';
connect con$trial, localhost, root,,;
xa start 'test28';
insert into t1 values(1);
xa end 'test28';
xa prepare 'test28';
connect con$trial, localhost, root,,;
xa start 'test27';
insert into t1 values(1);
xa end 'test27';
xa prepare 'test27';
connect con$trial, localhost, root,,;
xa start 'test26';
insert into t1 values(1);
xa end 'test26';
xa prepare 'test26';
connect con$trial, localhost, root,,;
xa start 'test25';
insert into t1 values(1);
xa end 'test25';
xa prepare 'test25';
connect con$trial, localhost, root,,;
xa start 'test24';
insert into t1 values(1);
xa end 'test24';
xa prepare 'test24';
connect con$trial, localhost, root,,;
xa start 'test23';
insert into t1 values(1);
xa end 'test23';
xa prepare 'test23';
connect con$trial, localhost, root,,;
xa start 'test22';
insert into t1 values(1);
xa end 'test22';
xa prepare 'test22';
connect con$trial, localhost, root,,;
xa start 'test21';
insert into t1 values(1);
xa end 'test21';
xa prepare 'test21';
connect con$trial, localhost, root,,;
xa start 'test20';
insert into t1 values(1);
xa end 'test20';
xa prepare 'test20';
connect con$trial, localhost, root,,;
xa start 'test19';
insert into t1 values(1);
xa end 'test19';
xa prepare 'test19';
connect con$trial, localhost, root,,;
xa start 'test18';
insert into t1 values(1);
xa end 'test18';
xa prepare 'test18';
connect con$trial, localhost, root,,;
xa start 'test17';
insert into t1 values(1);
xa end 'test17';
xa prepare 'test17';
connect con$trial, localhost, root,,;
xa start 'test16';
insert into t1 values(1);
xa end 'test16';
xa prepare 'test16';
connect con$trial, localhost, root,,;
xa start 'test15';
insert into t1 values(1);
xa end 'test15';
xa prepare 'test15';
connect con$trial, localhost, root,,;
xa start 'test14';
insert into t1 values(1);
xa end 'test14';
xa prepare 'test14';
connect con$trial, localhost, root,,;
xa start 'test13';
insert into t1 values(1);
xa end 'test13';
xa prepare 'test13';
connect con$trial, localhost, root,,;
xa start 'test12';
insert into t1 values(1);
xa end 'test12';
xa prepare 'test12';
connect con$trial, localhost, root,,;
xa start 'test11';
insert into t1 values(1);
xa end 'test11';
xa prepare 'test11';
connect con$trial, localhost, root,,;
xa start 'test10';
insert into t1 values(1);
xa end 'test10';
xa prepare 'test10';
connect con$trial, localhost, root,,;
xa start 'test9';
insert into t1 values(1);
xa end 'test9';
xa prepare 'test9';
connect con$trial, localhost, root,,;
xa start 'test8';
insert into t1 values(1);
xa end 'test8';
xa prepare 'test8';
connect con$trial, localhost, root,,;
xa start 'test7';
insert into t1 values(1);
xa end 'test7';
xa prepare 'test7';
connect con$trial, localhost, root,,;
xa start 'test6';
insert into t1 values(1);
xa end 'test6';
xa prepare 'test6';
connect con$trial, localhost, root,,;
xa start 'test5';
insert into t1 values(1);
xa end 'test5';
xa prepare 'test5';
connect con$trial, localhost, root,,;
xa start 'test4';
insert into t1 values(1);
xa end 'test4';
xa prepare 'test4';
connect con$trial, localhost, root,,;
xa start 'test3';
insert into t1 values(1);
xa end 'test3';
xa prepare 'test3';
connect con$trial, localhost, root,,;
xa start 'test2';
insert into t1 values(1);
xa end 'test2';
xa prepare 'test2';
connect con$trial, localhost, root,,;
xa start 'test1';
insert into t1 values(1);
xa end 'test1';
xa prepare 'test1';
connection default;
xa recover;
formatID gtrid_length bqual_length data
1 5 0 test1
1 5 0 test2
1 5 0 test3
1 5 0 test4
1 5 0 test5
1 5 0 test6
1 5 0 test7
1 5 0 test8
1 5 0 test9
1 6 0 test10
1 6 0 test11
1 6 0 test12
1 6 0 test13
1 6 0 test14
1 6 0 test15
1 6 0 test16
1 6 0 test17
1 6 0 test18
1 6 0 test19
1 6 0 test20
1 6 0 test21
1 6 0 test22
1 6 0 test23
1 6 0 test24
1 6 0 test25
1 6 0 test26
1 6 0 test27
1 6 0 test28
1 6 0 test29
1 6 0 test30
1 6 0 test31
1 6 0 test32
1 6 0 test33
1 6 0 test34
1 6 0 test35
1 6 0 test36
1 6 0 test37
1 6 0 test38
1 6 0 test39
1 6 0 test40
1 6 0 test41
1 6 0 test42
1 6 0 test43
1 6 0 test44
1 6 0 test45
1 6 0 test46
1 6 0 test47
1 6 0 test48
1 6 0 test49
1 6 0 test50
xa recover;
formatID gtrid_length bqual_length data
1 5 0 test1
1 5 0 test2
1 5 0 test3
1 5 0 test4
1 5 0 test5
1 5 0 test6
1 5 0 test7
1 5 0 test8
1 5 0 test9
1 6 0 test10
1 6 0 test11
1 6 0 test12
1 6 0 test13
1 6 0 test14
1 6 0 test15
1 6 0 test16
1 6 0 test17
1 6 0 test18
1 6 0 test19
1 6 0 test20
1 6 0 test21
1 6 0 test22
1 6 0 test23
1 6 0 test24
1 6 0 test25
1 6 0 test26
1 6 0 test27
1 6 0 test28
1 6 0 test29
1 6 0 test30
1 6 0 test31
1 6 0 test32
1 6 0 test33
1 6 0 test34
1 6 0 test35
1 6 0 test36
1 6 0 test37
1 6 0 test38
1 6 0 test39
1 6 0 test40
1 6 0 test41
1 6 0 test42
1 6 0 test43
1 6 0 test44
1 6 0 test45
1 6 0 test46
1 6 0 test47
1 6 0 test48
1 6 0 test49
1 6 0 test50
xa recover;
formatID gtrid_length bqual_length data
drop table t1;

View File

@ -244,10 +244,18 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
--error ER_CANT_CREATE_TABLE
ALTER IGNORE TABLE t1 ADD FOREIGN KEY (a) REFERENCES t2 (b);
--replace_regex /#sql-[0-9_a-f-]*/#sql-temporary/
SHOW WARNINGS;
DROP TABLE t1;
--echo #
--echo # MDEV-18139 ALTER IGNORE ... ADD FOREIGN KEY causes bogus error
--echo #
CREATE TABLE t1 (f1 INT, f2 INT, f3 INT, KEY(f1)) ENGINE=InnoDB;
CREATE TABLE t2 (f INT, KEY(f)) ENGINE=InnoDB;
ALTER TABLE t1 ADD FOREIGN KEY (f2) REFERENCES t2 (f);
ALTER IGNORE TABLE t1 ADD FOREIGN KEY (f3) REFERENCES t1 (f1);
DROP TABLE t1, t2;
--echo # Start of 10.2 tests
--echo #

View File

@ -9,6 +9,9 @@
DROP TABLE IF EXISTS test_innodb_stats;
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
CREATE TABLE test_innodb_stats (
a INT,
KEY a_key (a)
@ -59,3 +62,4 @@ CREATE TABLE test_innodb_stats (
-- disable_query_log
DROP TABLE test_innodb_stats;
set @@use_stat_tables= @save_use_stat_tables;

View File

@ -11,6 +11,9 @@
-- vertical_results
set @save_use_stat_tables = @@use_stat_tables;
set @@use_stat_tables = COMPLEMENTARY;
CREATE TABLE test_ps_fetch
(a INT, b INT, c INT, d INT, PRIMARY KEY (a, b), INDEX idx (c, d))
ENGINE=INNODB STATS_PERSISTENT=1;
@ -77,3 +80,4 @@ table_rows, avg_row_length, max_data_length, index_length
FROM information_schema.tables WHERE table_name = 'test_ps_fetch';
DROP TABLE test_ps_fetch;
set @@use_stat_tables = @save_use_stat_tables;

View File

@ -0,0 +1,45 @@
-- source include/have_innodb.inc
-- source include/have_debug.inc
-- source include/not_embedded.inc
call mtr.add_suppression("Found 50 prepared XA transactions");
create table t1 (a int) engine=innodb;
insert into t1 values(1);
let $trial = 50;
while ($trial)
{
--connect (con$trial, localhost, root,,)
let $st_pre = `select concat('test', $trial)`;
eval xa start '$st_pre';
insert into t1 values(1);
eval xa end '$st_pre';
eval xa prepare '$st_pre';
dec $trial;
}
connection default;
# Kill and restart the server.
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- shutdown_server 0
-- source include/wait_until_disconnected.inc
-- exec echo "restart:--debug_dbug=+d,min_xa_len" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- enable_reconnect
-- source include/wait_until_connected_again.inc
-- disable_reconnect
--sorted_result
xa recover;
--sorted_result
xa recover;
--disable_query_log
let $trial = 50;
while ($trial)
{
let $st_pre = `select concat('test', $trial)`;
eval xa commit '$st_pre';
dec $trial;
}
--enable_query_log
xa recover;
drop table t1;

View File

@ -751,6 +751,8 @@ show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 10 NULL NULL YES BTREE
set aria_stats_method=nulls_equal;
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
show variables like 'aria_stats_method';
Variable_name Value
aria_stats_method nulls_equal
@ -770,7 +772,8 @@ Table Op Msg_type Msg_text
test.t1 check status OK
show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 10 NULL NULL YES BTREE
t1 1 a 1 a A 5 NULL NULL YES BTREE
set @@use_stat_tables= @save_use_stat_tables;
set aria_stats_method=DEFAULT;
show variables like 'aria_stats_method';
Variable_name Value
@ -797,6 +800,8 @@ set aria_stats_method=nulls_ignored;
show variables like 'aria_stats_method';
Variable_name Value
aria_stats_method nulls_ignored
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
create table t1 (
a char(3), b char(4), c char(5), d char(6),
key(a,b,c,d)
@ -826,6 +831,7 @@ t1 1 a 1 a A 0 NULL NULL YES BTREE
t1 1 a 2 b A 0 NULL NULL YES BTREE
t1 1 a 3 c A 0 NULL NULL YES BTREE
t1 1 a 4 d A 0 NULL NULL YES BTREE
set @@use_stat_tables= @save_use_stat_tables;
set aria_stats_method=DEFAULT;
drop table t1;
create table t1(

View File

@ -699,6 +699,10 @@ show index from t1;
# Set nulls to be equal:
set aria_stats_method=nulls_equal;
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
show variables like 'aria_stats_method';
insert into t1 values (11);
delete from t1 where a=11;
@ -712,6 +716,7 @@ delete from t1 where a=11;
check table t1;
show index from t1;
set @@use_stat_tables= @save_use_stat_tables;
# Set nulls back to be equal
set aria_stats_method=DEFAULT;
show variables like 'aria_stats_method';
@ -733,6 +738,9 @@ drop table t1;
set aria_stats_method=nulls_ignored;
show variables like 'aria_stats_method';
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
create table t1 (
a char(3), b char(4), c char(5), d char(6),
key(a,b,c,d)
@ -751,6 +759,7 @@ delete from t1;
analyze table t1;
show index from t1;
set @@use_stat_tables= @save_use_stat_tables;
set aria_stats_method=DEFAULT;
drop table t1;

View File

@ -110,6 +110,17 @@ wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql roles_mapping fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql procs_priv fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql table_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql index_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql servers fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql table_stats fetch NULL
wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL

View File

@ -22,22 +22,22 @@ master-bin.000002 # Gtid 1 # GTID #-#-#
master-bin.000002 # Query 1 # use `test`; ALTER TABLE t comment ''
master-bin.000002 # Gtid 1 # BEGIN GTID #-#-#
master-bin.000002 # Annotate_rows 1 # INSERT INTO t SET a= 1
master-bin.000002 # Table_map 1 # table_id: 4294967298 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967298 flags: STMT_END_F
master-bin.000002 # Table_map 1 # table_id: 4294967295 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967295 flags: STMT_END_F
master-bin.000002 # Query 1 # COMMIT
master-bin.000002 # Gtid 1 # GTID #-#-#
master-bin.000002 # Query 1 # use `test`; ALTER TABLE t comment ''
master-bin.000002 # Gtid 1 # BEGIN GTID #-#-#
master-bin.000002 # Annotate_rows 1 # INSERT INTO t SET a= 2
master-bin.000002 # Table_map 1 # table_id: 4294967299 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967299 flags: STMT_END_F
master-bin.000002 # Table_map 1 # table_id: 4294967296 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967296 flags: STMT_END_F
master-bin.000002 # Query 1 # COMMIT
master-bin.000002 # Gtid 1 # GTID #-#-#
master-bin.000002 # Query 1 # use `test`; ALTER TABLE t comment ''
master-bin.000002 # Gtid 1 # BEGIN GTID #-#-#
master-bin.000002 # Annotate_rows 1 # INSERT INTO t SET a= 3
master-bin.000002 # Table_map 1 # table_id: 4294967300 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967300 flags: STMT_END_F
master-bin.000002 # Table_map 1 # table_id: 4294967297 (test.t)
master-bin.000002 # Write_rows_v1 1 # table_id: 4294967297 flags: STMT_END_F
master-bin.000002 # Query 1 # COMMIT
connection slave;
connection master;

View File

@ -0,0 +1,8 @@
include/master-slave.inc
[connection master]
connection master;
CREATE TABLE t1 (a INT);
INSERT INTO t1 SET a=1;
DROP TABLE t1;
connection slave;
include/rpl_end.inc

View File

@ -0,0 +1 @@
--rpl_semi_sync_master_enabled=0 --rpl_semi_sync_master_wait_no_slave=0

View File

@ -0,0 +1,14 @@
# The test verifies master crash of MDEV-18096 when the server starts with
# rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave = OFF
--source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
--connection master
CREATE TABLE t1 (a INT);
INSERT INTO t1 SET a=1;
DROP TABLE t1;
--sync_slave_with_master
--source include/rpl_end.inc

View File

@ -35,6 +35,8 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par
t1 1 a 1 a A 10 NULL NULL YES BTREE
'Set nulls to be equal'
SET myisam_stats_method = nulls_equal;
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
INSERT INTO t1 VALUES (11);
DELETE FROM t1 WHERE a = 11;
ANALYZE TABLE t1;
@ -51,7 +53,7 @@ Table Op Msg_type Msg_text
test.t1 check status OK
SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 a 1 a A 10 NULL NULL YES BTREE
t1 1 a 1 a A 5 NULL NULL YES BTREE
'Set nulls to be ignored'
SET myisam_stats_method = nulls_ignored;
SHOW VARIABLES LIKE 'myisam_stats_method';
@ -88,5 +90,6 @@ t1 1 a 2 b A 0 NULL NULL YES BTREE
t1 1 a 3 c A 0 NULL NULL YES BTREE
t1 1 a 4 d A 0 NULL NULL YES BTREE
SET myisam_stats_method = DEFAULT;
set @@use_stat_tables= @save_use_stat_tables;
DROP TABLE t1;
SET @@global.myisam_stats_method= @start_value;

View File

@ -65,6 +65,8 @@ SHOW INDEX FROM t1;
--echo 'Set nulls to be equal'
#=====================================
SET myisam_stats_method = nulls_equal;
set @save_use_stat_tables= @@use_stat_tables;
set @@use_stat_tables= COMPLEMENTARY;
INSERT INTO t1 VALUES (11);
DELETE FROM t1 WHERE a = 11;
@ -75,6 +77,7 @@ DELETE FROM t1 WHERE a = 11;
CHECK TABLE t1;
SHOW INDEX FROM t1;
#=====================================
--echo 'Set nulls to be ignored'
#=====================================
@ -98,6 +101,7 @@ ANALYZE TABLE t1;
SHOW INDEX FROM t1;
SET myisam_stats_method = DEFAULT;
set @@use_stat_tables= @save_use_stat_tables;
DROP TABLE t1;
SET @@global.myisam_stats_method= @start_value;

View File

@ -993,6 +993,8 @@ void Gcalc_heap::reset()
{
if (m_n_points)
{
if (m_hook)
*m_hook= NULL;
free_list(m_first);
m_n_points= 0;
}

View File

@ -2194,6 +2194,7 @@ int ha_recover(HASH *commit_list)
for (info.len= MAX_XID_LIST_SIZE ;
info.list==0 && info.len > MIN_XID_LIST_SIZE; info.len/=2)
{
DBUG_EXECUTE_IF("min_xa_len", info.len = 16;);
info.list=(XID *)my_malloc(info.len*sizeof(XID), MYF(0));
}
if (!info.list)

View File

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, MariaDB
Copyright (c) 2009, 2019, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -228,7 +228,7 @@ bool Active_tranx::is_tranx_end_pos(const char *log_file_name,
DBUG_RETURN(entry != NULL);
}
int Active_tranx::clear_active_tranx_nodes(const char *log_file_name,
void Active_tranx::clear_active_tranx_nodes(const char *log_file_name,
my_off_t log_file_pos)
{
Tranx_node *new_front;
@ -307,7 +307,7 @@ int Active_tranx::clear_active_tranx_nodes(const char *log_file_name,
m_trx_front->log_name, (ulong)m_trx_front->log_pos));
}
DBUG_RETURN(0);
DBUG_VOID_RETURN;
}
@ -371,20 +371,21 @@ int Repl_semi_sync_master::init_object()
{
result = enable_master();
if (!result)
{
result= ack_receiver.start(); /* Start the ACK thread. */
/*
If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily
switch off semisync to avoid hang if there's none active slave.
*/
if (!rpl_semi_sync_master_wait_no_slave)
switch_off();
}
}
else
{
result = disable_master();
}
/*
If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily
switch off semisync to avoid hang if there's none active slave.
*/
if (!rpl_semi_sync_master_wait_no_slave)
switch_off();
return result;
}
@ -961,17 +962,15 @@ int Repl_semi_sync_master::commit_trx(const char* trx_wait_binlog_name,
* the current sending event catches up with last wait position. If it
* does match, semi-sync will be switched on again.
*/
int Repl_semi_sync_master::switch_off()
void Repl_semi_sync_master::switch_off()
{
int result;
DBUG_ENTER("Repl_semi_sync_master::switch_off");
m_state = false;
/* Clear the active transaction list. */
assert(m_active_tranxs != NULL);
result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0);
m_active_tranxs->clear_active_tranx_nodes(NULL, 0);
rpl_semi_sync_master_off_times++;
m_wait_file_name_inited = false;
@ -979,7 +978,7 @@ int Repl_semi_sync_master::switch_off()
sql_print_information("Semi-sync replication switched OFF.");
cond_broadcast(); /* wake up all waiting threads */
DBUG_RETURN(result);
DBUG_VOID_RETURN;
}
int Repl_semi_sync_master::try_switch_on(int server_id,

View File

@ -343,11 +343,8 @@ public:
* position.
* If log_file_name is NULL, everything will be cleared: the sorted
* list and the hash table will be reset to empty.
*
* Return:
* 0: success; non-zero: error
*/
int clear_active_tranx_nodes(const char *log_file_name,
void clear_active_tranx_nodes(const char *log_file_name,
my_off_t log_file_pos);
/* Given a position, check to see whether the position is an active
@ -449,7 +446,7 @@ class Repl_semi_sync_master
}
/* Switch semi-sync off because of timeout in transaction waiting. */
int switch_off();
void switch_off();
/* Switch semi-sync on when slaves catch up. */
int try_switch_on(int server_id,

View File

@ -181,6 +181,7 @@ sp_get_flags_for_command(LEX *lex)
case SQLCOM_SHOW_EXPLAIN:
case SQLCOM_SHOW_FIELDS:
case SQLCOM_SHOW_FUNC_CODE:
case SQLCOM_SHOW_GENERIC:
case SQLCOM_SHOW_GRANTS:
case SQLCOM_SHOW_ENGINE_STATUS:
case SQLCOM_SHOW_ENGINE_LOGS:
@ -3213,7 +3214,7 @@ sp_head::show_routine_code(THD *thd)
const char *format= "Instruction at position %u has m_ip=%u";
char tmp[sizeof(format) + 2*SP_INSTR_UINT_MAXLEN + 1];
sprintf(tmp, format, ip, i->m_ip);
my_snprintf(tmp, sizeof(tmp), format, ip, i->m_ip);
/*
Since this is for debugging purposes only, we don't bother to
introduce a special error code for it.

View File

@ -2428,6 +2428,9 @@ public:
*/
bool create_tmp_table_for_derived;
/* The flag to force reading statistics from EITS tables */
bool force_read_stats;
bool save_prep_leaf_list;
/* container for handler's private per-connection data */

View File

@ -1659,9 +1659,27 @@ int Lex_input_stream::lex_one_token(YYSTYPE *yylval, THD *thd)
return(FLOAT_NUM);
}
}
/*
We've found:
- A sequence of digits
- Followed by 'e' or 'E'
- Followed by some byte XX which is not a known mantissa start,
and it's known to be a valid identifier part.
XX can be either a 8bit identifier character, or a multi-byte head.
*/
yyUnget();
return scan_ident_start(thd, &yylval->ident_cli);
}
// fall through
/*
We've found:
- A sequence of digits
- Followed by some character XX, which is neither 'e' nor 'E',
and it's known to be a valid identifier part.
XX can be a 8bit identifier character, or a multi-byte head.
*/
yyUnget();
return scan_ident_start(thd, &yylval->ident_cli);
case MY_LEX_IDENT_START: // We come here after '.'
return scan_ident_start(thd, &yylval->ident_cli);

View File

@ -2975,15 +2975,14 @@ static bool do_execute_sp(THD *thd, sp_head *sp)
my_error(ER_SP_BADSELECT, MYF(0), ErrConvDQName(sp).ptr());
return 1;
}
/*
If SERVER_MORE_RESULTS_EXISTS is not set,
then remember that it should be cleared
*/
bits_to_be_cleared= (~thd->server_status &
SERVER_MORE_RESULTS_EXISTS);
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
}
/*
If SERVER_MORE_RESULTS_EXISTS is not set,
then remember that it should be cleared
*/
bits_to_be_cleared= (~thd->server_status &
SERVER_MORE_RESULTS_EXISTS);
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
ha_rows select_limit= thd->variables.select_limit;
thd->variables.select_limit= HA_POS_ERROR;

View File

@ -3725,7 +3725,8 @@ JOIN::create_postjoin_aggr_table(JOIN_TAB *tab, List<Item> *table_fields,
if (setup_sum_funcs(thd, sum_funcs))
goto err;
if (!group_list && !table->distinct && order && simple_order)
if (!group_list && !table->distinct && order && simple_order &&
tab == join_tab + const_tables)
{
DBUG_PRINT("info",("Sorting for order"));
THD_STAGE_INFO(thd, stage_sorting_for_order);

View File

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, MariaDB
Copyright (c) 2009, 2019, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -4640,7 +4640,10 @@ fill_schema_table_by_open(THD *thd, MEM_ROOT *mem_root,
}
DBUG_ASSERT(thd->lex == lex);
thd->force_read_stats= get_schema_table_idx(schema_table) == SCH_STATISTICS;
result= open_tables_only_view_structure(thd, table_list, can_deadlock);
(void) read_statistics_for_tables_if_needed(thd, table_list);
thd->force_read_stats= false;
DEBUG_SYNC(thd, "after_open_table_ignore_flush");
@ -6302,7 +6305,8 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
sph= Sp_handler::handler_mysql_proc((stored_procedure_type)
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->
val_int());
if (!sph)
if (!sph || sph->type() == TYPE_ENUM_PACKAGE ||
sph->type() == TYPE_ENUM_PACKAGE_BODY)
DBUG_RETURN(0);
if (!full_access)

View File

@ -2215,7 +2215,10 @@ inline bool statistics_for_command_is_needed(THD *thd)
{
if (thd->bootstrap || thd->variables.use_stat_tables == NEVER)
return FALSE;
if (thd->force_read_stats)
return TRUE;
switch(thd->lex->sql_command) {
case SQLCOM_SELECT:
case SQLCOM_INSERT:
@ -4148,6 +4151,9 @@ bool is_eits_usable(Field *field)
partition list of a table. We assume the selecticivity for
such columns would be handled during partition pruning.
*/
#if 0 /* Work around MDEV-19334 */
DBUG_ASSERT(field->table->stats_is_read);
#endif
Column_statistics* col_stats= field->read_stats;
return col_stats && !col_stats->no_stat_values_provided() && //(1)
field->type() != MYSQL_TYPE_GEOMETRY && //(2)

View File

@ -977,11 +977,6 @@ public:
{
length(0);
}
StringBuffer(const char *str, size_t length_arg, CHARSET_INFO *cs)
: String(buff, buff_sz, cs)
{
set(str, length_arg, cs);
}
};

View File

@ -403,6 +403,8 @@ int mysql_update(THD *thd,
if (lock_tables(thd, table_list, table_count, 0))
DBUG_RETURN(1);
(void) read_statistics_for_tables_if_needed(thd, table_list);
THD_STAGE_INFO(thd, stage_init_update);
if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT))
DBUG_RETURN(1);
@ -1807,6 +1809,7 @@ int mysql_multi_update_prepare(THD *thd)
{
DBUG_RETURN(TRUE);
}
(void) read_statistics_for_tables_if_needed(thd, table_list);
/* @todo: downgrade the metadata locks here. */
/*

View File

@ -455,6 +455,22 @@ int compare_order_lists(SQL_I_List<ORDER> *part_list1,
for ( ; elem1 && elem2; elem1= elem1->next, elem2= elem2->next)
{
int cmp;
// remove all constants as we don't need them for comparision
while(elem1 && ((*elem1->item)->real_item())->const_item())
{
elem1= elem1->next;
continue;
}
while(elem2 && ((*elem2->item)->real_item())->const_item())
{
elem2= elem2->next;
continue;
}
if (!elem1 || !elem2)
break;
if ((cmp= compare_order_elements(elem1, elem2)))
return cmp;
}

View File

@ -1671,7 +1671,6 @@ void ha_archive::update_create_info(HA_CREATE_INFO *create_info)
DBUG_VOID_RETURN;
}
/*
Hints for optimizer, see ha_tina for more information
*/
@ -1679,22 +1678,7 @@ int ha_archive::info(uint flag)
{
DBUG_ENTER("ha_archive::info");
mysql_mutex_lock(&share->mutex);
if (share->dirty)
{
DBUG_PRINT("ha_archive", ("archive flushing out rows for scan"));
DBUG_ASSERT(share->archive_write_open);
azflush(&(share->archive_write), Z_SYNC_FLUSH);
share->dirty= FALSE;
}
/*
This should be an accurate number now, though bulk and delayed inserts can
cause the number to be inaccurate.
*/
stats.records= share->rows_recorded;
mysql_mutex_unlock(&share->mutex);
flush_and_clear_pending_writes();
stats.deleted= 0;
DBUG_PRINT("ha_archive", ("Stats rows is %d\n", (int)stats.records));
@ -1737,6 +1721,38 @@ int ha_archive::info(uint flag)
}
int ha_archive::external_lock(THD *thd, int lock_type)
{
if (lock_type == F_RDLCK)
{
// We are going to read from the table. Flush any pending writes that we
// may have
flush_and_clear_pending_writes();
}
return 0;
}
void ha_archive::flush_and_clear_pending_writes()
{
mysql_mutex_lock(&share->mutex);
if (share->dirty)
{
DBUG_PRINT("ha_archive", ("archive flushing out rows for scan"));
DBUG_ASSERT(share->archive_write_open);
azflush(&(share->archive_write), Z_SYNC_FLUSH);
share->dirty= FALSE;
}
/*
This should be an accurate number now, though bulk and delayed inserts can
cause the number to be inaccurate.
*/
stats.records= share->rows_recorded;
mysql_mutex_unlock(&share->mutex);
}
int ha_archive::extra(enum ha_extra_function operation)
{
switch (operation) {

View File

@ -170,5 +170,8 @@ public:
int unpack_row(azio_stream *file_to_read, uchar *record);
unsigned int pack_row(uchar *record, azio_stream *writer);
bool check_if_incompatible_data(HA_CREATE_INFO *info, uint table_changes);
int external_lock(THD *thd, int lock_type);
private:
void flush_and_clear_pending_writes();
};

View File

@ -3891,10 +3891,6 @@ got_block:
}
}
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(page_id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
return(bpage);
}
@ -4672,15 +4668,9 @@ evict_from_pool:
}
}
if (!recv_no_ibuf_operations) {
if (access_time) {
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(page_id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
} else {
ibuf_merge_or_delete_for_page(
block, block->page.id, zip_size, true);
}
if (!access_time && !recv_no_ibuf_operations) {
ibuf_merge_or_delete_for_page(
block, block->page.id, zip_size, true);
}
buf_pool_mutex_enter(buf_pool);
@ -4882,10 +4872,6 @@ evict_from_pool:
buf_read_ahead_linear(page_id, zip_size, ibuf_inside(mtr));
}
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(fix_block->page.id) == 0);
#endif
ut_ad(!rw_lock_own_flagged(hash_lock,
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
@ -4993,10 +4979,6 @@ buf_page_optimistic_get(
ibuf_inside(mtr));
}
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(block->page.id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
buf_pool = buf_pool_from_block(block);
buf_pool->stat.n_page_gets++;
@ -5100,9 +5082,6 @@ buf_page_get_known_nowait(
}
#endif /* UNIV_DEBUG */
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a((mode == BUF_KEEP_OLD) || ibuf_count_get(block->page.id) == 0);
#endif
buf_pool->stat.n_page_gets++;
return(TRUE);
@ -5187,10 +5166,6 @@ buf_page_try_get_func(
buf_pool->stat.n_page_gets++;
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(block->page.id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
return(block);
}
@ -5584,11 +5559,6 @@ buf_page_create(
if (block
&& buf_page_in_file(&block->page)
&& !buf_pool_watch_is_sentinel(buf_pool, &block->page)) {
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(page_id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
ut_d(block->page.file_page_was_freed = FALSE);
/* Page can be found in buf_pool */
@ -5693,9 +5663,6 @@ buf_page_create(
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
ut_a(++buf_dbg_counter % 5771 || buf_validate());
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(block->page.id) == 0);
#endif
return(block);
}
@ -6172,14 +6139,6 @@ database_corrupted:
buf_pool_mutex_enter(buf_pool);
mutex_enter(block_mutex);
#ifdef UNIV_IBUF_COUNT_DEBUG
if (io_type == BUF_IO_WRITE || uncompressed) {
/* For BUF_IO_READ of compressed-only blocks, the
buffered operations will be merged by buf_page_get_gen()
after the block has been uncompressed. */
ut_a(ibuf_count_get(bpage->id) == 0);
}
#endif
/* Because this thread which does the unlocking is not the same that
did the locking, we use a pass value != 0 in unlock, which simply
removes the newest lock debug record, without checking the thread
@ -6408,11 +6367,6 @@ buf_pool_validate_instance(
buf_pool, block->page.id)
== &block->page);
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(buf_page_get_io_fix(&block->page)
== BUF_IO_READ
|| !ibuf_count_get(block->page.id));
#endif
switch (buf_page_get_io_fix(&block->page)) {
case BUF_IO_NONE:
break;

View File

@ -990,11 +990,6 @@ buf_flush_write_block_low(
ut_ad(!buf_page_get_mutex(bpage)->is_owned());
ut_ad(buf_page_get_io_fix(bpage) == BUF_IO_WRITE);
ut_ad(bpage->oldest_modification != 0);
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(bpage->id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
ut_ad(bpage->newest_modification != 0);
/* Force the log to the disk before writing the modified block */

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2018, MariaDB Corporation.
Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -1595,10 +1595,6 @@ buf_LRU_free_page(
goto func_exit;
}
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(bpage->id) == 0);
#endif /* UNIV_IBUF_COUNT_DEBUG */
if (zip || !bpage->zip.data) {
/* This would completely free the block. */
/* Do not completely free dirty blocks. */

View File

@ -4345,11 +4345,19 @@ dict_create_foreign_constraints_low(
}
orig = ptr;
ptr = dict_accept(cs, ptr, "TABLE", &success);
if (!success) {
goto loop;
for (;;) {
ptr = dict_accept(cs, ptr, "TABLE", &success);
if (success) {
break;
}
ptr = dict_accept(cs, ptr, "ONLINE", &success);
if (success) {
continue;
}
ptr = dict_accept(cs, ptr, "IGNORE", &success);
if (!success) {
goto loop;
}
}
/* We are doing an ALTER TABLE: scan the table name we are altering */

View File

@ -192,35 +192,6 @@ uint ibuf_debug;
/** The insert buffer control structure */
ibuf_t* ibuf = NULL;
#ifdef UNIV_IBUF_COUNT_DEBUG
/** Number of tablespaces in the ibuf_counts array */
#define IBUF_COUNT_N_SPACES 4
/** Number of pages within each tablespace in the ibuf_counts array */
#define IBUF_COUNT_N_PAGES 130000
/** Buffered entry counts for file pages, used in debugging */
static ulint ibuf_counts[IBUF_COUNT_N_SPACES][IBUF_COUNT_N_PAGES];
/** Checks that the indexes to ibuf_counts[][] are within limits.
@param[in] page_id page id */
UNIV_INLINE
void
ibuf_count_check(
const page_id_t page_id)
{
if (page_id.space() < IBUF_COUNT_N_SPACES
&& page_id.page_no() < IBUF_COUNT_N_PAGES) {
return;
}
ib::fatal() << "UNIV_IBUF_COUNT_DEBUG limits space_id and page_no"
" and breaks crash recovery. space_id=" << page_id.space()
<< ", should be 0<=space_id<" << IBUF_COUNT_N_SPACES
<< ". page_no=" << page_id.page_no()
<< ", should be 0<=page_no<" << IBUF_COUNT_N_PAGES;
}
#endif
/** @name Offsets to the per-page bits in the insert buffer bitmap */
/* @{ */
#define IBUF_BITMAP_FREE 0 /*!< Bits indicating the
@ -407,35 +378,6 @@ ibuf_tree_root_get(
return(root);
}
#ifdef UNIV_IBUF_COUNT_DEBUG
/** Gets the ibuf count for a given page.
@param[in] page_id page id
@return number of entries in the insert buffer currently buffered for
this page */
ulint ibuf_count_get(const page_id_t page_id)
{
ibuf_count_check(page_id);
return(ibuf_counts[page_id.space()][page_id.page_no()]);
}
/** Sets the ibuf count for a given page.
@param[in] page_id page id
@param[in] val value to set */
static
void
ibuf_count_set(
const page_id_t page_id,
ulint val)
{
ibuf_count_check(page_id);
ut_a(val < srv_page_size);
ibuf_counts[page_id.space()][page_id.page_no()] = val;
}
#endif
/******************************************************************//**
Closes insert buffer and frees the data structures. */
void
@ -705,10 +647,6 @@ ibuf_bitmap_page_set_bits(
compile_time_assert(!(IBUF_BITS_PER_PAGE % 2));
ut_ad(mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_X_FIX));
ut_ad(mtr->is_named_space(page_id.space()));
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a((bit != IBUF_BITMAP_BUFFERED) || (val != FALSE)
|| (0 == ibuf_count_get(page_id)));
#endif
bit_offset = (page_id.page_no() % physical_size)
* IBUF_BITS_PER_PAGE + bit;
@ -3463,9 +3401,6 @@ fail_exit:
which it cannot do until we have buffered the IBUF_OP_DELETE
and done mtr_commit(&mtr) to release the latch. */
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a((buffered == 0) || ibuf_count_get(page_id));
#endif
ibuf_mtr_start(&bitmap_mtr);
index->set_modified(bitmap_mtr);
@ -3608,17 +3543,6 @@ fail_exit:
}
func_exit:
#ifdef UNIV_IBUF_COUNT_DEBUG
if (err == DB_SUCCESS) {
ib::info() << "Incrementing ibuf count of page " << page_id
<< " from " << ibuf_count_get(space, page_no)
<< " by 1";
ibuf_count_set(page_id, ibuf_count_get(page_id) + 1);
}
#endif
ibuf_mtr_commit(&mtr);
btr_pcur_close(&pcur);
@ -4302,14 +4226,6 @@ ibuf_delete_rec(
ibuf->empty = true;
}
#ifdef UNIV_IBUF_COUNT_DEBUG
ib::info() << "Decrementing ibuf count of space " << space
<< " page " << page_no << " from "
<< ibuf_count_get(page_id) << " by 1";
ibuf_count_set(page_id, ibuf_count_get(page_id) - 1);
#endif /* UNIV_IBUF_COUNT_DEBUG */
return(FALSE);
}
@ -4345,10 +4261,6 @@ ibuf_delete_rec(
false, mtr);
ut_a(err == DB_SUCCESS);
#ifdef UNIV_IBUF_COUNT_DEBUG
ibuf_count_set(page_id, ibuf_count_get(page_id) - 1);
#endif /* UNIV_IBUF_COUNT_DEBUG */
ibuf_size_update(root);
mutex_exit(&ibuf_mutex);
@ -4717,10 +4629,6 @@ reset_bit:
ibuf->n_merges++;
ibuf_add_ops(ibuf->n_merged_ops, mops);
ibuf_add_ops(ibuf->n_discarded_ops, dops);
#ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(page_id) == 0);
#endif
}
/*********************************************************************//**
@ -4838,11 +4746,6 @@ ibuf_print(
/*=======*/
FILE* file) /*!< in: file where to print */
{
#ifdef UNIV_IBUF_COUNT_DEBUG
ulint i;
ulint j;
#endif
mutex_enter(&ibuf_mutex);
fprintf(file,
@ -4859,22 +4762,6 @@ ibuf_print(
fputs("discarded operations:\n ", file);
ibuf_print_ops(ibuf->n_discarded_ops, file);
#ifdef UNIV_IBUF_COUNT_DEBUG
for (i = 0; i < IBUF_COUNT_N_SPACES; i++) {
for (j = 0; j < IBUF_COUNT_N_PAGES; j++) {
ulint count = ibuf_count_get(page_id_t(i, j, 0));
if (count > 0) {
fprintf(stderr,
"Ibuf count for page "
ULINTPF ":" ULINTPF ""
" is " ULINTPF "\n",
i, j, count);
}
}
}
#endif /* UNIV_IBUF_COUNT_DEBUG */
mutex_exit(&ibuf_mutex);
}

View File

@ -368,13 +368,6 @@ ibuf_merge_space(
/** Apply MLOG_IBUF_BITMAP_INIT when crash-upgrading */
ATTRIBUTE_COLD void ibuf_bitmap_init_apply(buf_block_t* block);
#ifdef UNIV_IBUF_COUNT_DEBUG
/** Gets the ibuf count for a given page.
@param[in] page_id page id
@return number of entries in the insert buffer currently buffered for
this page */
ulint ibuf_count_get(const page_id_t page_id);
#endif
/******************************************************************//**
Looks if the insert buffer is empty.
@return true if empty */

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2018, MariaDB Corporation.
Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -431,6 +431,7 @@ class rw_trx_hash_t
if (trx_t *trx= element->trx)
{
ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED) ||
trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED) ||
(trx_state_eq(trx, TRX_STATE_ACTIVE) &&
(!srv_was_started ||
srv_read_only_mode ||
@ -515,6 +516,7 @@ class rw_trx_hash_t
ut_ad(!trx_is_autocommit_non_locking(trx));
mutex_enter(&trx->mutex);
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE) ||
trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED) ||
trx_state_eq(trx, TRX_STATE_PREPARED));
mutex_exit(&trx->mutex);
}

View File

@ -447,7 +447,7 @@ Check transaction state */
ut_ad(!trx_is_autocommit_non_locking((t))); \
switch ((t)->state) { \
case TRX_STATE_PREPARED: \
/* fall through */ \
case TRX_STATE_PREPARED_RECOVERED: \
case TRX_STATE_ACTIVE: \
case TRX_STATE_COMMITTED_IN_MEMORY: \
continue; \
@ -794,6 +794,7 @@ public:
TRX_STATE_NOT_STARTED
TRX_STATE_ACTIVE
TRX_STATE_PREPARED
TRX_STATE_PREPARED_RECOVERED (special case of TRX_STATE_PREPARED)
TRX_STATE_COMMITTED_IN_MEMORY (alias below COMMITTED)
Valid state transitions are:

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2015, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -47,7 +47,7 @@ trx_state_eq(
#ifdef UNIV_DEBUG
switch (trx->state) {
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
ut_ad(!trx_is_autocommit_non_locking(trx));
return(trx->state == state);

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2018, MariaDB Corporation.
Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -62,10 +62,11 @@ enum trx_state_t {
TRX_STATE_NOT_STARTED,
TRX_STATE_ACTIVE,
/** Support for 2PC/XA */
/** XA PREPARE has been executed; only XA COMMIT or XA ROLLBACK
are possible */
TRX_STATE_PREPARED,
/** XA PREPARE transaction that was returned to ha_recover() */
TRX_STATE_PREPARED_RECOVERED,
TRX_STATE_COMMITTED_IN_MEMORY
};

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2013, 2018, MariaDB Corporation.
Copyright (c) 2013, 2019, MariaDB Corporation.
Copyright (c) 2008, Google Inc.
Portions of this file contain modifications contributed and copyrighted by
@ -206,9 +206,6 @@ using the call command. */
this will break redo log file compatibility, but it may be useful when
debugging redo log application problems. */
#define UNIV_IBUF_DEBUG /* debug the insert buffer */
#define UNIV_IBUF_COUNT_DEBUG /* debug the insert buffer;
this limits the database to IBUF_COUNT_N_SPACES and IBUF_COUNT_N_PAGES,
and the insert buffer must be empty when the database is started */
#define UNIV_PERF_DEBUG /* debug flag that enables
light weight performance
related stuff. */

View File

@ -6301,6 +6301,7 @@ lock_trx_release_locks(
{
check_trx_state(trx);
ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED)
|| trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED)
|| trx_state_eq(trx, TRX_STATE_ACTIVE));
bool release_lock = UT_LIST_GET_LEN(trx->lock.trx_locks) > 0;

View File

@ -130,6 +130,7 @@ row_undo_node_create(
undo_node_t* undo;
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE)
|| trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED)
|| trx_state_eq(trx, TRX_STATE_PREPARED));
ut_ad(parent);

View File

@ -1306,10 +1306,6 @@ dberr_t srv_start(bool create_new_db)
#ifdef UNIV_IBUF_DEBUG
ib::info() << "!!!!!!!! UNIV_IBUF_DEBUG switched on !!!!!!!!!";
# ifdef UNIV_IBUF_COUNT_DEBUG
ib::info() << "!!!!!!!! UNIV_IBUF_COUNT_DEBUG switched on !!!!!!!!!";
ib::error() << "Crash recovery will fail with UNIV_IBUF_COUNT_DEBUG";
# endif
#endif
#ifdef UNIV_LOG_LSN_DEBUG

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -237,6 +237,7 @@ dberr_t trx_rollback_for_mysql(trx_t* trx)
return(trx_rollback_for_mysql_low(trx));
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
ut_ad(!trx_is_autocommit_non_locking(trx));
if (trx->rsegs.m_redo.undo || trx->rsegs.m_redo.old_insert) {
/* Change the undo log state back from
@ -336,6 +337,7 @@ trx_rollback_last_sql_stat_for_mysql(
return(err);
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
/* The statement rollback is only allowed on an ACTIVE
transaction, not a PREPARED or COMMITTED one. */
@ -505,6 +507,7 @@ trx_rollback_to_savepoint_for_mysql(
trx, savep, mysql_binlog_cache_pos));
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
/* The savepoint rollback is only allowed on an ACTIVE
transaction, not a PREPARED or COMMITTED one. */

View File

@ -471,6 +471,7 @@ trx_free_at_shutdown(trx_t *trx)
{
ut_ad(trx->is_recovered);
ut_a(trx_state_eq(trx, TRX_STATE_PREPARED)
|| trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED)
|| (trx_state_eq(trx, TRX_STATE_ACTIVE)
&& (!srv_was_started
|| srv_operation == SRV_OPERATION_RESTORE
@ -1603,7 +1604,7 @@ trx_commit_or_rollback_prepare(
case TRX_STATE_ACTIVE:
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
/* If the trx is in a lock wait state, moves the waiting
query thread to the suspended state */
@ -1714,7 +1715,7 @@ trx_commit_for_mysql(
/* fall through */
case TRX_STATE_ACTIVE:
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
trx->op_info = "committing";
trx_commit(trx);
@ -1760,6 +1761,7 @@ trx_mark_sql_stat_end(
switch (trx->state) {
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
break;
case TRX_STATE_NOT_STARTED:
@ -1814,6 +1816,7 @@ trx_print_low(
(ulong) difftime(time(NULL), trx->start_time));
goto state_ok;
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
fprintf(f, ", ACTIVE (PREPARED) %lu sec",
(ulong) difftime(time(NULL), trx->start_time));
goto state_ok;
@ -2093,6 +2096,7 @@ struct trx_recover_for_mysql_callback_arg
static my_bool trx_recover_for_mysql_callback(rw_trx_hash_element_t *element,
trx_recover_for_mysql_callback_arg *arg)
{
DBUG_ASSERT(arg->len > 0);
mutex_enter(&element->mutex);
if (trx_t *trx= element->trx)
{
@ -2104,17 +2108,38 @@ static my_bool trx_recover_for_mysql_callback(rw_trx_hash_element_t *element,
if (trx_state_eq(trx, TRX_STATE_PREPARED))
{
ut_ad(trx->is_recovered);
ut_ad(trx->id);
if (arg->count == 0)
ib::info() << "Starting recovery for XA transactions...";
ib::info() << "Transaction " << trx_get_id_for_print(trx)
<< " in prepared state after recovery";
ib::info() << "Transaction contains changes to " << trx->undo_no
<< " rows";
arg->xid_list[arg->count++]= *trx->xid;
XID& xid= arg->xid_list[arg->count];
if (arg->count++ < arg->len)
{
trx->state= TRX_STATE_PREPARED_RECOVERED;
ib::info() << "Transaction " << trx->id
<< " in prepared state after recovery";
ib::info() << "Transaction contains changes to " << trx->undo_no
<< " rows";
xid= *trx->xid;
}
}
}
mutex_exit(&element->mutex);
return arg->count == arg->len;
/* Do not terminate upon reaching arg->len; count all transactions */
return false;
}
static my_bool trx_recover_reset_callback(rw_trx_hash_element_t *element,
void*)
{
mutex_enter(&element->mutex);
if (trx_t *trx= element->trx)
{
if (trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED))
trx->state= TRX_STATE_PREPARED;
}
mutex_exit(&element->mutex);
return false;
}
@ -2138,9 +2163,18 @@ int trx_recover_for_mysql(XID *xid_list, uint len)
trx_sys.rw_trx_hash.iterate_no_dups(reinterpret_cast<my_hash_walk_action>
(trx_recover_for_mysql_callback), &arg);
if (arg.count)
{
ib::info() << arg.count
<< " transactions in prepared state after recovery";
return int(arg.count);
<< " transactions in prepared state after recovery";
/* After returning the full list, reset the state, because
init_server_components() wants to recover the collection of
transactions twice, by first calling tc_log->open() and then
ha_recover() directly. */
if (arg.count <= len)
trx_sys.rw_trx_hash.iterate(reinterpret_cast<my_hash_walk_action>
(trx_recover_reset_callback), NULL);
}
return int(std::min(arg.count, len));
}
@ -2158,7 +2192,9 @@ static my_bool trx_get_trx_by_xid_callback(rw_trx_hash_element_t *element,
mutex_enter(&element->mutex);
if (trx_t *trx= element->trx)
{
if (trx->is_recovered && trx_state_eq(trx, TRX_STATE_PREPARED) &&
if (trx->is_recovered &&
(trx_state_eq(trx, TRX_STATE_PREPARED) ||
trx_state_eq(trx, TRX_STATE_PREPARED_RECOVERED)) &&
arg->xid->eq(reinterpret_cast<XID*>(trx->xid)))
{
#ifdef WITH_WSREP
@ -2224,6 +2260,7 @@ trx_start_if_not_started_xa_low(
}
return;
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
break;
}
@ -2251,6 +2288,7 @@ trx_start_if_not_started_low(
return;
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
break;
}
@ -2317,6 +2355,7 @@ trx_start_for_ddl_low(
case TRX_STATE_ACTIVE:
case TRX_STATE_PREPARED:
case TRX_STATE_PREPARED_RECOVERED:
case TRX_STATE_COMMITTED_IN_MEMORY:
break;
}

View File

@ -362,7 +362,7 @@ int test_write(MARIA_HA *file,int id,int lock_type)
maria_extra(file,HA_EXTRA_WRITE_CACHE,0);
}
sprintf((char*) record.id,"%7ld", (long) getpid());
my_snprintf((char*) record.id, sizeof(record.id), "%7ld", (long) getpid());
strnmov((char*) record.text,"Testing...", sizeof(record.text));
tries=(uint) rnd(100)+10;

View File

@ -1731,8 +1731,8 @@ static void descript(HA_CHECK *param, register MARIA_HA *info, char *name)
null_bit[0]=null_pos[0]=0;
if (keyseg->null_bit)
{
sprintf(null_bit,"%d",keyseg->null_bit);
sprintf(null_pos,"%ld",(long) keyseg->null_pos+1);
my_snprintf(null_bit, sizeof(null_bit), "%d", keyseg->null_bit);
my_snprintf(null_pos, sizeof(null_pos), "%ld", (long) keyseg->null_pos+1);
}
printf("%-7ld%-5d%-9s%-10s%-30s\n",
(long) keyseg->start+1,keyseg->length,

View File

@ -365,7 +365,7 @@ int test_write(MI_INFO *file,int id,int lock_type)
mi_extra(file,HA_EXTRA_WRITE_CACHE,0);
}
sprintf((char*) record.id,"%7ld",(long) getpid());
my_snprintf((char*) record.id, sizeof(record.id), "%7ld", (long) getpid());
strnmov((char*) record.text,"Testing...", sizeof(record.text));
tries=(uint) rnd(100)+10;

View File

@ -1405,8 +1405,8 @@ static void descript(HA_CHECK *param, register MI_INFO *info, char * name)
null_bit[0]=null_pos[0]=0;
if (keyseg->null_bit)
{
sprintf(null_bit,"%d",keyseg->null_bit);
sprintf(null_pos,"%ld",(long) keyseg->null_pos+1);
my_snprintf(null_bit, sizeof(null_bit), "%d", keyseg->null_bit);
my_snprintf(null_pos, sizeof(null_pos), "%ld", (long) keyseg->null_pos+1);
}
printf("%-7ld%-5d%-9s%-10s%-30s\n",
(long) keyseg->start+1,keyseg->length,

View File

@ -34,14 +34,8 @@ struct PFS_events
ulonglong m_event_id;
/** END_EVENT_ID. */
ulonglong m_end_event_id;
/** (EVENT_TYPE) */
enum_event_type m_event_type;
/** NESTING_EVENT_ID. */
ulonglong m_nesting_event_id;
/** NESTING_EVENT_TYPE */
enum_event_type m_nesting_event_type;
/** Instrument metadata. */
PFS_instr_class *m_class;
/**
Timer start.
This member is populated only if m_class->m_timed is true.
@ -52,8 +46,14 @@ struct PFS_events
This member is populated only if m_class->m_timed is true.
*/
ulonglong m_timer_end;
/** Instrument metadata. */
PFS_instr_class *m_class;
/** Location of the instrumentation in the source code (file name). */
const char *m_source_file;
/** (EVENT_TYPE) */
enum_event_type m_event_type;
/** NESTING_EVENT_TYPE */
enum_event_type m_nesting_event_type;
/** Location of the instrumentation in the source code (line number). */
uint m_source_line;
};

View File

@ -55,6 +55,23 @@ enum events_waits_class
/** A wait event record. */
struct PFS_events_waits : public PFS_events
{
/** Executing thread. */
PFS_thread *m_thread;
/** Table share, for table operations only. */
PFS_table_share *m_weak_table_share;
/** File, for file operations only. */
PFS_file *m_weak_file;
/** Address in memory of the object instance waited on. */
const void *m_object_instance_addr;
/** Socket, for socket operations only. */
PFS_socket *m_weak_socket;
/**
Number of bytes read/written.
This member is populated for file READ/WRITE operations only.
*/
size_t m_number_of_bytes;
/** Flags */
ulong m_flags;
/**
The type of wait.
Readers:
@ -67,34 +84,17 @@ struct PFS_events_waits : public PFS_events
- TRUNCATE EVENTS_WAITS_HISTORY_LONG
*/
events_waits_class m_wait_class;
/** Executing thread. */
PFS_thread *m_thread;
/** Object type */
enum_object_type m_object_type;
/** Table share, for table operations only. */
PFS_table_share *m_weak_table_share;
/** File, for file operations only. */
PFS_file *m_weak_file;
/** Socket, for socket operations only. */
PFS_socket *m_weak_socket;
/** For weak pointers, target object version. */
uint32 m_weak_version;
/** Address in memory of the object instance waited on. */
const void *m_object_instance_addr;
/** Operation performed. */
enum_operation_type m_operation;
/**
Number of bytes read/written.
This member is populated for file READ/WRITE operations only.
*/
size_t m_number_of_bytes;
/**
Index used.
This member is populated for TABLE IO operations only.
*/
uint m_index;
/** Flags */
ulong m_flags;
};
/** TIMED bit in the state flags bitfield. */