summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <thek@adventure.(none)>2007-08-21 13:44:01 +0200
committerunknown <thek@adventure.(none)>2007-08-21 13:44:01 +0200
commitb1d9eba30acdf82b3a8d6fa28d7110463d599207 (patch)
tree2faf3e3941e4f173cbf719746cb5494b7c2f5c87
parentc24600306c0a1ea67160bd33b7e1e3f9bbc5685a (diff)
parent3a5a0ea3928d24a8cd0a45691de6d917672d63c6 (diff)
downloadmariadb-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.result9
-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.test5
-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.cc13
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."));