📄 ndb_condition_pushdown.test
字号:
/* (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;explainselect 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;# INexplainselect auto from t1 wherestring 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') andyear_field in('1901','1903') andtime_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 wherestring 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') andyear_field in('1901','1903') andtime_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;explainselect 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)) and1 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)) and1 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;# NOT INexplainselect auto from t1 wherestring 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') andyear_field not in('1901','1903') andtime_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 wherestring 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') andyear_field not in('1901','1903') andtime_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;explainselect 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)) and1 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)) and1 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 testupdate t1set medium = 17where string = "aaaa" and vstring = "aaaa" and bin = 0xAAAA and vbin = 0xAAAA andtiny = -1 and short = -1 and medium = -1 and long_int = -1 and longlong = -1 and real_float > 1.0 and real_float < 2.0 and real_double > 1.0 and real_double < 2.0 andreal_decimal > 1.0 and real_decimal < 2.0 andutiny = 1 and ushort = 1 and umedium = 1 and ulong = 1 and ulonglong = 1 and /* bits = b'001' and */options = 'one' and flags = 'one' and date_field = '1901-01-01' andyear_field = '1901' andtime_field = '01:01:01' and date_time = '1901-01-01 01:01:01';# Delete testdelete from t1 wherestring = "aaaa" and vstring = "aaaa" and bin = 0xAAAA and vbin = 0xAAAA andtiny = -1 and short = -1 and medium = 17 and long_int = -1 and longlong = -1 and real_float > 1.0 and real_float < 2.0 and real_double > 1.0 and real_double < 2.0 andreal_decimal > 1.0 and real_decimal < 2.0 andutiny = 1 and ushort = 1 and umedium = 1 and ulong = 1 and ulonglong = 1 and /* bits = b'001' and */options = 'one' and flags = 'one' and date_field = '1901-01-01' andyear_field = '1901' andtime_field = '01:01:01' and date_time = '1901-01-01 01:01:01';select count(*) from t1;# Various tests explain select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1;select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1;explainselect * from t2 where attr3 is not null and attr1 > 2 order by pk1;select * from t2 where attr3 is not null and attr1 > 2 order by pk1;explainselect * from t3 where attr2 > 9223372036854775803 and attr3 != 3 order by pk1;select * from t3 where attr2 > 9223372036854775803 and attr3 != 3 order by pk1;explainselect * from t2,t3 where t2.attr1 < 1 and t2.attr2 = t3.attr2 and t3.attr1 < 5 order by t2.pk1;select * from t2,t3 where t2.attr1 < 1 and t2.attr2 = t3.attr2 and t3.attr1 < 5 order by t2.pk1;explainselect * from t4 where attr1 < 5 and attr2 > 9223372036854775803 and attr3 != 3 order by t4.pk1;select * from t4 where attr1 < 5 and attr2 > 9223372036854775803 and attr3 != 3 order by t4.pk1;explainselect * from t3,t4 where t4.attr1 > 1 and t4.attr2 = t3.attr2 and t4.attr3 < 5 order by t4.pk1;select * from t3,t4 where t4.attr1 > 1 and t4.attr2 = t3.attr2 and t4.attr3 < 5 order by t4.pk1;# Some tests that are currently not supported and should not push conditionexplainselect auto from t1 where string = "aaaa" collate latin1_general_ci order by auto;explainselect * from t2 where (attr1 < 2) = (attr2 < 2) order by pk1;explainselect * 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;# bug#15722create table t5 (a int primary key auto_increment, b tinytext not null) engine = ndb;insert into t5 (b) values ('jonas'), ('jensing'), ('johan');set engine_condition_pushdown = off;select * from t5 where b like '%jo%' order by a;set engine_condition_pushdown = on;explain select * from t5 where b like '%jo%';select * from t5 where b like '%jo%' order by a;# bug#21056 ndb pushdown equal/setValue error on datetimeset engine_condition_pushdown = off;select auto from t1 where date_time like '1902-02-02 %' order by auto;select auto from t1 where date_time not like '1902-02-02 %' order by auto;set engine_condition_pushdown = on;explain select auto from t1 where date_time like '1902-02-02 %';select auto from t1 where date_time like '1902-02-02 %' order by auto;explain select auto from t1 where date_time not like '1902-02-02 %';select auto from t1 where date_time not like '1902-02-02 %' order by auto;# bug#17421 -1drop table t1;create table t1 (a int, b varchar(3), primary key using hash(a))engine=ndb;insert into t1 values (1,'a'), (2,'ab'), (3,'abc');# in TUP the constants 'ab' 'abc' were expected in varchar format# "like" returned error which became "false"# scan filter negates "or" which exposes the bugset engine_condition_pushdown = off;select * from t1 where b like 'ab';select * from t1 where b like 'ab' or b like 'ab';select * from t1 where b like 'abc';select * from t1 where b like 'abc' or b like 'abc';set engine_condition_pushdown = on;select * from t1 where b like 'ab';select * from t1 where b like 'ab' or b like 'ab';select * from t1 where b like 'abc';select * from t1 where b like 'abc' or b like 'abc';# bug#17421 -2drop table t1;create table t1 (a int, b char(3), primary key using hash(a))engine=ndb;insert into t1 values (1,'a'), (2,'ab'), (3,'abc');# test that incorrect MySQL behaviour is preserved# 'ab ' LIKE 'ab' is true in MySQLset engine_condition_pushdown = off;select * from t1 where b like 'ab';select * from t1 where b like 'ab' or b like 'ab';select * from t1 where b like 'abc';select * from t1 where b like 'abc' or b like 'abc';set engine_condition_pushdown = on;select * from t1 where b like 'ab';select * from t1 where b like 'ab' or b like 'ab';select * from t1 where b like 'abc';select * from t1 where b like 'abc' or b like 'abc';# bug#20406 (maybe same as bug#17421 -1, not seen on 32-bit x86)drop table t1;create table t1 ( fname varchar(255), lname varchar(255) )engine=ndbcluster;insert into t1 values ("Young","Foo");set engine_condition_pushdown = 0;SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');set engine_condition_pushdown = 1;SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');# make sure optimizer does not do some crazy shortcutinsert into t1 values ("aaa", "aaa");insert into t1 values ("bbb", "bbb");insert into t1 values ("ccc", "ccc");insert into t1 values ("ddd", "ddd");set engine_condition_pushdown = 0;SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');set engine_condition_pushdown = 1;SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');set engine_condition_pushdown = @old_ecpd;DROP TABLE t1,t2,t3,t4,t5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -