Skip to content

Commit

Permalink
Merge 10.3 into 10.4
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-m committed May 16, 2020
2 parents 9e6e435 + 38d6218 commit 66f1e28
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 12 deletions.
1 change: 1 addition & 0 deletions mysql-test/main/custom_aggregate_functions.result
Original file line number Diff line number Diff line change
Expand Up @@ -1187,6 +1187,7 @@ common_schema.sum_ints(seq)
drop database common_schema;
drop database another_schema;
USE test;
# End of 10.3 tests
#
# MDEV-18813 PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW
#
Expand Down
2 changes: 2 additions & 0 deletions mysql-test/main/custom_aggregate_functions.test
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,8 @@ drop database another_schema;

USE test;

--echo # End of 10.3 tests

--echo #
--echo # MDEV-18813 PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW
--echo #
Expand Down
33 changes: 33 additions & 0 deletions mysql-test/main/subselect4.result
Original file line number Diff line number Diff line change
Expand Up @@ -2535,6 +2535,38 @@ c1
1
drop table t1;
#
# MDEV-22498: SIGSEGV in Bitmap<64u>::merge on SELECT
#
set @save_sql_select_limit= @@sql_select_limit;
SET sql_select_limit=0;
CREATE TABLE t1(b INT, c INT);
CREATE TABLE t2(a INT, b INT);
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
INSERT INTO t2 VALUES (1,1),(2,2),(3,3);
EXPLAIN EXTENDED SELECT sum(a), t2.a, t2.b FROM t2 HAVING t2.a IN (SELECT t2.b FROM t1);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Zero limit
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00
Warnings:
Note 1276 Field or reference 'test.t2.b' of SELECT #2 was resolved in SELECT #1
Note 1276 Field or reference 'test.t2.b' of SELECT #2 was resolved in SELECT #1
Note 1003 /* select#1 */ select sum(`test`.`t2`.`a`) AS `sum(a)`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` having <in_optimizer>(`test`.`t2`.`a`,<exists>(/* select#2 */ select `test`.`t2`.`b` from `test`.`t1` where <cache>(`test`.`t2`.`a`) = `test`.`t2`.`b`))
SELECT sum(a), t2.a, t2.b FROM t2 HAVING t2.a IN (SELECT t2.b FROM t1);
sum(a) a b
SET @@sql_select_limit= @save_sql_select_limit;
EXPLAIN EXTENDED SELECT sum(a), t2.a, t2.b FROM t2 HAVING t2.a IN (SELECT t2.b FROM t1);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 100.00
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00
Warnings:
Note 1276 Field or reference 'test.t2.b' of SELECT #2 was resolved in SELECT #1
Note 1276 Field or reference 'test.t2.b' of SELECT #2 was resolved in SELECT #1
Note 1003 /* select#1 */ select sum(`test`.`t2`.`a`) AS `sum(a)`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` having <expr_cache><`test`.`t2`.`a`,`test`.`t2`.`b`>(<in_optimizer>(`test`.`t2`.`a`,<exists>(/* select#2 */ select `test`.`t2`.`b` from `test`.`t1` where <cache>(`test`.`t2`.`a`) = `test`.`t2`.`b`)))
SELECT sum(a), t2.a, t2.b FROM t2 HAVING t2.a IN (SELECT t2.b FROM t1);
sum(a) a b
6 1 1
DROP TABLE t1,t2;
#
# MDEV-19134: EXISTS() slower if ORDER BY is defined
#
create table t0 (a int);
Expand Down Expand Up @@ -2582,3 +2614,4 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 100
drop table t0, t1, t2;
# End of 10.4 tests
25 changes: 25 additions & 0 deletions mysql-test/main/subselect4.test
Original file line number Diff line number Diff line change
Expand Up @@ -2078,6 +2078,30 @@ select (select c1 from t1 group by c1,c2 order by c1 limit 1) as x;
(select c1 from t1 group by c1,c2 order by c1 limit 1);
drop table t1;

--echo #
--echo # MDEV-22498: SIGSEGV in Bitmap<64u>::merge on SELECT
--echo #

set @save_sql_select_limit= @@sql_select_limit;
SET sql_select_limit=0;

CREATE TABLE t1(b INT, c INT);
CREATE TABLE t2(a INT, b INT);
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
INSERT INTO t2 VALUES (1,1),(2,2),(3,3);

let $query=
SELECT sum(a), t2.a, t2.b FROM t2 HAVING t2.a IN (SELECT t2.b FROM t1);

eval EXPLAIN EXTENDED $query;
eval $query;

SET @@sql_select_limit= @save_sql_select_limit;

eval EXPLAIN EXTENDED $query;
eval $query;
DROP TABLE t1,t2;

--echo #
--echo # MDEV-19134: EXISTS() slower if ORDER BY is defined
--echo #
Expand Down Expand Up @@ -2118,3 +2142,4 @@ select * from t1 where t1.a in (select t2.a from t2 order by t2.b);

drop table t0, t1, t2;

--echo # End of 10.4 tests
4 changes: 4 additions & 0 deletions mysql-test/suite/innodb/t/xa_recovery_debug.test
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
# Embedded server does not support restarting
--source include/not_embedded.inc

--disable_query_log
FLUSH TABLES;
--enable_query_log

--echo #
--echo # Bug#20872655 XA ROLLBACK IS NOT CRASH-SAFE
--echo #
Expand Down
9 changes: 6 additions & 3 deletions sql/item_subselect.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2190,10 +2190,13 @@ Item_in_subselect::create_single_in_to_exists_cond(JOIN *join,
}
else
{
/*
No need to use real_item for the item, as the ref items that are possible
in the subquery either belong to views or to the parent select.
For such case we need to refer to the reference and not to the original
item.
*/
Item *item= (Item*) select_lex->item_list.head();
if (item->type() != REF_ITEM ||
((Item_ref*)item)->ref_type() != Item_ref::VIEW_REF)
item= item->real_item();

if (select_lex->table_list.elements)
{
Expand Down
31 changes: 22 additions & 9 deletions storage/innobase/sync/sync0rw.cc
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,13 @@ rw_lock_s_lock_spin(

ut_ad(rw_lock_validate(lock));

rw_lock_stats.rw_s_spin_wait_count.inc();

lock_loop:

/* Spin waiting for the writer field to become free */
HMT_low();
ulint j = i;
while (i < srv_n_spin_wait_rounds &&
lock->lock_word <= 0) {
ut_delay(srv_spin_wait_delay);
Expand All @@ -301,7 +304,7 @@ rw_lock_s_lock_spin(
os_thread_yield();
}

++spin_count;
spin_count += lint(i - j);

/* We try once again to obtain the lock */
if (rw_lock_s_lock_low(lock, pass, file_name, line)) {
Expand Down Expand Up @@ -421,7 +424,7 @@ rw_lock_x_lock_wait_func(
}

/* If there is still a reader, then go to sleep.*/
++n_spins;
n_spins += i;

sync_cell_t* cell;

Expand Down Expand Up @@ -651,6 +654,12 @@ rw_lock_x_lock_func(
ut_ad(rw_lock_validate(lock));
ut_ad(!rw_lock_own(lock, RW_LOCK_S));

if (rw_lock_x_lock_low(lock, pass, file_name, line)) {
/* Locking succeeded */
return;
}
rw_lock_stats.rw_x_spin_wait_count.inc();

lock_loop:

if (rw_lock_x_lock_low(lock, pass, file_name, line)) {
Expand All @@ -670,14 +679,15 @@ rw_lock_x_lock_func(

/* Spin waiting for the lock_word to become free */
HMT_low();
ulint j = i;
while (i < srv_n_spin_wait_rounds
&& lock->lock_word <= X_LOCK_HALF_DECR) {
ut_delay(srv_spin_wait_delay);
i++;
}

HMT_medium();
spin_count += lint(i);
spin_count += lint(i - j);

if (i >= srv_n_spin_wait_rounds) {

Expand Down Expand Up @@ -745,11 +755,17 @@ rw_lock_sx_lock_func(
sync_array_t* sync_arr;
lint spin_count = 0;
int64_t count_os_wait = 0;
lint spin_wait_count = 0;

ut_ad(rw_lock_validate(lock));
ut_ad(!rw_lock_own(lock, RW_LOCK_S));

if (rw_lock_sx_lock_low(lock, pass, file_name, line)) {
/* Locking succeeded */
return;
}

rw_lock_stats.rw_sx_spin_wait_count.inc();

lock_loop:

if (rw_lock_sx_lock_low(lock, pass, file_name, line)) {
Expand All @@ -761,23 +777,21 @@ rw_lock_sx_lock_func(
}

rw_lock_stats.rw_sx_spin_round_count.add(spin_count);
rw_lock_stats.rw_sx_spin_wait_count.add(spin_wait_count);

/* Locking succeeded */
return;

} else {

++spin_wait_count;

/* Spin waiting for the lock_word to become free */
ulint j = i;
while (i < srv_n_spin_wait_rounds
&& lock->lock_word <= X_LOCK_HALF_DECR) {
ut_delay(srv_spin_wait_delay);
i++;
}

spin_count += lint(i);
spin_count += lint(i - j);

if (i >= srv_n_spin_wait_rounds) {

Expand Down Expand Up @@ -809,7 +823,6 @@ rw_lock_sx_lock_func(
}

rw_lock_stats.rw_sx_spin_round_count.add(spin_count);
rw_lock_stats.rw_sx_spin_wait_count.add(spin_wait_count);

/* Locking succeeded */
return;
Expand Down

0 comments on commit 66f1e28

Please sign in to comment.