Automerge.
This commit is contained in:
commit
5e770ab352
@ -1117,6 +1117,23 @@ ON t4.a = t5.a
|
||||
ON t1.a = t3.a;
|
||||
a a a a a a
|
||||
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.
|
||||
CREATE TABLE t1 (f1 int);
|
||||
CREATE TABLE t2 (f1 int);
|
||||
|
@ -484,4 +484,15 @@ SET character_set_filesystem=default;
|
||||
select @@character_set_filesystem;
|
||||
@@character_set_filesystem
|
||||
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
|
||||
|
@ -784,6 +784,18 @@ FROM
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
@ -532,5 +532,19 @@ SET character_set_filesystem=default;
|
||||
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
|
||||
|
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())
|
||||
{
|
||||
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();
|
||||
|
||||
/*
|
||||
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)
|
||||
{
|
||||
to->set_notnull();
|
||||
res= field_conv(to,result_field);
|
||||
null_value=0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
res= field_conv(to,result_field);
|
||||
null_value=0;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -5145,6 +5145,11 @@ greedy_search(JOIN *join,
|
||||
if (best_extension_by_limited_search(join, remaining_tables, idx, record_count,
|
||||
read_time, search_depth, prune_level))
|
||||
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)
|
||||
{
|
||||
@ -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.
|
||||
It would be enough to set dependency only on one outer table
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user