Loading mysql-test/t/view.test +87 −0 Original line number Diff line number Diff line Loading @@ -2992,6 +2992,93 @@ eval CREATE VIEW v1 AS $query; --echo # Previously the following would fail. eval $query; # # Bug#24532: The return data type of IS TRUE is different from similar # operations # --disable_warnings drop view if exists view_24532_a; drop view if exists view_24532_b; drop table if exists table_24532; --enable_warnings create table table_24532 ( a int, b bigint, c int(4), d bigint(48) ); create view view_24532_a as select a IS TRUE, a IS NOT TRUE, a IS FALSE, a IS NOT FALSE, a IS UNKNOWN, a IS NOT UNKNOWN, a is NULL, a IS NOT NULL, ISNULL(a), b IS TRUE, b IS NOT TRUE, b IS FALSE, b IS NOT FALSE, b IS UNKNOWN, b IS NOT UNKNOWN, b is NULL, b IS NOT NULL, ISNULL(b), c IS TRUE, c IS NOT TRUE, c IS FALSE, c IS NOT FALSE, c IS UNKNOWN, c IS NOT UNKNOWN, c is NULL, c IS NOT NULL, ISNULL(c), d IS TRUE, d IS NOT TRUE, d IS FALSE, d IS NOT FALSE, d IS UNKNOWN, d IS NOT UNKNOWN, d is NULL, d IS NOT NULL, ISNULL(d) from table_24532; describe view_24532_a; create view view_24532_b as select a IS TRUE, if(ifnull(a, 0), 1, 0) as old_istrue, a IS NOT TRUE, if(ifnull(a, 0), 0, 1) as old_isnottrue, a IS FALSE, if(ifnull(a, 1), 0, 1) as old_isfalse, a IS NOT FALSE, if(ifnull(a, 1), 1, 0) as old_isnotfalse from table_24532; describe view_24532_b; show create view view_24532_b; insert into table_24532 values (0, 0, 0, 0); select * from view_24532_b; update table_24532 set a=1; select * from view_24532_b; update table_24532 set a=NULL; select * from view_24532_b; drop view view_24532_a; drop view view_24532_b; drop table table_24532; --echo End of 5.0 tests. Loading sql/sql_yacc.yy +12 −20 Original line number Diff line number Diff line Loading @@ -76,19 +76,6 @@ const LEX_STRING null_lex_str={0,0}; #define __attribute__(X) #endif /* Helper for parsing "IS [NOT] truth_value" */ inline Item *is_truth_value(THD *thd, Item *A, bool v1, bool v2) { Item *v1_t= new (thd->mem_root) Item_int((char *) (v1 ? "TRUE" : "FALSE"), v1, 1); Item *v1_f= new (thd->mem_root) Item_int((char *) (v1 ? "FALSE" : "TRUE"), !v1, 1); Item *v2_t= new (thd->mem_root) Item_int((char *) (v2 ? "TRUE" : "FALSE"), v2, 1); Item *ifnull= new (thd->mem_root) Item_func_ifnull(A, v2_t); return new (thd->mem_root) Item_func_if(ifnull, v1_t, v1_f); } #ifndef DBUG_OFF #define YYDEBUG 1 Loading Loading @@ -6225,13 +6212,18 @@ bool_factor: | bool_test ; bool_test: bool_pri IS TRUE_SYM { $$= is_truth_value(YYTHD, $1,1,0); } | bool_pri IS not TRUE_SYM { $$= is_truth_value(YYTHD, $1,0,0); } | bool_pri IS FALSE_SYM { $$= is_truth_value(YYTHD, $1,0,1); } | bool_pri IS not FALSE_SYM { $$= is_truth_value(YYTHD, $1,1,1); } bool_pri IS TRUE_SYM { $$= new (YYTHD->mem_root) Item_func_istrue($1); } | bool_pri IS not TRUE_SYM { $$= new (YYTHD->mem_root) Item_func_isnottrue($1); } | bool_pri IS FALSE_SYM { $$= new (YYTHD->mem_root) Item_func_isfalse($1); } | bool_pri IS not FALSE_SYM { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); } | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } | bool_pri ; | bool_pri ; bool_pri: bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } Loading Loading
mysql-test/t/view.test +87 −0 Original line number Diff line number Diff line Loading @@ -2992,6 +2992,93 @@ eval CREATE VIEW v1 AS $query; --echo # Previously the following would fail. eval $query; # # Bug#24532: The return data type of IS TRUE is different from similar # operations # --disable_warnings drop view if exists view_24532_a; drop view if exists view_24532_b; drop table if exists table_24532; --enable_warnings create table table_24532 ( a int, b bigint, c int(4), d bigint(48) ); create view view_24532_a as select a IS TRUE, a IS NOT TRUE, a IS FALSE, a IS NOT FALSE, a IS UNKNOWN, a IS NOT UNKNOWN, a is NULL, a IS NOT NULL, ISNULL(a), b IS TRUE, b IS NOT TRUE, b IS FALSE, b IS NOT FALSE, b IS UNKNOWN, b IS NOT UNKNOWN, b is NULL, b IS NOT NULL, ISNULL(b), c IS TRUE, c IS NOT TRUE, c IS FALSE, c IS NOT FALSE, c IS UNKNOWN, c IS NOT UNKNOWN, c is NULL, c IS NOT NULL, ISNULL(c), d IS TRUE, d IS NOT TRUE, d IS FALSE, d IS NOT FALSE, d IS UNKNOWN, d IS NOT UNKNOWN, d is NULL, d IS NOT NULL, ISNULL(d) from table_24532; describe view_24532_a; create view view_24532_b as select a IS TRUE, if(ifnull(a, 0), 1, 0) as old_istrue, a IS NOT TRUE, if(ifnull(a, 0), 0, 1) as old_isnottrue, a IS FALSE, if(ifnull(a, 1), 0, 1) as old_isfalse, a IS NOT FALSE, if(ifnull(a, 1), 1, 0) as old_isnotfalse from table_24532; describe view_24532_b; show create view view_24532_b; insert into table_24532 values (0, 0, 0, 0); select * from view_24532_b; update table_24532 set a=1; select * from view_24532_b; update table_24532 set a=NULL; select * from view_24532_b; drop view view_24532_a; drop view view_24532_b; drop table table_24532; --echo End of 5.0 tests. Loading
sql/sql_yacc.yy +12 −20 Original line number Diff line number Diff line Loading @@ -76,19 +76,6 @@ const LEX_STRING null_lex_str={0,0}; #define __attribute__(X) #endif /* Helper for parsing "IS [NOT] truth_value" */ inline Item *is_truth_value(THD *thd, Item *A, bool v1, bool v2) { Item *v1_t= new (thd->mem_root) Item_int((char *) (v1 ? "TRUE" : "FALSE"), v1, 1); Item *v1_f= new (thd->mem_root) Item_int((char *) (v1 ? "FALSE" : "TRUE"), !v1, 1); Item *v2_t= new (thd->mem_root) Item_int((char *) (v2 ? "TRUE" : "FALSE"), v2, 1); Item *ifnull= new (thd->mem_root) Item_func_ifnull(A, v2_t); return new (thd->mem_root) Item_func_if(ifnull, v1_t, v1_f); } #ifndef DBUG_OFF #define YYDEBUG 1 Loading Loading @@ -6225,13 +6212,18 @@ bool_factor: | bool_test ; bool_test: bool_pri IS TRUE_SYM { $$= is_truth_value(YYTHD, $1,1,0); } | bool_pri IS not TRUE_SYM { $$= is_truth_value(YYTHD, $1,0,0); } | bool_pri IS FALSE_SYM { $$= is_truth_value(YYTHD, $1,0,1); } | bool_pri IS not FALSE_SYM { $$= is_truth_value(YYTHD, $1,1,1); } bool_pri IS TRUE_SYM { $$= new (YYTHD->mem_root) Item_func_istrue($1); } | bool_pri IS not TRUE_SYM { $$= new (YYTHD->mem_root) Item_func_isnottrue($1); } | bool_pri IS FALSE_SYM { $$= new (YYTHD->mem_root) Item_func_isfalse($1); } | bool_pri IS not FALSE_SYM { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); } | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } | bool_pri ; | bool_pri ; bool_pri: bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); } Loading