Current Path : /home/usr.opt/mysql57/mysql-test/suite/query_rewrite_plugins/r/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/suite/query_rewrite_plugins/r/query_cache.result |
# # Test of query rewrites and query cache. # SET sql_mode = 'PIPES_AS_CONCAT'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SHOW VARIABLES LIKE '%query_cache%'; Variable_name Value have_query_cache YES query_cache_limit 1048576 query_cache_min_res_unit 4096 query_cache_size 1048576 query_cache_type ON query_cache_wlock_invalidate OFF FLUSH STATUS; CREATE TABLE t1 ( a INT ); INSERT INTO t1 VALUES (1), (2), (3); CREATE TABLE t2 ( a CHAR ); INSERT INTO t2 VALUES ('a'), ('b'), ('c'); SELECT * FROM t1; a 1 2 3 SELECT * FROM t1; a 1 2 3 SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 SHOW STATUS LIKE "Qcache_inserts"; Variable_name Value Qcache_inserts 1 SHOW STATUS LIKE "Qcache_hits"; Variable_name Value Qcache_hits 1 # Let's get this query cached, to make sure the cache is flushed when we # load the rule below. SELECT * FROM test.t1; a 1 2 3 SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 FLUSH STATUS; Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. # Query rewrite plugin was installed. INSERT INTO query_rewrite.rewrite_rules( pattern, replacement ) VALUES( 'SELECT * FROM test.t1', 'SELECT * FROM test.t2' ); CALL query_rewrite.flush_rewrite_rules(); Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. SELECT @@query_cache_size; @@query_cache_size 1048576 Warnings: Warning 1287 '@@query_cache_size' is deprecated and will be removed in a future release. # No matter what we do, this query should not get cached. SELECT * FROM test.t1; a a b c Warnings: Note 1105 Query 'SELECT * FROM test.t1' rewritten to 'SELECT * FROM test.t2' by a query rewrite plugin SELECT * FROM test.t1; a a b c Warnings: Note 1105 Query 'SELECT * FROM test.t1' rewritten to 'SELECT * FROM test.t2' by a query rewrite plugin SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 0 SHOW STATUS LIKE "Qcache_inserts"; Variable_name Value Qcache_inserts 0 SHOW STATUS LIKE "Qcache_hits"; Variable_name Value Qcache_hits 0 DELETE FROM query_rewrite.rewrite_rules; CALL query_rewrite.flush_rewrite_rules(); FLUSH STATUS; SELECT * FROM test.t1; a 1 2 3 SELECT * FROM test.t1; a 1 2 3 SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 SHOW STATUS LIKE "Qcache_inserts"; Variable_name Value Qcache_inserts 1 SHOW STATUS LIKE "Qcache_hits"; Variable_name Value Qcache_hits 1 # Now let's define a syntactically correct rule followed by one with a # syntax error. The query cache should still be cleared even if # flush_rewrite_rules() exits with an error. RESET QUERY CACHE; Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. DELETE FROM query_rewrite.rewrite_rules; SELECT @@query_cache_size; @@query_cache_size 1048576 Warnings: Warning 1287 '@@query_cache_size' is deprecated and will be removed in a future release. SELECT * FROM test.t1; a 1 2 3 SELECT * FROM test.t1; a 1 2 3 CALL mtr.add_suppression("Plugin rewriter reported: " || "'Some rules failed to load.'"); INSERT INTO query_rewrite.rewrite_rules( pattern, replacement ) VALUES ( 'SELECT * FROM test.t1', 'SELECT "rewritten"' ), ( 'This rule has syntax error', 'so it never gets rewritten' ); CALL query_rewrite.flush_rewrite_rules(); ERROR 45000: Loading of some rule(s) failed. SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message 2 SELECT * FROM test.t1 NULL SELECT "rewritten" YES NULL 3 This rule has syntax error NULL so it never gets rewritten YES Parse error in pattern: >>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'This rule has syntax error' at line 1<< FLUSH STATUS; # The query matching the rule should be evicted from the cache. SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 SHOW STATUS LIKE "Qcache_inserts"; Variable_name Value Qcache_inserts 0 SHOW STATUS LIKE "Qcache_hits"; Variable_name Value Qcache_hits 0 # The query would not get rewritten if it were still cached. SELECT * FROM test.t1; rewritten rewritten Warnings: Note 1105 Query 'SELECT * FROM test.t1' rewritten to 'SELECT "rewritten"' by a query rewrite plugin DELETE FROM query_rewrite.rewrite_rules; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown # Query rewrite plugin was queued for uninstalling. SELECT * FROM test.t1; a 1 2 3 SELECT * FROM test.t1; a 1 2 3 SHOW STATUS LIKE "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 SHOW STATUS LIKE "Qcache_inserts"; Variable_name Value Qcache_inserts 1 SHOW STATUS LIKE "Qcache_hits"; Variable_name Value Qcache_hits 1 DROP TABLE t1, t2; SET GLOBAL query_cache_size = DEFAULT; Warnings: Warning 1287 '@@query_cache_size' is deprecated and will be removed in a future release. # # Reinstalls the plugin while keeping the rules table. # CREATE TABLE t1 ( c1 VARCHAR(10), c2 VARCHAR(10) ); INSERT INTO t1 VALUES ( 'abc', 'def' ), ( 'ghi', 'klm' ), ( 'nop', 'qrs' ); CREATE TABLE t2 ( c1 VARCHAR(10) ); INSERT INTO t2 VALUES ( 'abc' ), ( 'klm' ); Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. # Query rewrite plugin was installed. # Insert some rewrite rules in the plugin INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement ) VALUES ( 'SELECT * FROM test.t2', 'SELECT * FROM test.t1 JOIN test.t2 ON test.t1.c1 = test.t2.c1' ); CALL query_rewrite.flush_rewrite_rules(); Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. # Check a query that doesn't have a rewrite rule doesn't get rewritten. SELECT c2 FROM test.t1; c2 def klm qrs # Check that we can execute a rewrite rule. SELECT * FROM test.t2; c1 c2 c1 abc def abc Warnings: Note 1105 Query 'SELECT * FROM test.t2' rewritten to 'SELECT * FROM test.t1 JOIN test.t2 ON test.t1.c1 = test.t2.c1' by a query rewrite plugin DROP PROCEDURE query_rewrite.flush_rewrite_rules; DROP FUNCTION load_rewrite_rules; UNINSTALL PLUGIN rewriter; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown # Check that the table is still present and didn't get dropped. SELECT pattern, replacement FROM query_rewrite.rewrite_rules; pattern replacement SELECT * FROM test.t2 SELECT * FROM test.t1 JOIN test.t2 ON test.t1.c1 = test.t2.c1 # Check that when the plugin is inactive the queries don't get rewritten. SELECT * FROM test.t2; c1 abc klm # Reinstall the plugin. All the rules should still be here from the # previous installation. Warnings: Note 1007 Can't create database 'query_rewrite'; database exists Warnings: Note 1050 Table 'rewrite_rules' already exists Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. # Query rewrite plugin was installed. # Check that a query that doesn't have a rewrite rule doesn't get # rewritten. SELECT c2 FROM test.t1; c2 def klm qrs # Check that we can still execute a rewrite rule. SELECT * FROM test.t2; c1 c2 c1 abc def abc Warnings: Note 1105 Query 'SELECT * FROM test.t2' rewritten to 'SELECT * FROM test.t1 JOIN test.t2 ON test.t1.c1 = test.t2.c1' by a query rewrite plugin DROP TABLE t1, t2; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown # Query rewrite plugin was queued for uninstalling. SET sql_mode = DEFAULT;