mirror of
https://github.com/MariaDB/server.git
synced 2026-05-03 13:45:34 +02:00
fix for bug #1790:
"BIT_AND() result in GROUP BY different when SQL_BIG_RESULT used" return value of BIT_AND changed to BIGINT SIGNED Also the patch fixes another bug: when temporary table is in use and one of values in group is NULL, BIT_AND always returns zero. Fixed it to always skip null values. mysql-test/r/func_group.result: bug #1790: test results fixed sql/item_sum.cc: fix for bug #1790: update_field() rewritten to use add() and thus was moved to Item_sum_bit::update_field() Item_sum_bit::reset_field() was rewritten to take into account reset_bits. sql/item_sum.h: fix for bug #1790: Item_sum::update_field() and Item_sum::reset_field() commented Item_sum_and changed to return BIGINT SIGNED Item_sum_and::update_field() and Item_sum_or::update_field) were replaced with generic Item_sum_bit::update_field()
This commit is contained in:
parent
24bdf95603
commit
3f355523ba
3 changed files with 36 additions and 36 deletions
|
|
@ -614,10 +614,19 @@ void Item_sum_avg::reset_field()
|
|||
}
|
||||
|
||||
void Item_sum_bit::reset_field()
|
||||
{
|
||||
char *res= result_field->ptr;
|
||||
bits= reset_bits;
|
||||
add();
|
||||
int8store(res, bits);
|
||||
}
|
||||
|
||||
void Item_sum_bit::update_field()
|
||||
{
|
||||
char *res=result_field->ptr;
|
||||
ulonglong nr=(ulonglong) args[0]->val_int();
|
||||
int8store(res,nr);
|
||||
bits= uint8korr(res);
|
||||
add();
|
||||
int8store(res, bits);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -756,28 +765,6 @@ Item_sum_hybrid::min_max_update_int_field()
|
|||
}
|
||||
|
||||
|
||||
void Item_sum_or::update_field()
|
||||
{
|
||||
ulonglong nr;
|
||||
char *res=result_field->ptr;
|
||||
|
||||
nr=uint8korr(res);
|
||||
nr|= (ulonglong) args[0]->val_int();
|
||||
int8store(res,nr);
|
||||
}
|
||||
|
||||
|
||||
void Item_sum_and::update_field()
|
||||
{
|
||||
ulonglong nr;
|
||||
char *res=result_field->ptr;
|
||||
|
||||
nr=uint8korr(res);
|
||||
nr&= (ulonglong) args[0]->val_int();
|
||||
int8store(res,nr);
|
||||
}
|
||||
|
||||
|
||||
Item_avg_field::Item_avg_field(Item_sum_avg *item)
|
||||
{
|
||||
name=item->name;
|
||||
|
|
@ -787,6 +774,7 @@ Item_avg_field::Item_avg_field(Item_sum_avg *item)
|
|||
maybe_null=1;
|
||||
}
|
||||
|
||||
|
||||
double Item_avg_field::val()
|
||||
{
|
||||
double nr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue