403Webshell
Server IP : 104.21.38.3  /  Your IP : 172.68.164.135
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/t/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/suite/query_rewrite_plugins/t/errors.test
--echo #
--echo # Test of various abuses of the plugin.
--echo #

--source suite/query_rewrite_plugins/include/have_plugin_rewriter.inc
SET sql_mode = 'PIPES_AS_CONCAT';
CALL mtr.add_suppression("Plugin rewriter reported: " ||
                         "'Some rules failed to load.'");

CALL mtr.add_suppression("Plugin rewriter reported: " ||
                         "'Wrong column count or names when loading rules.'");


--echo # In theory a user might try to install the UDF without the plugin. In
--echo # this case, we should exit gracefully with an informative error.

--replace_regex /\.so|\.dll/.xxx/
eval CREATE FUNCTION load_rewrite_rules RETURNS STRING SONAME '$REWRITER';

--error ER_CANT_INITIALIZE_UDF
SELECT load_rewrite_rules();
DROP FUNCTION load_rewrite_rules;

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 ( 'tuv' ), ( 'wxy' );

--echo #
--echo # Create a table with insufficient number of columns.
--echo #
CREATE DATABASE query_rewrite;
CREATE TABLE query_rewrite.rewrite_rules ( pattern INT, replacement INT );

--source suite/query_rewrite_plugins/include/install_rewriter.inc

SELECT c1 FROM t1;

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

--source suite/query_rewrite_plugins/include/load_error_log.inc

--echo # Avoid seeing any other error that might be there.
SELECT search_error_log( '[Error]', "%Plugin Rewriter reported: 'Wrong%" );
SHOW STATUS LIKE 'Rewriter_number_reloads';

--source suite/query_rewrite_plugins/include/uninstall_rewriter.inc
--source include/disconnect_connections.inc

--echo # Create another table with insufficient number of columns.
CREATE DATABASE query_rewrite;
CREATE TABLE query_rewrite.rewrite_rules ( enabled CHAR(1) DEFAULT 'Y' );

--source suite/query_rewrite_plugins/include/install_rewriter.inc

--source suite/query_rewrite_plugins/include/load_error_log.inc
--echo # Avoid seeing any other error that might be there.
SELECT search_error_log( '[Error]', "%Plugin Rewriter reported: 'Wrong%" );
SHOW STATUS LIKE 'Rewriter_number_reloads';

SELECT c1 FROM t1;

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

--source suite/query_rewrite_plugins/include/uninstall_rewriter.inc
--source include/disconnect_connections.inc

--source suite/query_rewrite_plugins/include/install_rewriter.inc

--echo #
--echo # We now try 6 rules with various errors in them:
--echo #

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

--echo # 1. Syntax error in the replacement.
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'SELECT c1 FROM test.t1 WHERE c1 = ?', 'SELECT c1 FROM test.t2 WHERE q c1 = ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT c1 FROM test.t1 WHERE c1 = 'abc';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # 2. No error.
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'SELECT c1 FROM test.t1', 'SELECT * FROM test.t1' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # 3. Syntax error in the pattern.
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'SELECT c1 FROM test.t1 WHERE dqdq c1 = ? OR c2 = ?',
         'SELECT * FROM test.t1 WHERE c2 = ? OR c1 = ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # 4 Empty/NULL replacement/pattern
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'SELECT c1 FROM test.t1 WHERE c2 = ?', '' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM query_rewrite.rewrite_rules;

DELETE FROM query_rewrite.rewrite_rules
WHERE pattern = 'SELECT c1 FROM test.t1 WHERE c2 = ?';

ALTER TABLE query_rewrite.rewrite_rules
MODIFY COLUMN replacement VARCHAR(10000) CHARACTER SET utf8 COLLATE utf8_bin;

INSERT INTO query_rewrite.rewrite_rules ( pattern )
VALUES ( 'SELECT c1 FROM test.t1 WHERE c2 = ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM query_rewrite.rewrite_rules;

DELETE FROM query_rewrite.rewrite_rules
WHERE pattern = 'SELECT c1 FROM test.t1 WHERE c2 = ?';

ALTER TABLE query_rewrite.rewrite_rules
MODIFY COLUMN pattern VARCHAR(10000) CHARACTER SET utf8 COLLATE utf8_bin;

INSERT INTO query_rewrite.rewrite_rules ( replacement )
VALUES ( 'SELECT c1 FROM test.t1 WHERE c2 = ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # 5 More parameters in the replacement than the pattern
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES
( 'SELECT * FROM test.t1 WHERE c1 = ?', 'SELECT * FROM test.t2 WHERE c2 = ? AND c1 = ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT * FROM test.t1 WHERE c1 = 'abc';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # 6 A replacement that does not have syntax errors in itself, but the
--echo # rewritten query does.
INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'SELECT "Fail, please", ?', 'SELECT 1 LIMIT ?' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SELECT * FROM query_rewrite.rewrite_rules;

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SET @@global.rewriter_verbose = 2;

--error ER_PARSE_ERROR
SELECT 'Fail, please', 'a';

--echo # Check that the one rule without errors is still rewritten and executed.
SELECT c1 FROM test.t1;

--echo # Fix rule 1 (error in the replacement.)
UPDATE query_rewrite.rewrite_rules
SET replacement = 'SELECT c1 FROM test.t2 WHERE c1 = ?', enabled = 'YES'
WHERE pattern = 'SELECT c1 FROM test.t1 WHERE c1 = ?';

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SHOW STATUS LIKE 'Rewriter_number_loaded_rules';

SELECT c1 FROM test.t1 WHERE c1 = 'abc';
SELECT c1 FROM test.t2 WHERE c1 = 'tuv';

SELECT * FROM query_rewrite.rewrite_rules;

--echo # Check that the rule without error is still executed and rewritten.
SELECT c1 FROM test.t1;

--echo # Remove all the rules that cause errors.
DELETE FROM query_rewrite.rewrite_rules WHERE pattern <> 'SELECT c1 FROM test.t1';
DELETE FROM query_rewrite.rewrite_rules WHERE pattern IS NULL;
DELETE FROM query_rewrite.rewrite_rules WHERE replacement IS NULL;

SHOW STATUS LIKE 'Rewriter_reload_error';
SHOW STATUS LIKE 'Rewriter_number_loaded_rules';
SHOW STATUS LIKE 'Rewriter_number_reloads';

--echo # Check that a rule that used to have syntax error now works fine.
SELECT c1 FROM t1 WHERE c1 = 'abc';

--echo # Check that the rule without error is still executed and rewritten.
SELECT c1 FROM test.t1;

--echo # A rule with parse error followed by a correct rule should still turn
--echo # Rewriter_reload_error to true.
DELETE FROM query_rewrite.rewrite_rules;

INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement )
VALUES ( 'error', 'error' ),
       ( 'select 1', 'select 2' );

--error ER_SIGNAL_EXCEPTION
CALL query_rewrite.flush_rewrite_rules();

SELECT * FROM query_rewrite.rewrite_rules;

SHOW STATUS LIKE 'Rewriter_reload_error';

--echo #
--echo # Test of what happens if pfs digests are turned off.
--echo #

UPDATE performance_schema.setup_consumers
SET enabled = 'NO'
WHERE NAME = 'statements_digest';

--echo # Rewrites should still work.
SELECT 1;

PREPARE stmt1 FROM 'SELECT 1';
EXECUTE stmt1;

--echo # Restore the setting.
UPDATE performance_schema.setup_consumers
SET enabled = 'YES'
WHERE NAME = 'statements_digest';

--echo # Let's try to uninstall the plugin the wrong way, that is, not using the
--echo # script. The library will not be unloaded so we can still call the UDF
--echo # but it should return an error.
UNINSTALL PLUGIN rewriter;
--source include/disconnect_connections.inc

--error ER_CANT_INITIALIZE_UDF
CALL query_rewrite.flush_rewrite_rules();
--error ER_CANT_INITIALIZE_UDF
SELECT load_rewrite_rules();

--source suite/query_rewrite_plugins/include/uninstall_rewriter.inc
--source suite/query_rewrite_plugins/include/drop_error_log.inc

DROP TABLE t1, t2;

Youez - 2016 - github.com/yon3zu
LinuXploit