Loading mysql-test/r/ndb_condition_pushdown.result +329 −15 Original line number Diff line number Diff line Loading @@ -303,6 +303,58 @@ order by auto; auto 1 select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and (bits not between b'001' and b'011') and (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; auto 4 select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and (b'001' not between bits and bits) and ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; auto 2 3 4 select auto from t1 where string in("aaaa","cccc") and vstring in("aaaa","cccc") and bin in(0xAAAA,0xCCCC) and Loading Loading @@ -333,11 +385,11 @@ select auto from t1 where "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(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 Loading @@ -353,6 +405,59 @@ b'001' in(bits) and order by auto; auto 1 select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and bits not in(b'001',b'011') and options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; auto 2 4 select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and b'001' not in(bits) and 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; auto 2 3 4 select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1; pk1 attr1 attr2 attr3 2 2 NULL NULL Loading Loading @@ -1230,6 +1335,110 @@ auto 1 explain select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not 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 20 Using where with pushed condition; Using filesort select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; auto 4 explain select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not 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" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; auto 2 3 4 explain select auto from t1 where string in("aaaa","cccc") and vstring in("aaaa","cccc") and bin in(0xAAAA,0xCCCC) and Loading Loading @@ -1286,11 +1495,11 @@ select auto from t1 where "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(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 Loading @@ -1311,11 +1520,11 @@ select auto from t1 where "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(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 Loading @@ -1331,6 +1540,111 @@ select auto from t1 where order by auto; auto 1 explain select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not 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 30 Using where with pushed condition; Using filesort select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; auto 2 4 explain select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not 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" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; auto 2 3 4 update t1 set medium = 17 where Loading mysql-test/t/ndb_condition_pushdown.test +311 −15 Original line number Diff line number Diff line Loading @@ -298,6 +298,55 @@ select auto from t1 where ('1901-01-01 01:01:01' between date_time and date_time) order by auto; # NOT BETWEEN select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and (bits not between b'001' and b'011') and (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and (b'001' not between bits and bits) and ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; # IN select auto from t1 where string in("aaaa","cccc") and Loading Loading @@ -328,11 +377,11 @@ select auto from t1 where "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(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 Loading @@ -347,6 +396,55 @@ b'001' in(bits) and '1901-01-01 01:01:01' in(date_time) order by auto; # NOT IN select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and bits not in(b'001',b'011') and options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and b'001' not in(bits) and 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not 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; Loading Loading @@ -1152,6 +1250,105 @@ select auto from t1 where ('1901-01-01 01:01:01' between date_time and date_time) order by auto; # NOT BETWEEN explain select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; explain select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; # IN explain select auto from t1 where Loading Loading @@ -1208,11 +1405,11 @@ select auto from t1 where "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(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 Loading @@ -1232,11 +1429,11 @@ select auto from t1 where "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(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 Loading @@ -1251,6 +1448,105 @@ select auto from t1 where '1901-01-01 01:01:01' in(date_time) order by auto; # NOT IN explain select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; explain select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; # Update test update t1 set medium = 17 Loading sql/ha_ndbcluster.cc +7 −2 Original line number Diff line number Diff line Loading @@ -7232,8 +7232,10 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter) break; } case(Item_func::NOT_FUNC): { DBUG_PRINT("info", ("Generating negated query")); cond= cond->next; negated= TRUE; break; } default: Loading @@ -7249,12 +7251,14 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter) if (cond) cond= cond->next; if (filter->end() == -1) DBUG_RETURN(1); if (!negated) break; // else fall through (NOT END is an illegal condition) default: { DBUG_PRINT("info", ("Illegal scan filter")); } } } while (level > 0); } while (level > 0 || negated); DBUG_RETURN(0); } Loading Loading @@ -7296,6 +7300,7 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack, DBUG_ENTER("generate_scan_filter"); if (ndb_cond_stack) { DBUG_PRINT("info", ("Generating scan filter")); NdbScanFilter filter(op); bool multiple_cond= FALSE; // Wrap an AND group around multiple conditions Loading Loading
mysql-test/r/ndb_condition_pushdown.result +329 −15 Original line number Diff line number Diff line Loading @@ -303,6 +303,58 @@ order by auto; auto 1 select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and (bits not between b'001' and b'011') and (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; auto 4 select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and (b'001' not between bits and bits) and ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; auto 2 3 4 select auto from t1 where string in("aaaa","cccc") and vstring in("aaaa","cccc") and bin in(0xAAAA,0xCCCC) and Loading Loading @@ -333,11 +385,11 @@ select auto from t1 where "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(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 Loading @@ -353,6 +405,59 @@ b'001' in(bits) and order by auto; auto 1 select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and bits not in(b'001',b'011') and options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; auto 2 4 select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and b'001' not in(bits) and 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; auto 2 3 4 select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1; pk1 attr1 attr2 attr3 2 2 NULL NULL Loading Loading @@ -1230,6 +1335,110 @@ auto 1 explain select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not 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 20 Using where with pushed condition; Using filesort select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; auto 4 explain select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not 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" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; auto 2 3 4 explain select auto from t1 where string in("aaaa","cccc") and vstring in("aaaa","cccc") and bin in(0xAAAA,0xCCCC) and Loading Loading @@ -1286,11 +1495,11 @@ select auto from t1 where "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(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 Loading @@ -1311,11 +1520,11 @@ select auto from t1 where "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(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 Loading @@ -1331,6 +1540,111 @@ select auto from t1 where order by auto; auto 1 explain select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not 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 30 Using where with pushed condition; Using filesort select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; auto 2 4 explain select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not 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" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; auto 2 3 4 update t1 set medium = 17 where Loading
mysql-test/t/ndb_condition_pushdown.test +311 −15 Original line number Diff line number Diff line Loading @@ -298,6 +298,55 @@ select auto from t1 where ('1901-01-01 01:01:01' between date_time and date_time) order by auto; # NOT BETWEEN select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and (bits not between b'001' and b'011') and (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and (b'001' not between bits and bits) and ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; # IN select auto from t1 where string in("aaaa","cccc") and Loading Loading @@ -328,11 +377,11 @@ select auto from t1 where "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(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 Loading @@ -347,6 +396,55 @@ b'001' in(bits) and '1901-01-01 01:01:01' in(date_time) order by auto; # NOT IN select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and bits not in(b'001',b'011') and options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and b'001' not in(bits) and 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not 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; Loading Loading @@ -1152,6 +1250,105 @@ select auto from t1 where ('1901-01-01 01:01:01' between date_time and date_time) order by auto; # NOT BETWEEN explain select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; select auto from t1 where (string not between "aaaa" and "cccc") and (vstring not between "aaaa" and "cccc") and (bin not between 0xAAAA and 0xCCCC) and (vbin not between 0xAAAA and 0xCCCC) and (tiny not between -3 and -1) and (short not between -3 and -1) and (medium not between -3 and -1) and (long_int not between -3 and -1) and (longlong not between -3 and -1) and (utiny not between 1 and 3) and (ushort not between 1 and 3) and (umedium not between 1 and 3) and (ulong not between 1 and 3) and (ulonglong not between 1 and 3) and /* (bits not between b'001' and b'011') and */ (options not between 'one' and 'three') and (flags not between 'one' and 'one,two,three') and (date_field not between '1901-01-01' and '1903-03-03') and (year_field not between '1901' and '1903') and (time_field not between '01:01:01' and '03:03:03') and (date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03') order by auto; explain select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; select auto from t1 where ("aaaa" not between string and string) and ("aaaa" not between vstring and vstring) and (0xAAAA not between bin and bin) and (0xAAAA not between vbin and vbin) and (-1 not between tiny and tiny) and (-1 not between short and short) and (-1 not between medium and medium) and (-1 not between long_int and long_int) and (-1 not between longlong and longlong) and (1 not between utiny and utiny) and (1 not between ushort and ushort) and (1 not between umedium and umedium) and (1 not between ulong and ulong) and (1 not between ulonglong and ulonglong) and /* (b'001' not between bits and bits) and */ ('one' not between options and options) and ('one' not between flags and flags) and ('1901-01-01' not between date_field and date_field) and ('1901' not between year_field and year_field) and ('01:01:01' not between time_field and time_field) and ('1901-01-01 01:01:01' not between date_time and date_time) order by auto; # IN explain select auto from t1 where Loading Loading @@ -1208,11 +1405,11 @@ select auto from t1 where "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(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 Loading @@ -1232,11 +1429,11 @@ select auto from t1 where "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(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 Loading @@ -1251,6 +1448,105 @@ select auto from t1 where '1901-01-01 01:01:01' in(date_time) order by auto; # NOT IN explain select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; select auto from t1 where string not in("aaaa","cccc") and vstring not in("aaaa","cccc") and bin not in(0xAAAA,0xCCCC) and vbin not in(0xAAAA,0xCCCC) and tiny not in(-1,-3) and short not in(-1,-3) and medium not in(-1,-3) and long_int not in(-1,-3) and longlong not in(-1,-3) and utiny not in(1,3) and ushort not in(1,3) and umedium not in(1,3) and ulong not in(1,3) and ulonglong not in(1,3) and /* bits not in(b'001',b'011') and */ options not in('one','three') and flags not in('one','one,two,three') and date_field not in('1901-01-01','1903-03-03') and year_field not in('1901','1903') and time_field not in('01:01:01','03:03:03') and date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03') order by auto; explain select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; select auto from t1 where "aaaa" not in(string) and "aaaa" not in(vstring) and 0xAAAA not in(bin) and 0xAAAA not in(vbin) and (-1 not in(tiny)) and (-1 not in(short)) and (-1 not in(medium)) and (-1 not in(long_int)) and (-1 not in(longlong)) and 1 not in(utiny) and 1 not in(ushort) and 1 not in(umedium) and 1 not in(ulong) and 1 not in(ulonglong) and /* b'001' not in(bits) and */ 'one' not in(options) and 'one' not in(flags) and '1901-01-01' not in(date_field) and '1901' not in(year_field) and '01:01:01' not in(time_field) and '1901-01-01 01:01:01' not in(date_time) order by auto; # Update test update t1 set medium = 17 Loading
sql/ha_ndbcluster.cc +7 −2 Original line number Diff line number Diff line Loading @@ -7232,8 +7232,10 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter) break; } case(Item_func::NOT_FUNC): { DBUG_PRINT("info", ("Generating negated query")); cond= cond->next; negated= TRUE; break; } default: Loading @@ -7249,12 +7251,14 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter) if (cond) cond= cond->next; if (filter->end() == -1) DBUG_RETURN(1); if (!negated) break; // else fall through (NOT END is an illegal condition) default: { DBUG_PRINT("info", ("Illegal scan filter")); } } } while (level > 0); } while (level > 0 || negated); DBUG_RETURN(0); } Loading Loading @@ -7296,6 +7300,7 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack, DBUG_ENTER("generate_scan_filter"); if (ndb_cond_stack) { DBUG_PRINT("info", ("Generating scan filter")); NdbScanFilter filter(op); bool multiple_cond= FALSE; // Wrap an AND group around multiple conditions Loading