236 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			MySQL
		
	
	
	
		
		
			
		
	
	
			236 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			MySQL
		
	
	
	
| 
								 | 
							
								-- Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- This program is free software; you can redistribute it and/or modify
							 | 
						||
| 
								 | 
							
								-- it under the terms of the GNU General Public License as published by
							 | 
						||
| 
								 | 
							
								-- the Free Software Foundation; version 2 of the License.
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- This program is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								-- but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						||
| 
								 | 
							
								-- GNU General Public License for more details.
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- You should have received a copy of the GNU General Public License
							 | 
						||
| 
								 | 
							
								-- along with this program; if not, write to the Free Software Foundation,
							 | 
						||
| 
								 | 
							
								-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								delimiter ||;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use mtr||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Create table where testcases can insert patterns to
							 | 
						||
| 
								 | 
							
								-- be suppressed
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								CREATE TABLE test_suppressions (
							 | 
						||
| 
								 | 
							
								  pattern VARCHAR(255)
							 | 
						||
| 
								 | 
							
								) ENGINE=MyISAM||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Declare a trigger that makes sure
							 | 
						||
| 
								 | 
							
								-- no invalid patterns can be inserted
							 | 
						||
| 
								 | 
							
								-- into test_suppressions
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								/*!50002
							 | 
						||
| 
								 | 
							
								CREATE DEFINER=root@localhost TRIGGER ts_insert
							 | 
						||
| 
								 | 
							
								BEFORE INSERT ON test_suppressions
							 | 
						||
| 
								 | 
							
								FOR EACH ROW BEGIN
							 | 
						||
| 
								 | 
							
								  DECLARE dummy INT;
							 | 
						||
| 
								 | 
							
								  SELECT "" REGEXP NEW.pattern INTO dummy;
							 | 
						||
| 
								 | 
							
								END
							 | 
						||
| 
								 | 
							
								*/||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Load table with patterns that will be suppressed globally(always)
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								CREATE TABLE global_suppressions (
							 | 
						||
| 
								 | 
							
								  pattern VARCHAR(255)
							 | 
						||
| 
								 | 
							
								) ENGINE=MyISAM||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								-- Declare a trigger that makes sure
							 | 
						||
| 
								 | 
							
								-- no invalid patterns can be inserted
							 | 
						||
| 
								 | 
							
								-- into global_suppressions
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								/*!50002
							 | 
						||
| 
								 | 
							
								CREATE DEFINER=root@localhost TRIGGER gs_insert
							 | 
						||
| 
								 | 
							
								BEFORE INSERT ON global_suppressions
							 | 
						||
| 
								 | 
							
								FOR EACH ROW BEGIN
							 | 
						||
| 
								 | 
							
								  DECLARE dummy INT;
							 | 
						||
| 
								 | 
							
								  SELECT "" REGEXP NEW.pattern INTO dummy;
							 | 
						||
| 
								 | 
							
								END
							 | 
						||
| 
								 | 
							
								*/||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Insert patterns that should always be suppressed
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								INSERT INTO global_suppressions VALUES
							 | 
						||
| 
								 | 
							
								 (".SELECT UNIX_TIMESTAMP... failed on master"),
							 | 
						||
| 
								 | 
							
								 ("Aborted connection"),
							 | 
						||
| 
								 | 
							
								 ("Client requested master to start replication from impossible position"),
							 | 
						||
| 
								 | 
							
								 ("Could not find first log file name in binary log"),
							 | 
						||
| 
								 | 
							
								 ("Enabling keys got errno"),
							 | 
						||
| 
								 | 
							
								 ("Error reading master configuration"),
							 | 
						||
| 
								 | 
							
								 ("Error reading packet"),
							 | 
						||
| 
								 | 
							
								 ("Event Scheduler"),
							 | 
						||
| 
								 | 
							
								 ("Failed to open log"),
							 | 
						||
| 
								 | 
							
								 ("Failed to open the existing master info file"),
							 | 
						||
| 
								 | 
							
								 ("Forcing shutdown of [0-9]* plugins"),
							 | 
						||
| 
								 | 
							
								 ("Forcing close of thread"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /*
							 | 
						||
| 
								 | 
							
								   Due to timing issues, it might be that this warning
							 | 
						||
| 
								 | 
							
								   is printed when the server shuts down and the
							 | 
						||
| 
								 | 
							
								   computer is loaded.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ("Got error [0-9]* when reading table"),
							 | 
						||
| 
								 | 
							
								 ("Incorrect definition of table"),
							 | 
						||
| 
								 | 
							
								 ("Incorrect information in file"),
							 | 
						||
| 
								 | 
							
								 ("InnoDB: Warning: we did not need to do crash recovery"),
							 | 
						||
| 
								 | 
							
								 ("Invalid \\(old\\?\\) table or database name"),
							 | 
						||
| 
								 | 
							
								 ("Lock wait timeout exceeded"),
							 | 
						||
| 
								 | 
							
								 ("Log entry on master is longer than max_allowed_packet"),
							 | 
						||
| 
								 | 
							
								 ("unknown option '--loose-"),
							 | 
						||
| 
								 | 
							
								 ("unknown variable 'loose-"),
							 | 
						||
| 
								 | 
							
								 ("You have forced lower_case_table_names to 0 through a command-line option"),
							 | 
						||
| 
								 | 
							
								 ("Setting lower_case_table_names=2"),
							 | 
						||
| 
								 | 
							
								 ("NDB Binlog:"),
							 | 
						||
| 
								 | 
							
								 ("NDB: failed to setup table"),
							 | 
						||
| 
								 | 
							
								 ("NDB: only row based binary logging"),
							 | 
						||
| 
								 | 
							
								 ("Neither --relay-log nor --relay-log-index were used"),
							 | 
						||
| 
								 | 
							
								 ("Query partially completed"),
							 | 
						||
| 
								 | 
							
								 ("Slave I.O thread aborted while waiting for relay log"),
							 | 
						||
| 
								 | 
							
								 ("Slave SQL thread is stopped because UNTIL condition"),
							 | 
						||
| 
								 | 
							
								 ("Slave SQL thread retried transaction"),
							 | 
						||
| 
								 | 
							
								 ("Slave \\(additional info\\)"),
							 | 
						||
| 
								 | 
							
								 ("Slave: .*Duplicate column name"),
							 | 
						||
| 
								 | 
							
								 ("Slave: .*master may suffer from"),
							 | 
						||
| 
								 | 
							
								 ("Slave: According to the master's version"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Column [0-9]* type mismatch"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Error .* doesn't exist"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Error .*Unknown table"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Error in Write_rows event: "),
							 | 
						||
| 
								 | 
							
								 ("Slave: Field .* of table .* has no default value"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Field .* doesn't have a default value"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Query caused different errors on master and slave"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Table .* doesn't exist"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Table width mismatch"),
							 | 
						||
| 
								 | 
							
								 ("Slave: The incident LOST_EVENTS occured on the master"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Unknown error.* 1105"),
							 | 
						||
| 
								 | 
							
								 ("Slave: Can't drop database.* database doesn't exist"),
							 | 
						||
| 
								 | 
							
								 ("Sort aborted"),
							 | 
						||
| 
								 | 
							
								 ("Time-out in NDB"),
							 | 
						||
| 
								 | 
							
								 ("Warning:\s+One can only use the --user.*root"),
							 | 
						||
| 
								 | 
							
								 ("Warning:\s+Table:.* on (delete|rename)"),
							 | 
						||
| 
								 | 
							
								 ("You have an error in your SQL syntax"),
							 | 
						||
| 
								 | 
							
								 ("deprecated"),
							 | 
						||
| 
								 | 
							
								 ("description of time zone"),
							 | 
						||
| 
								 | 
							
								 ("equal MySQL server ids"),
							 | 
						||
| 
								 | 
							
								 ("error .*connecting to master"),
							 | 
						||
| 
								 | 
							
								 ("error reading log entry"),
							 | 
						||
| 
								 | 
							
								 ("lower_case_table_names is set"),
							 | 
						||
| 
								 | 
							
								 ("skip-name-resolve mode"),
							 | 
						||
| 
								 | 
							
								 ("slave SQL thread aborted"),
							 | 
						||
| 
								 | 
							
								 ("Slave: .*Duplicate entry"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ("Statement may not be safe to log in statement format"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /* innodb foreign key tests that fail in ALTER or RENAME produce this */
							 | 
						||
| 
								 | 
							
								 ("InnoDB: Error: in ALTER TABLE `test`.`t[123]`"),
							 | 
						||
| 
								 | 
							
								 ("InnoDB: Error: in RENAME TABLE table `test`.`t1`"),
							 | 
						||
| 
								 | 
							
								 ("InnoDB: Error: table `test`.`t[123]` does not exist in the InnoDB internal"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /*
							 | 
						||
| 
								 | 
							
								   BUG#32080 - Excessive warnings on Solaris: setrlimit could not
							 | 
						||
| 
								 | 
							
								   change the size of core files
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								 ("setrlimit could not change the size of core files to 'infinity'"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ("The slave I.O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master."),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ("Slave: Unknown table 't1' Error_code: 1051"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /* Messages from valgrind */
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Memcheck,"),
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Copyright"),
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Using"),
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== For more details"),
							 | 
						||
| 
								 | 
							
								 /* This comes with innodb plugin tests */
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Warning: set address range perms: large range"),
							 | 
						||
| 
								 | 
							
								 /* valgrind-3.5.0 dumps this */
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Command: "),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /* valgrind warnings: invalid file descriptor -1 in syscall
							 | 
						||
| 
								 | 
							
								    write()/read(). Bug #50414 */
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Warning: invalid file descriptor -1 in syscall write()"),
							 | 
						||
| 
								 | 
							
								 ("==[0-9]*== Warning: invalid file descriptor -1 in syscall read()"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ("THE_LAST_SUPPRESSION")||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Procedure that uses the above created tables to check
							 | 
						||
| 
								 | 
							
								-- the servers error log for warnings
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								CREATE DEFINER=root@localhost PROCEDURE check_warnings(OUT result INT)
							 | 
						||
| 
								 | 
							
								BEGIN
							 | 
						||
| 
								 | 
							
								  DECLARE `pos` bigint unsigned;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  -- Don't write these queries to binlog
							 | 
						||
| 
								 | 
							
								  SET SQL_LOG_BIN=0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Remove mark from lines that are suppressed by global suppressions
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  UPDATE error_log el, global_suppressions gs
							 | 
						||
| 
								 | 
							
								    SET suspicious=0
							 | 
						||
| 
								 | 
							
								      WHERE el.suspicious=1 AND el.line REGEXP gs.pattern;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Remove mark from lines that are suppressed by test specific suppressions
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  UPDATE error_log el, test_suppressions ts
							 | 
						||
| 
								 | 
							
								    SET suspicious=0
							 | 
						||
| 
								 | 
							
								      WHERE el.suspicious=1 AND el.line REGEXP ts.pattern;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Get the number of marked lines and return result
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  SELECT COUNT(*) INTO @num_warnings FROM error_log
							 | 
						||
| 
								 | 
							
								    WHERE suspicious=1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  IF @num_warnings > 0 THEN
							 | 
						||
| 
								 | 
							
								    SELECT line
							 | 
						||
| 
								 | 
							
								        FROM error_log WHERE suspicious=1;
							 | 
						||
| 
								 | 
							
								    --SELECT * FROM test_suppressions;
							 | 
						||
| 
								 | 
							
								    -- Return 2 -> check failed
							 | 
						||
| 
								 | 
							
								    SELECT 2 INTO result;
							 | 
						||
| 
								 | 
							
								  ELSE
							 | 
						||
| 
								 | 
							
								    -- Return 0 -> OK
							 | 
						||
| 
								 | 
							
								    SELECT 0 INTO RESULT;
							 | 
						||
| 
								 | 
							
								  END IF;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  -- Cleanup for next test
							 | 
						||
| 
								 | 
							
								  TRUNCATE test_suppressions;
							 | 
						||
| 
								 | 
							
								  DROP TABLE error_log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								-- Declare a procedure testcases can use to insert test
							 | 
						||
| 
								 | 
							
								-- specific suppressions
							 | 
						||
| 
								 | 
							
								--
							 | 
						||
| 
								 | 
							
								/*!50001
							 | 
						||
| 
								 | 
							
								CREATE DEFINER=root@localhost
							 | 
						||
| 
								 | 
							
								PROCEDURE add_suppression(pattern VARCHAR(255))
							 | 
						||
| 
								 | 
							
								BEGIN
							 | 
						||
| 
								 | 
							
								  INSERT INTO test_suppressions (pattern) VALUES (pattern);
							 | 
						||
| 
								 | 
							
								END
							 | 
						||
| 
								 | 
							
								*/||
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |