Commit 87b965f2 authored by unknown's avatar unknown
Browse files

Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/usr/local/home/marty/MySQL/mysql-5.0


sql/ha_ndbcluster.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
parents 982bd00d fc4a865f
Loading
Loading
Loading
Loading
+314 −1
Original line number Diff line number Diff line
@@ -251,6 +251,108 @@ auto
1
3
4
select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
(bits between b'001' and b'011') and
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;
auto
1
3
select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
(b'001' between bits and bits) and
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;
auto
1
select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
bits in(b'001',b'011') and
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;
auto
1
3
select auto from t1 where
"aaaa" in(string) and
"aaaa" in(vstring) and
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
b'001' in(bits) and
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;
auto
1
select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1;
pk1	attr1	attr2	attr3
2	2	NULL	NULL
@@ -1023,6 +1125,212 @@ auto
1
3
4
explain 
select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
/* (bits between b'001' and b'011') and */
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	range	medium_index	medium_index	3	NULL	10	Using where with pushed condition; Using filesort
select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
/* (bits between b'001' and b'011') and */
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;
auto
1
3
explain
select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
/* (b'001' between bits and bits) and */
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	4	Using where with pushed condition; Using filesort
select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
/* (b'001' between bits and bits) and */
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;
auto
1
explain
select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
/* bits in(b'001',b'011') and */
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	range	medium_index	medium_index	3	NULL	20	Using where with pushed condition; Using filesort
select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
/* bits in(b'001',b'011') and */
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;
auto
1
3
explain
select auto from t1 where
"aaaa" in(string) and 
"aaaa" in(vstring) and 
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
/* b'001' in(bits) and */
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	4	Using where with pushed condition; Using filesort
select auto from t1 where
"aaaa" in(string) and 
"aaaa" in(vstring) and 
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
/* b'001' in(bits) and */
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;
auto
1
update t1
set medium = 17
where 
@@ -1138,6 +1446,11 @@ id select_type table type possible_keys key key_len ref rows Extra
explain
select * from t2 where (attr1 < 2) = (attr2 < 2) order by pk1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	6	Using where; Using filesort
1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	6	Using where with pushed condition; Using filesort
explain
select * from t3 left join t4 on t4.attr2 = t3.attr2 where t4.attr1 > 1 and t4.attr3 < 5 or t4.attr1 is null order by t4.pk1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t3	ALL	NULL	NULL	NULL	NULL	6	Using temporary; Using filesort
1	SIMPLE	t4	ALL	NULL	NULL	NULL	NULL	6	Using where
set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4;
+298 −0
Original line number Diff line number Diff line
@@ -249,6 +249,104 @@ bin not like concat(0xBB, '%') and
vbin not like concat(0xBB, '%')
order by auto;

# BETWEEN
select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
(bits between b'001' and b'011') and
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;

select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
(b'001' between bits and bits) and
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;

# IN
select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
bits in(b'001',b'011') and
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;

select auto from t1 where
"aaaa" in(string) and
"aaaa" in(vstring) and
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
b'001' in(bits) and
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;

# Various tests 
select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1;
select * from t2 where attr3 is not null and attr1 > 2 order by pk1;
@@ -955,6 +1053,204 @@ bin not like concat(0xBB, '%') and
vbin not like concat(0xBB, '%')
order by auto;

# BETWEEN
explain 
select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
/* (bits between b'001' and b'011') and */
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;

select auto from t1 where
(string between "aaaa" and "cccc") and 
(vstring between "aaaa" and "cccc") and 
(bin between 0xAAAA and 0xCCCC) and 
(vbin between 0xAAAA and 0xCCCC) and 
(tiny between -3 and -1) and 
(short between -3 and -1) and 
(medium between -3 and -1) and 
(long_int between -3 and -1) and 
(longlong between -3 and -1) and 
(utiny between 1 and 3) and 
(ushort between 1 and 3) and 
(umedium between 1 and 3) and 
(ulong between 1 and 3) and 
(ulonglong between 1 and 3) and 
/* (bits between b'001' and b'011') and */
(options between 'one' and 'three') and 
(flags between 'one' and 'one,two,three') and 
(date_field between '1901-01-01' and '1903-03-03') and
(year_field between '1901' and '1903') and
(time_field between '01:01:01' and '03:03:03') and 
(date_time between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') 
order by auto;

explain
select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
/* (b'001' between bits and bits) and */
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;

select auto from t1 where
("aaaa" between string and string) and 
("aaaa" between vstring and vstring) and 
(0xAAAA between bin and bin) and 
(0xAAAA between vbin and vbin) and 
(-1 between tiny and tiny) and 
(-1 between short and short) and 
(-1 between medium and medium) and 
(-1 between long_int and long_int) and 
(-1 between longlong and longlong) and 
(1 between utiny and utiny) and 
(1 between ushort and ushort) and 
(1 between umedium and umedium) and 
(1 between ulong and ulong) and 
(1 between ulonglong and ulonglong) and 
/* (b'001' between bits and bits) and */
('one' between options and options) and 
('one' between flags and flags) and 
('1901-01-01' between date_field and date_field) and
('1901' between year_field and year_field) and
('01:01:01' between time_field and time_field) and 
('1901-01-01 01:01:01' between date_time and date_time) 
order by auto;

# IN
explain
select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
/* bits in(b'001',b'011') and */
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;

select auto from t1 where
string in("aaaa","cccc") and 
vstring in("aaaa","cccc") and 
bin in(0xAAAA,0xCCCC) and 
vbin in(0xAAAA,0xCCCC) and 
tiny in(-1,-3) and 
short in(-1,-3) and 
medium in(-1,-3) and 
long_int in(-1,-3) and 
longlong in(-1,-3) and 
utiny in(1,3) and 
ushort in(1,3) and 
umedium in(1,3) and 
ulong in(1,3) and 
ulonglong in(1,3) and 
/* bits in(b'001',b'011') and */
options in('one','three') and 
flags in('one','one,two,three') and 
date_field in('1901-01-01','1903-03-03') and
year_field in('1901','1903') and
time_field in('01:01:01','03:03:03') and 
date_time in('1901-01-01 01:01:01','1903-03-03 03:03:03') 
order by auto;

explain
select auto from t1 where
"aaaa" in(string) and 
"aaaa" in(vstring) and 
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
/* b'001' in(bits) and */
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;

select auto from t1 where
"aaaa" in(string) and 
"aaaa" in(vstring) and 
0xAAAA in(bin) and 
0xAAAA in(vbin) and 
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
1 in(utiny) and 
1 in(ushort) and 
1 in(umedium) and 
1 in(ulong) and 
1 in(ulonglong) and 
/* b'001' in(bits) and */
'one' in(options) and 
'one' in(flags) and 
'1901-01-01' in(date_field) and
'1901' in(year_field) and
'01:01:01' in(time_field) and 
'1901-01-01 01:01:01' in(date_time) 
order by auto;

# Update test
update t1
set medium = 17
@@ -1044,6 +1340,8 @@ explain
select auto from t1 where string = "aaaa" collate latin1_general_ci order by auto;
explain
select * from t2 where (attr1 < 2) = (attr2 < 2) order by pk1;
explain
select * from t3 left join t4 on t4.attr2 = t3.attr2 where t4.attr1 > 1 and t4.attr3 < 5 or t4.attr1 is null order by t4.pk1;

set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4;
+722 −504

File changed.

Preview size limit exceeded, changes collapsed.

+33 −3
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ typedef struct ndb_item_field_value {
typedef union ndb_item_value {
  const Item *item;
  NDB_ITEM_FIELD_VALUE *field_value;
  uint arg_count;
} NDB_ITEM_VALUE;

struct negated_function_mapping
@@ -144,6 +145,7 @@ class Ndb_item {
    }
    case(NDB_FUNCTION):
      value.item= item_value;
      value.arg_count= ((Item_func *) item_value)->argument_count();
      break;
    case(NDB_END_COND):
      break;
@@ -162,6 +164,13 @@ class Ndb_item {
  {
    qualification.function_type= func_type;
    value.item= item_value;
    value.arg_count= ((Item_func *) item_value)->argument_count();
  };
  Ndb_item(Item_func::Functype func_type, uint no_args) 
    : type(NDB_FUNCTION)
  {
    qualification.function_type= func_type;
    value.arg_count= no_args;
  };
  ~Ndb_item()
  { 
@@ -194,7 +203,7 @@ class Ndb_item {

  int argument_count() 
  { 
    return ((Item_func *) value.item)->argument_count(); 
    return value.arg_count;
  };

  const char* get_val() 
@@ -273,12 +282,28 @@ class Ndb_cond_stack
  { 
    if (ndb_cond) delete ndb_cond; 
    ndb_cond= NULL; 
    if (next) delete next;
    next= NULL; 
  };
  Ndb_cond *ndb_cond;
  Ndb_cond_stack *next;
};

class Ndb_rewrite_context
{
public:
  Ndb_rewrite_context(Item_func *func) 
    : func_item(func), left_hand_item(NULL), count(0) {};
  ~Ndb_rewrite_context()
  {
    if (next) delete next;
  }
  const Item_func *func_item;
  const Item *left_hand_item;
  uint count;
  Ndb_rewrite_context *next;
};

/*
  This class is used for storing the context when traversing
  the Item tree. It stores a reference to the table the condition
@@ -292,11 +317,16 @@ class Ndb_cond_traverse_context
  Ndb_cond_traverse_context(TABLE *tab, void* ndb_tab, Ndb_cond_stack* stack)
    : table(tab), ndb_table(ndb_tab), 
    supported(TRUE), stack_ptr(stack), cond_ptr(NULL),
    expect_mask(0), expect_field_result_mask(0), skip(0), collation(NULL)
    expect_mask(0), expect_field_result_mask(0), skip(0), collation(NULL),
    rewrite_stack(NULL)
  {
    if (stack)
      cond_ptr= stack->ndb_cond;
  };
  ~Ndb_cond_traverse_context()
  {
    if (rewrite_stack) delete rewrite_stack;
  }
  void expect(Item::Type type)
  {
    expect_mask|= (1 << type);
@@ -357,7 +387,7 @@ class Ndb_cond_traverse_context
  uint expect_field_result_mask;
  uint skip;
  CHARSET_INFO* collation;

  Ndb_rewrite_context *rewrite_stack;
};

/*
+3 −1
Original line number Diff line number Diff line
@@ -5461,10 +5461,12 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
          if (!(tmp= add_found_match_trig_cond(first_inner_tab, tmp, 0)))
            DBUG_RETURN(1);
          tab->select_cond=sel->cond=tmp;
          /* Push condition to storage engine if this is enabled
             and the condition is not guarded */
	  if (thd->variables.engine_condition_pushdown)
          {
            COND *push_cond= 
              make_cond_for_table(cond,current_map,current_map);
              make_cond_for_table(tmp,current_map,current_map);
            tab->table->file->pushed_cond= NULL;
            if (push_cond)
            {