5.0-bugteam->5.1-bugteam merge
This commit is contained in:
commit
fe25ec8f24
@ -1117,6 +1117,23 @@ ON t4.a = t5.a
|
|||||||
ON t1.a = t3.a;
|
ON t1.a = t3.a;
|
||||||
a a a a a a
|
a a a a a a
|
||||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||||
|
#
|
||||||
|
# Bug#48483: crash in get_best_combination()
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE VIEW v1 AS SELECT 1 FROM t1 LEFT JOIN t1 AS t2 on 1=1;
|
||||||
|
EXPLAIN EXTENDED
|
||||||
|
SELECT 1 FROM v1 right join v1 AS v2 ON RAND();
|
||||||
|
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
|
||||||
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select 1 AS `1` from `test`.`t1` left join `test`.`t1` `t2` on((1 = 1)) left join (`test`.`t1` left join `test`.`t1` `t2` on((1 = 1))) on(rand()) where 1
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
CREATE TABLE t1 (f1 int);
|
CREATE TABLE t1 (f1 int);
|
||||||
CREATE TABLE t2 (f1 int);
|
CREATE TABLE t2 (f1 int);
|
||||||
|
@ -784,6 +784,18 @@ FROM
|
|||||||
|
|
||||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#48483: crash in get_best_combination()
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE VIEW v1 AS SELECT 1 FROM t1 LEFT JOIN t1 AS t2 on 1=1;
|
||||||
|
EXPLAIN EXTENDED
|
||||||
|
SELECT 1 FROM v1 right join v1 AS v2 ON RAND();
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
|
||||||
|
@ -5043,6 +5043,11 @@ greedy_search(JOIN *join,
|
|||||||
if (best_extension_by_limited_search(join, remaining_tables, idx, record_count,
|
if (best_extension_by_limited_search(join, remaining_tables, idx, record_count,
|
||||||
read_time, search_depth, prune_level))
|
read_time, search_depth, prune_level))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
/*
|
||||||
|
'best_read < DBL_MAX' means that optimizer managed to find
|
||||||
|
some plan and updated 'best_positions' array accordingly.
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(join->best_read < DBL_MAX);
|
||||||
|
|
||||||
if (size_remain <= search_depth)
|
if (size_remain <= search_depth)
|
||||||
{
|
{
|
||||||
@ -8824,8 +8829,14 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
|
|||||||
we still make the inner tables dependent on the outer tables.
|
we still make the inner tables dependent on the outer tables.
|
||||||
It would be enough to set dependency only on one outer table
|
It would be enough to set dependency only on one outer table
|
||||||
for them. Yet this is really a rare case.
|
for them. Yet this is really a rare case.
|
||||||
|
Note:
|
||||||
|
RAND_TABLE_BIT mask should not be counted as it
|
||||||
|
prevents update of inner table dependences.
|
||||||
|
For example it might happen if RAND() function
|
||||||
|
is used in JOIN ON clause.
|
||||||
*/
|
*/
|
||||||
if (!(prev_table->on_expr->used_tables() & ~prev_used_tables))
|
if (!((prev_table->on_expr->used_tables() & ~RAND_TABLE_BIT) &
|
||||||
|
~prev_used_tables))
|
||||||
prev_table->dep_tables|= used_tables;
|
prev_table->dep_tables|= used_tables;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user