Commit e4dc7e5a authored by unknown's avatar unknown

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

into sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0


mysql-test/r/view.result:
  Auto merged
parents f4c303b8 5d7848d8
...@@ -1288,3 +1288,26 @@ handler v1 open as xx; ...@@ -1288,3 +1288,26 @@ handler v1 open as xx;
ERROR HY000: 'test.v1' is not BASE TABLE ERROR HY000: 'test.v1' is not BASE TABLE
drop view v1; drop view v1;
drop table t1; drop table t1;
create table t1(a int);
insert into t1 values (0), (1), (2), (3);
create table t2 (a int);
insert into t2 select a from t1 where a > 1;
create view v1 as select a from t1 where a > 1;
select * from t1 left join (t2 as t, v1) on v1.a=t1.a;
a a a
0 NULL NULL
1 NULL NULL
2 2 2
2 3 2
3 2 3
3 3 3
select * from t1 left join (t2 as t, t2) on t2.a=t1.a;
a a a
0 NULL NULL
1 NULL NULL
2 2 2
2 3 2
3 2 3
3 3 3
drop view v1;
drop table t1;
...@@ -1258,3 +1258,16 @@ create view v1 as select * from t1; ...@@ -1258,3 +1258,16 @@ create view v1 as select * from t1;
handler v1 open as xx; handler v1 open as xx;
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# view with WHERE in nested join
#
create table t1(a int);
insert into t1 values (0), (1), (2), (3);
create table t2 (a int);
insert into t2 select a from t1 where a > 1;
create view v1 as select a from t1 where a > 1;
select * from t1 left join (t2 as t, v1) on v1.a=t1.a;
select * from t1 left join (t2 as t, t2) on t2.a=t1.a;
drop view v1;
drop table t1;
...@@ -144,6 +144,13 @@ alter table user comment='Users and global privileges'; ...@@ -144,6 +144,13 @@ alter table user comment='Users and global privileges';
alter table func comment='User defined functions'; alter table func comment='User defined functions';
alter table tables_priv comment='Table privileges'; alter table tables_priv comment='Table privileges';
alter table columns_priv comment='Column privileges'; alter table columns_priv comment='Column privileges';
#
# Detect whether we had Create_view_priv
#
SET @hadCreateViewPriv:=0;
SELECT @hadCreateViewPriv:=1 FROM user WHERE Create_view_priv LIKE '%';
# #
# Create VIEWs privileges (v5.0) # Create VIEWs privileges (v5.0)
# #
...@@ -158,6 +165,11 @@ ALTER TABLE db ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Creat ...@@ -158,6 +165,11 @@ ALTER TABLE db ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Creat
ALTER TABLE host ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE host ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_view_priv;
ALTER TABLE user ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE user ADD Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_view_priv;
#
# Assign create/show view privileges to people who have create provileges
#
UPDATE user SET Create_view_priv=Create_priv, Show_view_priv=Create_priv where user<>"" AND @hadCreateViewPriv = 0;
# #
# Create some possible missing tables # Create some possible missing tables
# #
......
...@@ -1583,6 +1583,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1583,6 +1583,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
if (where) if (where)
{ {
Item_arena *arena= thd->current_arena, backup; Item_arena *arena= thd->current_arena, backup;
TABLE_LIST *tbl= this;
if (arena->is_conventional()) if (arena->is_conventional())
arena= 0; // For easier test arena= 0; // For easier test
...@@ -1591,7 +1592,11 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1591,7 +1592,11 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
if (arena) if (arena)
thd->set_n_backup_item_arena(arena, &backup); thd->set_n_backup_item_arena(arena, &backup);
if (outer_join)
/* Go up to join tree and try to find left join */
for (; tbl; tbl= tbl->embedding)
{
if (tbl->outer_join)
{ {
/* /*
Store WHERE condition to ON expression for outer join, because we Store WHERE condition to ON expression for outer join, because we
...@@ -1599,9 +1604,11 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1599,9 +1604,11 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
expression will not be moved to WHERE condition (i.e. will be clean expression will not be moved to WHERE condition (i.e. will be clean
correctly for PS/SP) correctly for PS/SP)
*/ */
on_expr= and_conds(on_expr, where); tbl->on_expr= and_conds(tbl->on_expr, where);
break;
} }
else }
if (tbl == 0)
{ {
/* /*
It is conds of JOIN, but it will be stored in st_select_lex::prep_where It is conds of JOIN, but it will be stored in st_select_lex::prep_where
...@@ -1609,6 +1616,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1609,6 +1616,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
*/ */
*conds= and_conds(*conds, where); *conds= and_conds(*conds, where);
} }
if (arena) if (arena)
thd->restore_backup_item_arena(arena, &backup); thd->restore_backup_item_arena(arena, &backup);
} }
......
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