Automerge.
This commit is contained in:
commit
5e770ab352
@ -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);
|
||||||
|
@ -484,4 +484,15 @@ SET character_set_filesystem=default;
|
|||||||
select @@character_set_filesystem;
|
select @@character_set_filesystem;
|
||||||
@@character_set_filesystem
|
@@character_set_filesystem
|
||||||
binary
|
binary
|
||||||
|
#
|
||||||
|
# Bug #51850: crash/memory overlap when using load data infile and set
|
||||||
|
# col equal to itself!
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(col0 LONGBLOB);
|
||||||
|
SELECT 'test' INTO OUTFILE 't1.txt';
|
||||||
|
LOAD DATA INFILE 't1.txt' IGNORE INTO TABLE t1 SET col0=col0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
col0
|
||||||
|
test
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
@ -532,5 +532,19 @@ SET character_set_filesystem=default;
|
|||||||
select @@character_set_filesystem;
|
select @@character_set_filesystem;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #51850: crash/memory overlap when using load data infile and set
|
||||||
|
--echo # col equal to itself!
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(col0 LONGBLOB);
|
||||||
|
SELECT 'test' INTO OUTFILE 't1.txt';
|
||||||
|
LOAD DATA INFILE 't1.txt' IGNORE INTO TABLE t1 SET col0=col0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
remove_file $MYSQLD_DATADIR/test/t1.txt;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
16
sql/item.cc
16
sql/item.cc
@ -5295,14 +5295,22 @@ int Item_field::save_in_field(Field *to, bool no_conversions)
|
|||||||
if (result_field->is_null())
|
if (result_field->is_null())
|
||||||
{
|
{
|
||||||
null_value=1;
|
null_value=1;
|
||||||
res= set_field_to_null_with_conversions(to, no_conversions);
|
return set_field_to_null_with_conversions(to, no_conversions);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
to->set_notnull();
|
to->set_notnull();
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we're setting the same field as the one we're reading from there's
|
||||||
|
nothing to do. This can happen in 'SET x = x' type of scenarios.
|
||||||
|
*/
|
||||||
|
if (to == result_field)
|
||||||
|
{
|
||||||
|
null_value=0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
res= field_conv(to,result_field);
|
res= field_conv(to,result_field);
|
||||||
null_value=0;
|
null_value=0;
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5145,6 +5145,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)
|
||||||
{
|
{
|
||||||
@ -8925,8 +8930,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