From df22d47135ed1795e27062c6ec8e92d7bf5129f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Jun 2004 12:22:48 -0500 Subject: [PATCH 01/12] logger.pm, Bootstrap: Updates for output enhanced Bootstrap Build-tools/Bootstrap: Updates for output enhanced Bootstrap Build-tools/logger.pm: Updates for output enhanced Bootstrap --- Build-tools/Bootstrap | 9 +++++---- Build-tools/logger.pm | 15 +++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Build-tools/Bootstrap b/Build-tools/Bootstrap index a46d83ca91c..fa3c6344a05 100755 --- a/Build-tools/Bootstrap +++ b/Build-tools/Bootstrap @@ -46,6 +46,7 @@ $opt_test= undef; $opt_skip_check= undef; $opt_skip_manual= undef; $opt_win_dist= undef; +$opt_quiet= undef; $version= "unknown"; $major=$minor=$release=0; @@ -67,7 +68,8 @@ GetOptions( "suffix=s", "test|t", "verbose|v", - "win-dist|w" + "win-dist|w", + "quiet|q", ) || print_help(""); # @@ -99,8 +101,6 @@ if (defined $opt_build_command) print_help("") if ($opt_help); defined($REPO=$ARGV[0]) || print_help("Please enter the BK repository to be used!"); -$subject= "Bootstrap of $REPO failed" if $opt_mail; - &logger("Starting build"); &abort("The directory \"$REPO\" could not be found!") if (!-d $REPO); &logger("Using $REPO as the BK parent repository"); @@ -306,7 +306,7 @@ if (!$opt_dry_run) # # Now build the source distribution # -&logger("Compiling"); +&logger("Compiling..."); $command= $build_command; &run_command($command, "Compilation failed!"); @@ -403,6 +403,7 @@ Options: include a log file snippet, if logging is enabled) Note that the \@-Sign needs to be quoted! Example: --mail=user\\\@domain.com +-q, --quiet Be quiet -p, --pull Update the source BK trees before building -r, --revision= Export the tree as of revision (default is up to the latest revision) diff --git a/Build-tools/logger.pm b/Build-tools/logger.pm index 835d8014aa0..d3fb4c9db2f 100644 --- a/Build-tools/logger.pm +++ b/Build-tools/logger.pm @@ -5,7 +5,10 @@ # sub logger { - my $message=$_[0]; + my $message= $_[0]; + my $cmnd= $_[1]; + + print $message . "\n" if !$opt_quiet && !$opt_verbose && !$cmnd; print timestamp() . " " . $message . "\n" if $opt_verbose; if (defined $opt_log && !$opt_dry_run) { @@ -30,9 +33,12 @@ sub run_command } else { - &logger($command); - $command.= " >> $LOGFILE 2>&1" if defined $opt_log; - $command.= " > /dev/null" if (!$opt_verbose && !$opt_log); + &logger($command, 1); + + $command.= ';' unless ($command =~ m/^.*;$/); + + $command =~ s/;/ >> $LOGFILE 2>&1;/g if defined $opt_log; + $command =~ s/;/ > \/dev\/null;/g if (!$opt_verbose && !$opt_log); system($command) == 0 or &abort("$errormsg\n"); } } @@ -47,6 +53,7 @@ sub abort { my $message= $_[0]; my $messagefile; + my $subject= "Bootstrap of $REPO failed" if $opt_mail; $message= "ERROR: " . $message; &logger($message); From cf8a6e52b749a1a1311c31f4aad615593ba25b9e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 28 Jun 2004 15:53:49 +0500 Subject: [PATCH 02/12] s/\r\n/\n/ in mysql-test/*/system_mysql_db* according to http://www.bitkeeper.com/Documentation.FAQS.Windows_NT.html mysql-test/t/system_mysql_db.test: s/\r\n/\n/ mysql-test/t/system_mysql_db_fix-master.opt: s/\r\n/\n/ mysql-test/t/system_mysql_db_fix.test: s/\r\n/\n/ mysql-test/t/system_mysql_db_refs.test: s/\r\n/\n/ mysql-test/r/system_mysql_db.result: s/\r\n/\n/ mysql-test/r/system_mysql_db_refs.result: s/\r\n/\n/ --- mysql-test/r/system_mysql_db_refs.result | 56 ++++---- mysql-test/t/system_mysql_db.test | 16 +-- mysql-test/t/system_mysql_db_fix.test | 142 +++++++++---------- mysql-test/t/system_mysql_db_refs.test | 168 +++++++++++------------ 4 files changed, 191 insertions(+), 191 deletions(-) diff --git a/mysql-test/r/system_mysql_db_refs.result b/mysql-test/r/system_mysql_db_refs.result index e15934b03ac..ac072505bc9 100644 --- a/mysql-test/r/system_mysql_db_refs.result +++ b/mysql-test/r/system_mysql_db_refs.result @@ -18,44 +18,44 @@ create table test_columns_priv select * from mysql.columns_priv; delete from test_columns_priv; insert into test_columns_priv (Host,Db,User,Table_name,Column_name) values (@name,@name,@name,@name,@name); select -if(isnull(test_db.Host),'WRONG!!!','ok') as test_db_Host, -if(isnull(test_host.Host),'WRONG!!!','ok') as test_host_Host, -if(isnull(test_user.Host),'WRONG!!!','ok') as test_user_Host, -if(isnull(test_tables_priv.Host),'WRONG!!!','ok') as test_tables_priv_Host, -if(isnull(test_columns_priv.Host),'WRONG!!!','ok') as test_columns_priv_Host -from test_db -left join test_host on test_db.Host=test_host.Host -left join test_user on test_db.Host=test_user.Host -left join test_tables_priv on test_db.Host=test_tables_priv.Host +if(isnull(test_db.Host),'WRONG!!!','ok') as test_db_Host, +if(isnull(test_host.Host),'WRONG!!!','ok') as test_host_Host, +if(isnull(test_user.Host),'WRONG!!!','ok') as test_user_Host, +if(isnull(test_tables_priv.Host),'WRONG!!!','ok') as test_tables_priv_Host, +if(isnull(test_columns_priv.Host),'WRONG!!!','ok') as test_columns_priv_Host +from test_db +left join test_host on test_db.Host=test_host.Host +left join test_user on test_db.Host=test_user.Host +left join test_tables_priv on test_db.Host=test_tables_priv.Host left join test_columns_priv on test_db.Host=test_columns_priv.Host; test_db_Host test_host_Host test_user_Host test_tables_priv_Host test_columns_priv_Host ok ok ok ok ok select -if(isnull(test_db.Db),'WRONG!!!','ok') as test_db_Db, -if(isnull(test_host.Db),'WRONG!!!','ok') as test_host_Db, -if(isnull(test_tables_priv.Db),'WRONG!!!','ok') as test_tables_priv_Db, -if(isnull(test_columns_priv.Db),'WRONG!!!','ok') as est_columns_priv_Db -from test_db -left join test_host on test_db.Db=test_host.Db -left join test_tables_priv on test_db.Db=test_tables_priv.Db +if(isnull(test_db.Db),'WRONG!!!','ok') as test_db_Db, +if(isnull(test_host.Db),'WRONG!!!','ok') as test_host_Db, +if(isnull(test_tables_priv.Db),'WRONG!!!','ok') as test_tables_priv_Db, +if(isnull(test_columns_priv.Db),'WRONG!!!','ok') as est_columns_priv_Db +from test_db +left join test_host on test_db.Db=test_host.Db +left join test_tables_priv on test_db.Db=test_tables_priv.Db left join test_columns_priv on test_db.Db=test_columns_priv.Db; test_db_Db test_host_Db test_tables_priv_Db est_columns_priv_Db ok ok ok ok -select -if(isnull(test_db.User),'WRONG!!!','ok') as test_db_User, -if(isnull(test_user.User),'WRONG!!!','ok') as test_user_User, -if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, -if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User -from test_db -left join test_user on test_db.User=test_user.User -left join test_tables_priv on test_db.User=test_tables_priv.User +select +if(isnull(test_db.User),'WRONG!!!','ok') as test_db_User, +if(isnull(test_user.User),'WRONG!!!','ok') as test_user_User, +if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, +if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User +from test_db +left join test_user on test_db.User=test_user.User +left join test_tables_priv on test_db.User=test_tables_priv.User left join test_columns_priv on test_db.User=test_columns_priv.User; test_db_User test_user_User test_tables_priv_User test_columns_priv_User ok ok ok ok -select -if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, -if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User -from test_tables_priv +select +if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, +if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User +from test_tables_priv left join test_columns_priv on test_tables_priv.Table_name=test_columns_priv.Table_name; test_tables_priv_User test_columns_priv_User ok ok diff --git a/mysql-test/t/system_mysql_db.test b/mysql-test/t/system_mysql_db.test index bd69297b739..85a2f7f9bae 100644 --- a/mysql-test/t/system_mysql_db.test +++ b/mysql-test/t/system_mysql_db.test @@ -1,8 +1,8 @@ -# -# This test must examine integrity of system database "mysql" -# - --- disable_query_log -use mysql; --- enable_query_log --- source include/system_db_struct.inc +# +# This test must examine integrity of system database "mysql" +# + +-- disable_query_log +use mysql; +-- enable_query_log +-- source include/system_db_struct.inc diff --git a/mysql-test/t/system_mysql_db_fix.test b/mysql-test/t/system_mysql_db_fix.test index 6f3979bf66e..0acc7ea073d 100644 --- a/mysql-test/t/system_mysql_db_fix.test +++ b/mysql-test/t/system_mysql_db_fix.test @@ -1,78 +1,78 @@ -# +# # This is the test for mysql_fix_privilege_tables -# +# --- disable_result_log --- disable_query_log - -use test; - -# create system tables as in mysql-3.20 - -CREATE TABLE db ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(32) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, - PRIMARY KEY Host (Host,Db,User), - KEY User (User) -) -type=ISAM; +-- disable_result_log +-- disable_query_log -INSERT INTO db VALUES ('%','test', '','Y','Y','Y','Y','Y','Y'); -INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y'); +use test; -CREATE TABLE host ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(32) binary DEFAULT '' NOT NULL, - Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, - PRIMARY KEY Host (Host,Db) -) -type=ISAM; +# create system tables as in mysql-3.20 -CREATE TABLE user ( - Host char(60) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Password char(16), - Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, - Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, - PRIMARY KEY Host (Host,User) -) -type=ISAM; +CREATE TABLE db ( + Host char(60) binary DEFAULT '' NOT NULL, + Db char(32) binary DEFAULT '' NOT NULL, + User char(16) binary DEFAULT '' NOT NULL, + Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, + PRIMARY KEY Host (Host,Db,User), + KEY User (User) +) +type=ISAM; + +INSERT INTO db VALUES ('%','test', '','Y','Y','Y','Y','Y','Y'); +INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y'); + +CREATE TABLE host ( + Host char(60) binary DEFAULT '' NOT NULL, + Db char(32) binary DEFAULT '' NOT NULL, + Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, + PRIMARY KEY Host (Host,Db) +) +type=ISAM; + +CREATE TABLE user ( + Host char(60) binary DEFAULT '' NOT NULL, + User char(16) binary DEFAULT '' NOT NULL, + Password char(16), + Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, + Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, + PRIMARY KEY Host (Host,User) +) +type=ISAM; + +INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y'); +INSERT INTO user VALUES ('localhost','', '','N','N','N','N','N','N','N','N','N'); -INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y'); -INSERT INTO user VALUES ('localhost','', '','N','N','N','N','N','N','N','N','N'); - -- exec $MYSQL_FIX_SYSTEM_TABLES --database=test --- enable_query_log --- enable_result_log - --- source include/system_db_struct.inc - --- disable_query_log - -DROP TABLE db; -DROP TABLE host; -DROP TABLE user; -DROP TABLE func; -DROP TABLE tables_priv; -DROP TABLE columns_priv; - --- enable_query_log +-- enable_query_log +-- enable_result_log + +-- source include/system_db_struct.inc + +-- disable_query_log + +DROP TABLE db; +DROP TABLE host; +DROP TABLE user; +DROP TABLE func; +DROP TABLE tables_priv; +DROP TABLE columns_priv; + +-- enable_query_log diff --git a/mysql-test/t/system_mysql_db_refs.test b/mysql-test/t/system_mysql_db_refs.test index 49d6f198b32..b68503a6aa5 100644 --- a/mysql-test/t/system_mysql_db_refs.test +++ b/mysql-test/t/system_mysql_db_refs.test @@ -1,89 +1,89 @@ -# -# This test must examine integrity of current system database -# - -set @name="This is a very long string, that mustn't find room in a system field like Table_name. Thus it should be cut by the actual size of the field. So we can use this string to find out the actual length of the field and to use it in any compare queries"; - -# -# If this part is wrong, most likely you've done wrong modification of system database "mysql" -# - -create table test_db select * from mysql.db; -delete from test_db; -insert into test_db (Host,Db,User) values (@name,@name,@name); - -create table test_host select * from mysql.host; -delete from test_host; -insert into test_host (Host,Db) values (@name,@name); - -create table test_user select * from mysql.user; -delete from test_user; -insert into test_user (Host,User) values (@name,@name); - -create table test_func select * from mysql.func; -delete from test_func; -insert into test_func (name) values (@name); - -create table test_tables_priv select * from mysql.tables_priv; -delete from test_tables_priv; -insert into test_tables_priv (Host,Db,User,Table_name) values (@name,@name,@name,@name); - -create table test_columns_priv select * from mysql.columns_priv; -delete from test_columns_priv; -insert into test_columns_priv (Host,Db,User,Table_name,Column_name) values (@name,@name,@name,@name,@name); - -# 'Host' field must be the same for all the tables: - +# +# This test must examine integrity of current system database +# + +set @name="This is a very long string, that mustn't find room in a system field like Table_name. Thus it should be cut by the actual size of the field. So we can use this string to find out the actual length of the field and to use it in any compare queries"; + +# +# If this part is wrong, most likely you've done wrong modification of system database "mysql" +# + +create table test_db select * from mysql.db; +delete from test_db; +insert into test_db (Host,Db,User) values (@name,@name,@name); + +create table test_host select * from mysql.host; +delete from test_host; +insert into test_host (Host,Db) values (@name,@name); + +create table test_user select * from mysql.user; +delete from test_user; +insert into test_user (Host,User) values (@name,@name); + +create table test_func select * from mysql.func; +delete from test_func; +insert into test_func (name) values (@name); + +create table test_tables_priv select * from mysql.tables_priv; +delete from test_tables_priv; +insert into test_tables_priv (Host,Db,User,Table_name) values (@name,@name,@name,@name); + +create table test_columns_priv select * from mysql.columns_priv; +delete from test_columns_priv; +insert into test_columns_priv (Host,Db,User,Table_name,Column_name) values (@name,@name,@name,@name,@name); + +# 'Host' field must be the same for all the tables: + select - if(isnull(test_db.Host),'WRONG!!!','ok') as test_db_Host, - if(isnull(test_host.Host),'WRONG!!!','ok') as test_host_Host, - if(isnull(test_user.Host),'WRONG!!!','ok') as test_user_Host, - if(isnull(test_tables_priv.Host),'WRONG!!!','ok') as test_tables_priv_Host, - if(isnull(test_columns_priv.Host),'WRONG!!!','ok') as test_columns_priv_Host + if(isnull(test_db.Host),'WRONG!!!','ok') as test_db_Host, + if(isnull(test_host.Host),'WRONG!!!','ok') as test_host_Host, + if(isnull(test_user.Host),'WRONG!!!','ok') as test_user_Host, + if(isnull(test_tables_priv.Host),'WRONG!!!','ok') as test_tables_priv_Host, + if(isnull(test_columns_priv.Host),'WRONG!!!','ok') as test_columns_priv_Host + +from test_db +left join test_host on test_db.Host=test_host.Host +left join test_user on test_db.Host=test_user.Host +left join test_tables_priv on test_db.Host=test_tables_priv.Host +left join test_columns_priv on test_db.Host=test_columns_priv.Host; + +# 'Db' field must be the same for all the tables: -from test_db -left join test_host on test_db.Host=test_host.Host -left join test_user on test_db.Host=test_user.Host -left join test_tables_priv on test_db.Host=test_tables_priv.Host -left join test_columns_priv on test_db.Host=test_columns_priv.Host; - -# 'Db' field must be the same for all the tables: - select - if(isnull(test_db.Db),'WRONG!!!','ok') as test_db_Db, - if(isnull(test_host.Db),'WRONG!!!','ok') as test_host_Db, - if(isnull(test_tables_priv.Db),'WRONG!!!','ok') as test_tables_priv_Db, - if(isnull(test_columns_priv.Db),'WRONG!!!','ok') as est_columns_priv_Db + if(isnull(test_db.Db),'WRONG!!!','ok') as test_db_Db, + if(isnull(test_host.Db),'WRONG!!!','ok') as test_host_Db, + if(isnull(test_tables_priv.Db),'WRONG!!!','ok') as test_tables_priv_Db, + if(isnull(test_columns_priv.Db),'WRONG!!!','ok') as est_columns_priv_Db -from test_db -left join test_host on test_db.Db=test_host.Db -left join test_tables_priv on test_db.Db=test_tables_priv.Db -left join test_columns_priv on test_db.Db=test_columns_priv.Db; - -# 'User' field must be the same for all the tables: - -select - if(isnull(test_db.User),'WRONG!!!','ok') as test_db_User, - if(isnull(test_user.User),'WRONG!!!','ok') as test_user_User, - if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, - if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User +from test_db +left join test_host on test_db.Db=test_host.Db +left join test_tables_priv on test_db.Db=test_tables_priv.Db +left join test_columns_priv on test_db.Db=test_columns_priv.Db; -from test_db -left join test_user on test_db.User=test_user.User -left join test_tables_priv on test_db.User=test_tables_priv.User -left join test_columns_priv on test_db.User=test_columns_priv.User; - -# 'Table_name' field must be the same for all the tables: - -select - if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, - if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User -from test_tables_priv -left join test_columns_priv on test_tables_priv.Table_name=test_columns_priv.Table_name; - -drop table test_columns_priv; -drop table test_tables_priv; -drop table test_func; -drop table test_host; -drop table test_user; -drop table test_db; +# 'User' field must be the same for all the tables: + +select + if(isnull(test_db.User),'WRONG!!!','ok') as test_db_User, + if(isnull(test_user.User),'WRONG!!!','ok') as test_user_User, + if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, + if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User + +from test_db +left join test_user on test_db.User=test_user.User +left join test_tables_priv on test_db.User=test_tables_priv.User +left join test_columns_priv on test_db.User=test_columns_priv.User; + +# 'Table_name' field must be the same for all the tables: + +select + if(isnull(test_tables_priv.User),'WRONG!!!','ok') as test_tables_priv_User, + if(isnull(test_columns_priv.User),'WRONG!!!','ok') as test_columns_priv_User +from test_tables_priv +left join test_columns_priv on test_tables_priv.Table_name=test_columns_priv.Table_name; + +drop table test_columns_priv; +drop table test_tables_priv; +drop table test_func; +drop table test_host; +drop table test_user; +drop table test_db; From 7b6712a0614987ce49c9f523272a495537bc86a5 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 29 Jun 2004 02:13:24 -0500 Subject: [PATCH 03/12] my_md5sum: Added code to use locally installed perl modules first Build-tools/my_md5sum: Added code to use locally installed perl modules first --- Build-tools/my_md5sum | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Build-tools/my_md5sum b/Build-tools/my_md5sum index 20742ee2ed0..481a665af1a 100755 --- a/Build-tools/my_md5sum +++ b/Build-tools/my_md5sum @@ -10,10 +10,21 @@ # Written by Matt Wagner # use strict; + +# +# Use local perl libraries first. 'unshift' adds to the front of @INC +# The local perl library dir hidden is $HOME/.perllibs on each build host +# +BEGIN +{ + my $homedir= $ENV{HOME}; + unshift (@INC, "$homedir/.perllibs"); +} + use Digest::MD5; use Getopt::Long; -my $VER= "1.1"; +my $VER= "1.2"; # # Strip the leading path info off the program name ($0). We want 'my_md5sum' From 62a6733e4ea237bec13e0e8c5c636d7a23343afe Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 30 Jun 2004 15:41:35 +0200 Subject: [PATCH 04/12] Fix for BUG#4326 "Replicated LOAD DATA INFILE show nothing in processlist on slave": we now report in SHOW PROCESSLIST that we are writing to the temp files or loading the table. When we are writing to the tmp file: | 3 | system user | | | Connect | 6 | Making temp file /tmp/SQL_LOAD-2-1-2.data | and when we are actually loading the .data temp file into the table: | 3 | system user | | test | Connect | 2 | | LOAD DATA INFILE '/tmp/SQL_LOAD-2-1-2.data' INTO TABLE `t` <...> | sql/log_event.cc: Replication of LOAD DATA INFILE: we now report in SHOW PROCESSLIST that we are creating the temp files or loading the table. Plus removing a line which had a comment "should not be needed" and a guarding assertion which we have never heard fail (and logic says it should not fail). --- sql/log_event.cc | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index f94056694cc..3e1544adf14 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1968,10 +1968,10 @@ end: int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, bool use_rli_only_for_errors) { + char *load_data_query= 0; init_sql_alloc(&thd->mem_root, thd->variables.query_alloc_block_size, 0); thd->db= (char*) rewrite_db(db); DBUG_ASSERT(thd->query == 0); - thd->query = 0; // Should not be needed clear_all_errors(thd, rli); if (!use_rli_only_for_errors) @@ -2024,6 +2024,19 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, { char llbuff[22]; enum enum_duplicates handle_dup; + /* + Make a simplified LOAD DATA INFILE query, for the information of the + user in SHOW PROCESSLIST. Note that db is known in the 'db' column. + */ + if ((load_data_query= (char *) my_alloca(18 + strlen(fname) + 14 + + strlen(tables.real_name) + 8))) + { + thd->query_length= (uint)(strxmov(load_data_query, + "LOAD DATA INFILE '", fname, + "' INTO TABLE `", tables.real_name, + "` <...>", NullS) - load_data_query); + thd->query= load_data_query; + } if (sql_ex.opt_flags & REPLACE_FLAG) handle_dup= DUP_REPLACE; else if (sql_ex.opt_flags & IGNORE_FLAG) @@ -2103,8 +2116,14 @@ Slave: load data infile on table '%s' at log position %s in log \ } thd->net.vio = 0; - thd->db= 0; // prevent db from being freed + VOID(pthread_mutex_lock(&LOCK_thread_count)); + thd->db= 0; + thd->query= 0; + thd->query_length= 0; + VOID(pthread_mutex_unlock(&LOCK_thread_count)); close_thread_tables(thd); + if (load_data_query) + my_afree(load_data_query); if (thd->query_error) { /* this err/sql_errno code is copy-paste from send_error() */ @@ -2326,7 +2345,7 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) int Create_file_log_event::exec_event(struct st_relay_log_info* rli) { - char fname_buf[FN_REFLEN+10]; + char proc_info[17+FN_REFLEN+10], *fname_buf= proc_info+17; char *p; int fd = -1; IO_CACHE file; @@ -2335,6 +2354,8 @@ int Create_file_log_event::exec_event(struct st_relay_log_info* rli) bzero((char*)&file, sizeof(file)); p = slave_load_file_stem(fname_buf, file_id, server_id); strmov(p, ".info"); // strmov takes less code than memcpy + strnmov(proc_info, "Making temp file ", 17); // no end 0 + thd->proc_info= proc_info; if ((fd = my_open(fname_buf, O_WRONLY|O_CREAT|O_BINARY|O_TRUNC, MYF(MY_WME))) < 0 || init_io_cache(&file, fd, IO_SIZE, WRITE_CACHE, (my_off_t)0, 0, @@ -2376,6 +2397,7 @@ err: end_io_cache(&file); if (fd >= 0) my_close(fd, MYF(0)); + thd->proc_info= 0; return error ? 1 : Log_event::exec_event(rli); } @@ -2392,12 +2414,14 @@ int Delete_file_log_event::exec_event(struct st_relay_log_info* rli) int Append_block_log_event::exec_event(struct st_relay_log_info* rli) { - char fname[FN_REFLEN+10]; + char proc_info[17+FN_REFLEN+10], *fname= proc_info+17; char *p= slave_load_file_stem(fname, file_id, server_id); int fd; int error = 1; memcpy(p, ".data", 6); + strnmov(proc_info, "Making temp file ", 17); // no end 0 + thd->proc_info= proc_info; if ((fd = my_open(fname, O_WRONLY|O_APPEND|O_BINARY, MYF(MY_WME))) < 0) { slave_print_error(rli,my_errno, "Error in Append_block event: could not open file '%s'", fname); @@ -2413,6 +2437,7 @@ int Append_block_log_event::exec_event(struct st_relay_log_info* rli) err: if (fd >= 0) my_close(fd, MYF(0)); + thd->proc_info= 0; return error ? error : Log_event::exec_event(rli); } From b30cd30a662762f7823749bd56d2dc7c67b330ce Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 2 Jul 2004 19:20:30 +0200 Subject: [PATCH 05/12] Fixing a bug in mysqltest.c: if a command has a comment at the end of line, like: error 2002 ; # this is error 2002 then the parsing of comment should not make mysqltest forget about the value of expected error. Reason it forgot it (so the next query caused the test to fail) is that internally the above line is 2 queries. client/mysqltest.c: if a command has a comment at the end of line, like: error 2002 ; # this is error 2002 then the parsing of comment should not make mysqltest forget about the value of expected error. --- client/mysqltest.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 68b9dd505b2..2ec07692a4d 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1817,13 +1817,6 @@ int read_query(struct st_query** q_ptr) q->record_file[0] = 0; q->require_file=0; q->first_word_len = 0; - memcpy((gptr) q->expected_errno, (gptr) global_expected_errno, - sizeof(global_expected_errno)); - q->expected_errors=global_expected_errors; - q->abort_on_error = global_expected_errno[0] == 0; - bzero((gptr) global_expected_errno,sizeof(global_expected_errno)); - global_expected_errors=0; - q->type = Q_UNKNOWN; q->query_buf=q->query=0; if (read_line(read_query_buf, sizeof(read_query_buf))) @@ -1832,8 +1825,16 @@ int read_query(struct st_query** q_ptr) if (*p == '#') { q->type = Q_COMMENT; + /* This goto is to avoid losing the "expected error" info. */ + goto end; } - else if (p[0] == '-' && p[1] == '-') + memcpy((gptr) q->expected_errno, (gptr) global_expected_errno, + sizeof(global_expected_errno)); + q->expected_errors=global_expected_errors; + q->abort_on_error = global_expected_errno[0] == 0; + bzero((gptr) global_expected_errno,sizeof(global_expected_errno)); + global_expected_errors=0; + if (p[0] == '-' && p[1] == '-') { q->type = Q_COMMENT_WITH_COMMAND; p+=2; /* To calculate first word */ @@ -1868,6 +1869,8 @@ int read_query(struct st_query** q_ptr) *p1 = 0; } } + +end: while (*p && my_isspace(charset_info,*p)) p++; if (!(q->query_buf=q->query=my_strdup(p,MYF(MY_WME)))) From bdb3460fede3bf71416aca23b5b5490a87fe5097 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 5 Jul 2004 19:07:26 +0200 Subject: [PATCH 06/12] Windows-specific: Fix for BUG#4375 "Windows specific directories are copied during replication": in the Windows version of my_dir(), do not show hidden or system files which Windows sometimes creates in the root directory of drive (like RECYCLER and SYSTEM VOLUME INFORMATION directories) (so this problem showed up only when the datadir was the root dir of a drive). This will make SHOW DATABASES display better, and will do no harm to MySQL. For example, DROP DATABASE will not miss some files, as MySQL creates no hidden or system files. mysys/my_lib.c: In my_dir(), do not show hidden or system files which Windows sometimes creates. --- mysys/my_lib.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 055e00d2efc..21c558ed489 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -461,6 +461,15 @@ MY_DIR *my_dir(const char *path, myf MyFlags) else finfo.mystat= NULL; + /* + Do not show hidden or system files which Windows sometimes creates. We + would need to see how this can be achieved with a Borland compiler. + */ +#ifndef __BORLANDC__ + if (attrib & (_A_HIDDEN | _A_SYSTEM)) + continue; +#endif + if (push_dynamic(dir_entries_storage, (gptr)&finfo)) goto error; From 2a64371e649666d54d66193bb52e4d430fe800b8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 5 Jul 2004 19:12:23 +0200 Subject: [PATCH 07/12] my_lib.c: more accurate comment mysys/my_lib.c: more accurate comment --- mysys/my_lib.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 21c558ed489..0207d9a3683 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -462,8 +462,10 @@ MY_DIR *my_dir(const char *path, myf MyFlags) finfo.mystat= NULL; /* - Do not show hidden or system files which Windows sometimes creates. We - would need to see how this can be achieved with a Borland compiler. + If the directory is the root directory of the drive, Windows sometimes + creates hidden or system files there (like RECYCLER); do not show + them. We would need to see how this can be achieved with a Borland + compiler. */ #ifndef __BORLANDC__ if (attrib & (_A_HIDDEN | _A_SYSTEM)) From fc3c71e9b6365ea1735aef3cc6ddb4dcbe19cff9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 7 Jul 2004 16:28:07 -0500 Subject: [PATCH 08/12] my_md5sum: Exit properly Build-tools/my_md5sum: Exit properly --- Build-tools/my_md5sum | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Build-tools/my_md5sum b/Build-tools/my_md5sum index 481a665af1a..f4ac2f7d674 100755 --- a/Build-tools/my_md5sum +++ b/Build-tools/my_md5sum @@ -24,7 +24,8 @@ BEGIN use Digest::MD5; use Getopt::Long; -my $VER= "1.2"; +my $VER= "1.3"; +my $EXIT= 0; # # Strip the leading path info off the program name ($0). We want 'my_md5sum' @@ -78,6 +79,9 @@ if ($opt_check) # Print an error message if they don't match, else print OK print "$checkfile: FAILED\n" if $digest ne $checksum; print "$checkfile: OK\n" if $digest eq $checksum; + + # Set the exit() status to non-zero if FAILED + $EXIT= 1 if $digest ne $checksum; } } # Else generate the MD5 digest to STDOUT @@ -91,6 +95,8 @@ else } } +exit($EXIT); + # # This routine generates the MD5 digest of a file From 85c57e7048362f91b42015f41cc9831673f288ee Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 8 Jul 2004 17:12:42 +0300 Subject: [PATCH 09/12] Fixed Bug#4451. According to C/C++ standards, enums should not be used out of their range. --- include/my_getopt.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/include/my_getopt.h b/include/my_getopt.h index 3b4551b445e..11ecc66fac3 100644 --- a/include/my_getopt.h +++ b/include/my_getopt.h @@ -16,8 +16,17 @@ C_MODE_START -enum get_opt_var_type { GET_NO_ARG, GET_BOOL, GET_INT, GET_UINT, GET_LONG, - GET_ULONG, GET_LL, GET_ULL, GET_STR, GET_STR_ALLOC }; +#define GET_NO_ARG 1 +#define GET_BOOL 2 +#define GET_INT 3 +#define GET_UINT 4 +#define GET_LONG 5 +#define GET_ULONG 6 +#define GET_LL 7 +#define GET_ULL 8 +#define GET_STR 9 +#define GET_STR_ALLOC 10 + enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; struct my_option @@ -28,7 +37,7 @@ struct my_option gptr *value; /* The variable value */ gptr *u_max_value; /* The user def. max variable value */ const char **str_values; /* Pointer to possible values */ - enum get_opt_var_type var_type; + ulong var_type; enum get_opt_arg_type arg_type; longlong def_value; /* Default value */ longlong min_value; /* Min allowed value */ From 8fe328f3a687669f58db8f5ab9063d9d7bffd09d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 8 Jul 2004 13:51:18 -0500 Subject: [PATCH 10/12] Do-compile: Added support for MD5 verification of file transfers Build-tools/Do-compile: Added support for MD5 verification of file transfers --- Build-tools/Do-compile | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Build-tools/Do-compile b/Build-tools/Do-compile index d79fd1f0b65..ecf5316c867 100755 --- a/Build-tools/Do-compile +++ b/Build-tools/Do-compile @@ -202,6 +202,17 @@ if ($opt_stage == 0) safe_cd($host); if ($opt_stage == 0 && ! $opt_use_old_distribution) { + $md5_result= safe_system("my_md5sum -c ${opt_distribution}.md5"); + + if ($md5_result != 0) + { + abort("MD5 failed for $opt_distribution!"); + } + else + { + info("SUCCESS: MD5 checks for $opt_distribution"); + } + safe_system("gunzip < $opt_distribution | $tar xf -"); # Fix file times; This is needed because the time for files may be @@ -320,6 +331,9 @@ if ($opt_stage <= 3) $tar_file=<$pwd/$host/mysql*.t*gz>; abort ("Could not find tarball!") unless ($tar_file); +# Generate the MD5 for the binary distribution +safe_system("my_md5sum $tar_file > ${tar_file}.md5}"); + # # Unpack the binary distribution # @@ -633,7 +647,10 @@ sub safe_system my($com,$res)=@_; print LOG "$com\n"; print "$host: $com\n" if ($opt_debug); - system("$com >> $log 2>&1") && abort("error: Couldn't execute command, error: " . ($? / 256)); + my $result= system("$com >> $log 2>&1"); + abort("error: Couldn't execute command, error: " . ($? / 256)) unless $result == 0; + + return $result; } sub check_system From 39d6bdfb73c0c22fb182b288712b42b0f4aaae67 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 8 Jul 2004 16:16:37 -0500 Subject: [PATCH 11/12] Do-compile: Call my_md5sum with path Build-tools/Do-compile: Call my_md5sum with path --- Build-tools/Do-compile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Build-tools/Do-compile b/Build-tools/Do-compile index ecf5316c867..40a5cf38121 100755 --- a/Build-tools/Do-compile +++ b/Build-tools/Do-compile @@ -202,7 +202,7 @@ if ($opt_stage == 0) safe_cd($host); if ($opt_stage == 0 && ! $opt_use_old_distribution) { - $md5_result= safe_system("my_md5sum -c ${opt_distribution}.md5"); + $md5_result= safe_system("./my_md5sum -c ${opt_distribution}.md5"); if ($md5_result != 0) { @@ -332,7 +332,7 @@ $tar_file=<$pwd/$host/mysql*.t*gz>; abort ("Could not find tarball!") unless ($tar_file); # Generate the MD5 for the binary distribution -safe_system("my_md5sum $tar_file > ${tar_file}.md5}"); +safe_system("./my_md5sum $tar_file > ${tar_file}.md5}"); # # Unpack the binary distribution From da4f3b371adf1249dfac74e546fd8cc42209bc27 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Jul 2004 02:03:19 +0300 Subject: [PATCH 12/12] Updated result sets (from 4.1) --- mysql-test/r/lowercase_table2.result | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/lowercase_table2.result b/mysql-test/r/lowercase_table2.result index d2283927789..929cedb2ee3 100644 --- a/mysql-test/r/lowercase_table2.result +++ b/mysql-test/r/lowercase_table2.result @@ -32,7 +32,7 @@ T1 ALTER TABLE T1 add b int; SHOW TABLES LIKE "T1"; Tables_in_test (T1) -t1 +T1 ALTER TABLE T1 RENAME T2; SHOW TABLES LIKE "T2"; Tables_in_test (T2) @@ -41,7 +41,7 @@ LOCK TABLE T2 WRITE; ALTER TABLE T2 drop b; SHOW TABLES LIKE "T2"; Tables_in_test (T2) -t2 +T2 UNLOCK TABLES; RENAME TABLE T2 TO T1; SHOW TABLES LIKE "T1";