mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/mysql-5.0-bug-11709 mysql-test/r/view.result: Auto merged mysql-test/t/view.test: Auto merged
This commit is contained in:
@ -1953,6 +1953,16 @@ s1 s2
|
||||
DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
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;
|
||||
INSERT INTO t1 VALUES ('A');
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
|
@ -1792,6 +1792,16 @@ DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
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>
|
||||
#
|
||||
|
29
sql/item.cc
29
sql/item.cc
@ -4499,6 +4499,35 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **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)
|
||||
{
|
||||
|
@ -1524,6 +1524,7 @@ public:
|
||||
:Item_direct_ref(thd, item) {}
|
||||
|
||||
bool fix_fields(THD *, Item **);
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user