Commit 5af5954a authored by gkodinov/kgeorge@magare.gmz's avatar gkodinov/kgeorge@magare.gmz

Merge magare.gmz:/home/kgeorge/mysql/work/B29536-5.0-opt

into  magare.gmz:/home/kgeorge/mysql/work/B29536-5.1-opt
parents 46c29c87 117c3ff9
...@@ -105,3 +105,21 @@ t n ...@@ -105,3 +105,21 @@ t n
2005-01-01 08:00:00 17 2005-01-01 08:00:00 17
drop table t1, t2; drop table t1, t2;
set global time_zone= @my_time_zone; set global time_zone= @my_time_zone;
End of 4.1 tests
CREATE TABLE t1 (a INT, b TIMESTAMP);
INSERT INTO t1 VALUES (1, NOW());
SET @@session.time_zone='Japan';
UPDATE t1 SET b= '1970-01-01 08:59:59' WHERE a= 1;
Warnings:
Warning 1264 Out of range value adjusted for column 'b' at row 1
SELECT * FROM t1 ORDER BY a;
a b
1 0000-00-00 00:00:00
SET @@session.time_zone='Japan';
SELECT * FROM t1 ORDER BY a;
a b
1 0000-00-00 00:00:00
SET @@session.time_zone = default;
DROP TABLE t1;
SET @@session.time_zone = default;
End of 5.0 tests
...@@ -140,3 +140,30 @@ sync_slave_with_master; ...@@ -140,3 +140,30 @@ sync_slave_with_master;
# Restore original timezone # Restore original timezone
connection master; connection master;
set global time_zone= @my_time_zone; set global time_zone= @my_time_zone;
--echo End of 4.1 tests
#
# Bug #29536: timestamp inconsistent in replication around 1970
#
connection master;
CREATE TABLE t1 (a INT, b TIMESTAMP);
INSERT INTO t1 VALUES (1, NOW());
SET @@session.time_zone='Japan';
UPDATE t1 SET b= '1970-01-01 08:59:59' WHERE a= 1;
SELECT * FROM t1 ORDER BY a;
sync_slave_with_master;
SET @@session.time_zone='Japan';
# must procdure the same result as the SELECT on the master
SELECT * FROM t1 ORDER BY a;
SET @@session.time_zone = default;
connection master;
DROP TABLE t1;
SET @@session.time_zone = default;
--echo End of 5.0 tests
...@@ -4672,6 +4672,7 @@ longlong Field_timestamp::val_int(void) ...@@ -4672,6 +4672,7 @@ longlong Field_timestamp::val_int(void)
MYSQL_TIME time_tmp; MYSQL_TIME time_tmp;
THD *thd= table ? table->in_use : current_thd; THD *thd= table ? table->in_use : current_thd;
thd->time_zone_used= 1;
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table && table->s->db_low_byte_first) if (table && table->s->db_low_byte_first)
temp=uint4korr(ptr); temp=uint4korr(ptr);
...@@ -4683,7 +4684,6 @@ longlong Field_timestamp::val_int(void) ...@@ -4683,7 +4684,6 @@ longlong Field_timestamp::val_int(void)
return(0); /* purecov: inspected */ return(0); /* purecov: inspected */
thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, (my_time_t)temp); thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, (my_time_t)temp);
thd->time_zone_used= 1;
return time_tmp.year * LL(10000000000) + time_tmp.month * LL(100000000) + return time_tmp.year * LL(10000000000) + time_tmp.month * LL(100000000) +
time_tmp.day * 1000000L + time_tmp.hour * 10000L + time_tmp.day * 1000000L + time_tmp.hour * 10000L +
...@@ -4703,6 +4703,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr) ...@@ -4703,6 +4703,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
to= (char*) val_buffer->ptr(); to= (char*) val_buffer->ptr();
val_buffer->length(field_length); val_buffer->length(field_length);
thd->time_zone_used= 1;
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table && table->s->db_low_byte_first) if (table && table->s->db_low_byte_first)
temp=uint4korr(ptr); temp=uint4korr(ptr);
...@@ -4718,7 +4719,6 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr) ...@@ -4718,7 +4719,6 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
val_buffer->set_charset(&my_charset_bin); // Safety val_buffer->set_charset(&my_charset_bin); // Safety
thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp,(my_time_t)temp); thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp,(my_time_t)temp);
thd->time_zone_used= 1;
temp= time_tmp.year % 100; temp= time_tmp.year % 100;
if (temp < YY_PART_YEAR - 1) if (temp < YY_PART_YEAR - 1)
...@@ -4768,6 +4768,7 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate) ...@@ -4768,6 +4768,7 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate)
{ {
long temp; long temp;
THD *thd= table ? table->in_use : current_thd; THD *thd= table ? table->in_use : current_thd;
thd->time_zone_used= 1;
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table && table->s->db_low_byte_first) if (table && table->s->db_low_byte_first)
temp=uint4korr(ptr); temp=uint4korr(ptr);
...@@ -4783,7 +4784,6 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate) ...@@ -4783,7 +4784,6 @@ bool Field_timestamp::get_date(MYSQL_TIME *ltime, uint fuzzydate)
else else
{ {
thd->variables.time_zone->gmt_sec_to_TIME(ltime, (my_time_t)temp); thd->variables.time_zone->gmt_sec_to_TIME(ltime, (my_time_t)temp);
thd->time_zone_used= 1;
} }
return 0; return 0;
} }
......
...@@ -263,11 +263,11 @@ my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, my_bool *in_dst_time_ ...@@ -263,11 +263,11 @@ my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, my_bool *in_dst_time_
my_time_t timestamp; my_time_t timestamp;
*in_dst_time_gap= 0; *in_dst_time_gap= 0;
thd->time_zone_used= 1;
timestamp= thd->variables.time_zone->TIME_to_gmt_sec(t, in_dst_time_gap); timestamp= thd->variables.time_zone->TIME_to_gmt_sec(t, in_dst_time_gap);
if (timestamp) if (timestamp)
{ {
thd->time_zone_used= 1;
return timestamp; return timestamp;
} }
......
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