Browse Source

Fix for bug #34779: crash in checksum table on federated tables

with blobs containing nulls

Problem: FEDERATED SE improperly stores NULL fields in the record buffer.

Fix: store them properly.
pull/73/head
Ramil Kalimullin 18 years ago
parent
commit
ebe0c22691
  1. 11
      mysql-test/r/federated.result
  2. 22
      mysql-test/t/federated.test
  3. 3
      sql/ha_federated.cc

11
mysql-test/r/federated.result

@ -2071,7 +2071,18 @@ DROP TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;
CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
CREATE TABLE t1
(a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
CHECKSUM TABLE t1;
Table Checksum
test.t1 2465757603
DROP TABLE t1;
DROP TABLE t1;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
End of 5.0 tests

22
mysql-test/t/federated.test

@ -1750,4 +1750,26 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;
#
# Bug #34779: crash in checksum table on federated tables with blobs
# containing nulls
#
connection slave;
CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
connection master;
--replace_result $SLAVE_MYPORT SLAVE_PORT
eval CREATE TABLE t1
(a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1';
CHECKSUM TABLE t1;
connection slave;
DROP TABLE t1;
connection master;
DROP TABLE t1;
source include/federated_cleanup.inc;
--echo End of 5.0 tests

3
sql/ha_federated.cc

@ -731,7 +731,10 @@ uint ha_federated::convert_row_to_internal_format(byte *record,
old_ptr= (my_ptrdiff_t) (record - table->record[0]);
(*field)->move_field(old_ptr);
if (!row[x])
{
(*field)->set_null();
(*field)->reset();
}
else
{
(*field)->set_notnull();

Loading…
Cancel
Save