Commit 2c4ca510 authored by unknown's avatar unknown

Check warnings in servers error log as part of test case


BitKeeper/deleted/.del-rpl_bug33931-slave.opt:
  Delete: mysql-test/suite/rpl/t/rpl_bug33931-slave.opt
mysql-test/include/default_mysqld.cnf:
  Set a default name for "log-bin"
mysql-test/mysql-test-run.pl:
  Check for warnings in mysqld error log files after each testcase,
  using SQL
mysql-test/lib/mtr_cases.pm:
  Make mtr_match into a perl module
mysql-test/lib/mtr_match.pm:
  Make mtr_match into a perl module
mysql-test/lib/mtr_report.pm:
  Make mtr_match into a perl module
  Print warnings if testcase failed from warnings
mysql-test/r/information_schema.result:
  Be more selective which databases and tables are select in the queries
mysql-test/r/mysql_upgrade.result:
  Update result, mysql_upgrade will check _all_ databases
mysql-test/r/mysqlcheck.result:
  Update result, mysql_upgrade should check _all_ databases
mysql-test/r/sp-destruct.result:
  Be more selective which databases and tables are select in the queries
mysql-test/r/sp-error.result:
  Backup and restore mysql.proc table
mysql-test/r/sp-security.result:
  Be more selective which databases and tables are select in the queries
mysql-test/r/sp.result:
  Be more selective which databases and tables are select in the queries
mysql-test/suite/rpl/r/rpl_bug33931.result:
  Move the setting of debug flag into the test file instead of in -slave.opt
  Add supression
mysql-test/suite/rpl/r/rpl_idempotency.result:
  Add supression
  Add master-slave-end.inc
mysql-test/suite/rpl/t/rpl_bug33931.test:
  Move the setting of debug flag into the test file instead of in -slave.opt
  Add supression
mysql-test/suite/rpl/t/rpl_idempotency.test:
  Add supression
  Add master-slave-end.inc
mysql-test/t/information_schema.test:
  Be more selective which databases and tables are select in the queries
mysql-test/t/sp-destruct.test:
  Be more selective which databases and tables are select in the queries
mysql-test/t/sp-error.test:
  Backup and restore mysql.proc table
mysql-test/t/sp-security.test:
  Be more selective which databases and tables are select in the queries
mysql-test/t/sp.test:
  Be more selective which databases and tables are select in the queries
mysql-test/include/check-warnings.test:
  New BitKeeper file ``mysql-test/include/check-warnings.test''
mysql-test/include/mtr_warnings.sql:
  New BitKeeper file ``mysql-test/include/mtr_warnings.sql''
parent 7674605d
#
# This test is executed once after each test to check the servers
# for unexpected warnings found in the servers error log
#
--disable_query_log
call mtr.check_warnings();
--enable_query_log
......@@ -17,5 +17,5 @@ loose-innodb_data_file_path= ibdata1:10M:autoextend
slave-net-timeout=120
log-bin
log-bin=mysqld-bin
delimiter ||;
use mtr||
--
-- Load table with the patterns that are considered
-- as suspicious and should be examined further
--
CREATE TABLE suspicious_patterns (
pattern VARCHAR(255)
)||
--
-- Declare a trigger that makes sure
-- no invalid patterns can be inserted
-- into suspicious_patterns
--
/*!50002
CREATE DEFINER=root@localhost TRIGGER sp_insert
BEFORE INSERT ON suspicious_patterns
FOR EACH ROW BEGIN
DECLARE dummy INT;
SELECT "" REGEXP NEW.pattern INTO dummy;
END
*/||
--
-- Insert patterns for the lines we should check
--
INSERT INTO suspicious_patterns VALUES
("^Warning:|mysqld: Warning|\\[Warning\\]"),
("^Error:|\\[ERROR\\]"),
("^==.* at 0x"),
("InnoDB: Warning"),
("^safe_mutex:|allocated at line"),
("missing DBUG_RETURN"),
("Attempting backtrace"),
("Assertion .* failed")||
--
-- Create table where testcases can insert patterns to
-- be supressed
--
CREATE TABLE test_supressions (
pattern VARCHAR(255)
)||
--
-- Declare a trigger that makes sure
-- no invalid patterns can be inserted
-- into test_supressions
--
/*!50002
CREATE DEFINER=root@localhost TRIGGER ts_insert
BEFORE INSERT ON test_supressions
FOR EACH ROW BEGIN
DECLARE dummy INT;
SELECT "" REGEXP NEW.pattern INTO dummy;
END
*/||
--
-- Load table with patterns that will be supressed globally(always)
--
CREATE TABLE global_supressions (
pattern VARCHAR(255)
)||
-- Declare a trigger that makes sure
-- no invalid patterns can be inserted
-- into global_supressions
--
/*!50002
CREATE DEFINER=root@localhost TRIGGER gs_insert
BEFORE INSERT ON global_supressions
FOR EACH ROW BEGIN
DECLARE dummy INT;
SELECT "" REGEXP NEW.pattern INTO dummy;
END
*/||
--
-- Insert patterns that should always be supressed
--
INSERT INTO global_supressions 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"),
/*
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 .*Deadlock found"),
("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"),
("Slave SQL:.*(Error_code: \[\[:digit:\]\]+|Query:.*)"),
("Sort aborted"),
("Time-out in NDB"),
("Warning:\s+One can only use the --user.*root"),
("Warning:\s+Setting lower_case_table_names=2"),
("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"),
/*
Special case, made as specific as possible, for:
Bug #28436: Incorrect position in SHOW BINLOG EVENTS causes
server coredump
*/
("Error in Log_event::read_log_event\\\(\\\): 'Sanity check failed', data_len: 258, event_type: 49"),
("Statement is not safe to log in statement format"),
/* test case for Bug#bug29807 copies a stray frm into database */
("InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal"),
("Cannot find or open table test\/bug29807 from"),
/* innodb foreign key tests that fail in ALTER or RENAME produce this */
("InnoDB: Error: in ALTER TABLE `test`.`t[12]`"),
("InnoDB: Error: in RENAME TABLE table `test`.`t1`"),
("InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal"),
/* Test case for Bug#14233 produces the following warnings: */
("Stored routine 'test'.'bug14233_1': invalid value in column mysql.proc"),
("Stored routine 'test'.'bug14233_2': invalid value in column mysql.proc"),
("Stored routine 'test'.'bug14233_3': invalid value in column mysql.proc"),
/*
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'"),
/*
rpl_extrColmaster_*.test, the slave thread produces warnings
when it get updates to a table that has more columns on the
master
*/
("Slave: Unknown column 'c7' in 't15' Error_code: 1054"),
("Slave: Can't DROP 'c7'.* 1091"),
("Slave: Key column 'c6'.* 1072"),
("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()
BEGIN
--
-- Load the server .err file into "error_log" table
--
CREATE TEMPORARY TABLE error_log (
row INT AUTO_INCREMENT PRIMARY KEY,
line mediumtext NULL
);
SELECT variable_value INTO @log_error
FROM information_schema.global_variables
WHERE variable_name='LOG_ERROR';
SET @text= load_file(@log_error);
-- select @text;
WHILE LOCATE('\n', @text) DO
INSERT error_log (line)
VALUES (
SUBSTR(@text, 1, LOCATE('\n', @text)-1)
);
SET @text= SUBSTR(@text FROM LOCATE('\n', @text)+1);
END WHILE;
-- select * from error_log;
--
-- Remove all lines belonging to previous tests
--
SELECT COALESCE(MAX(row),0) INTO @max_row
FROM error_log
WHERE line REGEXP "^CURRENT_TEST:";
DELETE FROM error_log WHERE row < @max_row;
CREATE TEMPORARY TABLE suspect_lines AS
SELECT DISTINCT el.line, 0 as "supressed"
FROM error_log el, suspicious_patterns ep
WHERE el.line REGEXP ep.pattern;
-- Mark lines that are supressed by global supressions
UPDATE suspect_lines sl, global_supressions gs
SET supressed=1
WHERE sl.line REGEXP gs.pattern;
-- Mark lines that are supressed by test specific supressions
UPDATE suspect_lines sl, test_supressions ts
SET supressed=2
WHERE sl.line REGEXP ts.pattern;
SELECT COUNT(*) INTO @num_warnings FROM suspect_lines
WHERE supressed=0;
IF @num_warnings > 0 THEN
SELECT @log_error;
SELECT line as log_error
FROM suspect_lines WHERE supressed=0;
SELECT * FROM test_supressions;
ELSE
SELECT "OK";
END IF;
-- Cleanup for next test
TRUNCATE test_supressions;
END||
--
-- Declare a procedure testcases can use to insert test
-- specific supressions
--
/*!50001
CREATE DEFINER=root@localhost
PROCEDURE add_supression(pattern VARCHAR(255))
BEGIN
INSERT INTO test_supressions (pattern) VALUES (pattern);
END
*/||
......@@ -25,6 +25,7 @@ use base qw(Exporter);
our @EXPORT= qw(collect_option collect_test_cases);
use mtr_report;
use mtr_match;
# Options used for the collect phase
our $start_from;
......@@ -55,7 +56,6 @@ use IO::File();
use My::Config;
use My::Platform;
require "mtr_match.pl";
require "mtr_misc.pl";
# Precompiled regex's for tests to do or skip
......@@ -425,7 +425,7 @@ sub collect_one_suite($)
if (@combinations)
{
print " - adding combinations\n";
print " - adding combinations for $suite\n";
#print_testcases(@cases);
my @new_cases;
......
......@@ -18,20 +18,17 @@
# and is part of the translation of the Bourne shell script with the
# same name.
package mtr_match;
use strict;
sub mtr_match_prefix ($$);
sub mtr_match_extension ($$);
sub mtr_match_any_exact ($$);
use base qw(Exporter);
our @EXPORT= qw(mtr_match_prefix
mtr_match_extension
mtr_match_substring);
##############################################################################
#
#
#
##############################################################################
# Match a prefix and return what is after the prefix
#
sub mtr_match_prefix ($$) {
my $string= shift;
my $prefix= shift;
......@@ -47,8 +44,9 @@ sub mtr_match_prefix ($$) {
}
#
# Match extension and return the name without extension
#
sub mtr_match_extension ($$) {
my $file= shift;
my $ext= shift;
......@@ -64,8 +62,9 @@ sub mtr_match_extension ($$) {
}
#
# Match a substring anywere in a string
#
sub mtr_match_substring ($$) {
my $string= shift;
my $substring= shift;
......
......@@ -29,6 +29,7 @@ our @EXPORT= qw(report_option mtr_print_line mtr_print_thick_line
mtr_report_test_failed mtr_report_test_skipped
mtr_report_stats);
use mtr_match;
require "mtr_io.pl";
my $tot_real_time= 0;
......@@ -115,7 +116,13 @@ sub mtr_report_test_failed ($$) {
$tinfo->{'result'}= 'MTR_RES_FAILED';
my $test_failures= $tinfo->{'failures'} || 0;
$tinfo->{'failures'}= $test_failures + 1;
if ( defined $tinfo->{'timeout'} )
if ( defined $tinfo->{'warnings'} )
{
mtr_report("[ fail ] Found warnings in server log file!");
mtr_report($tinfo->{'warnings'});
return;
}
elsif ( defined $tinfo->{'timeout'} )
{
mtr_report("[ fail ] timeout");
return;
......@@ -161,7 +168,7 @@ sub mtr_report_stats ($) {
my $tot_failed= 0;
my $tot_tests= 0;
my $tot_restarts= 0;
my $found_problems= 0; # Some warnings in the logfiles are errors...
my $found_problems= 0;
foreach my $tinfo (@$tests)
{
......@@ -183,6 +190,16 @@ sub mtr_report_stats ($) {
{
$tot_restarts++;
}
# Look for warnings produced by mysqltest
my $base_file= mtr_match_extension($tinfo->{'result_file'},
"result"); # Trim extension
my $warning_file= "$base_file.warnings";
if ( -f $warning_file )
{
$found_problems= 1;
mtr_warning("Check myqltest warnings in '$warning_file'");
}
}
# ----------------------------------------------------------------------
......@@ -198,231 +215,12 @@ sub mtr_report_stats ($) {
time - $BASETIME, "seconds executing testcases");
}
# ----------------------------------------------------------------------
# If a debug run, there might be interesting information inside
# the "var/log/*.err" files. We save this info in "var/log/warnings"
# ----------------------------------------------------------------------
if ( $::opt_warnings )
{
# Save and report if there was any fatal warnings/errors in err logs
my $warnlog= "$::opt_vardir/log/warnings";
unless ( open(WARN, ">$warnlog") )
{
mtr_warning("can't write to the file \"$warnlog\": $!");
}
else
{
# We report different types of problems in order
foreach my $pattern ( "^Warning:",
"\\[Warning\\]",
"\\[ERROR\\]",
"^Error:", "^==.* at 0x",
"InnoDB: Warning",
"InnoDB: Error",
"^safe_mutex:",
"missing DBUG_RETURN",
"mysqld: Warning",
"allocated at line",
"Attempting backtrace", "Assertion .* failed" )
{
foreach my $errlog ( sort glob("$::opt_vardir/log/*.err") )
{
my $testname= "";
unless ( open(ERR, $errlog) )
{
mtr_warning("can't read $errlog");
next;
}
my $leak_reports_expected= undef;
while ( <ERR> )
{
# There is a test case that purposely provokes a
# SAFEMALLOC leak report, even though there is no actual
# leak. We need to detect this, and ignore the warning in
# that case.
if (/Begin safemalloc memory dump:/) {
$leak_reports_expected= 1;
} elsif (/End safemalloc memory dump./) {
$leak_reports_expected= undef;
}
# Skip some non fatal warnings from the log files
if (
/\"SELECT UNIX_TIMESTAMP\(\)\" failed on master/ or
/Aborted connection/ or
/Client requested master to start replication from impossible position/ or
/Could not find first log file name in binary log/ or
/Enabling keys got errno/ or
/Error reading master configuration/ or
/Error reading packet/ or
/Event Scheduler/ or
/Failed to open log/ or
/Failed to open the existing master info file/ or
/Forcing shutdown of [0-9]* plugins/ or
/Can't open shared library .*\bha_example\b/ or
/Couldn't load plugin .*\bha_example\b/ or
# Due to timing issues, it might be that this warning
# is printed when the server shuts down and the
# computer is loaded.
/Forcing close of thread \d+ user: '.*?'/ or
/Got error [0-9]* when reading table/ or
/Incorrect definition of table/ or
/Incorrect information in file/ or
/InnoDB: Warning: we did not need to do crash recovery/ or
/Invalid \(old\?\) table or database name/ or
/Lock wait timeout exceeded/ or
/Log entry on master is longer than max_allowed_packet/ or
/unknown option '--loose-/ or
/unknown variable 'loose-/ or
/You have forced lower_case_table_names to 0 through a command-line option/ or
/Setting lower_case_table_names=2/ or
/NDB Binlog:/ or
/NDB: failed to setup table/ or
/NDB: only row based binary logging/ or
/Neither --relay-log nor --relay-log-index were used/ or
/Query partially completed/ or
/Slave I.O thread aborted while waiting for relay log/ or
/Slave SQL thread is stopped because UNTIL condition/ or
/Slave SQL thread retried transaction/ or
/Slave \(additional info\)/ or
/Slave: .*Duplicate column name/ or
/Slave: .*master may suffer from/ or
/Slave: According to the master's version/ or
/Slave: Column [0-9]* type mismatch/ or
/Slave: Error .* doesn't exist/ or
/Slave: Error .*Deadlock found/ or
/Slave: Error .*Unknown table/ or
/Slave: Error in Write_rows event: / or
/Slave: Field .* of table .* has no default value/ or
/Slave: Field .* doesn't have a default value/ or
/Slave: Query caused different errors on master and slave/ or
/Slave: Table .* doesn't exist/ or
/Slave: Table width mismatch/ or
/Slave: The incident LOST_EVENTS occured on the master/ or
/Slave: Unknown error.* 1105/ or
/Slave: Can't drop database.* database doesn't exist/ or
/Slave SQL:.*(?:Error_code: \d+|Query:.*)/ or
/Sort aborted/ or
/Time-out in NDB/ or
/One can only use the --user.*root/ or
/Setting lower_case_table_names=2/ or
/Table:.* on (delete|rename)/ or
/You have an error in your SQL syntax/ or
/deprecated/ or
/description of time zone/ or
/equal MySQL server ids/ or
/error .*connecting to master/ or
/error reading log entry/ or
/lower_case_table_names is set/ or
/skip-name-resolve mode/ or
/slave SQL thread aborted/ or
/Slave: .*Duplicate entry/ or
# Special case for Bug #26402 in show_check.test
# Question marks are not valid file name parts
# on Windows platforms. Ignore this error message.
/\QCan't find file: '.\test\????????.frm'\E/ or
# Special case, made as specific as possible, for:
# Bug #28436: Incorrect position in SHOW BINLOG EVENTS causes
# server coredump
/\QError in Log_event::read_log_event(): 'Sanity check failed', data_len: 258, event_type: 49\E/ or
/Statement is not safe to log in statement format/ or
# test case for Bug#bug29807 copies a stray frm into database
/InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal/ or
/Cannot find or open table test\/bug29807 from/ or
# innodb foreign key tests that fail in ALTER or RENAME produce this
/InnoDB: Error: in ALTER TABLE `test`.`t[12]`/ or
/InnoDB: Error: in RENAME TABLE table `test`.`t1`/ or
/InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal/ or
# Test case for Bug#14233 produces the following warnings:
/Stored routine 'test'.'bug14233_1': invalid value in column mysql.proc/ or
/Stored routine 'test'.'bug14233_2': invalid value in column mysql.proc/ or
/Stored routine 'test'.'bug14233_3': invalid value in column mysql.proc/ or
# BUG#29839 - lowercase_table3.test: Cannot find table test/T1
# from the internal data dictiona
/Cannot find table test\/BUG29839 from the internal data dictionary/ or
# 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'/ or
# rpl_extrColmaster_*.test, the slave thread produces warnings
# when it get updates to a table that has more columns on the
# master
/Slave: Unknown column 'c7' in 't15' Error_code: 1054/ or
/Slave: Can't DROP 'c7'.* 1091/ or
/Slave: Key column 'c6'.* 1072/ or
# rpl_idempotency.test produces warnings for the slave.
($testname eq 'rpl.rpl_idempotency' and
(/Slave: Can\'t find record in \'t1\' Error_code: 1032/ or
/Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452/
)) or
# These tests does "kill" on queries, causing sporadic errors when writing to logs
(($testname eq 'rpl.rpl_skip_error' or
$testname eq 'rpl.rpl_err_ignoredtable' or
$testname eq 'binlog.binlog_killed_simulate' or
$testname eq 'binlog.binlog_killed') and
(/Failed to write to mysql\.\w+_log/
)) or
# rpl_bug33931 has deliberate failures
($testname eq 'rpl.rpl_bug33931' and
(/Failed during slave.*thread initialization/
)) or
# rpl_temporary has an error on slave that can be ignored
($testname eq 'rpl.rpl_temporary' and
(/Slave: Can\'t find record in \'user\' Error_code: 1032/
)) or
# Test case for Bug#31590 produces the following error:
/Out of sort memory; increase server sort buffer size/
)
{
next; # Skip these lines
}
if ( /CURRENT_TEST: (.*)/ )
{
$testname= $1;
}
if ( /$pattern/ )
{
if ($leak_reports_expected) {
next;
}
$found_problems= 1;
print WARN basename($errlog) . ": $testname: $_";
}
}
}
}
if ( $::opt_check_testcases )
{
# Look for warnings produced by mysqltest in testname.warnings
foreach my $test_warning_file
( glob("$::glob_mysql_test_dir/r/*.warnings") )
{
$found_problems= 1;
print WARN "Check myqltest warnings in $test_warning_file\n";
}
}
if ( $found_problems )
if ( -f $warnlog )
{
mtr_warning("Got errors/warnings while running tests, please examine",
"\"$warnlog\" for details.");
}
}
"'$warnlog' for details.");
}
print "\n";
......
......@@ -11,7 +11,6 @@
# See the "MySQL Test framework manual" for more information
# http://dev.mysql.com/doc/mysqltest/en/index.html
#
# Please keep the test framework tools identical in all versions!
#
##############################################################################
......@@ -51,11 +50,11 @@ use My::Options;
use My::Find;
use mtr_cases;
use mtr_report;
use mtr_match;
require "lib/mtr_process.pl";
require "lib/mtr_io.pl";
require "lib/mtr_gcov.pl";
require "lib/mtr_match.pl";
require "lib/mtr_misc.pl";
require "lib/mtr_unique.pl";
......@@ -330,7 +329,7 @@ sub command_line_setup {
# Test case authoring
'record' => \$opt_record,
'check-testcases' => \$opt_check_testcases,
'check-testcases!' => \$opt_check_testcases,
'mark-progress' => \$opt_mark_progress,
# Extra options used when starting mysqld
......@@ -1984,17 +1983,48 @@ sub initialize_servers {
#
# Copy the reference database into selected datadir
# Remove all newline characters expect after semicolon
#
sub copy_install_db ($) {
my $path_data_dir= shift;
sub sql_to_bootstrap {
my ($sql) = @_;
my @lines= split(/\n/, $sql);
my $result= "\n";
my $delimiter= ';';
foreach my $line (@lines) {
# Change current delimiter if line starts with "delimiter"
if ( $line =~ /^delimiter (.*)/ ) {
my $new= $1;
# Remove old delimiter from end of new
$new=~ s/\Q$delimiter\E$//;
$delimiter = $new;
mtr_debug("changed delimiter to $delimiter");
# No need to add the delimiter to result
next;
}
# Add newline if line ends with $delimiter
# and convert the current delimiter to semicolon
if ( $line =~ /\Q$delimiter\E$/ ){
$line =~ s/\Q$delimiter\E$/;/;
$result.= "$line\n";
mtr_debug("Added default delimiter");
next;
}
# Remove comments starting with --
if ( $line =~ /^\s*--/ ) {
mtr_debug("Discarded $line");
next;
}
# Don't install over another db
mtr_error("There is already an installed db in '$path_data_dir'")
if -d $path_data_dir;
# Default, just add the line without newline
# but with a space as separator
$result.= "$line ";
# copy the installed db into place
copytree("$opt_vardir/install.db", $path_data_dir);
}
return $result;
}
......@@ -2073,6 +2103,10 @@ sub mysql_install_db {
mtr_tofile($bootstrap_sql_file,
"CREATE DATABASE mtr;\n");
# Add help tables and data for warning detection and supression
mtr_tofile($bootstrap_sql_file,
sql_to_bootstrap(mtr_grab_file("include/mtr_warnings.sql")));
# Log bootstrap command
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
mtr_tofile($path_bootstrap_log,
......@@ -2169,11 +2203,12 @@ sub do_before_run_mysqltest($)
}
sub run_check_testcase_all($$)
sub check_testcase($$)
{
my ($tinfo, $mode)= @_;
my $result;
# Parallell( mysqlds(), run_check_testcase, check_testcase_failed );
foreach my $mysqld ( mysqlds() )
{
if ( defined $mysqld->{'proc'} )
......@@ -2352,7 +2387,7 @@ sub run_testcase ($) {
if ( $opt_check_testcases )
{
run_check_testcase_all($tinfo, "before")
check_testcase($tinfo, "before")
}
my $test= start_mysqltest($tinfo);
......@@ -2379,12 +2414,21 @@ sub run_testcase ($) {
my $res= $test->exit_status();
if ( $res == 0 )
{
if ( $opt_warnings and check_warnings($tinfo) )
{
# Found unexpected warnings
report_failure_and_restart($tinfo);
$res= 1;
}
else
{
mtr_report_test_passed($tinfo, $opt_timer);
}
if ( $opt_check_testcases )
{
if (run_check_testcase_all($tinfo, "after"))
if (check_testcase($tinfo, "after"))
{
# Stop all servers that are known to be running
stop_all_servers();
......@@ -2484,6 +2528,93 @@ sub run_testcase ($) {
}
# Run include/check-warnings.test
#
# RETURN VALUE
# 0 OK
# 1 Check failed
#
sub run_check_warnings ($$) {
my $tinfo= shift;
my $mysqld= shift;
my $name= "warnings-".$mysqld->name();
my $tname= $tinfo->{name};
my $args;
mtr_init_args(\$args);
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
mtr_add_arg($args, "--silent");
mtr_add_arg($args, "--skip-safemalloc");
mtr_add_arg($args, "--test-file=%s", "include/check-warnings.test");
my $errfile= "$opt_vardir/tmp/$name.err";
my $res= My::SafeProcess->run
(
name => $name,
path => $exe_mysqltest,
error => $errfile,
output => $errfile,
args => \$args,
);
if ( $res == 0 )
{
my $report= mtr_grab_file($errfile);
if ($report ne "OK\nOK\n")
{
# Log to var/log/warnings file
mtr_tofile("$opt_vardir/log/warnings",
$tname."\n",
$report);
$res= 1;
$tinfo->{'warnings'}.= $report;
}
}
elsif ( $res == 62 )
{
# One of the features needed to run check_warnings.test was not
# available, check skipped
$res= 0;
}
elsif ( $res )
{
mtr_report("\nCould not execute 'check-warnings' for testcase '$tname':");
mtr_printfile($errfile);
$res= 0; # Ignore error
}
return $res;
}
#
# Loop through our list of processes and check the error log
# for unexepcted errors and warnings
#
sub check_warnings ($) {
my ($tinfo)= @_;
my $res= 0;
# Clear previous warnings
$tinfo->{warnings}= undef;
# Parallell( mysqlds(), run_check_warning, check_warning_failed);
foreach my $mysqld ( mysqlds() )
{
if (run_check_warnings($tinfo, $mysqld)){
$res= 1;
mtr_report();
}
}
return $res;
}
#
# Loop through our list of processes and look for and entry
# with the provided pid, if found check for the file indicating
......@@ -2568,6 +2699,11 @@ sub after_test_failure ($) {
mtr_debug("Removing '$backup_dir'");
}
}
# Remove all files in var/tmp
rmtree($opt_tmpdir);
mkpath($opt_tmpdir);
}
......@@ -3064,7 +3200,8 @@ sub start_servers($) {
}
# Copy datadir from installed system db
copy_install_db($datadir) unless -d $datadir;
copytree("$opt_vardir/install.db", $datadir)
unless -d $datadir;
# Write start of testcase to log file
mark_log($mysqld->value('log-error'), $tinfo);
......@@ -3144,17 +3281,11 @@ sub run_check_testcase ($$$) {
my $args;
mtr_init_args(\$args);
mtr_add_arg($args, "--no-defaults");
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
mtr_add_arg($args, "--silent");
mtr_add_arg($args, "--skip-safemalloc");
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir);
mtr_add_arg($args, "--socket=%s", $mysqld->value('socket'));
mtr_add_arg($args, "--port=%d", $mysqld->value('port'));
mtr_add_arg($args, "--database=test");
mtr_add_arg($args, "--user=%s", $opt_user);
mtr_add_arg($args, "--password=");
mtr_add_arg($args, "--result-file=%s", "$opt_vardir/tmp/$name.result");
mtr_add_arg($args, "--test-file=%s", "include/check-testcase.test");
......@@ -3177,12 +3308,12 @@ sub run_check_testcase ($$$) {
mtr_report("\nThe check of testcase '$tname' failed, this is the\n",
"diff between before and after:\n");
# Test failed, display the report mysqltest has created
mtr_printfile("$opt_vardir/tmp/$name.err");
mtr_printfile($errfile);
}
elsif ( $res )
{
mtr_report("\nCould not execute 'check-testcase' $mode testcase '$tname':");
mtr_printfile("$opt_vardir/tmp/$name.err");
mtr_printfile($errfile);
mtr_report();
}
return $res;
......
......@@ -36,7 +36,11 @@ create table t3(a int, KEY a_data (a));
create table mysqltest.t4(a int);
create table t5 (id int auto_increment primary key);
insert into t5 values (10);
create view v1 (c) as select table_name from information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status';
create view v1 (c) as
SELECT table_name FROM information_schema.TABLES
WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND
table_name<>'ndb_binlog_index' AND
table_name<>'ndb_apply_status';
select * from v1;
c
CHARACTER_SETS
......@@ -272,19 +276,19 @@ select * from t1;
select * from t2;
end|
select parameter_style, sql_data_access, dtd_identifier
from information_schema.routines;
from information_schema.routines where routine_schema='test';
parameter_style sql_data_access dtd_identifier
SQL CONTAINS SQL NULL
SQL CONTAINS SQL int(11)
show procedure status;
show procedure status where db='test';
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test sel2 PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
show function status;
show function status where db='test';
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test sub1 FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
select a.ROUTINE_NAME from information_schema.ROUTINES a,
information_schema.SCHEMATA b where
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test';
ROUTINE_NAME
sel2
sub1
......@@ -295,14 +299,14 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE # ALL NULL NULL NULL NULL NULL
1 SIMPLE # ALL NULL NULL NULL NULL NULL Using where; Using join buffer
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) order by 1;
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) AND a.ROUTINE_SCHEMA='test' order by 1;
ROUTINE_NAME name
sel2 sel2
sub1 sub1
select count(*) from information_schema.ROUTINES;
select count(*) from information_schema.ROUTINES where routine_schema='test';
count(*)
2
create view v1 as select routine_schema, routine_name from information_schema.routines
create view v1 as select routine_schema, routine_name from information_schema.routines where routine_schema='test'
order by routine_schema, routine_name;
select * from v1;
routine_schema routine_name
......@@ -850,7 +854,7 @@ VIEWS TABLE_NAME select
delete from mysql.user where user='mysqltest_4';
delete from mysql.db where user='mysqltest_4';
flush privileges;
SELECT table_schema, count(*) FROM information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
table_schema count(*)
information_schema 28
mysql 22
......@@ -890,7 +894,7 @@ if new.j = -1 then
set @fired:= "Yes";
end if;
end AFTER NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
select * from information_schema.triggers;
select * from information_schema.triggers where trigger_schema in ('mysql', 'information_schema', 'test', 'mysqltest');
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
NULL test trg1 INSERT NULL test t1 0 NULL begin
if new.j > 10 then
......@@ -1079,7 +1083,7 @@ BEGIN
SELECT 'foo' FROM DUAL;
END |
ERROR 42000: Unknown database 'information_schema'
select ROUTINE_NAME from routines;
select ROUTINE_NAME from routines where ROUTINE_SCHEMA='information_schema';
ROUTINE_NAME
grant all on information_schema.* to 'user1'@'localhost';
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
......@@ -1161,7 +1165,7 @@ use mysql;
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
select routine_name from information_schema.routines;
select routine_name from information_schema.routines where ROUTINE_SCHEMA='test';
routine_name
delete from proc where name='';
......@@ -1195,7 +1199,7 @@ CREATE FUNCTION f1() RETURNS INT RETURN @a + 1;
CREATE USER mysql_bug20230@localhost;
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
ROUTINE_NAME ROUTINE_DEFINITION
f1 RETURN @a + 1
p1 SET @a= 1
......@@ -1207,7 +1211,7 @@ SHOW CREATE FUNCTION f1;
Function sql_mode Create Function character_set_client collation_connection Database Collation
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
RETURN @a + 1 latin1 latin1_swedish_ci latin1_swedish_ci
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
ROUTINE_NAME ROUTINE_DEFINITION
f1 NULL
p1 NULL
......@@ -1310,12 +1314,12 @@ TABLE_PRIVILEGES TABLE_SCHEMA
TRIGGERS TRIGGER_SCHEMA
USER_PRIVILEGES GRANTEE
VIEWS TABLE_SCHEMA
SELECT MAX(table_name) FROM information_schema.tables;
SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
MAX(table_name)
VIEWS
SELECT table_name from information_schema.tables
WHERE table_name=(SELECT MAX(table_name)
FROM information_schema.tables);
FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
table_name
VIEWS
DROP TABLE IF EXISTS bug23037;
......
Run mysql_upgrade once
mtr.global_supressions OK
mtr.suspicious_patterns OK
mtr.test_supressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
......@@ -29,6 +32,9 @@ mysql.user OK
Run it again - should say already completed
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
Force should run it regardless of wether it's been run before
mtr.global_supressions OK
mtr.suspicious_patterns OK
mtr.test_supressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
......@@ -59,6 +65,9 @@ mysql.user OK
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
GRANT ALL ON *.* TO mysqltest1@'%';
Run mysql_upgrade with password protected account
mtr.global_supressions OK
mtr.suspicious_patterns OK
mtr.test_supressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
......@@ -91,6 +100,9 @@ Run mysql_upgrade with a non existing server socket
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
FATAL ERROR: Upgrade failed
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
mtr.global_supressions OK
mtr.suspicious_patterns OK
mtr.test_supressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
......
DROP TABLE IF EXISTS t1, `t``1`, `t 1`;
drop view if exists v1;
drop database if exists client_test_db;
mtr.global_supressions OK
mtr.suspicious_patterns OK
mtr.test_supressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
......
......@@ -84,7 +84,7 @@ drop table t1;
drop function bug14233_1;
drop function bug14233_2;
drop procedure bug14233_3;
show procedure status;
show procedure status where db=DATABASE();
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
show function status;
show function status where db=DATABASE();
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
drop table if exists t1, t2;
SELECT * FROM mysql.proc INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/proc.txt';
delete from mysql.proc;
create procedure syntaxerror(t int)|
ERROR 42000: 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 '' at line 1
......@@ -1650,3 +1651,4 @@ begin
declare continue handler for sqlstate '00000' set @x=0;
end$$
ERROR 42000: Bad SQLSTATE: '00000'
LOAD DATA INFILE '../../tmp/proc.txt' INTO TABLE mysql.proc;
......@@ -142,13 +142,13 @@ use db2;
alter procedure q modifies sql data;
drop procedure q;
use test;
select type,db,name from mysql.proc;
select type,db,name from mysql.proc where db like 'db%';
type db name
FUNCTION db1_secret db
PROCEDURE db1_secret stamp
drop database db1_secret;
drop database db2;
select type,db,name from mysql.proc;
select type,db,name from mysql.proc where db like 'db%';
type db name
delete from mysql.user where user='user1' or user='user2';
delete from mysql.user where user='' and host='%';
......
......@@ -1322,7 +1322,7 @@ end;
end if;
end loop;
end latin1 latin1_swedish_ci latin1_swedish_ci
show procedure status like '%p%'|
show procedure status where name like '%p%' and db='test'|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test ip PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
test opp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
......@@ -1335,7 +1335,7 @@ i p
drop table t3|
drop procedure opp|
drop procedure ip|
show procedure status like '%p%'|
show procedure status where name like '%p%' and db='test'|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
drop table if exists t3|
create table t3 ( f bigint unsigned not null )|
......@@ -1945,12 +1945,12 @@ drop procedure bug2260|
drop procedure if exists bug2267_1|
create procedure bug2267_1()
begin
show procedure status;
show procedure status where db='test';
end|
drop procedure if exists bug2267_2|
create procedure bug2267_2()
begin
show function status;
show function status where db='test';
end|
drop procedure if exists bug2267_3|
create procedure bug2267_3()
......@@ -1977,7 +1977,7 @@ call bug2267_3()|
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
bug2267_1 CREATE DEFINER=`root`@`localhost` PROCEDURE `bug2267_1`()
begin
show procedure status;
show procedure status where db='test';
end latin1 latin1_swedish_ci latin1_swedish_ci
call bug2267_4()|
Function sql_mode Create Function character_set_client collation_connection Database Collation
......
reset master;
call mtr.add_supression("Failed during slave.*thread initialization");
stop slave;
reset slave;
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
start slave;
show slave status;
Slave_IO_State #
......
......@@ -4,6 +4,8 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
call mtr.add_supression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
call mtr.add_supression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
CREATE TABLE t1 (a INT PRIMARY KEY);
CREATE TABLE t2 (a INT);
INSERT INTO t1 VALUES (-1),(-2),(-3);
......
--loose-debug=d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init
......@@ -13,10 +13,18 @@ connection master;
reset master;
connection slave;
# Add supression for expected warnings in slaves error log
call mtr.add_supression("Failed during slave.*thread initialization");
--disable_warnings
stop slave;
--enable_warnings
reset slave;
# Set debug flags on slave to force errors to occur
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
start slave;
connection master;
......
......@@ -7,6 +7,10 @@ source include/have_innodb.inc;
connection slave;
source include/have_innodb.inc;
# Add supression for expected warning(s) in slaves error log
call mtr.add_supression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
call mtr.add_supression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
connection master;
CREATE TABLE t1 (a INT PRIMARY KEY);
CREATE TABLE t2 (a INT);
......@@ -393,15 +397,13 @@ sync_slave_with_master;
#connection slave;
set global slave_exec_mode='STRICT';
# cleanup for bug#31609 tests
connection master;
set @@session.binlog_format= @save_binlog_format;
drop table t1,t2,ti2,ti1;
sync_slave_with_master;
--source include/master-slave-end.inc
--echo *** end of tests
......
......@@ -37,7 +37,11 @@ create table t3(a int, KEY a_data (a));
create table mysqltest.t4(a int);
create table t5 (id int auto_increment primary key);
insert into t5 values (10);
create view v1 (c) as select table_name from information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status';
create view v1 (c) as
SELECT table_name FROM information_schema.TABLES
WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND
table_name<>'ndb_binlog_index' AND
table_name<>'ndb_apply_status';
select * from v1;
select c,table_name from v1
......@@ -133,25 +137,25 @@ delimiter ;|
# Bug#7222 information_schema: errors in "routines"
#
select parameter_style, sql_data_access, dtd_identifier
from information_schema.routines;
from information_schema.routines where routine_schema='test';
--replace_column 5 # 6 #
show procedure status;
show procedure status where db='test';
--replace_column 5 # 6 #
show function status;
show function status where db='test';
select a.ROUTINE_NAME from information_schema.ROUTINES a,
information_schema.SCHEMATA b where
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test';
--replace_column 3 #
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
information_schema.SCHEMATA b where
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) order by 1;
select count(*) from information_schema.ROUTINES;
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) AND a.ROUTINE_SCHEMA='test' order by 1;
select count(*) from information_schema.ROUTINES where routine_schema='test';
create view v1 as select routine_schema, routine_name from information_schema.routines
create view v1 as select routine_schema, routine_name from information_schema.routines where routine_schema='test'
order by routine_schema, routine_name;
select * from v1;
drop view v1;
......@@ -528,7 +532,7 @@ flush privileges;
# Bug #9404 information_schema: Weird error messages
# with SELECT SUM() ... GROUP BY queries
#
SELECT table_schema, count(*) FROM information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
#
......@@ -557,7 +561,7 @@ begin
end|
delimiter ;|
show triggers;
select * from information_schema.triggers;
select * from information_schema.triggers where trigger_schema in ('mysql', 'information_schema', 'test', 'mysqltest');
drop trigger trg1;
drop trigger trg2;
......@@ -727,7 +731,7 @@ BEGIN
SELECT 'foo' FROM DUAL;
END |
delimiter ;|
select ROUTINE_NAME from routines;
select ROUTINE_NAME from routines where ROUTINE_SCHEMA='information_schema';
#
# Bug #10734 Grant of privileges other than 'select' and 'create view' should fail on schema
#
......@@ -827,7 +831,7 @@ use mysql;
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
select routine_name from information_schema.routines;
select routine_name from information_schema.routines where ROUTINE_SCHEMA='test';
delete from proc where name='';
use test;
......@@ -874,13 +878,13 @@ CREATE USER mysql_bug20230@localhost;
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
SHOW CREATE PROCEDURE p1;
SHOW CREATE FUNCTION f1;
connect (conn1, localhost, mysql_bug20230,,);
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
SHOW CREATE PROCEDURE p1;
SHOW CREATE FUNCTION f1;
CALL p1();
......@@ -931,10 +935,10 @@ SELECT t.table_name, c1.column_name
# INFORMARTION_SCHEMA.TABLES
#
SELECT MAX(table_name) FROM information_schema.tables;
SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
SELECT table_name from information_schema.tables
WHERE table_name=(SELECT MAX(table_name)
FROM information_schema.tables);
FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
#
# Bug #23037: Bug in field "Default" of query "SHOW COLUMNS FROM table"
#
......
......@@ -153,5 +153,5 @@ drop function bug14233_1;
drop function bug14233_2;
drop procedure bug14233_3;
# Assert: These should show nothing.
show procedure status;
show function status;
show procedure status where db=DATABASE();
show function status where db=DATABASE();
......@@ -6,6 +6,10 @@
drop table if exists t1, t2;
--enable_warnings
# Backup the mysql.proc table
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval SELECT * FROM mysql.proc INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/proc.txt';
# Make sure we don't have any procedures left.
delete from mysql.proc;
......@@ -2421,3 +2425,9 @@ delimiter ;$$
#--enable_warnings
#create procedure bugNNNN...
#create function bugNNNN...
#
# CLEANUP and RESTORE
#
LOAD DATA INFILE '../../tmp/proc.txt' INTO TABLE mysql.proc;
remove_file $MYSQLTEST_VARDIR/tmp/proc.txt;
......@@ -243,11 +243,11 @@ disconnect con2user1;
disconnect con3anon;
disconnect con4user2;
use test;
select type,db,name from mysql.proc;
select type,db,name from mysql.proc where db like 'db%';
drop database db1_secret;
drop database db2;
# Make sure the routines are gone
select type,db,name from mysql.proc;
select type,db,name from mysql.proc where db like 'db%';
# Get rid of the users
delete from mysql.user where user='user1' or user='user2';
delete from mysql.user where user='' and host='%';
......
......@@ -1540,7 +1540,7 @@ begin
end|
show create procedure opp|
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
show procedure status like '%p%'|
show procedure status where name like '%p%' and db='test'|
# This isn't the fastest way in the world to compute prime numbers, so
# don't be too ambitious. ;-)
......@@ -1558,7 +1558,7 @@ drop table t3|
drop procedure opp|
drop procedure ip|
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
show procedure status like '%p%'|
show procedure status where name like '%p%' and db='test'|
# Fibonacci, for recursion test. (Yet Another Numerical series :)
......@@ -2280,7 +2280,7 @@ drop procedure if exists bug2267_1|
--enable_warnings
create procedure bug2267_1()
begin
show procedure status;
show procedure status where db='test';
end|
--disable_warnings
......@@ -2288,7 +2288,7 @@ drop procedure if exists bug2267_2|
--enable_warnings
create procedure bug2267_2()
begin
show function status;
show function status where db='test';
end|
--disable_warnings
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment