Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
270eeeb5
Commit
270eeeb5
authored
May 23, 2023
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.5 into 10.6
parents
b0c285bb
9c35f9c9
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
601 additions
and
154 deletions
+601
-154
include/m_string.h
include/m_string.h
+9
-8
include/myisammrg.h
include/myisammrg.h
+1
-0
mysql-test/lib/My/File/Path.pm
mysql-test/lib/My/File/Path.pm
+30
-1
mysql-test/lib/My/SafeProcess/Base.pm
mysql-test/lib/My/SafeProcess/Base.pm
+1
-1
mysql-test/main/distinct.result
mysql-test/main/distinct.result
+25
-0
mysql-test/main/distinct.test
mysql-test/main/distinct.test
+21
-0
mysql-test/main/group_min_max.result
mysql-test/main/group_min_max.result
+110
-0
mysql-test/main/group_min_max.test
mysql-test/main/group_min_max.test
+110
-0
mysql-test/main/merge.result
mysql-test/main/merge.result
+12
-0
mysql-test/main/merge.test
mysql-test/main/merge.test
+12
-0
mysql-test/main/selectivity.result
mysql-test/main/selectivity.result
+27
-8
mysql-test/main/selectivity.test
mysql-test/main/selectivity.test
+5
-7
mysql-test/main/selectivity_innodb.result
mysql-test/main/selectivity_innodb.result
+27
-8
mysql-test/main/type_timestamp.result
mysql-test/main/type_timestamp.result
+2
-0
mysql-test/main/type_timestamp.test
mysql-test/main/type_timestamp.test
+1
-0
mysql-test/mariadb-test-run.pl
mysql-test/mariadb-test-run.pl
+5
-2
sql/item_func.h
sql/item_func.h
+1
-1
sql/sql_limit.h
sql/sql_limit.h
+9
-0
sql/sql_select.cc
sql/sql_select.cc
+164
-105
sql/sql_select.h
sql/sql_select.h
+3
-2
sql/table.h
sql/table.h
+8
-2
storage/innobase/trx/trx0purge.cc
storage/innobase/trx/trx0purge.cc
+2
-1
storage/myisam/mi_open.c
storage/myisam/mi_open.c
+1
-0
storage/myisam/myisamdef.h
storage/myisam/myisamdef.h
+1
-1
storage/myisammrg/myrg_open.c
storage/myisammrg/myrg_open.c
+10
-6
storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test
storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test
+4
-1
No files found.
include/m_string.h
View file @
270eeeb5
...
...
@@ -249,14 +249,15 @@ static inline void lex_string_set3(LEX_CSTRING *lex_str, const char *c_str,
*/
static
inline
int
safe_strcpy
(
char
*
dst
,
size_t
dst_size
,
const
char
*
src
)
{
memset
(
dst
,
'\0'
,
dst_size
);
strncpy
(
dst
,
src
,
dst_size
-
1
);
/*
If the first condition is true, we are guaranteed to have src length
>= (dst_size - 1), hence safe to access src[dst_size - 1].
*/
if
(
dst
[
dst_size
-
2
]
!=
'\0'
&&
src
[
dst_size
-
1
]
!=
'\0'
)
return
1
;
/* Truncation of src. */
DBUG_ASSERT
(
dst_size
>
0
);
/* Note, strncpy will zerofill end of dst if src shorter than dst_size */
strncpy
(
dst
,
src
,
dst_size
);
if
(
dst
[
dst_size
-
1
])
{
/* Ensure string is zero terminated */
dst
[
dst_size
-
1
]
=
0
;
return
1
;
}
return
0
;
}
...
...
include/myisammrg.h
View file @
270eeeb5
...
...
@@ -71,6 +71,7 @@ typedef struct st_myrg_info
ulong
cache_size
;
uint
merge_insert_method
;
uint
tables
,
options
,
reclength
,
keys
;
uint
key_parts
;
my_bool
cache_in_use
;
/* If MERGE children attached to parent. See top comment in ha_myisammrg.cc */
my_bool
children_attached
;
...
...
mysql-test/lib/My/File/Path.pm
View file @
270eeeb5
...
...
@@ -34,7 +34,7 @@ use strict;
use
Exporter
;
use
base
"
Exporter
";
our
@EXPORT
=
qw /rmtree
mkpath
copytree
/
;
our
@EXPORT
=
qw /rmtree
mkpath
copytree
make_readonly
/
;
use
File::
Find
;
use
File::
Copy
;
...
...
@@ -184,6 +184,10 @@ sub copytree {
# Only copy plain files
next
unless
-
f
"
$from_dir
/
$_
";
copy
("
$from_dir
/
$_
",
"
$to_dir
/
$_
");
if
(
!
$use_umask
)
{
chmod
(
0666
,
"
$to_dir
/
$_
");
}
}
closedir
(
DIR
);
...
...
@@ -193,4 +197,29 @@ sub copytree {
}
}
sub
make_readonly
{
my
(
$dir
)
=
@_
;
die
"
Usage: make_readonly(<dir>])
"
unless
@_
==
1
;
opendir
(
DIR
,
"
$dir
")
or
croak
("
Can't find
$dir
$!
");
for
(
readdir
(
DIR
))
{
next
if
"
$_
"
eq
"
.
"
or
"
$_
"
eq
"
..
";
if
(
-
d
"
$dir
/
$_
"
)
{
make_readonly
("
$dir
/
$_
");
next
;
}
# Only copy plain files
next
unless
-
f
"
$dir
/
$_
";
chmod
0444
,
"
$dir
/
$_
";
}
closedir
(
DIR
);
}
1
;
mysql-test/lib/My/SafeProcess/Base.pm
View file @
270eeeb5
...
...
@@ -40,7 +40,7 @@ our @EXPORT= qw(create_process);
# Retry a couple of times if fork returns EAGAIN
#
sub
_safe_fork
{
my
$retries
=
5
;
my
$retries
=
100
;
my
$pid
;
FORK:
...
...
mysql-test/main/distinct.result
View file @
270eeeb5
...
...
@@ -1157,3 +1157,28 @@ explain select * from t1 limit 0 offset 10;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Zero limit
drop table t1, t2;
#
# MDEV-28285 Unexpected result when combining DISTINCT, subselect
# and LIMIT
#
create table t1 (a int primary key);
create table t2 (a int primary key, b int not null);
insert into t1 select seq from seq_1_to_10;
insert into t2 select seq,seq from seq_1_to_10;
select distinct a from t1 where t1.a=1 and t1.a in (select a from t2 where t2.b in (1,2));
a
1
explain select distinct a from t1 where t1.a=1 and t1.a in (select a+0 from t2 where t2.b in (1,2)) limit 10,10;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 const PRIMARY PRIMARY 4 const 1 Using index; Using temporary
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 10 Using where
select distinct a from t1 where t1.a=1 and t1.a in (select a+0 from t2 where t2.b in (1,2)) limit 10,10;
a
select distinct a from t1 where t1.a=1 and t1.a in (select a+0 from t2 where t2.b in (1,2)) limit 0,1;
a
1
drop table t1,t2;
#
# end of 10.5 tests
#
mysql-test/main/distinct.test
View file @
270eeeb5
...
...
@@ -892,3 +892,24 @@ explain select * from t1 limit 0;
explain
select
*
from
t1
limit
0
offset
10
;
drop
table
t1
,
t2
;
--
echo
#
--
echo
# MDEV-28285 Unexpected result when combining DISTINCT, subselect
--
echo
# and LIMIT
--
echo
#
create
table
t1
(
a
int
primary
key
);
create
table
t2
(
a
int
primary
key
,
b
int
not
null
);
insert
into
t1
select
seq
from
seq_1_to_10
;
insert
into
t2
select
seq
,
seq
from
seq_1_to_10
;
select
distinct
a
from
t1
where
t1
.
a
=
1
and
t1
.
a
in
(
select
a
from
t2
where
t2
.
b
in
(
1
,
2
));
explain
select
distinct
a
from
t1
where
t1
.
a
=
1
and
t1
.
a
in
(
select
a
+
0
from
t2
where
t2
.
b
in
(
1
,
2
))
limit
10
,
10
;
select
distinct
a
from
t1
where
t1
.
a
=
1
and
t1
.
a
in
(
select
a
+
0
from
t2
where
t2
.
b
in
(
1
,
2
))
limit
10
,
10
;
select
distinct
a
from
t1
where
t1
.
a
=
1
and
t1
.
a
in
(
select
a
+
0
from
t2
where
t2
.
b
in
(
1
,
2
))
limit
0
,
1
;
drop
table
t1
,
t2
;
--
echo
#
--
echo
# end of 10.5 tests
--
echo
#
mysql-test/main/group_min_max.result
View file @
270eeeb5
...
...
@@ -4095,6 +4095,116 @@ MIN(pk) a
5 10
DROP TABLE t1;
#
# MDEV-6768 Wrong result with agregate with join with no resultset
#
create table t1
(
PARENT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
PARENT_FIELD VARCHAR(10),
PRIMARY KEY (PARENT_ID)
) engine=innodb;
create table t2
(
CHILD_ID INT NOT NULL AUTO_INCREMENT,
PARENT_ID INT NOT NULL,
CHILD_FIELD varchar(10),
PRIMARY KEY (CHILD_ID)
)engine=innodb;
INSERT INTO t1 (PARENT_FIELD)
SELECT 'AAAA';
INSERT INTO t2 (PARENT_ID, CHILD_FIELD)
SELECT 1, 'BBBB';
explain select
t1.PARENT_ID,
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where
select
t1.PARENT_ID,
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
PARENT_ID min(CHILD_FIELD)
NULL NULL
select
1,
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
1 min(CHILD_FIELD)
1 NULL
select
IFNULL(t1.PARENT_ID,1),
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
IFNULL(t1.PARENT_ID,1) min(CHILD_FIELD)
1 NULL
# Check that things works with MyISAM (which has different explain)
alter table t1 engine=myisam;
alter table t2 engine=myisam;
explain select
t1.PARENT_ID,
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
select
t1.PARENT_ID,
min(CHILD_FIELD)
from t1 straight_join t2
where t1.PARENT_ID = 1
and t1.PARENT_ID = t2.PARENT_ID
and t2.CHILD_FIELD = "ZZZZ";
PARENT_ID min(CHILD_FIELD)
NULL NULL
drop table t1,t2;
# Check that things works if sub queries are re-executed
create table t1 (a int primary key, b int);
create table t2 (a int primary key, b int);
create table t3 (a int primary key, b int);
insert into t1 values (1,1),(2,2),(3,3);
insert into t2 values (1,1),(2,2),(3,3);
insert into t3 values (1,1),(3,3);
explain
select *,
(select
CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';',
'min_t3_b:', IFNULL(min(t3.b), 't3b-null'))
from t2,t3
where t2.a=1 and t1.b = t3.a) as s1
from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
2 DEPENDENT SUBQUERY t2 const PRIMARY PRIMARY 4 const 1 Using index
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1
select *,
(select
CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';',
'min_t3_b:', IFNULL(min(t3.b), 't3b-null'))
from t2,t3
where t2.a=1 and t1.b = t3.a) as s1
from t1;
a b s1
1 1 t2:1;min_t3_b:1
2 2 t2:t2a-null;min_t3_b:t3b-null
3 3 t2:1;min_t3_b:3
drop table t1,t2,t3;
#
# End of 10.5 tests
#
#
...
...
mysql-test/main/group_min_max.test
View file @
270eeeb5
...
...
@@ -1749,6 +1749,116 @@ SELECT MIN(pk), a FROM t1 WHERE pk <> 1 GROUP BY a;
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-6768 Wrong result with agregate with join with no resultset
--
echo
#
create
table
t1
(
PARENT_ID
int
(
10
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
PARENT_FIELD
VARCHAR
(
10
),
PRIMARY
KEY
(
PARENT_ID
)
)
engine
=
innodb
;
create
table
t2
(
CHILD_ID
INT
NOT
NULL
AUTO_INCREMENT
,
PARENT_ID
INT
NOT
NULL
,
CHILD_FIELD
varchar
(
10
),
PRIMARY
KEY
(
CHILD_ID
)
)
engine
=
innodb
;
INSERT
INTO
t1
(
PARENT_FIELD
)
SELECT
'AAAA'
;
INSERT
INTO
t2
(
PARENT_ID
,
CHILD_FIELD
)
SELECT
1
,
'BBBB'
;
explain
select
t1
.
PARENT_ID
,
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
select
t1
.
PARENT_ID
,
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
select
1
,
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
select
IFNULL
(
t1
.
PARENT_ID
,
1
),
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
--
echo
# Check that things works with MyISAM (which has different explain)
alter
table
t1
engine
=
myisam
;
alter
table
t2
engine
=
myisam
;
explain
select
t1
.
PARENT_ID
,
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
select
t1
.
PARENT_ID
,
min
(
CHILD_FIELD
)
from
t1
straight_join
t2
where
t1
.
PARENT_ID
=
1
and
t1
.
PARENT_ID
=
t2
.
PARENT_ID
and
t2
.
CHILD_FIELD
=
"ZZZZ"
;
drop
table
t1
,
t2
;
--
echo
# Check that things works if sub queries are re-executed
create
table
t1
(
a
int
primary
key
,
b
int
);
create
table
t2
(
a
int
primary
key
,
b
int
);
create
table
t3
(
a
int
primary
key
,
b
int
);
insert
into
t1
values
(
1
,
1
),(
2
,
2
),(
3
,
3
);
insert
into
t2
values
(
1
,
1
),(
2
,
2
),(
3
,
3
);
insert
into
t3
values
(
1
,
1
),(
3
,
3
);
explain
select
*
,
(
select
CONCAT
(
't2:'
,
IFNULL
(
t2
.
a
,
't2a-null'
),
';'
,
'min_t3_b:'
,
IFNULL
(
min
(
t3
.
b
),
't3b-null'
))
from
t2
,
t3
where
t2
.
a
=
1
and
t1
.
b
=
t3
.
a
)
as
s1
from
t1
;
select
*
,
(
select
CONCAT
(
't2:'
,
IFNULL
(
t2
.
a
,
't2a-null'
),
';'
,
'min_t3_b:'
,
IFNULL
(
min
(
t3
.
b
),
't3b-null'
))
from
t2
,
t3
where
t2
.
a
=
1
and
t1
.
b
=
t3
.
a
)
as
s1
from
t1
;
drop
table
t1
,
t2
,
t3
;
--
echo
#
--
echo
# End of 10.5 tests
--
echo
#
...
...
mysql-test/main/merge.result
View file @
270eeeb5
...
...
@@ -3919,3 +3919,15 @@ ERROR HY000: Unable to open underlying table which is differently defined or of
DROP TRIGGER trg1;
DROP TABLE t1;
DROP TABLE m1;
#
# MDEV-31083 ASAN use-after-poison in myrg_attach_children
#
CREATE TABLE t1 (f TEXT, FULLTEXT (f)) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('foo'),('bar');
CREATE TABLE mrg (f TEXT) ENGINE=MERGE, UNION(t1);
SELECT * FROM mrg;
f
foo
bar
DROP TABLE mrg, t1;
End of 10.5 tests
mysql-test/main/merge.test
View file @
270eeeb5
...
...
@@ -2923,3 +2923,15 @@ set global default_storage_engine=@save_default_storage_engine;
# Check that all connections opened by test cases in this file are really
# gone so execution of other tests won't be affected by their presence.
--
source
include
/
wait_until_count_sessions
.
inc
--
echo
#
--
echo
# MDEV-31083 ASAN use-after-poison in myrg_attach_children
--
echo
#
CREATE
TABLE
t1
(
f
TEXT
,
FULLTEXT
(
f
))
ENGINE
=
MyISAM
;
INSERT
INTO
t1
VALUES
(
'foo'
),(
'bar'
);
CREATE
TABLE
mrg
(
f
TEXT
)
ENGINE
=
MERGE
,
UNION
(
t1
);
SELECT
*
FROM
mrg
;
DROP
TABLE
mrg
,
t1
;
--
echo
End
of
10.5
tests
mysql-test/main/selectivity.result
View file @
270eeeb5
...
...
@@ -1824,7 +1824,6 @@ test.t1 analyze status Table is already up to date
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status Table is already up to date
set optimizer_switch='exists_to_in=off';
set optimizer_use_condition_selectivity=2;
SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
...
...
@@ -1849,18 +1848,39 @@ id a
17 17
18 18
19 19
explain SELECT * FROM t1
set statement optimizer_use_condition_selectivity=2 for
explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 100 Using where
2 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
2 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
EXPLAIN SELECT * FROM t1 A, t1 B WHERE A.a = B.a and A.id = 65;
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
set statement optimizer_use_condition_selectivity=4 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE A const PRIMARY,a PRIMARY 4 const 1
1 SIMPLE B ref a a 5 const 1
1 PRIMARY t1 ALL NULL NULL NULL NULL 100 Using where
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
set @query="EXPLAIN SELECT * FROM t1 A, t1 B WHERE A.a = B.a and A.id = 65";
set statement optimizer_use_condition_selectivity=2 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 100 Using where
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
set statement optimizer_use_condition_selectivity=4 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 100 Using where
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
...
...
@@ -1870,7 +1890,6 @@ id select_type table type possible_keys key key_len ref rows Extra
2 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1
2 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (10%) Using where; Using rowid filter
set optimizer_switch= @save_optimizer_switch;
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
drop table t1,t2;
#
# MDEV-21495: Conditional jump or move depends on uninitialised value in sel_arg_range_seq_next
...
...
mysql-test/main/selectivity.test
View file @
270eeeb5
...
...
@@ -1236,13 +1236,10 @@ set optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
drop
table
t1
,
t2
,
t3
;
--
echo
#
--
echo
# MDEV-20519: Query plan regression with optimizer_use_condition_selectivity=4
--
echo
#
create
table
t1
(
id
int
,
a
int
,
PRIMARY
KEY
(
id
),
key
(
a
));
insert
into
t1
select
seq
,
seq
from
seq_1_to_100
;
...
...
@@ -1252,7 +1249,6 @@ insert into t2 select seq,seq,seq from seq_1_to_100;
analyze
table
t1
,
t2
persistent
for
all
;
set
optimizer_switch
=
'exists_to_in=off'
;
set
optimizer_use_condition_selectivity
=
2
;
let
$query
=
SELECT
*
FROM
t1
WHERE
...
...
@@ -1260,14 +1256,16 @@ let $query= SELECT * FROM t1
WHERE
A
.
a
=
t1
.
a
AND
t2
.
b
<
20
);
eval
$query
;
eval
explain
$query
;
eval
set
statement
optimizer_use_condition_selectivity
=
2
for
explain
$query
;
eval
set
statement
optimizer_use_condition_selectivity
=
4
for
explain
$query
;
EXPLAIN
SELECT
*
FROM
t1
A
,
t1
B
WHERE
A
.
a
=
B
.
a
and
A
.
id
=
65
;
set
@
query
=
"EXPLAIN SELECT * FROM t1 A, t1 B WHERE A.a = B.a and A.id = 65"
;
eval
set
statement
optimizer_use_condition_selectivity
=
2
for
explain
$query
;
eval
set
statement
optimizer_use_condition_selectivity
=
4
for
explain
$query
;
eval
explain
$query
;
set
optimizer_switch
=
@
save_optimizer_switch
;
set
optimizer_use_condition_selectivity
=
@
save_optimizer_use_condition_selectivity
;
drop
table
t1
,
t2
;
--
echo
#
...
...
mysql-test/main/selectivity_innodb.result
View file @
270eeeb5
...
...
@@ -1836,7 +1836,6 @@ test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
set optimizer_switch='exists_to_in=off';
set optimizer_use_condition_selectivity=2;
SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
...
...
@@ -1861,18 +1860,39 @@ id a
17 17
18 18
19 19
explain SELECT * FROM t1
set statement optimizer_use_condition_selectivity=2 for
explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL a 5 NULL 100 Using where; Using index
2 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
2 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
EXPLAIN SELECT * FROM t1 A, t1 B WHERE A.a = B.a and A.id = 65;
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
set statement optimizer_use_condition_selectivity=4 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE A const PRIMARY,a PRIMARY 4 const 1
1 SIMPLE B ref a a 5 const 1 Using index
1 PRIMARY t1 index NULL a 5 NULL 100 Using where; Using index
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
set @query="EXPLAIN SELECT * FROM t1 A, t1 B WHERE A.a = B.a and A.id = 65";
set statement optimizer_use_condition_selectivity=2 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL a 5 NULL 100 Using where; Using index
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
set statement optimizer_use_condition_selectivity=4 for explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
WHERE A.a=t1.a AND t2.b < 20);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL a 5 NULL 100 Using where; Using index
3 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
3 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
explain SELECT * FROM t1
WHERE
EXISTS (SELECT * FROM t1 A INNER JOIN t2 ON t2.a = A.id
...
...
@@ -1882,7 +1902,6 @@ id select_type table type possible_keys key key_len ref rows Extra
2 DEPENDENT SUBQUERY A ref PRIMARY,a a 5 test.t1.a 1 Using index
2 DEPENDENT SUBQUERY t2 ref|filter a,b a|b 5|5 test.A.id 1 (19%) Using where; Using rowid filter
set optimizer_switch= @save_optimizer_switch;
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
drop table t1,t2;
#
# MDEV-21495: Conditional jump or move depends on uninitialised value in sel_arg_range_seq_next
...
...
mysql-test/main/type_timestamp.result
View file @
270eeeb5
...
...
@@ -1230,6 +1230,8 @@ SELECT * FROM t1 HAVING MIN(t1.c1) >= ALL(SELECT 'a' UNION SELECT 'r');
c1
Warnings:
Warning 1292 Truncated incorrect datetime value: 'r'
SELECT * FROM t1 HAVING MIN(t1.c1) > 0;
c1
DROP TABLE t1;
CREATE TABLE t1 (c1 timestamp);
INSERT INTO t1 VALUES ('2010-01-01 00:00:00');
...
...
mysql-test/main/type_timestamp.test
View file @
270eeeb5
...
...
@@ -810,6 +810,7 @@ DROP TABLE t1;
CREATE
TABLE
t1
(
c1
timestamp
);
SELECT
MIN
(
t1
.
c1
)
AS
k1
FROM
t1
HAVING
(
k1
>=
ALL
(
SELECT
'a'
UNION
SELECT
'r'
));
SELECT
*
FROM
t1
HAVING
MIN
(
t1
.
c1
)
>=
ALL
(
SELECT
'a'
UNION
SELECT
'r'
);
SELECT
*
FROM
t1
HAVING
MIN
(
t1
.
c1
)
>
0
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
(
c1
timestamp
);
...
...
mysql-test/mariadb-test-run.pl
View file @
270eeeb5
...
...
@@ -408,8 +408,11 @@ sub main {
mark_time_used
('
collect
');
mysql_install_db
(
default_mysqld
(),
"
$opt_vardir
/install.db
")
unless
using_extern
();
if
(
!
using_extern
())
{
mysql_install_db
(
default_mysqld
(),
"
$opt_vardir
/install.db
");
make_readonly
("
$opt_vardir
/install.db
");
}
if
(
$opt_dry_run
)
{
for
(
@$tests
)
{
...
...
sql/item_func.h
View file @
270eeeb5
...
...
@@ -373,7 +373,7 @@ class Item_func :public Item_func_or_sum
{
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
{
args
[
i
]
->
no_rows_in_result
();
args
[
i
]
->
restore_to_before_
no_rows_in_result
();
}
}
void
convert_const_compared_to_int_field
(
THD
*
thd
);
...
...
sql/sql_limit.h
View file @
270eeeb5
...
...
@@ -61,6 +61,15 @@ class Select_limit_counters
with_ties
=
false
;
}
/* Send the first row, still honoring offset_limit_cnt */
void
send_first_row
()
{
/* Guard against overflow */
if
((
select_limit_cnt
=
offset_limit_cnt
+
1
)
==
0
)
select_limit_cnt
=
offset_limit_cnt
;
// with_ties= false; Remove // on merge to 10.6
}
bool
is_unlimited
()
const
{
return
select_limit_cnt
==
HA_POS_ERROR
;
}
/*
...
...
sql/sql_select.cc
View file @
270eeeb5
This diff is collapsed.
Click to expand it.
sql/sql_select.h
View file @
270eeeb5
...
...
@@ -227,7 +227,7 @@ enum sj_strategy_enum
typedef
enum_nested_loop_state
(
*
Next_select_func
)(
JOIN
*
,
struct
st_join_table
*
,
bool
);
Next_select_func
setup_end_select_func
(
JOIN
*
join
,
JOIN_TAB
*
tab
);
Next_select_func
setup_end_select_func
(
JOIN
*
join
);
int
rr_sequential
(
READ_RECORD
*
info
);
int
read_record_func_for_rr_and_unpack
(
READ_RECORD
*
info
);
Item
*
remove_pushed_top_conjuncts
(
THD
*
thd
,
Item
*
cond
);
...
...
@@ -1701,7 +1701,8 @@ class JOIN :public Sql_alloc
void
join_free
();
/** Cleanup this JOIN, possibly for reuse */
void
cleanup
(
bool
full
);
void
clear
();
void
clear
(
table_map
*
cleared_tables
);
void
inline
clear_sum_funcs
();
bool
send_row_on_empty_set
()
{
return
(
do_send_rows
&&
implicit_grouping
&&
!
group_optimized_away
&&
...
...
sql/table.h
View file @
270eeeb5
...
...
@@ -3318,10 +3318,16 @@ inline void mark_as_null_row(TABLE *table)
bfill
(
table
->
null_flags
,
table
->
s
->
null_bytes
,
255
);
}
/*
Restore table to state before mark_as_null_row() call.
This assumes that the caller has restored table->null_flags,
as is done in unclear_tables().
*/
inline
void
unmark_as_null_row
(
TABLE
*
table
)
{
table
->
null_row
=
0
;
table
->
status
=
STATUS_NO_RECORD
;
table
->
null_row
=
0
;
table
->
status
&=
~
STATUS_NULL_ROW
;
}
bool
is_simple_order
(
ORDER
*
order
);
...
...
storage/innobase/trx/trx0purge.cc
View file @
270eeeb5
...
...
@@ -664,7 +664,8 @@ TRANSACTIONAL_TARGET static void trx_purge_truncate_history()
}
ut_ad
(
rseg
.
curr_size
>
cached
);
if
(
rseg
.
curr_size
>
cached
+
1
)
if
(
rseg
.
curr_size
>
cached
+
1
&&
(
rseg
.
history_size
||
srv_fast_shutdown
||
srv_undo_sources
))
goto
not_free
;
rseg
.
latch
.
rd_unlock
();
...
...
storage/myisam/mi_open.c
View file @
270eeeb5
...
...
@@ -518,6 +518,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share
->
kfile
=
kfile
;
share
->
this_process
=
(
ulong
)
getpid
();
share
->
last_process
=
share
->
state
.
process
;
share
->
base
.
base_key_parts
=
base_key_parts
;
share
->
base
.
key_parts
=
key_parts
;
share
->
base
.
all_key_parts
=
key_parts
+
unique_key_parts
;
if
(
!
(
share
->
last_version
=
share
->
state
.
version
))
...
...
storage/myisam/myisamdef.h
View file @
270eeeb5
...
...
@@ -132,7 +132,7 @@ typedef struct st_mi_base_info
uint
extra_alloc_bytes
;
uint
extra_alloc_procent
;
/* The following are from the header */
uint
key_parts
,
all_key_parts
;
uint
key_parts
,
all_key_parts
,
base_key_parts
;
}
MI_BASE_INFO
;
...
...
storage/myisammrg/myrg_open.c
View file @
270eeeb5
...
...
@@ -432,17 +432,20 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
first_child
=
FALSE
;
m_info
->
reclength
=
myisam
->
s
->
base
.
reclength
;
min_keys
=
myisam
->
s
->
base
.
keys
;
key_parts
=
myisam
->
s
->
base
.
key_parts
;
key_parts
=
myisam
->
s
->
base
.
base_
key_parts
;
if
(
*
need_compat_check
&&
m_info
->
rec_per_key_part
)
{
my_free
(
m_info
->
rec_per_key_part
);
m_info
->
rec_per_key_part
=
NULL
;
}
if
(
!
m_info
->
rec_per_key_part
)
if
(
!
m_info
->
rec_per_key_part
||
m_info
->
key_parts
!=
key_parts
)
{
if
(
!
(
m_info
->
rec_per_key_part
=
(
ulong
*
)
my_malloc
(
rg_key_memory_MYRG_INFO
,
key_parts
*
sizeof
(
long
),
MYF
(
MY_WME
))))
m_info
->
key_parts
=
key_parts
;
/* The +1 is because by my_realloc() don't allow zero length */
if
(
!
(
m_info
->
rec_per_key_part
=
(
ulong
*
)
my_realloc
(
rg_key_memory_MYRG_INFO
,
m_info
->
rec_per_key_part
,
key_parts
*
sizeof
(
long
)
+
1
,
MYF
(
MY_WME
|
MY_ALLOW_ZERO_PTR
|
MY_FREE_ON_ERROR
))))
goto
err
;
/* purecov: inspected */
errpos
=
1
;
}
...
...
@@ -457,7 +460,8 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
myisam
->
open_flag
|=
HA_OPEN_MERGE_TABLE
;
/* Check table definition match. */
if
(
m_info
->
reclength
!=
myisam
->
s
->
base
.
reclength
)
if
(
m_info
->
reclength
!=
myisam
->
s
->
base
.
reclength
||
key_parts
!=
myisam
->
s
->
base
.
base_key_parts
)
{
DBUG_PRINT
(
"error"
,
(
"definition mismatch table: '%s' repair: %d"
,
myisam
->
filename
,
...
...
storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test
View file @
270eeeb5
...
...
@@ -2,4 +2,7 @@
--
echo
# MDEV-30370 mariadbd hangs when running with --wsrep-recover and --plugin-load-add=ha_spider.so
--
echo
#
--
exec
$MYSQLD_BOOTSTRAP_CMD
--
wsrep
-
recover
--
plugin
-
load
-
add
=
ha_spider
.
so
let
$MYSQLD_DATADIR
=
$MYSQLTEST_VARDIR
/
mdev_30370
;
--
mkdir
$MYSQLD_DATADIR
--
exec
$MYSQLD_BOOTSTRAP_CMD
--
wsrep
-
recover
--
plugin
-
load
-
add
=
ha_spider
.
so
--
datadir
=
$MYSQLD_DATADIR
--
rmdir
$MYSQLD_DATADIR
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment