mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into magare.gmz:/home/kgeorge/mysql/autopush/B33133-5.0-opt sql/sql_base.cc: Auto merged
This commit is contained in:
commit
693f81f0f3
3 changed files with 57 additions and 1 deletions
|
@ -1407,4 +1407,16 @@ SELECT COUNT(*), a FROM t1;
|
|||
COUNT(*) a
|
||||
4 1
|
||||
DROP TABLE t1;
|
||||
set SQL_MODE=ONLY_FULL_GROUP_BY;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
CREATE VIEW v1 AS SELECT a,(a + 1) AS y FROM t1;
|
||||
EXPLAIN EXTENDED SELECT y FROM v1 GROUP BY v1.y;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select (`test`.`t1`.`a` + 1) AS `y` from `test`.`t1` group by (`test`.`t1`.`a` + 1)
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE=DEFAULT;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -901,5 +901,20 @@ SELECT COUNT(*), a FROM t1;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #33133: Views are not transparent
|
||||
#
|
||||
|
||||
set SQL_MODE=ONLY_FULL_GROUP_BY;
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
CREATE VIEW v1 AS SELECT a,(a + 1) AS y FROM t1;
|
||||
EXPLAIN EXTENDED SELECT y FROM v1 GROUP BY v1.y;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE=DEFAULT;
|
||||
|
||||
###
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -4254,7 +4254,36 @@ find_item_in_list(Item *find, List<Item> &items, uint *counter,
|
|||
*resolution= RESOLVED_IGNORING_ALIAS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (table_name && item->type() == Item::REF_ITEM &&
|
||||
((Item_ref *)item)->ref_type() == Item_ref::VIEW_REF)
|
||||
{
|
||||
/*
|
||||
TODO:Here we process prefixed view references only. What we should
|
||||
really do is process all types of Item_refs. But this will currently
|
||||
lead to a clash with the way references to outer SELECTs (from the
|
||||
HAVING clause) are handled in e.g. :
|
||||
SELECT 1 FROM t1 AS t1_o GROUP BY a
|
||||
HAVING (SELECT t1_o.a FROM t1 AS t1_i GROUP BY t1_i.a LIMIT 1).
|
||||
Processing all Item_refs here will cause t1_o.a to resolve to itself.
|
||||
We still need to process the special case of Item_direct_view_ref
|
||||
because in the context of views they have the same meaning as
|
||||
Item_field for tables.
|
||||
*/
|
||||
Item_ident *item_ref= (Item_ident *) item;
|
||||
if (item_ref->name && item_ref->table_name &&
|
||||
!my_strcasecmp(system_charset_info, item_ref->name, field_name) &&
|
||||
!my_strcasecmp(table_alias_charset, item_ref->table_name,
|
||||
table_name) &&
|
||||
(!db_name || (item_ref->db_name &&
|
||||
!strcmp (item_ref->db_name, db_name))))
|
||||
{
|
||||
found= li.ref();
|
||||
*counter= i;
|
||||
*resolution= RESOLVED_IGNORING_ALIAS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue