mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge mysql.com:/usr_rh9/home/elkin.rh9/MySQL/BARE/mysql-5.0
into mysql.com:/usr_rh9/home/elkin.rh9/MySQL/Merge/5.0
This commit is contained in:
commit
86c920ba77
4 changed files with 21 additions and 4 deletions
|
@ -121,3 +121,10 @@ a NULLIF(a,'')
|
||||||
NULL NULL
|
NULL NULL
|
||||||
NULL
|
NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (f1 int, f2 int);
|
||||||
|
insert into t1 values(1,1),(0,0);
|
||||||
|
select f1, f2, if(f1, 40.0, 5.00) from t1 group by f1 order by f2;
|
||||||
|
f1 f2 if(f1, 40.0, 5.00)
|
||||||
|
0 0 5.00
|
||||||
|
1 1 40.00
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -89,3 +89,11 @@ SELECT a, NULLIF(a,'') FROM t1 WHERE NULLIF(a,'') IS NULL;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #16272 IF function with decimal args can produce wrong result
|
||||||
|
#
|
||||||
|
create table t1 (f1 int, f2 int);
|
||||||
|
insert into t1 values(1,1),(0,0);
|
||||||
|
select f1, f2, if(f1, 40.0, 5.00) from t1 group by f1 order by f2;
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -1383,7 +1383,8 @@ Item_func_if::fix_length_and_dec()
|
||||||
max_length=
|
max_length=
|
||||||
(cached_result_type == DECIMAL_RESULT || cached_result_type == INT_RESULT) ?
|
(cached_result_type == DECIMAL_RESULT || cached_result_type == INT_RESULT) ?
|
||||||
(max(args[1]->max_length - args[1]->decimals,
|
(max(args[1]->max_length - args[1]->decimals,
|
||||||
args[2]->max_length - args[2]->decimals) + decimals) :
|
args[2]->max_length - args[2]->decimals) + decimals +
|
||||||
|
(unsigned_flag ? 0 : 1) ) :
|
||||||
max(args[1]->max_length, args[2]->max_length);
|
max(args[1]->max_length, args[2]->max_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12746,11 +12746,12 @@ calc_group_buffer(JOIN *join,ORDER *group)
|
||||||
Field *field= group_item->get_tmp_table_field();
|
Field *field= group_item->get_tmp_table_field();
|
||||||
if (field)
|
if (field)
|
||||||
{
|
{
|
||||||
if (field->type() == FIELD_TYPE_BLOB)
|
enum_field_types type;
|
||||||
|
if ((type= field->type()) == FIELD_TYPE_BLOB)
|
||||||
key_length+=MAX_BLOB_WIDTH; // Can't be used as a key
|
key_length+=MAX_BLOB_WIDTH; // Can't be used as a key
|
||||||
else if (field->type() == MYSQL_TYPE_VARCHAR)
|
else if (type == MYSQL_TYPE_VARCHAR || type == MYSQL_TYPE_VAR_STRING)
|
||||||
key_length+= field->field_length + HA_KEY_BLOB_LENGTH;
|
key_length+= field->field_length + HA_KEY_BLOB_LENGTH;
|
||||||
else if (field->type() == FIELD_TYPE_BIT)
|
else if (type == FIELD_TYPE_BIT)
|
||||||
{
|
{
|
||||||
/* Bit is usually stored as a longlong key for group fields */
|
/* Bit is usually stored as a longlong key for group fields */
|
||||||
key_length+= 8; // Big enough
|
key_length+= 8; // Big enough
|
||||||
|
|
Loading…
Reference in a new issue