Commit a13efc7d authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

merge

parents efd7420d 1affa4df
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop table if exists t1,v1;
drop view if exists t1,v1;
create table t1 (a int);
insert into t1 values (1);
create view v1 as select a from t1;
insert into v1 values (2);
select * from v1 order by a;
a
1
2
select * from v1 order by a;
a
1
2
update v1 set a=3 where a=1;
select * from v1 order by a;
a
2
3
select * from v1 order by a;
a
2
3
delete from v1 where a=2;
select * from v1 order by a;
a
3
select * from v1 order by a;
a
3
alter view v1 as select a as b from t1;
select * from v1 order by 1;
b
3
drop view v1;
select * from v1 order by a;
ERROR 42S02: Table 'test.v1' doesn't exist
drop table t1;
...@@ -1730,3 +1730,23 @@ select * from v1 where F1 = 1; ...@@ -1730,3 +1730,23 @@ select * from v1 where F1 = 1;
f1 f1
drop view v1; drop view v1;
drop table t1; drop table t1;
create table t1(c1 int);
create table t2(c2 int);
insert into t1 values (1),(2),(3);
insert into t2 values (1);
SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
c1
1
SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
c1
1
create view v1 as SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
create view v2 as SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
select * from v1;
c1
1
select * from v2;
c1
1
drop view v2, v1;
drop table t1, t2;
source include/master-slave.inc;
--disable_warnings
drop table if exists t1,v1;
drop view if exists t1,v1;
sync_slave_with_master;
--enable_warnings
#
# Check that createion drop of view is replicated, also check replication of
# updating of view
#
connection master;
create table t1 (a int);
insert into t1 values (1);
create view v1 as select a from t1;
insert into v1 values (2);
select * from v1 order by a;
sync_slave_with_master;
# view already have to be on slave
select * from v1 order by a;
connection master;
update v1 set a=3 where a=1;
select * from v1 order by a;
sync_slave_with_master;
select * from v1 order by a;
connection master;
delete from v1 where a=2;
select * from v1 order by a;
sync_slave_with_master;
select * from v1 order by a;
connection master;
# 'alter view' internally maped to creation, but still check that it works
alter view v1 as select a as b from t1;
sync_slave_with_master;
select * from v1 order by 1;
connection master;
drop view v1;
sync_slave_with_master;
#error, because view have to be removed from slave
-- error 1146
select * from v1 order by a;
connection master;
drop table t1;
sync_slave_with_master;
...@@ -1655,9 +1655,27 @@ select * from v3; ...@@ -1655,9 +1655,27 @@ select * from v3;
drop view v3; drop view v3;
drop tables t1,t2; drop tables t1,t2;
#
# View field names should be case insensitive # View field names should be case insensitive
#
create table t1(f1 int); create table t1(f1 int);
create view v1 as select f1 from t1; create view v1 as select f1 from t1;
select * from v1 where F1 = 1; select * from v1 where F1 = 1;
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# Resolving view fields in subqueries in VIEW (Bug #6394)
#
create table t1(c1 int);
create table t2(c2 int);
insert into t1 values (1),(2),(3);
insert into t2 values (1);
SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
create view v1 as SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
create view v2 as SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
select * from v1;
select * from v2;
drop view v2, v1;
drop table t1, t2;
...@@ -5516,6 +5516,9 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant, ...@@ -5516,6 +5516,9 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant,
/* global privileges */ /* global privileges */
grant->privilege= thd->master_access; grant->privilege= thd->master_access;
if (!thd->priv_user)
return; // it is slave
/* db privileges */ /* db privileges */
grant->privilege|= acl_get(thd->host, thd->ip, thd->priv_user, db, 0); grant->privilege|= acl_get(thd->host, thd->ip, thd->priv_user, db, 0);
......
...@@ -4059,7 +4059,12 @@ unsent_create_error: ...@@ -4059,7 +4059,12 @@ unsent_create_error:
} }
case SQLCOM_CREATE_VIEW: case SQLCOM_CREATE_VIEW:
{ {
res= mysql_create_view(thd, thd->lex->create_view_mode); if (!(res= mysql_create_view(thd, thd->lex->create_view_mode)) &&
mysql_bin_log.is_open())
{
Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE);
mysql_bin_log.write(&qinfo);
}
break; break;
} }
case SQLCOM_DROP_VIEW: case SQLCOM_DROP_VIEW:
...@@ -4067,7 +4072,12 @@ unsent_create_error: ...@@ -4067,7 +4072,12 @@ unsent_create_error:
if (check_table_access(thd, DROP_ACL, all_tables, 0) || if (check_table_access(thd, DROP_ACL, all_tables, 0) ||
end_active_trans(thd)) end_active_trans(thd))
goto error; goto error;
res= mysql_drop_view(thd, first_table, thd->lex->drop_mode); if (!(res= mysql_drop_view(thd, first_table, thd->lex->drop_mode)) &&
mysql_bin_log.is_open())
{
Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE);
mysql_bin_log.write(&qinfo);
}
break; break;
} }
case SQLCOM_CREATE_TRIGGER: case SQLCOM_CREATE_TRIGGER:
......
...@@ -1695,6 +1695,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds, ...@@ -1695,6 +1695,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds,
Field_translator *transl; Field_translator *transl;
SELECT_LEX *select= &view->select_lex; SELECT_LEX *select= &view->select_lex;
SELECT_LEX *current_select_save= thd->lex->current_select; SELECT_LEX *current_select_save= thd->lex->current_select;
byte *main_table_list_save= thd->lex->select_lex.table_list.first;
Item *item; Item *item;
TABLE_LIST *tbl; TABLE_LIST *tbl;
List_iterator_fast<Item> it(select->item_list); List_iterator_fast<Item> it(select->item_list);
...@@ -1717,8 +1718,13 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds, ...@@ -1717,8 +1718,13 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds,
if (field_translation) if (field_translation)
{ {
DBUG_PRINT("info", ("there are already translation table")); DBUG_PRINT("info", ("there are already translation table"));
/* prevent look up in SELECTs tree */ /*
prevent look up in SELECTs tree, and emulate main table list by
ancestor table list for subquery processing
*/
thd->lex->current_select= &thd->lex->select_lex; thd->lex->current_select= &thd->lex->select_lex;
thd->lex->select_lex.table_list.first= (byte *)ancestor;
thd->lex->select_lex.no_wrap_view_item= 1; thd->lex->select_lex.no_wrap_view_item= 1;
thd->set_query_id= 1; thd->set_query_id= 1;
/* this view was prepared already on previous PS/SP execution */ /* this view was prepared already on previous PS/SP execution */
...@@ -1763,8 +1769,13 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds, ...@@ -1763,8 +1769,13 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds,
DBUG_RETURN(1); DBUG_RETURN(1);
} }
/* prevent look up in SELECTs tree */ /*
prevent look up in SELECTs tree, and emulate main table list by ancestor
table list for subquery processing
*/
thd->lex->current_select= &thd->lex->select_lex; thd->lex->current_select= &thd->lex->select_lex;
thd->lex->select_lex.table_list.first= (byte *)ancestor;
thd->lex->select_lex.no_wrap_view_item= 1; thd->lex->select_lex.no_wrap_view_item= 1;
/* /*
...@@ -1909,6 +1920,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds, ...@@ -1909,6 +1920,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds,
ok: ok:
thd->lex->select_lex.no_wrap_view_item= save_wrapper; thd->lex->select_lex.no_wrap_view_item= save_wrapper;
thd->lex->current_select= current_select_save; thd->lex->current_select= current_select_save;
thd->lex->select_lex.table_list.first= main_table_list_save;
thd->set_query_id= save_set_query_id; thd->set_query_id= save_set_query_id;
thd->allow_sum_func= save_allow_sum_func; thd->allow_sum_func= save_allow_sum_func;
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -1923,6 +1935,7 @@ err: ...@@ -1923,6 +1935,7 @@ err:
} }
thd->lex->select_lex.no_wrap_view_item= save_wrapper; thd->lex->select_lex.no_wrap_view_item= save_wrapper;
thd->lex->current_select= current_select_save; thd->lex->current_select= current_select_save;
thd->lex->select_lex.table_list.first= main_table_list_save;
thd->set_query_id= save_set_query_id; thd->set_query_id= save_set_query_id;
thd->allow_sum_func= save_allow_sum_func; thd->allow_sum_func= save_allow_sum_func;
DBUG_RETURN(1); DBUG_RETURN(1);
......
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