mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # Test negation elimination
 | |
| #
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t1;
 | |
| --enable_warnings
 | |
| 
 | |
| 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));
 | |
| select * from t1 where not(not(a));
 | |
| explain select * from t1 where not(not(not(a > 10)));
 | |
| select * from t1 where not(not(not(a > 10)));
 | |
| explain select * from t1 where not(not(not(a < 5) and not(a > 10)));
 | |
| select * from t1 where not(not(not(a < 5) and not(a > 10)));
 | |
| explain select * from t1 where not(a = 10);
 | |
| select * from t1 where not(a = 10);
 | |
| explain select * from t1 where not(a != 10);
 | |
| select * from t1 where not(a != 1);
 | |
| explain select * from t1 where not(a < 10);
 | |
| select * from t1 where not(a < 10);
 | |
| explain select * from t1 where not(a >= 10);
 | |
| select * from t1 where not(a >= 10);
 | |
| explain select * from t1 where not(a > 10);
 | |
| select * from t1 where not(a > 10);
 | |
| explain select * from t1 where not(a <= 10);
 | |
| select * from t1 where not(a <= 10);
 | |
| explain select * from t1 where not(a is null);
 | |
| select * from t1 where not(a is null);
 | |
| explain select * from t1 where not(a is not null);
 | |
| select * from t1 where not(a is not null);
 | |
| explain select * from t1 where not(a < 5 or a > 15);
 | |
| select * from t1 where not(a < 5 or a > 15);
 | |
| explain select * from t1 where not(a < 15 and a > 5);
 | |
| select * from t1 where not(a < 15 and a > 5);
 | |
| 
 | |
| explain select * from t1 where a = 2 or not(a < 10);
 | |
| select * from t1 where a = 2 or not(a < 10);
 | |
| explain select * from t1 where a > 5 and not(a > 10);
 | |
| select * from t1 where a > 5 and not(a > 10);
 | |
| explain select * from t1 where a > 5 xor a < 10;
 | |
| select * from t1 where a > 5 xor a < 10;
 | |
| 
 | |
| explain select * from t1 where a = 2 or not(a < 5 or a > 15);
 | |
| select * from t1 where a = 2 or not(a < 5 or a > 15);
 | |
| explain select * from t1 where a = 7 or not(a < 15 and a > 5);
 | |
| select * from t1 where a = 7 or not(a < 15 and a > 5);
 | |
| 
 | |
| explain select * from t1 where NULL or not(a < 15 and a > 5);
 | |
| select * from t1 where NULL or not(a < 15 and a > 5);
 | |
| explain select * from t1 where not(NULL and a > 5);
 | |
| select * from t1 where not(NULL and a > 5);
 | |
| explain select * from t1 where not(NULL or a);
 | |
| select * from t1 where not(NULL or a);
 | |
| explain select * from t1 where not(NULL and a);
 | |
| select * from t1 where not(NULL and a);
 | |
| 
 | |
| explain select * from t1 where not((a < 5 or a < 10) and (not(a > 16) or a > 17));
 | |
| select * from t1 where not((a < 5 or a < 10) and (not(a > 16) or a > 17));
 | |
| explain select * from t1 where not((a < 5 and a < 10) and (not(a > 16) or a > 17));
 | |
| select * from t1 where not((a < 5 and a < 10) and (not(a > 16) or a > 17));
 | |
| explain select * from t1 where ((a between 5 and 15) and (not(a like 10)));
 | |
| select * from t1 where ((a between 5 and 15) and (not(a like 10)));
 | |
| 
 | |
| --echo # XOR (Note: XOR is negated by negating one of the operands)
 | |
| 
 | |
| --echo # Should return 6,7
 | |
| SELECT * FROM t1 WHERE ((a > 5) XOR (a > 7));
 | |
| 
 | |
| --echo # Should return 0..5,8..19
 | |
| SELECT * FROM t1 WHERE ((NOT (a > 5)) XOR (a > 7));
 | |
| SELECT * FROM t1 WHERE ((a > 5) XOR (NOT (a > 7)));
 | |
| SELECT * FROM t1 WHERE NOT ((a > 5) XOR (a > 7));
 | |
| 
 | |
| --echo # Should return 6,7
 | |
| SELECT * FROM t1 WHERE NOT ((NOT (a > 5)) XOR (a > 7));
 | |
| SELECT * FROM t1 WHERE NOT ((a > 5) XOR (NOT (a > 7)));
 | |
| 
 | |
| --echo # Should return 0..5,8..19
 | |
| SELECT * FROM t1 WHERE NOT ((NOT (a > 5)) XOR (NOT (a > 7)));
 | |
| 
 | |
| --echo # Should have empty result
 | |
| SELECT * FROM t1 WHERE (NULL XOR (a > 7));
 | |
| SELECT * FROM t1 WHERE NOT (NULL XOR (a > 7));
 | |
| 
 | |
| --echo # Should be simplified to "...WHERE (a XOR a)
 | |
| EXPLAIN EXTENDED SELECT * FROM t1 WHERE NOT ((NOT a) XOR (a));
 | |
| 
 | |
| --echo # Should be simplified to "...WHERE (a XOR a)
 | |
| EXPLAIN EXTENDED SELECT * FROM t1 WHERE NOT (a XOR (NOT a));
 | |
| 
 | |
| --echo # End XOR
 | |
| 
 | |
| delete from t1 where a > 3;
 | |
| select a, not(not(a)) from t1;
 | |
| 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));
 | |
| 
 | |
| drop table t1;
 | |
| 
 | |
| # End of 4.1 tests
 | 
