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:
commit
e6bdf77e4b
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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 #
|
||||
|
@ -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';
|
||||
|
@ -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 #
|
||||
|
@ -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
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
#
|
||||
#
|
||||
|
@ -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 #
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 #
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
#
|
||||
#
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
#
|
||||
#
|
||||
|
@ -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 #
|
||||
|
24
mysql-test/suite/archive/archive_eits.result
Normal file
24
mysql-test/suite/archive/archive_eits.result
Normal 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;
|
32
mysql-test/suite/archive/archive_eits.test
Normal file
32
mysql-test/suite/archive/archive_eits.test
Normal 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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
361
mysql-test/suite/innodb/r/xa_debug.result
Normal file
361
mysql-test/suite/innodb/r/xa_debug.result
Normal 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;
|
@ -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 #
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
45
mysql-test/suite/innodb/t/xa_debug.test
Normal file
45
mysql-test/suite/innodb/t/xa_debug.test
Normal 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;
|
@ -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(
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
@ -0,0 +1 @@
|
||||
--rpl_semi_sync_master_enabled=0 --rpl_semi_sync_master_wait_no_slave=0
|
14
mysql-test/suite/rpl/t/rpl_semi_sync_wait_no_slave.test
Normal file
14
mysql-test/suite/rpl/t/rpl_semi_sync_wait_no_slave.test
Normal 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
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -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. */
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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. */
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user