Commit 693c7272 authored by evgen@moonbone.local's avatar evgen@moonbone.local

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0

into moonbone.local:/work/mysql-5.0-bug-11709
parents 4ffd18b4 d72f1c9b
...@@ -1953,6 +1953,16 @@ s1 s2 ...@@ -1953,6 +1953,16 @@ s1 s2
DROP PROCEDURE p1; DROP PROCEDURE p1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
create table t1 (f1 int, f2 int);
create view v1 as select f1 as f3, f2 as f1 from t1;
insert into t1 values (1,3),(2,1),(3,2);
select * from v1 order by f1;
f3 f1
2 1
3 2
1 3
drop view v1;
drop table t1;
CREATE TABLE t1 (f1 char) ENGINE = innodb; CREATE TABLE t1 (f1 char) ENGINE = innodb;
INSERT INTO t1 VALUES ('A'); INSERT INTO t1 VALUES ('A');
CREATE VIEW v1 AS SELECT * FROM t1; CREATE VIEW v1 AS SELECT * FROM t1;
......
...@@ -1792,6 +1792,16 @@ DROP PROCEDURE p1; ...@@ -1792,6 +1792,16 @@ DROP PROCEDURE p1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
#
# Test for bug #11709 View was ordered by wrong column
#
create table t1 (f1 int, f2 int);
create view v1 as select f1 as f3, f2 as f1 from t1;
insert into t1 values (1,3),(2,1),(3,2);
select * from v1 order by f1;
drop view v1;
drop table t1;
# #
# Test for bug #11771: wrong query_id in SELECT * FROM <view> # Test for bug #11771: wrong query_id in SELECT * FROM <view>
# #
......
...@@ -4499,6 +4499,35 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference) ...@@ -4499,6 +4499,35 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
return Item_direct_ref::fix_fields(thd, reference); return Item_direct_ref::fix_fields(thd, reference);
} }
/*
Compare view field's name with item's name before call to referenced
item's eq()
SYNOPSIS
Item_direct_view_ref::eq()
item item to compare with
binary_cmp make binary comparison
DESCRIPTION
Consider queries:
create view v1 as select t1.f1 as f2, t1.f2 as f1 from t1;
select * from v1 order by f1;
In order to choose right field for sorting we need to compare
given item's name (f1) to view field's name prior to calling
referenced item's eq().
RETURN
TRUE Referenced item is equal to given item
FALSE otherwise
*/
bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const
{
Item *it= ((Item *) item)->real_item();
return (!it->name || !my_strcasecmp(system_charset_info, it->name,
field_name)) && ref && (*ref)->real_item()->eq(it, binary_cmp);
}
void Item_null_helper::print(String *str) void Item_null_helper::print(String *str)
{ {
......
...@@ -1524,6 +1524,7 @@ public: ...@@ -1524,6 +1524,7 @@ public:
:Item_direct_ref(thd, item) {} :Item_direct_ref(thd, item) {}
bool fix_fields(THD *, Item **); bool fix_fields(THD *, Item **);
bool eq(const Item *item, bool binary_cmp) const;
}; };
......
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