Commit 03ecb6bd authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/timka/mysql/src/5.0-virgin

into mysql.com:/home/timka/mysql/src/5.0-dbg

parents 380c64b1 db93db85
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -2423,3 +2423,26 @@ SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
city
London
DROP TABLE t1;
create table t1 (a int(11) unsigned, b int(11) unsigned);
insert into t1 values (1,0), (1,1), (1,2);
select a-b  from t1 order by 1;
a-b
0
1
18446744073709551615
select a-b , (a-b < 0)  from t1 order by 1;
a-b	(a-b < 0)
0	0
1	0
18446744073709551615	0
select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0;
d	(a-b >= 0)	b
1	1	0
0	1	1
18446744073709551615	1	2
select cast((a - b) as unsigned) from t1 order by 1;
cast((a - b) as unsigned)
0
1
18446744073709551615
drop table t1;
+11 −0
Original line number Diff line number Diff line
@@ -2004,3 +2004,14 @@ SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';

DROP TABLE t1;

#
# Bug#7425 inconsistent sort order on unsigned columns result of substraction
#

create table t1 (a int(11) unsigned, b int(11) unsigned);
insert into t1 values (1,0), (1,1), (1,2);
select a-b  from t1 order by 1;
select a-b , (a-b < 0)  from t1 order by 1;
select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0;
select cast((a - b) as unsigned) from t1 order by 1;
drop table t1;
+8 −2
Original line number Diff line number Diff line
@@ -694,12 +694,18 @@ static void make_sortkey(register SORTPARAM *param,
	  to[3]= (uchar) (value >> 32);
	  to[2]= (uchar) (value >> 40);
	  to[1]= (uchar) (value >> 48);
	  to[0]= (uchar) (value >> 56) ^ 128;	// Fix sign
          if (item->unsigned_flag)                    /* Fix sign */
            to[0]= (uchar) (value >> 56);
          else
            to[0]= (uchar) (value >> 56) ^ 128;	/* Reverse signbit */
#else
	  to[3]= (uchar) value;
	  to[2]= (uchar) (value >> 8);
	  to[1]= (uchar) (value >> 16);
	  to[0]= (uchar) (value >> 24) ^ 128;	// Fix sign
          if (item->unsigned_flag)                    /* Fix sign */
            to[0]= (uchar) (value >> 24);
          else
            to[0]= (uchar) (value >> 24) ^ 128;	/* Reverse signbit */
#endif
	  break;
	}
+1 −0
Original line number Diff line number Diff line
@@ -3717,6 +3717,7 @@ void Item_ref::set_properties()
    split_sum_func() doesn't try to change the reference.
  */
  with_sum_func= (*ref)->with_sum_func;
  unsigned_flag= (*ref)->unsigned_flag;
  if ((*ref)->type() == FIELD_ITEM)
    alias_name_used= ((Item_ident *) (*ref))->alias_name_used;
  else