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 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;
|
|||||||
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>
|
||||||
#
|
#
|
||||||
|
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);
|
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:
|
|||||||
: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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user