grant_cache.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # Grant tests not performed with embedded server
  2. -- source include/not_embedded.inc
  3. -- source include/have_query_cache.inc
  4. #
  5. # Test grants with query cache
  6. #
  7. --disable_warnings
  8. drop table if exists test.t1,mysqltest.t1,mysqltest.t2;
  9. drop database if exists mysqltest;
  10. --enable_warnings
  11. set GLOBAL query_cache_size=1355776;
  12. reset query cache;
  13. flush status;
  14. connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock);
  15. connection root;
  16. show grants for current_user;
  17. show grants;
  18. --disable_warnings
  19. create database if not exists mysqltest;
  20. --enable_warnings
  21. create table mysqltest.t1 (a int,b int,c int);
  22. create table mysqltest.t2 (a int,b int,c int);
  23. insert into mysqltest.t1 values (1,1,1),(2,2,2);
  24. insert into mysqltest.t2 values (3,3,3);
  25. create table test.t1 (a char (10));
  26. insert into test.t1 values ("test.t1");
  27. select * from t1;
  28. connect (root2,localhost,root,,mysqltest,$MASTER_MYPORT,master.sock);
  29. connection root2;
  30. # put queries in cache
  31. select * from t1;
  32. select a from t1;
  33. select c from t1;
  34. select * from t2;
  35. select * from mysqltest.t1,test.t1;
  36. show status like "Qcache_queries_in_cache";
  37. show status like "Qcache_hits%";
  38. # Create the test users
  39. grant SELECT on mysqltest.* to mysqltest_1@localhost;
  40. grant SELECT on mysqltest.t1 to mysqltest_2@localhost;
  41. grant SELECT on test.t1 to mysqltest_2@localhost;
  42. grant SELECT(a) on mysqltest.t1 to mysqltest_3@localhost;
  43. # The following queries should be fetched from cache
  44. connect (user1,localhost,mysqltest_1,,mysqltest,$MASTER_MYPORT,master.sock);
  45. connection user1;
  46. show grants for current_user();
  47. show status like "Qcache_queries_in_cache";
  48. show status like "Qcache_hits";
  49. show status like "Qcache_not_cached";
  50. select "user1";
  51. show status like "Qcache_queries_in_cache";
  52. show status like "Qcache_hits";
  53. show status like "Qcache_not_cached";
  54. select * from t1;
  55. show status like "Qcache_queries_in_cache";
  56. show status like "Qcache_hits";
  57. show status like "Qcache_not_cached";
  58. # The pre and end space are intentional
  59.  select a from t1 ;
  60. show status like "Qcache_queries_in_cache";
  61. show status like "Qcache_hits";
  62. show status like "Qcache_not_cached";
  63. select c from t1;
  64. show status like "Qcache_queries_in_cache";
  65. show status like "Qcache_hits";
  66. show status like "Qcache_not_cached";
  67. # Don't use '' as user because it will pick Unix login
  68. connect (unkuser,localhost,unkuser,,,$MASTER_MYPORT,master.sock);
  69. connection unkuser;
  70. show grants for current_user();
  71. # The following queries should be fetched from cache
  72. connect (user2,localhost,mysqltest_2,,mysqltest,$MASTER_MYPORT,master.sock);
  73. connection user2;
  74. select "user2";
  75. select * from t1;
  76. select a from t1;
  77. select c from t1;
  78. select * from mysqltest.t1,test.t1;
  79. --replace_result 127.0.0.1 localhost
  80. --error 1142
  81. select * from t2;
  82. show status like "Qcache_queries_in_cache";
  83. show status like "Qcache_hits";
  84. show status like "Qcache_not_cached";
  85. # The following queries should not be fetched from cache
  86. connect (user3,localhost,mysqltest_3,,mysqltest,$MASTER_MYPORT,master.sock);
  87. connection user3;
  88. select "user3";
  89. --replace_result 127.0.0.1 localhost
  90. --error 1143
  91. select * from t1;
  92. select a from t1;
  93. --replace_result 127.0.0.1 localhost
  94. --error 1143
  95. select c from t1;
  96. --replace_result 127.0.0.1 localhost
  97. --error 1142
  98. select * from t2;
  99. --replace_result 127.0.0.1 localhost
  100. --error 1143
  101. select mysqltest.t1.c from test.t1,mysqltest.t1;
  102. show status like "Qcache_queries_in_cache";
  103. show status like "Qcache_hits";
  104. show status like "Qcache_not_cached";
  105. # Connect without a database
  106. connect (user4,localhost,mysqltest_1,,*NO-ONE*,$MASTER_MYPORT,master.sock);
  107. connection user4;
  108. select "user4";
  109. show grants;
  110. --error 1046
  111. select a from t1;
  112. # The following query is not cached before (different database)
  113. select * from mysqltest.t1,test.t1;
  114. # Cache a query with 'no database'
  115. select a from mysqltest.t1;
  116. select a from mysqltest.t1;
  117. show status like "Qcache_queries_in_cache";
  118. show status like "Qcache_hits";
  119. show status like "Qcache_not_cached";
  120. # Cleanup
  121. connection root;
  122. #
  123. # A temporary 4.1 workaround to make this test pass if
  124. # mysql was compiled with other than latin1 --with-charset=XXX.
  125. # Without "set names binary" the below queries fail with
  126. # "Illegal mix of collations" error.
  127. # In 5.0 we will change grant tables to use NCHAR(N) instead
  128. # of "CHAR(N) BINARY", and use cast-to-nchar:  N'mysqltest_1'.
  129. #
  130. set names binary;
  131. delete from mysql.user where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
  132. delete from mysql.db where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
  133. delete from mysql.tables_priv where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
  134. delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
  135. flush privileges;
  136. drop table test.t1,mysqltest.t1,mysqltest.t2;
  137. drop database mysqltest;
  138. set GLOBAL query_cache_size=default;
  139. # End of 4.1 tests