Commit 86c920ba authored by unknown's avatar unknown
Browse files

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

parents 4e3f2e9d b79df79b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -121,3 +121,10 @@ a NULLIF(a,'')
NULL	NULL
	NULL
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;
+8 −0
Original line number Diff line number Diff line
@@ -89,3 +89,11 @@ SELECT a, NULLIF(a,'') FROM t1 WHERE NULLIF(a,'') IS NULL;
DROP TABLE t1;

# 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;
+2 −1
Original line number Diff line number Diff line
@@ -1383,7 +1383,8 @@ Item_func_if::fix_length_and_dec()
  max_length=
    (cached_result_type == DECIMAL_RESULT || cached_result_type == INT_RESULT) ?
    (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);
}

+4 −3
Original line number Diff line number Diff line
@@ -12746,11 +12746,12 @@ calc_group_buffer(JOIN *join,ORDER *group)
    Field *field= group_item->get_tmp_table_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
      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;
      else if (field->type() == FIELD_TYPE_BIT)
      else if (type == FIELD_TYPE_BIT)
      {
        /* Bit is usually stored as a longlong key for group fields */
        key_length+= 8;                         // Big enough