Server IP : 172.67.216.182 / Your IP : 172.70.189.142 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/query_rewrite_plugins/r/ |
Upload File : |
# # 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;