bool.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Test of boolean operations with NULL
  3. #
  4. --disable_warnings
  5. DROP TABLE IF EXISTS t1;
  6. --enable_warnings
  7. SELECT IF(NULL AND 1, 1, 2), IF(1 AND NULL, 1, 2);
  8. SELECT NULL AND 1, 1 AND NULL, 0 AND NULL, NULL and 0;
  9. create table t1 (a int);
  10. insert into t1 values (0),(1),(NULL);
  11. SELECT * FROM t1 WHERE IF(a AND 1, 0, 1);
  12. SELECT * FROM t1 WHERE IF(1 AND a, 0, 1);
  13. SELECT * FROM t1 where NOT(a AND 1);
  14. SELECT * FROM t1 where NOT(1 AND a);
  15. SELECT * FROM t1 where (a AND 1)=0;
  16. SELECT * FROM t1 where (1 AND a)=0;
  17. SELECT * FROM t1 where (1 AND a)=1;
  18. SELECT * FROM t1 where (1 AND a) IS NULL;
  19. # Verify that NULL optimisation works in AND clause:
  20. SET @a=0, @b=0;
  21. SELECT * FROM t1 WHERE NULL AND (@a:=@a+1);
  22. SELECT * FROM t1 WHERE NOT(a>=0 AND NULL AND (@b:=@b+1));
  23. SELECT * FROM t1 WHERE a=2 OR (NULL AND (@a:=@a+1));
  24. SELECT * FROM t1 WHERE NOT(a=2 OR (NULL AND (@b:=@b+1)));
  25. DROP TABLE t1;
  26. # Test boolean operators in select part
  27. # NULLs are represented as N for readability
  28. # Read nA as !A, AB as A && B, AoB as A || B
  29. # Result table makes ANSI happy
  30. create table t1 (a int, b int);
  31. insert into t1 values(null, null), (0, null), (1, null), (null, 0), (null, 1), (0, 0), (0, 1), (1, 0), (1, 1);
  32. # Below test is valid untill we have True/False implemented as 1/0
  33. # To comply to all rules it must show that:  n(AB) = nAonB,  n(AoB) = nAnB 
  34. select ifnull(A, 'N') as A, ifnull(B, 'N') as B, ifnull(not A, 'N') as nA, ifnull(not B, 'N') as nB, ifnull(A and B, 'N') as AB, ifnull(not (A and B), 'N') as `n(AB)`, ifnull((not A or not B), 'N') as nAonB, ifnull(A or B, 'N') as AoB, ifnull(not(A or B), 'N') as `n(AoB)`, ifnull(not A and not B, 'N') as nAnB from t1;
  35. # This should work with any internal representation of True/False
  36. # Result must be same as above
  37. select ifnull(A=1, 'N') as A, ifnull(B=1, 'N') as B, ifnull(not (A=1), 'N') as nA, ifnull(not (B=1), 'N') as nB, ifnull((A=1) and (B=1), 'N') as AB, ifnull(not ((A=1) and (B=1)), 'N') as `n(AB)`, ifnull((not (A=1) or not (B=1)), 'N') as nAonB, ifnull((A=1) or (B=1), 'N') as AoB, ifnull(not((A=1) or (B=1)), 'N') as `n(AoB)`, ifnull(not (A=1) and not (B=1), 'N') as nAnB from t1;
  38. drop table t1;
  39. # End of 4.1 tests