mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge 5.5 -> 10.0-serg
This commit is contained in:
@ -180,6 +180,32 @@ SET optimizer_switch=@tmp_optimizer_switch;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# MDEV-536: LP:1050806 - different result for a query using subquery
|
||||
#
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE `t1` (
|
||||
`node_uid` bigint(20) unsigned DEFAULT NULL,
|
||||
`date` datetime DEFAULT NULL,
|
||||
`mirror_date` datetime DEFAULT NULL,
|
||||
KEY `date` (`date`)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
node_uid date mirror_date result
|
||||
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
|
||||
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed
|
||||
#
|
||||
CREATE TABLE t1 (a int, b int, INDEX idx(a));
|
||||
@ -197,5 +223,76 @@ a b
|
||||
1 0
|
||||
1 1
|
||||
1 3
|
||||
DROP TABLE t1, t2, t3;
|
||||
set @tmp_mdev567=@@optimizer_switch;
|
||||
set optimizer_switch='mrr=off';
|
||||
SELECT * FROM t3
|
||||
WHERE a = (SELECT COUNT(DISTINCT t2.b) FROM t1, t2
|
||||
WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9
|
||||
AND t3.b = t1.b
|
||||
GROUP BY t1.b);
|
||||
a b
|
||||
1 0
|
||||
1 1
|
||||
1 3
|
||||
DROP TABLE t1,t2,t3;
|
||||
set optimizer_switch=@tmp_mdev567;
|
||||
#
|
||||
# MDEV-614, also MDEV-536, also LP:1050806:
|
||||
# different result for a query using subquery between 5.5.25 and 5.5.27
|
||||
#
|
||||
CREATE TABLE `t1` (
|
||||
`node_uid` bigint(20) unsigned DEFAULT NULL,
|
||||
`date` datetime DEFAULT NULL,
|
||||
`mirror_date` datetime DEFAULT NULL,
|
||||
KEY `date` (`date`)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
|
||||
explain
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE <derived2> ALL NULL NULL NULL NULL 2
|
||||
2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Rowid-ordered scan; Using filesort
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
node_uid date mirror_date result
|
||||
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
|
||||
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
|
||||
set @tmp_mdev614=@@optimizer_switch;
|
||||
set optimizer_switch='mrr=off';
|
||||
explain
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE <derived2> ALL NULL NULL NULL NULL 2
|
||||
2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Using filesort
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
node_uid date mirror_date result
|
||||
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
|
||||
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
|
||||
set optimizer_switch=@tmp_mdev614;
|
||||
DROP TABLE t1;
|
||||
set optimizer_switch=@subselect2_test_tmp;
|
||||
|
@ -203,6 +203,32 @@ SET optimizer_switch=@tmp_optimizer_switch;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-536: LP:1050806 - different result for a query using subquery
|
||||
--echo #
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
|
||||
CREATE TABLE `t1` (
|
||||
`node_uid` bigint(20) unsigned DEFAULT NULL,
|
||||
`date` datetime DEFAULT NULL,
|
||||
`mirror_date` datetime DEFAULT NULL,
|
||||
KEY `date` (`date`)
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed
|
||||
--echo #
|
||||
@ -220,7 +246,75 @@ SELECT * FROM t3
|
||||
WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9
|
||||
AND t3.b = t1.b
|
||||
GROUP BY t1.b);
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
|
||||
set @tmp_mdev567=@@optimizer_switch;
|
||||
set optimizer_switch='mrr=off';
|
||||
SELECT * FROM t3
|
||||
WHERE a = (SELECT COUNT(DISTINCT t2.b) FROM t1, t2
|
||||
WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9
|
||||
AND t3.b = t1.b
|
||||
GROUP BY t1.b);
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
set optimizer_switch=@tmp_mdev567;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-614, also MDEV-536, also LP:1050806:
|
||||
--echo # different result for a query using subquery between 5.5.25 and 5.5.27
|
||||
--echo #
|
||||
|
||||
CREATE TABLE `t1` (
|
||||
`node_uid` bigint(20) unsigned DEFAULT NULL,
|
||||
`date` datetime DEFAULT NULL,
|
||||
`mirror_date` datetime DEFAULT NULL,
|
||||
KEY `date` (`date`)
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
|
||||
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
|
||||
|
||||
explain
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
|
||||
set @tmp_mdev614=@@optimizer_switch;
|
||||
set optimizer_switch='mrr=off';
|
||||
explain
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT node_uid, date, mirror_date, @result := 0 AS result
|
||||
FROM t1
|
||||
WHERE date < '2012-12-12 12:12:12'
|
||||
AND node_uid in (2085, 2084)
|
||||
ORDER BY mirror_date ASC
|
||||
) AS calculated_result;
|
||||
|
||||
set optimizer_switch=@tmp_mdev614;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
set optimizer_switch=@subselect2_test_tmp;
|
||||
|
||||
|
@ -206,7 +206,7 @@ my_context_spawn(struct my_context *c, void (*f)(void *), void *d)
|
||||
(
|
||||
"movq %%rsp, (%[save])\n\t"
|
||||
"movq %[stack], %%rsp\n\t"
|
||||
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4
|
||||
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 && !defined(__INTEL_COMPILER)
|
||||
/*
|
||||
This emits a DWARF DW_CFA_undefined directive to make the return address
|
||||
undefined. This indicates that this is the top of the stack frame, and
|
||||
|
@ -10960,6 +10960,13 @@ int QUICK_RANGE_SELECT::reset()
|
||||
cur_range= (QUICK_RANGE**) ranges.buffer;
|
||||
RANGE_SEQ_IF seq_funcs= {NULL, quick_range_seq_init, quick_range_seq_next, 0, 0};
|
||||
|
||||
if (file->inited == handler::RND)
|
||||
{
|
||||
/* Handler could be left in this state by MRR */
|
||||
if ((error= file->ha_rnd_end()))
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
if (in_ror_merged_scan)
|
||||
head->column_bitmaps_set_no_signal(&column_bitmap, &column_bitmap);
|
||||
|
||||
|
@ -19065,6 +19065,20 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
|
||||
save_pre_sort_join_tab= join->pre_sort_join_tab;
|
||||
join->pre_sort_join_tab= NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
Save index #, save index condition. Do it right now, because MRR may
|
||||
*/
|
||||
if (table->file->inited == handler::INDEX)
|
||||
{
|
||||
join->pre_sort_index= table->file->active_index;
|
||||
join->pre_sort_idx_pushed_cond= table->file->pushed_idx_cond;
|
||||
// no need to save key_read
|
||||
}
|
||||
else
|
||||
join->pre_sort_index= MAX_KEY;
|
||||
}
|
||||
|
||||
/* Currently ORDER BY ... LIMIT is not supported in subqueries. */
|
||||
DBUG_ASSERT(join->group_list || !join->is_in_subquery());
|
||||
@ -19155,17 +19169,6 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
|
||||
|
||||
*(join->pre_sort_join_tab)= *tab;
|
||||
|
||||
if (table->file->inited == handler::INDEX)
|
||||
{
|
||||
// Save index #, save index condition
|
||||
join->pre_sort_index= table->file->active_index;
|
||||
join->pre_sort_idx_pushed_cond= table->file->pushed_idx_cond;
|
||||
// no need to save key_read?
|
||||
err= table->file->ha_index_end();
|
||||
}
|
||||
else
|
||||
join->pre_sort_index= MAX_KEY;
|
||||
|
||||
/*TODO: here, close the index scan, cancel index-only read. */
|
||||
#if 0
|
||||
/* MariaDB doesn't need the following: */
|
||||
@ -19211,8 +19214,6 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
|
||||
#endif
|
||||
tab->select=NULL;
|
||||
tab->set_select_cond(NULL, __LINE__);
|
||||
// tab->last_inner= 0;
|
||||
// tab->first_unmatched= 0;
|
||||
tab->type=JT_ALL; // Read with normal read_record
|
||||
tab->read_first_record= join_init_read_record;
|
||||
tab->table->file->ha_index_or_rnd_end();
|
||||
|
@ -895,6 +895,7 @@ protected:
|
||||
|
||||
public:
|
||||
JOIN_TAB *join_tab, **best_ref;
|
||||
|
||||
/*
|
||||
For "Using temporary+Using filesort" queries, JOIN::join_tab can point to
|
||||
either:
|
||||
|
Reference in New Issue
Block a user