From: Georgi Kodinov Date: June 4 2010 4:10pm Subject: bzr commit into mysql-trunk branch (Georgi.Kodinov:3045) List-Archive: http://lists.mysql.com/commits/110256 Message-Id: <20100604161040.2B7A372B993@unknown.localhost> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8168380367264896672==" --===============8168380367264896672== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/kgeorge/mysql/work/B52315-trunk-merge/ based on revid:luis.soares@stripped 3045 Georgi Kodinov 2010-06-04 [merge] merge added: mysql-test/include/mysqlhotcopy.inc mysql-test/r/mysqlhotcopy_archive.result mysql-test/r/mysqlhotcopy_myisam.result mysql-test/t/mysqlhotcopy_archive.test mysql-test/t/mysqlhotcopy_myisam.test modified: BUILD/SETUP.sh mysql-test/collections/default.experimental mysql-test/lib/mtr_misc.pl mysql-test/mysql-test-run.pl mysql-test/r/variables.result mysql-test/t/disabled.def mysql-test/t/variables.test sql/mysqld.cc sql/sql_class.h sql/sql_parse.cc sql/sys_vars.cc === modified file 'BUILD/SETUP.sh' --- a/BUILD/SETUP.sh 2010-05-31 09:18:27 +0000 +++ b/BUILD/SETUP.sh 2010-06-04 16:09:50 +0000 @@ -119,6 +119,9 @@ fi # Set flags for various build configurations. # Used in -valgrind builds +# Override -DFORCE_INIT_OF_VARS from debug_cflags. It enables the macro +# LINT_INIT(), which is only useful for silencing spurious warnings +# of static analysis tools. We want LINT_INIT() to be a no-op in Valgrind. valgrind_flags="-USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify " valgrind_flags="$valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max" # === modified file 'mysql-test/collections/default.experimental' --- a/mysql-test/collections/default.experimental 2010-06-01 12:31:37 +0000 +++ b/mysql-test/collections/default.experimental 2010-06-04 16:09:50 +0000 @@ -91,3 +91,5 @@ parts.partition_mgm_lc1_ndb parts.partition_mgm_lc2_ndb # joro : NDB tests marked as experimental as agreed with bochklin parts.partition_syntax_ndb # joro : NDB tests marked as experimental as agreed with bochklin parts.partition_value_ndb # joro : NDB tests marked as experimental as agreed with bochklin +main.mysqlhotcopy_myisam # horst: due to bug#54129 +main.mysqlhotcopy_archive # horst: due to bug#54129 === added file 'mysql-test/include/mysqlhotcopy.inc' --- a/mysql-test/include/mysqlhotcopy.inc 1970-01-01 00:00:00 +0000 +++ b/mysql-test/include/mysqlhotcopy.inc 2010-06-04 08:53:18 +0000 @@ -0,0 +1,121 @@ +# Test of mysqlhotcopy (perl script) +# Author: Horst Hunger +# Created: 2010-05-10 + +--source include/not_windows.inc +--source include/not_embedded.inc + +if ($MYSQLHOTCOPY) +{ + die due to missing mysqlhotcopy tool; +} + +let $MYSQLD_DATADIR= `SELECT @@datadir`; +--disable_warnings +DROP DATABASE IF EXISTS hotcopy_test; +--enable_warnings +CREATE DATABASE hotcopy_test; +USE hotcopy_test; +eval CREATE TABLE t1 (c1 int, c2 varchar(20)) ENGINE=$engine; +eval CREATE TABLE t2 (c1 int, c2 varchar(20)) ENGINE=$engine; +eval CREATE TABLE t3 (c1 int, c2 varchar(20)) ENGINE=$engine; + +INSERT INTO t1 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +INSERT INTO t2 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +INSERT INTO t3 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); + +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_test + +# backup into another database in the same directory +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save + +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save + +USE hotcopy_save; +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; + +# restore data into the original database with mysqlhotcopy +if(`SELECT engine= 'MyISAM' FROM information_schema.tables WHERE table_name='t1'`) +{ +USE hotcopy_test; +DELETE FROM t1; +SELECT * FROM t1; + +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --addtodest -S $MASTER_MYSOCK -u root hotcopy_save hotcopy_test + +USE hotcopy_save; +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; +} + +USE hotcopy_test; +DROP TABLE t2; +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_test + +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --addtodest -S $MASTER_MYSOCK -u root hotcopy_save hotcopy_test + +FLUSH TABLES; +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; + +# backup of db into a directory +USE hotcopy_test; +--replace_result $MASTER_MYSOCK MASTER_MYSOCK $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $MYSQLHOTCOPY --quiet -S $MASTER_MYSOCK -u root hotcopy_test $MYSQLTEST_VARDIR/tmp +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--list_files $MYSQLTEST_VARDIR/tmp/hotcopy_test +#--exec rm -rf $MYSQLTEST_VARDIR/tmp/hotcopy_test +--remove_files_wildcard $MYSQLTEST_VARDIR/tmp/hotcopy_test * +--rmdir $MYSQLTEST_VARDIR/tmp/hotcopy_test + +# backup without full index files +# reproduction of bug#53556, "--list_files" shows MYI files, which is wrong. +DROP DATABASE hotcopy_save; +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --noindices -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save + +# test of option "allowold" +DROP DATABASE hotcopy_save; +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--error 9,2304 +--exec $MYSQLHOTCOPY --quiet -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --allowold -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save + +# test of option "keepold" +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --keepold -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save_old +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_save + +# test of option "suffix" +--replace_result $MASTER_MYSOCK MASTER_MYSOCK +--exec $MYSQLHOTCOPY --quiet --suffix=_cpy -S $MASTER_MYSOCK -u root hotcopy_test +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--list_files $MYSQLD_DATADIR/hotcopy_test_cpy +DROP DATABASE hotcopy_test_cpy; + +DROP DATABASE hotcopy_test; +DROP DATABASE hotcopy_save; +DROP DATABASE hotcopy_save_old; + === modified file 'mysql-test/lib/mtr_misc.pl' --- a/mysql-test/lib/mtr_misc.pl 2009-11-24 08:12:48 +0000 +++ b/mysql-test/lib/mtr_misc.pl 2010-06-03 08:31:26 +0000 @@ -149,6 +149,28 @@ sub mtr_exe_maybe_exists (@) { # # NOTE! More specific paths should be given before less specific. +# +sub mtr_pl_maybe_exists (@) { + my @path= @_; + + map {$_.= ".pl"} @path if IS_WINDOWS; + foreach my $path ( @path ) + { + if(IS_WINDOWS) + { + return $path if -f $path; + } + else + { + return $path if -x $path; + } + } + return ""; +} + + +# +# NOTE! More specific paths should be given before less specific. # For example /client/debug should be listed before /client # sub mtr_exe_exists (@) { === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-05-24 18:57:25 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-06-04 16:09:50 +0000 @@ -2111,6 +2111,15 @@ sub environment_setup { "$basedir/myisam/myisampack")); # ---------------------------------------------------- + # mysqlhotcopy + # ---------------------------------------------------- + my $mysqlhotcopy= + mtr_pl_maybe_exists("$basedir/scripts/mysqlhotcopy"); + # Since mysqltest interprets the real path as "false" in an if, + # use 1 ("true") to indicate "not exists" so it can be tested for + $ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy || 1; + + # ---------------------------------------------------- # perror # ---------------------------------------------------- my $exe_perror= mtr_exe_exists(vs_config_dirs('extra', 'perror'), === added file 'mysql-test/r/mysqlhotcopy_archive.result' --- a/mysql-test/r/mysqlhotcopy_archive.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysqlhotcopy_archive.result 2010-06-03 08:31:26 +0000 @@ -0,0 +1,118 @@ +DROP DATABASE IF EXISTS hotcopy_test; +CREATE DATABASE hotcopy_test; +USE hotcopy_test; +CREATE TABLE t1 (c1 int, c2 varchar(20)) ENGINE=archive; +CREATE TABLE t2 (c1 int, c2 varchar(20)) ENGINE=archive; +CREATE TABLE t3 (c1 int, c2 varchar(20)) ENGINE=archive; +INSERT INTO t1 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +INSERT INTO t2 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +INSERT INTO t3 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +USE hotcopy_save; +SELECT * FROM t1; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t2; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t3; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +USE hotcopy_test; +DROP TABLE t2; +db.opt +t1.ARZ +t1.frm +t3.ARZ +t3.frm +FLUSH TABLES; +SELECT * FROM t1; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t2; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t3; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +USE hotcopy_test; +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +DROP DATABASE hotcopy_save; +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +DROP DATABASE hotcopy_save; +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +db.opt +t1.ARZ +t1.frm +t2.ARZ +t2.frm +t3.ARZ +t3.frm +DROP DATABASE hotcopy_test_cpy; +DROP DATABASE hotcopy_test; +DROP DATABASE hotcopy_save; +DROP DATABASE hotcopy_save_old; === added file 'mysql-test/r/mysqlhotcopy_myisam.result' --- a/mysql-test/r/mysqlhotcopy_myisam.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysqlhotcopy_myisam.result 2010-06-03 08:31:26 +0000 @@ -0,0 +1,164 @@ +DROP DATABASE IF EXISTS hotcopy_test; +CREATE DATABASE hotcopy_test; +USE hotcopy_test; +CREATE TABLE t1 (c1 int, c2 varchar(20)) ENGINE=MyISAM; +CREATE TABLE t2 (c1 int, c2 varchar(20)) ENGINE=MyISAM; +CREATE TABLE t3 (c1 int, c2 varchar(20)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +INSERT INTO t2 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +INSERT INTO t3 VALUES (1,'aaaaaaaaaaaaaaaaaaaa'),(2, 'bbbbbbbbbbbbbbbbbbbbbbb'); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 2 +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +USE hotcopy_save; +SELECT * FROM t1; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t2; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t3; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +USE hotcopy_test; +DELETE FROM t1; +SELECT * FROM t1; +c1 c2 +USE hotcopy_save; +SELECT * FROM t1; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t2; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t3; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +USE hotcopy_test; +DROP TABLE t2; +db.opt +t1.MYD +t1.MYI +t1.frm +t3.MYD +t3.MYI +t3.frm +FLUSH TABLES; +SELECT * FROM t1; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t2; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +SELECT * FROM t3; +c1 c2 +1 aaaaaaaaaaaaaaaaaaaa +2 bbbbbbbbbbbbbbbbbbbb +USE hotcopy_test; +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +DROP DATABASE hotcopy_save; +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +DROP DATABASE hotcopy_save; +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +db.opt +t1.MYD +t1.MYI +t1.frm +t2.MYD +t2.MYI +t2.frm +t3.MYD +t3.MYI +t3.frm +DROP DATABASE hotcopy_test_cpy; +DROP DATABASE hotcopy_test; +DROP DATABASE hotcopy_save; +DROP DATABASE hotcopy_save_old; === modified file 'mysql-test/r/variables.result' --- a/mysql-test/r/variables.result 2010-04-27 09:58:21 +0000 +++ b/mysql-test/r/variables.result 2010-06-04 16:09:50 +0000 @@ -1026,6 +1026,13 @@ hostname # # Test 'myisam_mmap_size' option is not dynamic SET @@myisam_mmap_size= 500M; ERROR HY000: Variable 'myisam_mmap_size' is a read only variable +# +# Bug #52315: utc_date() crashes when system time > year 2037 +# +SET TIMESTAMP=2*1024*1024*1024; +#Should not crash +SELECT UTC_DATE(); +SET TIMESTAMP=DEFAULT; End of 5.0 tests set join_buffer_size=1; Warnings: === modified file 'mysql-test/t/disabled.def' --- a/mysql-test/t/disabled.def 2010-05-31 09:18:27 +0000 +++ b/mysql-test/t/disabled.def 2010-06-04 16:09:50 +0000 @@ -14,3 +14,6 @@ query_cache_28249 : Bug#43861 200 innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode innodb : Bug#49396 2009-12-03 test fails in embedded mode plugin_load : Bug#42144 2009-12-21 alik plugin_load fails +partition_innodb_plugin : Bug#53307 2010-04-30 VasilDimov valgrind warnings +main.mysqlhotcopy_myisam : bug#54129 2010-06-04 Horst +main.mysqlhotcopy_archive: bug#54129 2010-06-04 Horst === added file 'mysql-test/t/mysqlhotcopy_archive.test' --- a/mysql-test/t/mysqlhotcopy_archive.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysqlhotcopy_archive.test 2010-06-03 08:31:26 +0000 @@ -0,0 +1,8 @@ +# Test of mysqlhotcopy (perl script) +# Author: Horst Hunger +# Created: 2010-05-10 + +--source include/have_archive.inc +let $engine= archive; +--source include/mysqlhotcopy.inc +--exit === added file 'mysql-test/t/mysqlhotcopy_myisam.test' --- a/mysql-test/t/mysqlhotcopy_myisam.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysqlhotcopy_myisam.test 2010-06-03 08:31:26 +0000 @@ -0,0 +1,7 @@ +# Test of mysqlhotcopy (perl script) +# Author: Horst Hunger +# Created: 2010-05-10 + +let $engine= MyISAM; +--source include/mysqlhotcopy.inc +--exit === modified file 'mysql-test/t/variables.test' --- a/mysql-test/t/variables.test 2010-04-03 17:35:51 +0000 +++ b/mysql-test/t/variables.test 2010-06-04 16:09:50 +0000 @@ -773,6 +773,21 @@ show variables like 'hostname'; --echo # Test 'myisam_mmap_size' option is not dynamic --error ER_INCORRECT_GLOBAL_LOCAL_VAR SET @@myisam_mmap_size= 500M; + + +--echo # +--echo # Bug #52315: utc_date() crashes when system time > year 2037 +--echo # + +--error 0, ER_UNKNOWN_ERROR +SET TIMESTAMP=2*1024*1024*1024; +--echo #Should not crash +--disable_result_log +SELECT UTC_DATE(); +--enable_result_log +SET TIMESTAMP=DEFAULT; + + --echo End of 5.0 tests # === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-06-02 10:01:26 +0000 +++ b/sql/mysqld.cc 2010-06-04 16:09:50 +0000 @@ -3362,6 +3362,13 @@ static int init_common_variables() max_system_variables.pseudo_thread_id= (ulong)~0; server_start_time= flush_status_time= my_time(0); + /* TODO: remove this when my_time_t is 64 bit compatible */ + if (server_start_time >= (time_t) MY_TIME_T_MAX) + { + sql_print_error("This MySQL server doesn't support dates later then 2038"); + return 1; + } + rpl_filter= new Rpl_filter; binlog_filter= new Rpl_filter; if (!rpl_filter || !binlog_filter) === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2010-05-23 20:41:18 +0000 +++ b/sql/sql_class.h 2010-06-04 16:09:50 +0000 @@ -2358,6 +2358,11 @@ public: start_time= user_time= t; start_utime= utime_after_lock= my_micro_time(); } + /*TODO: this will be obsolete when we have support for 64 bit my_time_t */ + inline bool is_valid_time() + { + return (start_time < (time_t) MY_TIME_T_MAX); + } void set_time_after_lock() { utime_after_lock= my_micro_time(); } ulonglong current_utime() { return my_micro_time(); } inline ulonglong found_rows(void) === modified file 'sql/sql_parse.cc' --- a/sql/sql_parse.cc 2010-06-01 12:31:37 +0000 +++ b/sql/sql_parse.cc 2010-06-04 16:09:50 +0000 @@ -887,6 +887,18 @@ bool dispatch_command(enum enum_server_c thd->enable_slow_log= TRUE; thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */ thd->set_time(); + if (!thd->is_valid_time()) + { + /* + If the time has got past 2038 we need to shut this server down + We do this by making sure every command is a shutdown and we + have enough privileges to shut the server down + + TODO: remove this when we have full 64 bit my_time_t support + */ + thd->security_ctx->master_access|= SHUTDOWN_ACL; + command= COM_SHUTDOWN; + } thd->set_query_id(get_query_id()); if (!(server_command_flags[command] & CF_SKIP_QUERY_ID)) next_query_id(); === modified file 'sql/sys_vars.cc' --- a/sql/sys_vars.cc 2010-04-27 09:58:21 +0000 +++ b/sql/sys_vars.cc 2010-06-04 16:09:50 +0000 @@ -2321,6 +2321,28 @@ static ulonglong read_timestamp(THD *thd { return (ulonglong) thd->start_time; } + + +static bool check_timestamp(sys_var *self, THD *thd, set_var *var) +{ + time_t val; + + if (!var->value) + return FALSE; + + var->save_result.ulonglong_value= var->value->val_int(); + val= (time_t) var->save_result.ulonglong_value; + if (val < (time_t) MY_TIME_T_MIN || val > (time_t) MY_TIME_T_MAX) + { + my_message(ER_UNKNOWN_ERROR, + "This version of MySQL doesn't support dates later than 2038", + MYF(0)); + return TRUE; + } + return FALSE; +} + + static Sys_var_session_special Sys_timestamp( "timestamp", "Set the time for this client", sys_var::ONLY_SESSION, NO_CMD_LINE, --===============8168380367264896672== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/georgi.kodinov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: georgi.kodinov@stripped\ # usx33mwczmow3i5e # target_branch: file:///Users/kgeorge/mysql/work/B52315-trunk-merge/ # testament_sha1: d1b3486d1f6a280873e1018b28452aeaadae5100 # timestamp: 2010-06-04 19:10:38 +0300 # source_branch: file:///Users/kgeorge/mysql/work/B52315-5.1-bugteam/ # base_revision_id: luis.soares@stripped\ # dlinjjhtu4cqq26a # # Begin bundle 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 --===============8168380367264896672==--