mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Merge acurtis@bk-internal:/home/bk/mysql-5.1-new
into xiphis.org:/home/antony/work2/p1-bug14575.1-mrg2
This commit is contained in:
commit
816bd99b27
4 changed files with 24 additions and 2 deletions
|
@ -429,8 +429,8 @@ inline double ulonglong2double(ulonglong value)
|
|||
#define HAVE_RTREE_KEYS 1
|
||||
#define HAVE_ROW_BASED_REPLICATION 1
|
||||
|
||||
/* #undef HAVE_OPENSSL */
|
||||
/* #undef HAVE_YASSL */
|
||||
#define HAVE_OPENSSL 1
|
||||
#define HAVE_YASSL 1
|
||||
|
||||
/* Define charsets you want */
|
||||
/* #undef HAVE_CHARSET_armscii8 */
|
||||
|
|
|
@ -3156,3 +3156,10 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 9 Using filesort
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
insert into t1 values (1,1),(2,2);
|
||||
select tt.t from (select 'crash1' as t, f2 from t1) as tt left join t1 on tt.t = 'crash2' and tt.f2 = t1.f2 where tt.t = 'crash1';
|
||||
t
|
||||
crash1
|
||||
crash1
|
||||
drop table t1;
|
||||
|
|
|
@ -2067,3 +2067,10 @@ SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#17366: Unchecked Item_int results in server crash
|
||||
#
|
||||
create table t1( f1 int,f2 int);
|
||||
insert into t1 values (1,1),(2,2);
|
||||
select tt.t from (select 'crash1' as t, f2 from t1) as tt left join t1 on tt.t = 'crash2' and tt.f2 = t1.f2 where tt.t = 'crash1';
|
||||
drop table t1;
|
||||
|
|
|
@ -7114,7 +7114,10 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
|
|||
if (!cond)
|
||||
cond= new Item_cond_and(eq_list);
|
||||
else
|
||||
{
|
||||
DBUG_ASSERT(cond->type() == Item::COND_ITEM);
|
||||
((Item_cond *) cond)->add_at_head(&eq_list);
|
||||
}
|
||||
|
||||
cond->quick_fix_field();
|
||||
cond->update_used_tables();
|
||||
|
@ -7199,6 +7202,11 @@ static COND* substitute_for_best_equal_field(COND *cond,
|
|||
while ((item_equal= it++))
|
||||
{
|
||||
cond= eliminate_item_equal(cond, cond_equal->upper_levels, item_equal);
|
||||
// This occurs when eliminate_item_equal() founds that cond is
|
||||
// always false and substitues it with Item_int 0.
|
||||
// Due to this, value of item_equal will be 0, so just return it.
|
||||
if (cond->type() != Item::COND_ITEM)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue