Current Path : /home/usr.opt/mysql57/mysql-test/r/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/r/negation_elimination.result |
drop table if exists t1; create table t1 (a int, key (a)); insert into t1 values (NULL), (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19); explain select * from t1 where not(not(a)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 21 90.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` select * from t1 where not(not(a)); a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where not(not(not(a > 10))); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 10 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` <= 10) select * from t1 where not(not(not(a > 10))); a 0 1 2 3 4 5 6 7 8 9 10 explain select * from t1 where not(not(not(a < 5) and not(a > 10))); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 5 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` >= 5) and (`test`.`t1`.`a` <= 10)) select * from t1 where not(not(not(a < 5) and not(a > 10))); a 5 6 7 8 9 10 explain select * from t1 where not(a = 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 19 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` <> 10) select * from t1 where not(a = 10); a 0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 explain select * from t1 where not(a != 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ref a a 5 const 1 100.00 Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = 10) select * from t1 where not(a != 1); a 1 explain select * from t1 where not(a < 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 11 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` >= 10) select * from t1 where not(a < 10); a 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where not(a >= 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 9 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` < 10) select * from t1 where not(a >= 10); a 0 1 2 3 4 5 6 7 8 9 explain select * from t1 where not(a > 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 10 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` <= 10) select * from t1 where not(a > 10); a 0 1 2 3 4 5 6 7 8 9 10 explain select * from t1 where not(a <= 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 10 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 10) select * from t1 where not(a <= 10); a 11 12 13 14 15 16 17 18 19 explain select * from t1 where not(a is null); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 20 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` is not null) select * from t1 where not(a is null); a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where not(a is not null); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ref a a 5 const 1 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where isnull(`test`.`t1`.`a`) select * from t1 where not(a is not null); a NULL explain select * from t1 where not(a < 5 or a > 15); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 10 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` >= 5) and (`test`.`t1`.`a` <= 15)) select * from t1 where not(a < 5 or a > 15); a 5 6 7 8 9 10 11 12 13 14 15 explain select * from t1 where not(a < 15 and a > 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 12 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` >= 15) or (`test`.`t1`.`a` <= 5)) select * from t1 where not(a < 15 and a > 5); a 0 1 2 3 4 5 15 16 17 18 19 explain select * from t1 where a = 2 or not(a < 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 12 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = 2) or (`test`.`t1`.`a` >= 10)) select * from t1 where a = 2 or not(a < 10); a 2 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where a > 5 and not(a > 10); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 4 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 5) and (`test`.`t1`.`a` <= 10)) select * from t1 where a > 5 and not(a > 10); a 6 7 8 9 10 explain select * from t1 where a > 5 xor a < 10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 21 44.44 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 5) xor (`test`.`t1`.`a` < 10)) select * from t1 where a > 5 xor a < 10; a 0 1 2 3 4 5 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where a = 2 or not(a < 5 or a > 15); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 11 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = 2) or ((`test`.`t1`.`a` >= 5) and (`test`.`t1`.`a` <= 15))) select * from t1 where a = 2 or not(a < 5 or a > 15); a 2 5 6 7 8 9 10 11 12 13 14 15 explain select * from t1 where a = 7 or not(a < 15 and a > 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 13 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = 7) or (`test`.`t1`.`a` >= 15) or (`test`.`t1`.`a` <= 5)) select * from t1 where a = 7 or not(a < 15 and a > 5); a 0 1 2 3 4 5 7 15 16 17 18 19 explain select * from t1 where NULL or not(a < 15 and a > 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 12 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` >= 15) or (`test`.`t1`.`a` <= 5)) select * from t1 where NULL or not(a < 15 and a > 5); a 0 1 2 3 4 5 15 16 17 18 19 explain select * from t1 where not(NULL and a > 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 6 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` <= 5) select * from t1 where not(NULL and a > 5); a 0 1 2 3 4 5 explain select * from t1 where not(NULL or a); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0 select * from t1 where not(NULL or a); a explain select * from t1 where not(NULL and a); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 21 10.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (not(`test`.`t1`.`a`)) select * from t1 where not(NULL and a); a 0 explain select * from t1 where not((a < 5 or a < 10) and (not(a > 16) or a > 17)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 11 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (((`test`.`t1`.`a` >= 5) and (`test`.`t1`.`a` >= 10)) or ((`test`.`t1`.`a` > 16) and (`test`.`t1`.`a` <= 17))) select * from t1 where not((a < 5 or a < 10) and (not(a > 16) or a > 17)); a 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where not((a < 5 and a < 10) and (not(a > 16) or a > 17)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 15 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` >= 5) or (`test`.`t1`.`a` >= 10) or ((`test`.`t1`.`a` > 16) and (`test`.`t1`.`a` <= 17))) select * from t1 where not((a < 5 and a < 10) and (not(a > 16) or a > 17)); a 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 explain select * from t1 where ((a between 5 and 15) and (not(a like 10))); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range a a 5 NULL 10 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` between 5 and 15) and (not((`test`.`t1`.`a` like 10)))) select * from t1 where ((a between 5 and 15) and (not(a like 10))); a 5 6 7 8 9 11 12 13 14 15 # XOR (Note: XOR is negated by negating one of the operands) # Should return 6,7 SELECT * FROM t1 WHERE ((a > 5) XOR (a > 7)); a 6 7 # Should return 0..5,8..19 SELECT * FROM t1 WHERE ((NOT (a > 5)) XOR (a > 7)); a 0 1 2 3 4 5 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM t1 WHERE ((a > 5) XOR (NOT (a > 7))); a 0 1 2 3 4 5 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM t1 WHERE NOT ((a > 5) XOR (a > 7)); a 0 1 2 3 4 5 8 9 10 11 12 13 14 15 16 17 18 19 # Should return 6,7 SELECT * FROM t1 WHERE NOT ((NOT (a > 5)) XOR (a > 7)); a 6 7 SELECT * FROM t1 WHERE NOT ((a > 5) XOR (NOT (a > 7))); a 6 7 # Should return 0..5,8..19 SELECT * FROM t1 WHERE NOT ((NOT (a > 5)) XOR (NOT (a > 7))); a 0 1 2 3 4 5 8 9 10 11 12 13 14 15 16 17 18 19 # Should have empty result SELECT * FROM t1 WHERE (NULL XOR (a > 7)); a SELECT * FROM t1 WHERE NOT (NULL XOR (a > 7)); a # Should be simplified to "...WHERE (a XOR a) EXPLAIN EXTENDED SELECT * FROM t1 WHERE NOT ((NOT a) XOR (a)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 21 18.00 Using where; Using index Warnings: Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` xor `test`.`t1`.`a`) # Should be simplified to "...WHERE (a XOR a) EXPLAIN EXTENDED SELECT * FROM t1 WHERE NOT (a XOR (NOT a)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 21 18.00 Using where; Using index Warnings: Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` xor `test`.`t1`.`a`) # End XOR delete from t1 where a > 3; select a, not(not(a)) from t1; a not(not(a)) NULL NULL 0 0 1 1 2 1 3 1 explain extended select a, not(not(a)), not(a <= 2 and not(a)), not(a not like "1"), not (a not in (1,2)), not(a != 2) from t1 where not(not(a)) having not(not(a)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index NULL a 5 NULL 5 80.00 Using where; Using index Warnings: Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,(`test`.`t1`.`a` <> 0) AS `not(not(a))`,((`test`.`t1`.`a` > 2) or `test`.`t1`.`a`) AS `not(a <= 2 and not(a))`,(`test`.`t1`.`a` like '1') AS `not(a not like "1")`,(`test`.`t1`.`a` in (1,2)) AS `not (a not in (1,2))`,(`test`.`t1`.`a` = 2) AS `not(a != 2)` from `test`.`t1` where `test`.`t1`.`a` having `test`.`t1`.`a` drop table t1;