Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into mysql.com:/home/dlenev/mysql-5.0-bg15153-2
This commit is contained in:
commit
2efefe6890
@ -1,3 +1,5 @@
|
|||||||
|
drop tables if exists t1, t2;
|
||||||
|
drop view if exists v1;
|
||||||
delete from mysql.user where user like 'mysqltest\_%';
|
delete from mysql.user where user like 'mysqltest\_%';
|
||||||
delete from mysql.db where user like 'mysqltest\_%';
|
delete from mysql.db where user like 'mysqltest\_%';
|
||||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||||
@ -59,3 +61,18 @@ delete from mysql.db where user like 'mysqltest\_%';
|
|||||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1 (a int, b datetime);
|
||||||
|
insert into t1 values (1, 20010101000000), (2, 20020101000000);
|
||||||
|
grant all privileges on test.* to mysqltest_1@localhost;
|
||||||
|
create view v1 as select a, convert_tz(b, 'UTC', 'Europe/Moscow') as lb from t1;
|
||||||
|
select * from v1;
|
||||||
|
a lb
|
||||||
|
1 2001-01-01 03:00:00
|
||||||
|
2 2002-01-01 03:00:00
|
||||||
|
select * from v1, mysql.time_zone;
|
||||||
|
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone'
|
||||||
|
drop view v1;
|
||||||
|
create view v1 as select a, convert_tz(b, 'UTC', 'Europe/Moscow') as lb from t1, mysql.time_zone;
|
||||||
|
ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 'time_zone'
|
||||||
|
drop table t1;
|
||||||
|
drop user mysqltest_1@localhost;
|
||||||
|
@ -2623,3 +2623,29 @@ select * from v1;
|
|||||||
ERROR HY000: Recursive stored functions and triggers are not allowed.
|
ERROR HY000: Recursive stored functions and triggers are not allowed.
|
||||||
drop function f1;
|
drop function f1;
|
||||||
drop view t1, v1;
|
drop view t1, v1;
|
||||||
|
create table t1 (dt datetime);
|
||||||
|
insert into t1 values (20040101000000), (20050101000000), (20060101000000);
|
||||||
|
create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1;
|
||||||
|
select * from v1;
|
||||||
|
ldt
|
||||||
|
2004-01-01 03:00:00
|
||||||
|
2005-01-01 03:00:00
|
||||||
|
2006-01-01 03:00:00
|
||||||
|
drop view v1;
|
||||||
|
create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000;
|
||||||
|
select * from v1;
|
||||||
|
dt
|
||||||
|
2005-01-01 00:00:00
|
||||||
|
2006-01-01 00:00:00
|
||||||
|
create view v2 as select * from v1 where dt < 20060101000000;
|
||||||
|
select * from v2;
|
||||||
|
dt
|
||||||
|
2005-01-01 00:00:00
|
||||||
|
drop view v2;
|
||||||
|
create view v2 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from v1;
|
||||||
|
select * from v2;
|
||||||
|
ldt
|
||||||
|
2005-01-01 03:00:00
|
||||||
|
2006-01-01 03:00:00
|
||||||
|
drop view v1, v2;
|
||||||
|
drop table t1;
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
# Embedded server testing does not support grants
|
# Embedded server testing does not support grants
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop tables if exists t1, t2;
|
||||||
|
drop view if exists v1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test for bug #6116 "SET time_zone := ... requires access to mysql.time_zone
|
# Test for bug #6116 "SET time_zone := ... requires access to mysql.time_zone
|
||||||
# tables". We should allow implicit access to time zone description tables
|
# tables". We should allow implicit access to time zone description tables
|
||||||
@ -82,3 +87,29 @@ flush privileges;
|
|||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Additional test for bug #15153: CONVERT_TZ() is not allowed in all
|
||||||
|
# places in views.
|
||||||
|
#
|
||||||
|
# Let us check that usage of CONVERT_TZ() function in view does not
|
||||||
|
# require additional privileges.
|
||||||
|
|
||||||
|
# Let us rely on that previous tests done proper cleanups
|
||||||
|
create table t1 (a int, b datetime);
|
||||||
|
insert into t1 values (1, 20010101000000), (2, 20020101000000);
|
||||||
|
grant all privileges on test.* to mysqltest_1@localhost;
|
||||||
|
connect (tzuser3, localhost, mysqltest_1,,);
|
||||||
|
create view v1 as select a, convert_tz(b, 'UTC', 'Europe/Moscow') as lb from t1;
|
||||||
|
select * from v1;
|
||||||
|
# Of course we should not be able select from mysql.time_zone tables
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
select * from v1, mysql.time_zone;
|
||||||
|
drop view v1;
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
create view v1 as select a, convert_tz(b, 'UTC', 'Europe/Moscow') as lb from t1, mysql.time_zone;
|
||||||
|
connection default;
|
||||||
|
drop table t1;
|
||||||
|
drop user mysqltest_1@localhost;
|
||||||
|
|
||||||
|
# End of 5.0 tests
|
||||||
|
@ -2485,3 +2485,30 @@ rename table v2 to t1;
|
|||||||
select * from v1;
|
select * from v1;
|
||||||
drop function f1;
|
drop function f1;
|
||||||
drop view t1, v1;
|
drop view t1, v1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #15153: CONVERT_TZ() is not allowed in all places in VIEWs
|
||||||
|
#
|
||||||
|
# Error was reported when one tried to use CONVERT_TZ() function
|
||||||
|
# select list of view which was processed using MERGE algorithm.
|
||||||
|
# (Also see additional test in timezone_grant.test)
|
||||||
|
create table t1 (dt datetime);
|
||||||
|
insert into t1 values (20040101000000), (20050101000000), (20060101000000);
|
||||||
|
# Let us test that convert_tz() can be used in view's select list
|
||||||
|
create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1;
|
||||||
|
select * from v1;
|
||||||
|
drop view v1;
|
||||||
|
# And in its where part
|
||||||
|
create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000;
|
||||||
|
select * from v1;
|
||||||
|
# Other interesting case - a view which uses convert_tz() function
|
||||||
|
# through other view.
|
||||||
|
create view v2 as select * from v1 where dt < 20060101000000;
|
||||||
|
select * from v2;
|
||||||
|
drop view v2;
|
||||||
|
# And even more interesting case when view uses convert_tz() both
|
||||||
|
# directly and indirectly
|
||||||
|
create view v2 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from v1;
|
||||||
|
select * from v2;
|
||||||
|
drop view v1, v2;
|
||||||
|
drop table t1;
|
||||||
|
@ -1057,15 +1057,23 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
|
|||||||
!old_lex->can_not_use_merged())
|
!old_lex->can_not_use_merged())
|
||||||
{
|
{
|
||||||
List_iterator_fast<TABLE_LIST> ti(view_select->top_join_list);
|
List_iterator_fast<TABLE_LIST> ti(view_select->top_join_list);
|
||||||
|
/*
|
||||||
|
Currently 'view_main_select_tables' differs from 'view_tables'
|
||||||
|
only then view has CONVERT_TZ() function in its select list.
|
||||||
|
This may change in future, for example if we enable merging
|
||||||
|
of views with subqueries in select list.
|
||||||
|
*/
|
||||||
|
TABLE_LIST *view_main_select_tables=
|
||||||
|
(TABLE_LIST*)lex->select_lex.table_list.first;
|
||||||
/* lex should contain at least one table */
|
/* lex should contain at least one table */
|
||||||
DBUG_ASSERT(view_tables != 0);
|
DBUG_ASSERT(view_main_select_tables != 0);
|
||||||
|
|
||||||
table->effective_algorithm= VIEW_ALGORITHM_MERGE;
|
table->effective_algorithm= VIEW_ALGORITHM_MERGE;
|
||||||
DBUG_PRINT("info", ("algorithm: MERGE"));
|
DBUG_PRINT("info", ("algorithm: MERGE"));
|
||||||
table->updatable= (table->updatable_view != 0);
|
table->updatable= (table->updatable_view != 0);
|
||||||
table->effective_with_check=
|
table->effective_with_check=
|
||||||
old_lex->get_effective_with_check(table);
|
old_lex->get_effective_with_check(table);
|
||||||
table->merge_underlying_list= view_tables;
|
table->merge_underlying_list= view_main_select_tables;
|
||||||
/*
|
/*
|
||||||
Let us set proper lock type for tables of the view's main select
|
Let us set proper lock type for tables of the view's main select
|
||||||
since we may want to perform update or insert on view. This won't
|
since we may want to perform update or insert on view. This won't
|
||||||
@ -1081,7 +1089,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* prepare view context */
|
/* prepare view context */
|
||||||
lex->select_lex.context.resolve_in_table_list_only(view_tables);
|
lex->select_lex.context.resolve_in_table_list_only(view_main_select_tables);
|
||||||
lex->select_lex.context.outer_context= 0;
|
lex->select_lex.context.outer_context= 0;
|
||||||
lex->select_lex.context.select_lex= table->select_lex;
|
lex->select_lex.context.select_lex= table->select_lex;
|
||||||
lex->select_lex.select_n_having_items+=
|
lex->select_lex.select_n_having_items+=
|
||||||
@ -1097,7 +1105,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
|
|||||||
tbl->select_lex= table->select_lex;
|
tbl->select_lex= table->select_lex;
|
||||||
|
|
||||||
{
|
{
|
||||||
if (view_tables->next_local)
|
if (view_main_select_tables->next_local)
|
||||||
{
|
{
|
||||||
table->multitable_view= TRUE;
|
table->multitable_view= TRUE;
|
||||||
if (table->belong_to_view)
|
if (table->belong_to_view)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user