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

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Testing of CASE
  3. #
  4. --disable_warnings
  5. drop table if exists t1;
  6. --enable_warnings
  7. select CASE "b" when "a" then 1 when "b" then 2 END;
  8. select CASE "c" when "a" then 1 when "b" then 2 END;
  9. select CASE "c" when "a" then 1 when "b" then 2 ELSE 3 END;
  10. select CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END;
  11. select CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END;
  12. select CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end;
  13. select CASE when 1=0 then "true" else "false" END;
  14. select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
  15. explain extended select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
  16. select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
  17. select (CASE "two" when "one" then "1" WHEN "two" then "2" END) | 0;
  18. select (CASE "two" when "one" then 1.00 WHEN "two" then 2.00 END) +0.0;
  19. select case 1/0 when "a" then "true" else "false" END;
  20. select case 1/0 when "a" then "true" END;
  21. select (case 1/0 when "a" then "true" END) | 0;
  22. select (case 1/0 when "a" then "true" END) + 0.0;
  23. select case when 1>0 then "TRUE" else "FALSE" END;
  24. select case when 1<0 then "TRUE" else "FALSE" END;
  25. #
  26. # Test bug when using GROUP BY on CASE
  27. #
  28. create table t1 (a int);
  29. insert into t1 values(1),(2),(3),(4);
  30. select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase;
  31. explain extended select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase;
  32. select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase;
  33. drop table t1;
  34. #
  35. # Test MAX(CASE ... ) that can return null
  36. #
  37. create table t1 (row int not null, col int not null, val varchar(255) not null);
  38. insert into t1 values (1,1,'orange'),(1,2,'large'),(2,1,'yellow'),(2,2,'medium'),(3,1,'green'),(3,2,'small');
  39. select max(case col when 1 then val else null end) as color from t1 group by row;
  40. drop table t1;
  41. SET NAMES latin1;
  42. #
  43. # CASE and argument types/collations aggregation into result 
  44. #
  45. CREATE TABLE t1 SELECT 
  46.  CASE WHEN 1 THEN _latin1'a' COLLATE latin1_danish_ci ELSE _latin1'a' END AS c1,
  47.  CASE WHEN 1 THEN _latin1'a' ELSE _latin1'a' COLLATE latin1_danish_ci END AS c2,
  48.  CASE WHEN 1 THEN 'a' ELSE  1  END AS c3,
  49.  CASE WHEN 1 THEN  1  ELSE 'a' END AS c4,
  50.  CASE WHEN 1 THEN 'a' ELSE 1.0 END AS c5,
  51.  CASE WHEN 1 THEN 1.0 ELSE 'a' END AS c6,
  52.  CASE WHEN 1 THEN  1  ELSE 1.0 END AS c7,
  53.  CASE WHEN 1 THEN 1.0 ELSE  1  END AS c8,
  54.  CASE WHEN 1 THEN 1.0 END AS c9
  55. ;
  56. SHOW CREATE TABLE t1;
  57. DROP TABLE t1;
  58. --error 1267
  59. SELECT CASE 
  60.   WHEN 1 
  61.   THEN _latin1'a' COLLATE latin1_danish_ci 
  62.   ELSE _latin1'a' COLLATE latin1_swedish_ci
  63.   END;
  64. --error 1270
  65. SELECT CASE _latin1'a' COLLATE latin1_general_ci
  66.   WHEN _latin1'a' COLLATE latin1_danish_ci  THEN 1
  67.   WHEN _latin1'a' COLLATE latin1_swedish_ci THEN 2
  68.   END;
  69. SELECT 
  70. CASE _latin1'a' COLLATE latin1_general_ci  WHEN _latin1'A' THEN '1' ELSE 2 END,
  71. CASE _latin1'a' COLLATE latin1_bin         WHEN _latin1'A' THEN '1' ELSE 2 END,
  72. CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END,
  73. CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin        THEN '1' ELSE 2 END
  74. ;
  75. #
  76. # COALESCE is a CASE abbrevation:
  77. #
  78. # COALESCE(v1,v2) == CASE WHEN v1 IS NOT NULL THEN v1 ELSE v2 END
  79. #
  80. # COALESCE(V1, V2, . . . ,Vn ) =  
  81. #     CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,Vn) END
  82. #
  83. # Check COALESCE argument types aggregation
  84. --error 1267
  85. CREATE TABLE t1 SELECT COALESCE(_latin1'a',_latin2'a');
  86. --error 1267
  87. CREATE TABLE t1 SELECT COALESCE('a' COLLATE latin1_swedish_ci,'b' COLLATE latin1_bin);
  88. CREATE TABLE t1 SELECT 
  89.  COALESCE(1), COALESCE(1.0),COALESCE('a'),
  90.  COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
  91.  COALESCE('a' COLLATE latin1_bin,'b');
  92. explain extended SELECT 
  93.  COALESCE(1), COALESCE(1.0),COALESCE('a'),
  94.  COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
  95.  COALESCE('a' COLLATE latin1_bin,'b');
  96. SHOW CREATE TABLE t1;
  97. DROP TABLE t1;
  98. # Test for BUG#10151
  99. SELECT 'case+union+test'
  100. UNION 
  101. SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END;
  102. SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END;
  103. SELECT 'case+union+test'
  104. UNION 
  105. SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END;
  106. # End of 4.1 tests