Commit dd843ee4 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/timka/mysql/src/4.1-bug-7425

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

parents 16103a01 146df30f
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -2422,3 +2422,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
@@ -1964,3 +1964,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
@@ -656,12 +656,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
@@ -2281,6 +2281,7 @@ void Item_ref::set_properties()
  decimals=   (*ref)->decimals;
  collation.set((*ref)->collation);
  with_sum_func= (*ref)->with_sum_func;
  unsigned_flag= (*ref)->unsigned_flag;
  fixed= 1;
}