Commit e94f16a1 authored by evgen@moonbone.local's avatar evgen@moonbone.local

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.
parent 637a353d
...@@ -1726,3 +1726,17 @@ sum(a) ...@@ -1726,3 +1726,17 @@ sum(a)
drop procedure p1; drop procedure p1;
drop view v1; drop view v1;
drop table t1; 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;
...@@ -1569,3 +1569,15 @@ drop procedure p1; ...@@ -1569,3 +1569,15 @@ drop procedure p1;
drop view v1; drop view v1;
drop table t1; 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;
...@@ -631,7 +631,7 @@ static void make_sortkey(register SORTPARAM *param, ...@@ -631,7 +631,7 @@ static void make_sortkey(register SORTPARAM *param,
*to++=1; *to++=1;
/* All item->str() to use some extra byte for end null.. */ /* All item->str() to use some extra byte for end null.. */
String tmp((char*) to,sort_field->length+4,cs); String tmp((char*) to,sort_field->length+4,cs);
String *res=item->val_str(&tmp); String *res= item->str_result(&tmp);
if (!res) if (!res)
{ {
if (maybe_null) if (maybe_null)
...@@ -673,7 +673,7 @@ static void make_sortkey(register SORTPARAM *param, ...@@ -673,7 +673,7 @@ static void make_sortkey(register SORTPARAM *param,
} }
case INT_RESULT: case INT_RESULT:
{ {
longlong value=item->val_int(); longlong value= item->val_int_result();
if (maybe_null) if (maybe_null)
{ {
*to++=1; /* purecov: inspected */ *to++=1; /* purecov: inspected */
...@@ -715,7 +715,7 @@ static void make_sortkey(register SORTPARAM *param, ...@@ -715,7 +715,7 @@ static void make_sortkey(register SORTPARAM *param,
} }
case DECIMAL_RESULT: 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 (maybe_null)
{ {
if (item->null_value) if (item->null_value)
...@@ -733,7 +733,7 @@ static void make_sortkey(register SORTPARAM *param, ...@@ -733,7 +733,7 @@ static void make_sortkey(register SORTPARAM *param,
} }
case REAL_RESULT: case REAL_RESULT:
{ {
double value= item->val_real(); double value= item->val_result();
if (maybe_null) if (maybe_null)
{ {
if (item->null_value) if (item->null_value)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment