mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/dbdata/psergey/mysql-4.0-bug6976
This commit is contained in:
@ -626,3 +626,15 @@ explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
|
|||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 ALL NULL NULL NULL NULL 6 Using filesort
|
t1 ALL NULL NULL NULL NULL 6 Using filesort
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values(null);
|
||||||
|
select min(a) is null from t1;
|
||||||
|
min(a) is null
|
||||||
|
1
|
||||||
|
select min(a) is null or null from t1;
|
||||||
|
min(a) is null or null
|
||||||
|
1
|
||||||
|
select 1 and min(a) is null from t1;
|
||||||
|
1 and min(a) is null
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
@ -447,3 +447,12 @@ INSERT INTO t1 VALUES (1,2),(2,3),(4,5),(3,5),(1,5),(23,5);
|
|||||||
SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
|
SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
|
||||||
explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
|
explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#Test for BUG#6976: Aggregate functions have incorrect NULL-ness
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values(null);
|
||||||
|
select min(a) is null from t1;
|
||||||
|
select min(a) is null or null from t1;
|
||||||
|
select 1 and min(a) is null from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -687,6 +687,7 @@ bool Item_null::send(THD *thd, String *packet)
|
|||||||
/*
|
/*
|
||||||
This is used for HAVING clause
|
This is used for HAVING clause
|
||||||
Find field in select list having the same name
|
Find field in select list having the same name
|
||||||
|
This is not always called, see also Item_ref::Item_ref
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables)
|
bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables)
|
||||||
|
14
sql/item.h
14
sql/item.h
@ -401,7 +401,19 @@ public:
|
|||||||
Item_ref(char *db_par,char *table_name_par,char *field_name_par)
|
Item_ref(char *db_par,char *table_name_par,char *field_name_par)
|
||||||
:Item_ident(db_par,table_name_par,field_name_par),ref(0) {}
|
:Item_ident(db_par,table_name_par,field_name_par),ref(0) {}
|
||||||
Item_ref(Item **item, char *table_name_par,char *field_name_par)
|
Item_ref(Item **item, char *table_name_par,char *field_name_par)
|
||||||
:Item_ident(NullS,table_name_par,field_name_par),ref(item) {}
|
:Item_ident(NullS,table_name_par,field_name_par),ref(item)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
This ctor is called from Item_XXX::split_sum_func, and fix_fields will
|
||||||
|
not be called for *this, so we must setup everything here. **ref is
|
||||||
|
already fixed at this point.
|
||||||
|
*/
|
||||||
|
max_length= (*ref)->max_length;
|
||||||
|
decimals= (*ref)->decimals;
|
||||||
|
binary= (*ref)->binary;
|
||||||
|
with_sum_func= (*ref)->with_sum_func;
|
||||||
|
maybe_null= (*ref)->maybe_null;
|
||||||
|
}
|
||||||
enum Type type() const { return REF_ITEM; }
|
enum Type type() const { return REF_ITEM; }
|
||||||
bool eq(const Item *item, bool binary_cmp) const
|
bool eq(const Item *item, bool binary_cmp) const
|
||||||
{ return (*ref)->eq(item, binary_cmp); }
|
{ return (*ref)->eq(item, binary_cmp); }
|
||||||
|
Reference in New Issue
Block a user