2675 Gleb Shchepa 2008-06-19 [merge]
auto merge with local tree (bug #37076)
modified:
mysql-test/extra/rpl_tests/rpl_row_basic.test
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result
sql/field.h
2674 Georgi Kodinov 2008-06-18 [merge]
merge of 6.0
modified:
mysql-test/r/repair.result
scripts/make_binary_distribution.sh
sql/sql_table.cc
=== modified file 'mysql-test/extra/rpl_tests/rpl_row_basic.test'
--- a/mysql-test/extra/rpl_tests/rpl_row_basic.test 2007-12-12 19:12:29 +0000
+++ b/mysql-test/extra/rpl_tests/rpl_row_basic.test 2008-06-19 13:02:04 +0000
@@ -265,6 +265,22 @@ eval SELECT "$last_error" AS Last_SQL_Er
enable_query_log;
query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+# BUG#37076: TIMESTAMP/DATETIME values are not replicated correctly
+# between machines with mixed endiannes
+# (regression test)
+
+--echo **** Test for BUG#37076 ****
+--echo **** On Master ****
+connection master;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a TIMESTAMP, b DATETIME, c DATE);
+INSERT INTO t1 VALUES(
+ '2005-11-14 01:01:01', '2005-11-14 01:01:02', '2005-11-14');
+
+--echo **** On Slave ****
+sync_slave_with_master slave;
+SELECT * FROM t1;
+
#
# cleanup
#
=== modified file 'mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result'
--- a/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2007-12-12 19:12:29 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2008-06-19 13:02:04 +0000
@@ -440,4 +440,14 @@ Last_SQL_Error
0
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
COUNT(*) 0
+**** Test for BUG#37076 ****
+**** On Master ****
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a TIMESTAMP, b DATETIME, c DATE);
+INSERT INTO t1 VALUES(
+'2005-11-14 01:01:01', '2005-11-14 01:01:02', '2005-11-14');
+**** On Slave ****
+SELECT * FROM t1;
+a b c
+2005-11-14 01:01:01 2005-11-14 01:01:02 2005-11-14
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
=== modified file 'mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result'
--- a/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2007-12-12 19:12:29 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2008-06-19 13:02:04 +0000
@@ -440,4 +440,14 @@ Last_SQL_Error
0
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
COUNT(*) 0
+**** Test for BUG#37076 ****
+**** On Master ****
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a TIMESTAMP, b DATETIME, c DATE);
+INSERT INTO t1 VALUES(
+'2005-11-14 01:01:01', '2005-11-14 01:01:02', '2005-11-14');
+**** On Slave ****
+SELECT * FROM t1;
+a b c
+2005-11-14 01:01:01 2005-11-14 01:01:02 2005-11-14
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
=== modified file 'mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result 2008-02-11 16:11:22 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result 2008-06-19 13:30:10 +0000
@@ -440,4 +440,14 @@ Last_SQL_Error
0
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
COUNT(*) 0
+**** Test for BUG#37076 ****
+**** On Master ****
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a TIMESTAMP, b DATETIME, c DATE);
+INSERT INTO t1 VALUES(
+'2005-11-14 01:01:01', '2005-11-14 01:01:02', '2005-11-14');
+**** On Slave ****
+SELECT * FROM t1;
+a b c
+2005-11-14 01:01:01 2005-11-14 01:01:02 2005-11-14
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
=== modified file 'sql/field.h'
--- a/sql/field.h 2008-05-22 18:40:15 +0000
+++ b/sql/field.h 2008-06-19 13:30:10 +0000
@@ -566,6 +566,77 @@ private:
*/
virtual int do_save_field_metadata(uchar *metadata_ptr)
{ return 0; }
+
+protected:
+ /*
+ Helper function to pack()/unpack() int32 values
+ */
+ static void handle_int32(uchar *to, const uchar *from,
+ bool low_byte_first_from, bool low_byte_first_to)
+ {
+ int32 val;
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first_from)
+ val = sint4korr(from);
+ else
+#endif
+ longget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first_to)
+ int4store(to, val);
+ else
+#endif
+ longstore(to, val);
+ }
+
+ /*
+ Helper function to pack()/unpack() int64 values
+ */
+ static void handle_int64(uchar* to, const uchar *from,
+ bool low_byte_first_from, bool low_byte_first_to)
+ {
+ int64 val;
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first_from)
+ val = sint8korr(from);
+ else
+#endif
+ longlongget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first_to)
+ int8store(to, val);
+ else
+#endif
+ longlongstore(to, val);
+ }
+
+ uchar *pack_int32(uchar *to, const uchar *from, bool low_byte_first_to)
+ {
+ handle_int32(to, from, table->s->db_low_byte_first, low_byte_first_to);
+ return to + sizeof(int32);
+ }
+
+ const uchar *unpack_int32(uchar* to, const uchar *from,
+ bool low_byte_first_from)
+ {
+ handle_int32(to, from, low_byte_first_from, table->s->db_low_byte_first);
+ return from + sizeof(int32);
+ }
+
+ uchar *pack_int64(uchar* to, const uchar *from, bool low_byte_first_to)
+ {
+ handle_int64(to, from, table->s->db_low_byte_first, low_byte_first_to);
+ return to + sizeof(int64);
+ }
+
+ const uchar *unpack_int64(uchar* to, const uchar *from,
+ bool low_byte_first_from)
+ {
+ handle_int64(to, from, low_byte_first_from, table->s->db_low_byte_first);
+ return from + sizeof(int64);
+ }
};
@@ -953,43 +1024,16 @@ public:
void sql_type(String &str) const;
uint32 max_display_length() { return MY_INT32_NUM_DECIMAL_DIGITS; }
virtual uchar *pack(uchar* to, const uchar *from,
- uint max_length, bool low_byte_first)
+ uint max_length __attribute__((unused)),
+ bool low_byte_first)
{
- int32 val;
-#ifdef WORDS_BIGENDIAN
- if (table->s->db_low_byte_first)
- val = sint4korr(from);
- else
-#endif
- longget(val, from);
-
-#ifdef WORDS_BIGENDIAN
- if (low_byte_first)
- int4store(to, val);
- else
-#endif
- longstore(to, val);
- return to + sizeof(val);
+ return pack_int32(to, from, low_byte_first);
}
-
virtual const uchar *unpack(uchar* to, const uchar *from,
- uint param_data, bool low_byte_first)
+ uint param_data __attribute__((unused)),
+ bool low_byte_first)
{
- int32 val;
-#ifdef WORDS_BIGENDIAN
- if (low_byte_first)
- val = sint4korr(from);
- else
-#endif
- longget(val, from);
-
-#ifdef WORDS_BIGENDIAN
- if (table->s->db_low_byte_first)
- int4store(to, val);
- else
-#endif
- longstore(to, val);
- return from + sizeof(val);
+ return unpack_int32(to, from, low_byte_first);
}
};
@@ -1034,43 +1078,16 @@ public:
bool can_be_compared_as_longlong() const { return TRUE; }
uint32 max_display_length() { return 20; }
virtual uchar *pack(uchar* to, const uchar *from,
- uint max_length, bool low_byte_first)
+ uint max_length __attribute__((unused)),
+ bool low_byte_first)
{
- int64 val;
-#ifdef WORDS_BIGENDIAN
- if (table->s->db_low_byte_first)
- val = sint8korr(from);
- else
-#endif
- longlongget(val, from);
-
-#ifdef WORDS_BIGENDIAN
- if (low_byte_first)
- int8store(to, val);
- else
-#endif
- longlongstore(to, val);
- return to + sizeof(val);
+ return pack_int64(to, from, low_byte_first);
}
-
virtual const uchar *unpack(uchar* to, const uchar *from,
- uint param_data, bool low_byte_first)
+ uint param_data __attribute__((unused)),
+ bool low_byte_first)
{
- int64 val;
-#ifdef WORDS_BIGENDIAN
- if (low_byte_first)
- val = sint8korr(from);
- else
-#endif
- longlongget(val, from);
-
-#ifdef WORDS_BIGENDIAN
- if (table->s->db_low_byte_first)
- int8store(to, val);
- else
-#endif
- longlongstore(to, val);
- return from + sizeof(val);
+ return unpack_int64(to, from, low_byte_first);
}
};
#endif
@@ -1244,6 +1261,17 @@ public:
bool get_date(MYSQL_TIME *ltime,uint fuzzydate);
bool get_time(MYSQL_TIME *ltime);
timestamp_auto_set_type get_auto_set_type() const;
+ uchar *pack(uchar *to, const uchar *from,
+ uint max_length __attribute__((unused)), bool low_byte_first)
+ {
+ return pack_int32(to, from, low_byte_first);
+ }
+ const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data __attribute__((unused)),
+ bool low_byte_first)
+ {
+ return unpack_int32(to, from, low_byte_first);
+ }
};
@@ -1298,6 +1326,17 @@ public:
void sql_type(String &str) const;
bool can_be_compared_as_longlong() const { return TRUE; }
bool zero_pack() const { return 1; }
+ uchar *pack(uchar* to, const uchar *from,
+ uint max_length __attribute__((unused)), bool low_byte_first)
+ {
+ return pack_int32(to, from, low_byte_first);
+ }
+ const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data __attribute__((unused)),
+ bool low_byte_first)
+ {
+ return unpack_int32(to, from, low_byte_first);
+ }
};
@@ -1411,6 +1450,17 @@ public:
bool zero_pack() const { return 1; }
bool get_date(MYSQL_TIME *ltime,uint fuzzydate);
bool get_time(MYSQL_TIME *ltime);
+ uchar *pack(uchar* to, const uchar *from,
+ uint max_length __attribute__((unused)), bool low_byte_first)
+ {
+ return pack_int64(to, from, low_byte_first);
+ }
+ const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data __attribute__((unused)),
+ bool low_byte_first)
+ {
+ return unpack_int64(to, from, low_byte_first);
+ }
};
| Thread |
|---|
| • bzr push into mysql-6.0 branch (gshchepa:2674 to 2675) Bug#37076 | Gleb Shchepa | 19 Jun |