diff options
author | unknown <dlenev@mysql.com> | 2006-04-22 11:54:25 +0400 |
---|---|---|
committer | unknown <dlenev@mysql.com> | 2006-04-22 11:54:25 +0400 |
commit | dc526db887e3ab68020d7d010f45fb9ce5d3ad14 (patch) | |
tree | ecf3a34a7ac46e3bb6a852899de62880d2156f2f /mysql-test/t/timezone_grant.test | |
parent | bf8f30b532ef217dac2a168124706d28e19a320f (diff) | |
download | mariadb-git-dc526db887e3ab68020d7d010f45fb9ce5d3ad14.tar.gz |
Fix for bug#15153 "CONVERT_TZ() is not allowed in all places in VIEWs".
Error was emitted when one tried to select information from view which used
merge algorithm and which also had CONVERT_TZ() function in its select list.
This bug was caused by wrong assumption that global table list for view
which is handled using merge algorithm begins from tables belonging to
the main select of this view. Nowadays the above assumption is not true only
when one uses convert_tz() function in view's select list, but in future
other cases may be added (for example we may support merging of views
with subqueries in select list one day). Relying on this false assumption
led to the usage of wrong table list for field lookups and therefor errors.
With this fix we explicitly use pointer to the beginning of main select's
table list.
mysql-test/r/timezone_grant.result:
Added additional test case for bug#15153 "CONVERT_TZ() is not allowed in
all places in VIEWs" that checks that usage of CONVERT_TZ() function in view
does not require additional privileges.
mysql-test/r/view.result:
Added test case for bug#15153 "CONVERT_TZ() is not allowed in all places in
VIEWs".
mysql-test/t/timezone_grant.test:
Added additional test case for bug#15153 "CONVERT_TZ() is not allowed in
all places in VIEWs" that checks that usage of CONVERT_TZ() function in view
does not require additional privileges.
mysql-test/t/view.test:
Added test case for bug#15153 "CONVERT_TZ() is not allowed in all places in
VIEWs".
sql/sql_view.cc:
mysql_make_view():
We should not assume that global table list for view which is handled using
merge algorithm begins from tables belonging to the main select of this
view. Nowadays the above assumption is not true only when one uses
convert_tz() function in view's select list, but in future other cases
may be added (for example we may support merging of views with subqueries
in select list one day). So let us instead explicitly use pointer to the
beginning of main select's table list.
Diffstat (limited to 'mysql-test/t/timezone_grant.test')
-rw-r--r-- | mysql-test/t/timezone_grant.test | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/mysql-test/t/timezone_grant.test b/mysql-test/t/timezone_grant.test index f94d86eb266..450c1edc47e 100644 --- a/mysql-test/t/timezone_grant.test +++ b/mysql-test/t/timezone_grant.test @@ -1,6 +1,11 @@ # Embedded server testing does not support grants -- 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 # tables". We should allow implicit access to time zone description tables @@ -82,3 +87,29 @@ flush privileges; drop table t1, t2; # 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 |