Commit 413256c8 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/usr/local/mysql/mysql-4.1

into  mysql.com:/usr/local/mysql/mysql-5.0-mtr-fix


mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/t/case.test:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
mysql-test/r/case.result:
  SCCS merged
parents 3e1ff238 f9216cdf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3302,7 +3302,7 @@ sub valgrind_arguments {

  if ( $opt_valgrind_options )
  {
    mtr_add_arg($args, split(' ', $opt_valgrind_options));
    mtr_add_arg($args, '%s', $_) for (split(' ', $opt_valgrind_options));
  }


+8 −0
Original line number Diff line number Diff line
@@ -175,6 +175,14 @@ SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END;
case+union+test
case+union+test
nobug
create table t1(a float, b int default 3);
insert into t1 (a) values (2), (11), (8);
select min(a), min(case when 1=1 then a else NULL end),
min(case when 1!=1 then NULL else a end) 
from t1 where b=3 group by b;
min(a)	min(case when 1=1 then a else NULL end)	min(case when 1!=1 then NULL else a end)
2	2	2
drop table t1;
CREATE TABLE t1 (EMPNUM INT);
INSERT INTO t1 VALUES (0), (2);
CREATE TABLE t2 (EMPNUM DECIMAL (4, 2));
+11 −0
Original line number Diff line number Diff line
@@ -122,6 +122,17 @@ SELECT 'case+union+test'
UNION 
SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END;

#
# Bug #17896: problem with MIN(CASE...)
#

create table t1(a float, b int default 3);
insert into t1 (a) values (2), (11), (8);
select min(a), min(case when 1=1 then a else NULL end),
  min(case when 1!=1 then NULL else a end) 
from t1 where b=3 group by b;
drop table t1;

# End of 4.1 tests


+19 −4
Original line number Diff line number Diff line
@@ -41,10 +41,25 @@ static Item_result item_store_type(Item_result a,Item_result b)

static void agg_result_type(Item_result *type, Item **items, uint nitems)
{
  uint i;
  type[0]= items[0]->result_type();
  for (i=1 ; i < nitems ; i++)
    type[0]= item_store_type(type[0], items[i]->result_type());
  Item **item, **item_end;

  *type= STRING_RESULT;
  /* Skip beginning NULL items */
  for (item= items, item_end= item + nitems; item < item_end; item++)
  {
    if ((*item)->type() != Item::NULL_ITEM)
    {
      *type= (*item)->result_type();
      item++;
      break;
    }
  }
  /* Combine result types. Note: NULL items don't affect the result */
  for (; item < item_end; item++)
  {
    if ((*item)->type() != Item::NULL_ITEM)
      *type= item_store_type(type[0], (*item)->result_type());
  }
}