summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mats@romeo.(none)>2006-12-11 13:05:11 +0100
committerunknown <mats@romeo.(none)>2006-12-11 13:05:11 +0100
commit0bcf78df8adb729d2d90961438d7cab7cd9bd019 (patch)
tree425a483a54c7257b8be40c9abbb90fa4c301c1e9
parentd9993548a992d63e93382265901a3316ad37395b (diff)
parent6a39c9e6b852c85d41cdd6925589ab08f5f5d8f0 (diff)
downloadmariadb-git-0bcf78df8adb729d2d90961438d7cab7cd9bd019.tar.gz
Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into romeo.(none):/home/bkroot/mysql-5.1-new-rpl
-rw-r--r--mysql-test/extra/rpl_tests/rpl_row_tabledefs.test40
-rw-r--r--mysql-test/r/rpl_row_tabledefs_2myisam.result52
-rw-r--r--mysql-test/r/rpl_row_tabledefs_3innodb.result52
-rw-r--r--mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt1
-rw-r--r--sql/field.cc10
-rw-r--r--sql/field.h7
-rw-r--r--sql/log_event.cc11
7 files changed, 93 insertions, 80 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
index 54c14594cf4..c50a5613386 100644
--- a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
+++ b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
@@ -80,28 +80,28 @@ INSERT INTO t1_bit VALUES (1,2);
INSERT INTO t1_bit VALUES (2,5);
INSERT INTO t1_char VALUES (1,2);
INSERT INTO t1_char VALUES (2,5);
-SELECT * FROM t1_int;
-SELECT * FROM t1_bit;
-SELECT * FROM t1_char;
+SELECT * FROM t1_int ORDER BY a;
+SELECT * FROM t1_bit ORDER BY a;
+SELECT * FROM t1_char ORDER BY a;
--echo **** On Slave ****
sync_slave_with_master;
-SELECT a,b,x FROM t1_int;
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
-SELECT a,b,x FROM t1_char;
+SELECT a,b,x FROM t1_int ORDER BY a;
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
+SELECT a,b,x FROM t1_char ORDER BY a;
--echo **** On Master ****
connection master;
UPDATE t1_int SET b=2*b WHERE a=2;
UPDATE t1_char SET b=2*b WHERE a=2;
UPDATE t1_bit SET b=2*b WHERE a=2;
-SELECT * FROM t1_int;
-SELECT * FROM t1_bit;
-SELECT * FROM t1_char;
+SELECT * FROM t1_int ORDER BY a;
+SELECT * FROM t1_bit ORDER BY a;
+SELECT * FROM t1_char ORDER BY a;
--echo **** On Slave ****
sync_slave_with_master;
-SELECT a,b,x FROM t1_int;
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
-SELECT a,b,x FROM t1_char;
+SELECT a,b,x FROM t1_int ORDER BY a;
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
+SELECT a,b,x FROM t1_char ORDER BY a;
# Each of these inserts should generate an error and stop the slave
@@ -188,11 +188,11 @@ sync_slave_with_master;
connection master;
INSERT INTO t7 VALUES (1),(2),(3);
INSERT INTO t8 VALUES (1),(2),(3);
-SELECT * FROM t7;
-SELECT * FROM t8;
+SELECT * FROM t7 ORDER BY a;
+SELECT * FROM t8 ORDER BY a;
sync_slave_with_master;
-SELECT * FROM t7;
-SELECT * FROM t8;
+SELECT * FROM t7 ORDER BY a;
+SELECT * FROM t8 ORDER BY a;
# We will now try to update and then delete a row on the master where
# the extra field on the slave does not have a default value. This
@@ -216,20 +216,20 @@ INSERT INTO t1_nodef VALUES (2,4,6);
--echo **** On Master ****
connection master;
UPDATE t1_nodef SET b=2*b WHERE a=1;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
--echo **** On Slave ****
sync_slave_with_master;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
--echo **** On Master ****
connection master;
DELETE FROM t1_nodef WHERE a=2;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
--echo **** On Slave ****
sync_slave_with_master;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
--echo **** Cleanup ****
connection master;
diff --git a/mysql-test/r/rpl_row_tabledefs_2myisam.result b/mysql-test/r/rpl_row_tabledefs_2myisam.result
index ae792a5dc2a..ea2fc234c44 100644
--- a/mysql-test/r/rpl_row_tabledefs_2myisam.result
+++ b/mysql-test/r/rpl_row_tabledefs_2myisam.result
@@ -46,60 +46,60 @@ INSERT INTO t1_bit VALUES (1,2);
INSERT INTO t1_bit VALUES (2,5);
INSERT INTO t1_char VALUES (1,2);
INSERT INTO t1_char VALUES (2,5);
-SELECT * FROM t1_int;
+SELECT * FROM t1_int ORDER BY a;
a b
1 2
2 5
-SELECT * FROM t1_bit;
+SELECT * FROM t1_bit ORDER BY a;
a b
1 2
2 5
-SELECT * FROM t1_char;
+SELECT * FROM t1_char ORDER BY a;
a b
1 2
2 5
**** On Slave ****
-SELECT a,b,x FROM t1_int;
+SELECT a,b,x FROM t1_int ORDER BY a;
a b x
-2 5 4711
1 2 42
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
+2 5 4711
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
a b HEX(x) HEX(y) HEX(z)
-2 5 5 1C 1
1 2 3 15 2
-SELECT a,b,x FROM t1_char;
+2 5 5 1C 1
+SELECT a,b,x FROM t1_char ORDER BY a;
a b x
-2 5 Foo is a bar
1 2 Just a test
+2 5 Foo is a bar
**** On Master ****
UPDATE t1_int SET b=2*b WHERE a=2;
UPDATE t1_char SET b=2*b WHERE a=2;
UPDATE t1_bit SET b=2*b WHERE a=2;
-SELECT * FROM t1_int;
+SELECT * FROM t1_int ORDER BY a;
a b
1 2
2 10
-SELECT * FROM t1_bit;
+SELECT * FROM t1_bit ORDER BY a;
a b
1 2
2 10
-SELECT * FROM t1_char;
+SELECT * FROM t1_char ORDER BY a;
a b
1 2
2 10
**** On Slave ****
-SELECT a,b,x FROM t1_int;
+SELECT a,b,x FROM t1_int ORDER BY a;
a b x
-2 10 4711
1 2 42
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
+2 10 4711
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
a b HEX(x) HEX(y) HEX(z)
-2 10 5 1C 1
1 2 3 15 2
-SELECT a,b,x FROM t1_char;
+2 10 5 1C 1
+SELECT a,b,x FROM t1_char ORDER BY a;
a b x
-2 10 Foo is a bar
1 2 Just a test
+2 10 Foo is a bar
INSERT INTO t9 VALUES (2);
INSERT INTO t1_nodef VALUES (1,2);
SHOW SLAVE STATUS;
@@ -327,22 +327,22 @@ Master_SSL_Key
Seconds_Behind_Master #
INSERT INTO t7 VALUES (1),(2),(3);
INSERT INTO t8 VALUES (1),(2),(3);
-SELECT * FROM t7;
+SELECT * FROM t7 ORDER BY a;
a
1
2
3
-SELECT * FROM t8;
+SELECT * FROM t8 ORDER BY a;
a
1
2
3
-SELECT * FROM t7;
+SELECT * FROM t7 ORDER BY a;
a e1 e2 e3 e4 e5 e6 e7 e8
1 NULL NULL NULL NULL NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL NULL NULL NULL
3 NULL NULL NULL NULL NULL NULL NULL NULL
-SELECT * FROM t8;
+SELECT * FROM t8 ORDER BY a;
a e1 e2 e3 e4 e5 e6 e7 e8
1 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
@@ -358,22 +358,22 @@ INSERT INTO t1_nodef VALUES (1,2,3);
INSERT INTO t1_nodef VALUES (2,4,6);
**** On Master ****
UPDATE t1_nodef SET b=2*b WHERE a=1;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b
1 4
2 4
**** On Slave ****
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b x
1 4 3
2 4 6
**** On Master ****
DELETE FROM t1_nodef WHERE a=2;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b
1 4
**** On Slave ****
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b x
1 4 3
**** Cleanup ****
diff --git a/mysql-test/r/rpl_row_tabledefs_3innodb.result b/mysql-test/r/rpl_row_tabledefs_3innodb.result
index b7f0b7b15e2..9eeadc171f8 100644
--- a/mysql-test/r/rpl_row_tabledefs_3innodb.result
+++ b/mysql-test/r/rpl_row_tabledefs_3innodb.result
@@ -46,60 +46,60 @@ INSERT INTO t1_bit VALUES (1,2);
INSERT INTO t1_bit VALUES (2,5);
INSERT INTO t1_char VALUES (1,2);
INSERT INTO t1_char VALUES (2,5);
-SELECT * FROM t1_int;
+SELECT * FROM t1_int ORDER BY a;
a b
1 2
2 5
-SELECT * FROM t1_bit;
+SELECT * FROM t1_bit ORDER BY a;
a b
1 2
2 5
-SELECT * FROM t1_char;
+SELECT * FROM t1_char ORDER BY a;
a b
1 2
2 5
**** On Slave ****
-SELECT a,b,x FROM t1_int;
+SELECT a,b,x FROM t1_int ORDER BY a;
a b x
-2 5 4711
1 2 42
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
+2 5 4711
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
a b HEX(x) HEX(y) HEX(z)
-2 5 5 1C 1
1 2 3 15 2
-SELECT a,b,x FROM t1_char;
+2 5 5 1C 1
+SELECT a,b,x FROM t1_char ORDER BY a;
a b x
-2 5 Foo is a bar
1 2 Just a test
+2 5 Foo is a bar
**** On Master ****
UPDATE t1_int SET b=2*b WHERE a=2;
UPDATE t1_char SET b=2*b WHERE a=2;
UPDATE t1_bit SET b=2*b WHERE a=2;
-SELECT * FROM t1_int;
+SELECT * FROM t1_int ORDER BY a;
a b
1 2
2 10
-SELECT * FROM t1_bit;
+SELECT * FROM t1_bit ORDER BY a;
a b
1 2
2 10
-SELECT * FROM t1_char;
+SELECT * FROM t1_char ORDER BY a;
a b
1 2
2 10
**** On Slave ****
-SELECT a,b,x FROM t1_int;
+SELECT a,b,x FROM t1_int ORDER BY a;
a b x
-2 10 4711
1 2 42
-SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
+2 10 4711
+SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
a b HEX(x) HEX(y) HEX(z)
-2 10 5 1C 1
1 2 3 15 2
-SELECT a,b,x FROM t1_char;
+2 10 5 1C 1
+SELECT a,b,x FROM t1_char ORDER BY a;
a b x
-2 10 Foo is a bar
1 2 Just a test
+2 10 Foo is a bar
INSERT INTO t9 VALUES (2);
INSERT INTO t1_nodef VALUES (1,2);
SHOW SLAVE STATUS;
@@ -327,22 +327,22 @@ Master_SSL_Key
Seconds_Behind_Master #
INSERT INTO t7 VALUES (1),(2),(3);
INSERT INTO t8 VALUES (1),(2),(3);
-SELECT * FROM t7;
+SELECT * FROM t7 ORDER BY a;
a
1
2
3
-SELECT * FROM t8;
+SELECT * FROM t8 ORDER BY a;
a
1
2
3
-SELECT * FROM t7;
+SELECT * FROM t7 ORDER BY a;
a e1 e2 e3 e4 e5 e6 e7 e8
1 NULL NULL NULL NULL NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL NULL NULL NULL
3 NULL NULL NULL NULL NULL NULL NULL NULL
-SELECT * FROM t8;
+SELECT * FROM t8 ORDER BY a;
a e1 e2 e3 e4 e5 e6 e7 e8
1 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
@@ -358,22 +358,22 @@ INSERT INTO t1_nodef VALUES (1,2,3);
INSERT INTO t1_nodef VALUES (2,4,6);
**** On Master ****
UPDATE t1_nodef SET b=2*b WHERE a=1;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b
1 4
2 4
**** On Slave ****
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b x
1 4 3
2 4 6
**** On Master ****
DELETE FROM t1_nodef WHERE a=2;
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b
1 4
**** On Slave ****
-SELECT * FROM t1_nodef;
+SELECT * FROM t1_nodef ORDER BY a;
a b x
1 4 3
**** Cleanup ****
diff --git a/mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt b/mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/sql/field.cc b/sql/field.cc
index 4245d401f53..bda58172c63 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -8523,10 +8523,12 @@ const char *Field_bit::unpack(char *to, const char *from)
void Field_bit::set_default()
{
- my_ptrdiff_t const offset= (my_ptrdiff_t) (table->s->default_values -
- table->record[0]);
- uchar bits= (uchar) get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
- set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
+ if (bit_len > 0)
+ {
+ my_ptrdiff_t const offset= table->s->default_values - table->record[0];
+ uchar bits= get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
+ set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
+ }
Field::set_default();
}
diff --git a/sql/field.h b/sql/field.h
index 3e2be248627..70c27e92f01 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -1491,6 +1491,13 @@ private:
};
+/**
+ BIT field represented as chars for non-MyISAM tables.
+
+ @todo The inheritance relationship is backwards since Field_bit is
+ an extended version of Field_bit_as_char and not the other way
+ around. Hence, we should refactor it to fix the hierarchy order.
+ */
class Field_bit_as_char: public Field_bit {
public:
Field_bit_as_char(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
diff --git a/sql/log_event.cc b/sql/log_event.cc
index d65f0942018..6b3902ba966 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -6591,10 +6591,13 @@ copy_extra_record_fields(TABLE *table,
case FIELD_TYPE_BIT:
Field_bit *f= static_cast<Field_bit*>(*field_ptr);
- my_ptrdiff_t const offset= table->record[1] - table->record[0];
- uchar const bits=
- get_rec_bits(f->bit_ptr + offset, f->bit_ofs, f->bit_len);
- set_rec_bits(bits, f->bit_ptr, f->bit_ofs, f->bit_len);
+ if (f->bit_len > 0)
+ {
+ my_ptrdiff_t const offset= table->record[1] - table->record[0];
+ uchar const bits=
+ get_rec_bits(f->bit_ptr + offset, f->bit_ofs, f->bit_len);
+ set_rec_bits(bits, f->bit_ptr, f->bit_ofs, f->bit_len);
+ }
break;
}
}