mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Manual merge
This commit is contained in:
@ -2992,6 +2992,93 @@ eval CREATE VIEW v1 AS $query;
|
|||||||
--echo # Previously the following would fail.
|
--echo # Previously the following would fail.
|
||||||
eval $query;
|
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.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
@ -76,19 +76,6 @@ const LEX_STRING null_lex_str={0,0};
|
|||||||
#define __attribute__(X)
|
#define __attribute__(X)
|
||||||
#endif
|
#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
|
#ifndef DBUG_OFF
|
||||||
#define YYDEBUG 1
|
#define YYDEBUG 1
|
||||||
@ -6225,13 +6212,18 @@ bool_factor:
|
|||||||
| bool_test ;
|
| bool_test ;
|
||||||
|
|
||||||
bool_test:
|
bool_test:
|
||||||
bool_pri IS TRUE_SYM { $$= is_truth_value(YYTHD, $1,1,0); }
|
bool_pri IS TRUE_SYM
|
||||||
| bool_pri IS not TRUE_SYM { $$= is_truth_value(YYTHD, $1,0,0); }
|
{ $$= new (YYTHD->mem_root) Item_func_istrue($1); }
|
||||||
| bool_pri IS FALSE_SYM { $$= is_truth_value(YYTHD, $1,0,1); }
|
| bool_pri IS not TRUE_SYM
|
||||||
| bool_pri IS not FALSE_SYM { $$= is_truth_value(YYTHD, $1,1,1); }
|
{ $$= new (YYTHD->mem_root) Item_func_isnottrue($1); }
|
||||||
| bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); }
|
| bool_pri IS FALSE_SYM
|
||||||
| bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); }
|
{ $$= new (YYTHD->mem_root) Item_func_isfalse($1); }
|
||||||
| bool_pri ;
|
| 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); }
|
bool_pri IS NULL_SYM { $$= new Item_func_isnull($1); }
|
||||||
|
Reference in New Issue
Block a user