diff options
author | unknown <thek@adventure.(none)> | 2007-08-21 13:44:01 +0200 |
---|---|---|
committer | unknown <thek@adventure.(none)> | 2007-08-21 13:44:01 +0200 |
commit | b1d9eba30acdf82b3a8d6fa28d7110463d599207 (patch) | |
tree | 2faf3e3941e4f173cbf719746cb5494b7c2f5c87 | |
parent | c24600306c0a1ea67160bd33b7e1e3f9bbc5685a (diff) | |
parent | 3a5a0ea3928d24a8cd0a45691de6d917672d63c6 (diff) | |
download | mariadb-git-b1d9eba30acdf82b3a8d6fa28d7110463d599207.tar.gz |
Merge adventure.(none):/home/thek/Development/cpp/bug30269/my50-bug30269
into adventure.(none):/home/thek/Development/cpp/bug30269/my51-bug30269
mysql-test/r/query_cache.result:
Auto merged
mysql-test/t/query_cache.test:
Auto merged
sql/sql_cache.cc:
Auto merged
-rw-r--r-- | mysql-test/r/query_cache.result | 9 | ||||
-rw-r--r-- | mysql-test/r/query_cache_with_views.result (renamed from mysql-test/r/view_query_cache.result) | 0 | ||||
-rw-r--r-- | mysql-test/t/query_cache.test | 5 | ||||
-rw-r--r-- | mysql-test/t/query_cache_with_views.test (renamed from mysql-test/t/view_query_cache.test) | 0 | ||||
-rw-r--r-- | sql/sql_cache.cc | 13 |
5 files changed, 23 insertions, 4 deletions
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 0499793fb7d..6cee0675fdd 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -1532,10 +1532,11 @@ a (select count(*) from t2) 4 0 drop table t1,t2; DROP DATABASE IF EXISTS bug30269; +FLUSH STATUS; CREATE DATABASE bug30269; USE bug30269; CREATE TABLE test1 (id int, name varchar(23)); -CREATE VIEW view1 AS SELECT id FROM test1; +CREATE VIEW view1 AS SELECT * FROM test1; INSERT INTO test1 VALUES (5, 'testit'); GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; @@ -1544,15 +1545,19 @@ USE bug30269; show status like 'Qcache_queries_in_cache'; Variable_name Value Qcache_queries_in_cache 0 +# Select statement not stored in query cache because of column privileges. SELECT id FROM test1 WHERE id>2; id 5 +show status like 'Qcache_queries_in_cache'; +Variable_name Value +Qcache_queries_in_cache 0 SELECT id FROM view1 WHERE id>2; id 5 show status like 'Qcache_queries_in_cache'; Variable_name Value -Qcache_queries_in_cache 0 +Qcache_queries_in_cache 1 DROP DATABASE bug30269; DROP USER 'bug30269'@'localhost'; set GLOBAL query_cache_type=default; diff --git a/mysql-test/r/view_query_cache.result b/mysql-test/r/query_cache_with_views.result index 03430bd504b..03430bd504b 100644 --- a/mysql-test/r/view_query_cache.result +++ b/mysql-test/r/query_cache_with_views.result diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index e89a866997a..23bf90af067 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -1132,10 +1132,11 @@ disconnect user3; --disable_warnings DROP DATABASE IF EXISTS bug30269; --enable_warnings +FLUSH STATUS; CREATE DATABASE bug30269; USE bug30269; CREATE TABLE test1 (id int, name varchar(23)); -CREATE VIEW view1 AS SELECT id FROM test1; +CREATE VIEW view1 AS SELECT * FROM test1; INSERT INTO test1 VALUES (5, 'testit'); GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost'; GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost'; @@ -1144,7 +1145,9 @@ connect (bug30269, localhost, bug30269,,); connection bug30269; USE bug30269; show status like 'Qcache_queries_in_cache'; +--echo # Select statement not stored in query cache because of column privileges. SELECT id FROM test1 WHERE id>2; +show status like 'Qcache_queries_in_cache'; SELECT id FROM view1 WHERE id>2; show status like 'Qcache_queries_in_cache'; diff --git a/mysql-test/t/view_query_cache.test b/mysql-test/t/query_cache_with_views.test index d4ebe45b7ac..d4ebe45b7ac 100644 --- a/mysql-test/t/view_query_cache.test +++ b/mysql-test/t/query_cache_with_views.test diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 09e628610ef..1ad57811707 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -3237,8 +3237,19 @@ Query_cache::process_and_count_tables(THD *thd, TABLE_LIST *tables_used, The grant.want_privileges flag was set to 1 in the check_grant() function earlier if the TABLE_LIST object had any associated column privileges. + + We need to check that the TABLE_LIST object isn't part + of a VIEW definition because we want to be able to cache + views. + + TODO: Although it is possible to cache views, the privilege + check on view tables always fall back on column privileges + even if there are more generic table privileges. Thus it isn't + currently possible to retrieve cached view-tables unless the + client has the super user privileges. */ - if (tables_used->grant.want_privilege) + if (tables_used->grant.want_privilege && + tables_used->belong_to_view == NULL) { DBUG_PRINT("qcache", ("Don't cache statement as it refers to " "tables with column privileges.")); |