Commit c4257ae3 authored by unknown's avatar unknown
Browse files

Fix bug #7422 "order by" doesn't work

Field with wrong buffer was used to make sort key, which results in producing
same sort key for all records.



sql/filesort.cc:
  Fix bug#7422 "order by" doesn't work
mysql-test/t/view.test:
  Test case for bug#7422 "order by" doesn't work
mysql-test/r/view.result:
  Test case for bug#7422 "order by" doesn't work
parent aece56e3
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1726,3 +1726,17 @@ sum(a)
drop procedure p1;
drop view v1;
drop table t1;
CREATE TABLE t1(a char(2) primary key, b char(2));
CREATE TABLE t2(a char(2), b char(2), index i(a));
INSERT INTO t1 VALUES ('a','1'), ('b','2');
INSERT INTO t2 VALUES ('a','5'), ('a','6'), ('b','5'), ('b','6');
CREATE VIEW v1 AS
SELECT t1.b as c, t2.b as d FROM t1,t2 WHERE t1.a=t2.a;
SELECT d, c FROM v1 ORDER BY d;
d	c
5	1
5	2
6	1
6	2
DROP VIEW v1;
DROP TABLE t1, t2;
+12 −0
Original line number Diff line number Diff line
@@ -1569,3 +1569,15 @@ drop procedure p1;
drop view v1;
drop table t1;

#
# Bug#7422 "order by" doesn't work
#
CREATE TABLE t1(a char(2) primary key, b char(2));
CREATE TABLE t2(a char(2), b char(2), index i(a));
INSERT INTO t1 VALUES ('a','1'), ('b','2');
INSERT INTO t2 VALUES ('a','5'), ('a','6'), ('b','5'), ('b','6');
CREATE VIEW v1 AS
  SELECT t1.b as c, t2.b as d FROM t1,t2 WHERE t1.a=t2.a;
SELECT d, c FROM v1 ORDER BY d;
DROP VIEW v1;
DROP TABLE t1, t2;
+5 −5
Original line number Diff line number Diff line
@@ -631,7 +631,7 @@ static void make_sortkey(register SORTPARAM *param,
	    *to++=1;
	  /* All item->str() to use some extra byte for end null.. */
	  String tmp((char*) to,sort_field->length+4,cs);
	  String *res=item->val_str(&tmp);
          String *res= item->str_result(&tmp);
	  if (!res)
	  {
	    if (maybe_null)
@@ -673,7 +673,7 @@ static void make_sortkey(register SORTPARAM *param,
	}
      case INT_RESULT:
	{
	  longlong value=item->val_int();
          longlong value= item->val_int_result();
          if (maybe_null)
          {
	    *to++=1;				/* purecov: inspected */
@@ -715,7 +715,7 @@ static void make_sortkey(register SORTPARAM *param,
	}
      case DECIMAL_RESULT:
        {
          my_decimal dec_buf, *dec_val= item->val_decimal(&dec_buf);
          my_decimal dec_buf, *dec_val= item->val_decimal_result(&dec_buf);
          if (maybe_null)
          {
            if (item->null_value)
@@ -733,7 +733,7 @@ static void make_sortkey(register SORTPARAM *param,
        }
      case REAL_RESULT:
	{
	  double value= item->val_real();
          double value= item->val_result();
	  if (maybe_null)
          {
            if (item->null_value)