List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:October 4 2007 2:40pm
Subject:Re: bk commit into 5.1 tree (mats:1.2571) BUG#29549
View as plain text  
Mats, hej.

I am fine with the idea of your patch as well as with the most part of
implementation.

As I see you actually inverted the definition style of ::[un]pack methods
making the basic original methods to invoke the relatively new
repliation-rooted 4 args version.

Please consider my notes along the patch.

> Below is the list of changes that have just been committed into a local
> 5.1 repository of mats. When mats does a push these changes will
> be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
>
> ChangeSet@stripped, 2007-09-14 18:51:59+02:00, mats@stripped +20 -0
>   BUG#29549 (Endians: test failures on Solaris):
>   
>   Refactoring code to add parameter to pack() and unpack() functions with
>   purpose of indicating if data should be packed in little-endian or
>   native order. Using new functions to always pack data for binary log
>   in little-endian order. The purpose of this refactoring is to allow
>   proper implementation of endian-agnostic pack() and unpack() functions.
>   
>   Eliminating several versions of virtual pack() and unpack() functions
>   in favor for one single virtual function which is overridden in
>   subclasses.
>   
>   Implementing pack() and unpack() functions for some field types that
>   packed data in native format regardless of the value of the
>   st_table_share::db_low_byte_first flag.

I suggest to call the names of the endian-gnostic types (Field types
and associated Item types) here in the summary.
It is important to mention those specific members of each class etc
that caused changes as a part of the bug fixing.
Naturally, the rest would relate to refactoring.

I need such comments to make one more parse of the patch.

You might be noting about upgradability. It's not clear to me whether
is old-new-safe (a must). How about perspective for being new-old-safe
(a grace).

How do we require in testing for master and slave to be different endians?

>
>   mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test@stripped, 2007-09-14 18:51:49+02:00,
> mats@stripped +1 -1
>     Sorting by columns that produces deterministic order.
>
>   mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result@stripped, 2007-09-14
> 18:51:49+02:00, mats@stripped +2 -2
>     Result change.
>
>   mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result@stripped, 2007-09-14
> 18:51:49+02:00, mats@stripped +2 -2
>     Result change.
>
>   mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result@stripped, 2007-09-14
> 18:51:49+02:00, mats@stripped +3 -3
>     Result change.
>
>   mysql-test/suite/rpl/t/disabled.def@stripped, 2007-09-14 18:51:49+02:00,
> mats@stripped +0 -1
>     Enabling tests.
>
>   mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test@stripped, 2007-09-14 18:51:50+02:00,
> mats@stripped +1 -0
>     Adding missing sync_slave_with_master causing slave to keep tables
>     after shutdown.
>
>   mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result@stripped, 2007-09-14
> 18:51:53+02:00, mats@stripped +855 -0
>     New BitKeeper file ``mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result''
>
>   mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result@stripped, 2007-09-14
> 18:51:53+02:00, mats@stripped +0 -0
>
>   mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result@stripped, 2007-09-14
> 18:51:53+02:00, mats@stripped +855 -0
>     New BitKeeper file ``mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result''
>
>   mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result@stripped, 2007-09-14
> 18:51:53+02:00, mats@stripped +0 -0
>
>   mysql-test/suite/rpl_ndb/t/disabled.def@stripped, 2007-09-14 18:51:50+02:00,
> mats@stripped +0 -2
>     Enabling tests.
>
>   mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt@stripped, 2007-09-14
> 18:51:50+02:00, mats@stripped +1 -1
>     Adding --new option
>
>   mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test@stripped, 2007-09-14 18:51:50+02:00,
> mats@stripped +6 -4
>     Adding have_log_bin.
>
>   mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt@stripped, 2007-09-14
> 18:51:51+02:00, mats@stripped +1 -1
>     Adding --new option
>
>   mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test@stripped, 2007-09-14 18:51:51+02:00,
> mats@stripped +5 -2
>     Adding have_log_bin
>
>   mysql-test/t/partition.test@stripped, 2007-09-14 18:51:51+02:00,
> mats@stripped +2 -1
>     Adding have_archive, since that is used in the test.
>
>   sql/field.cc@stripped, 2007-09-14 18:51:51+02:00, mats@stripped
> +243 -127
>     Eliminating all two-argument pack() and unpack() functions and moving
>     functionality into the four-argument version.

It is necessary to say a few words about two- and four- args versions.
I suggest smth within the lines:

The four-args were introduced solely for replication purposes.
Since your patch the original two-args are defined through the four-args'.

>     
>     Packing integral and floating-point numbers in little-endian format
>     (if requested).
>     
>     Using pad_char for the field instead of spaces when unpacking.
>     
>     Adding some Doxygen documentation.
>
>   sql/field.h@stripped, 2007-09-14 18:51:51+02:00, mats@stripped +193
> -39
>     Eliminating all virtual pack() and unpack() functions except the four-
>     argument version, which now is the function that shall be overridden.
>     The two-argument versions are convenience functions, to prevent changes
>     to code that uses these.
>     
>     Adding code to pack integer numbers and floating-point numbers in
>     little-endian format, if requested.
>
>   sql/log.cc@stripped, 2007-09-14 18:51:52+02:00, mats@stripped +0
> -3
>     Removing debug printout causing crash when starting NDB on Solaris.
>
>   sql/log_event.cc@stripped, 2007-09-14 18:51:52+02:00, mats@stripped
> +4 -0
>     Adding missing #ifndef causing compile failure. Adding debug printouts.
>
>   sql/rpl_record.cc@stripped, 2007-09-14 18:51:52+02:00, mats@stripped
> +16 -32
>     Debriding code. Using new pack() and unpack() functions to always pack
>     fields little-endian. Adding debug printouts.
>
>   sql/sql_show.cc@stripped, 2007-09-14 18:51:53+02:00, mats@stripped
> +4 -2
>     Adding code that causes crash on Solaris machines since printf() cannot
>     handle NULL values for strings properly.
>
> diff -Nrup a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
> b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
> --- a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test	2007-07-30 17:58:49 +02:00
> +++ b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test	2007-09-14 18:51:49 +02:00
> @@ -466,7 +466,7 @@ binary data';
>     select * from t2 order by f1;
>     select * from t3 order by f1;
>     select * from t4 order by f1;
> -   select * from t31 order by f1;
> +   select * from t31 order by f3;
>     
>  connection master;
>  
> diff -Nrup a/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
> b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
> --- a/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result	2007-07-30 17:58:50
> +02:00
> +++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result	2007-09-14 18:51:49
> +02:00
> @@ -623,7 +623,7 @@ f1	f2	f3	f4
>  select * from t4 order by f1;
>  f1	f2	f3	f4
>  1	1	1	first
> -select * from t31 order by f1;
> +select * from t31 order by f3;
>  f1	f2	f3	f4
>  1	1	1	first
>  1	1	2	second
> @@ -1302,7 +1302,7 @@ f1	f2	f3	f4
>  select * from t4 order by f1;
>  f1	f2	f3	f4
>  1	1	1	first
> -select * from t31 order by f1;
> +select * from t31 order by f3;
>  f1	f2	f3	f4
>  1	1	1	first
>  1	1	2	second
> diff -Nrup a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
> b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
> --- a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result	2007-07-30 17:58:51
> +02:00
> +++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result	2007-09-14 18:51:49
> +02:00
> @@ -623,7 +623,7 @@ f1	f2	f3	f4
>  select * from t4 order by f1;
>  f1	f2	f3	f4
>  1	1	1	first
> -select * from t31 order by f1;
> +select * from t31 order by f3;
>  f1	f2	f3	f4
>  1	1	1	first
>  1	1	2	second
> @@ -1302,7 +1302,7 @@ f1	f2	f3	f4
>  select * from t4 order by f1;
>  f1	f2	f3	f4
>  1	1	1	first
> -select * from t31 order by f1;
> +select * from t31 order by f3;
>  f1	f2	f3	f4
>  1	1	1	first
>  1	1	2	second
> diff -Nrup a/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
> b/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
> --- a/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result	2007-07-30 17:58:51
> +02:00
> +++ b/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result	2007-09-14 18:51:49
> +02:00
> @@ -622,14 +622,14 @@ f1	f2	f3	f4
>  select * from t4 order by f1;
>  f1	f2	f3	f4
>  1	1	1	first
> -select * from t31 order by f1;
> +select * from t31 order by f3;
>  f1	f2	f3	f4
> -1	1	5	fifth
> -1	1	3	third
>  1	1	1	first
> -1	1	6	sixth
>  1	1	2	second
> +1	1	3	third
>  1	1	4	fourth
> +1	1	5	fifth
> +1	1	6	sixth
>  update t31 set f5=555555555555555 where f3=6;
>  update t31 set f2=2 where f3=2;
>  update t31 set f1=NULL where f3=1;
> diff -Nrup a/mysql-test/suite/rpl/t/disabled.def
> b/mysql-test/suite/rpl/t/disabled.def
> --- a/mysql-test/suite/rpl/t/disabled.def	2007-08-02 22:15:43 +02:00
> +++ b/mysql-test/suite/rpl/t/disabled.def	2007-09-14 18:51:49 +02:00
> @@ -16,4 +16,3 @@ rpl_innodb_mixed_dml     : Bug #29363 rp
>  rpl_invoked_features     : BUG#29020 2007-06-21 Lars Non-deterministic test case
>  rpl_auto_increment_11932   : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings
> file
>  rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in
> ndb. Enable test when supported.
> -rpl_row_extraColmaster_ndb : BUG#29549 : Replication of BLOBs fail for NDB
> diff -Nrup a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
> b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
> --- a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test	2007-06-27 14:27:31 +02:00
> +++ b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test	2007-09-14 18:51:50 +02:00
> @@ -344,5 +344,6 @@ FLUSH LOGS;
>  --exec rm $MYSQLTEST_VARDIR/tmp/local.sql
>  
>  DROP TABLE IF EXISTS t1, t2, t3, t04, t05, t4, t5; 
> +sync_slave_with_master;
>  
>  # End of 4.1 tests
> diff -Nrup a/mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result
> b/mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result
> --- /dev/null	Wed Dec 31 16:00:00 196900
> +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result	2007-09-14 18:51:53
> +02:00
> @@ -0,0 +1,855 @@
> +stop slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +reset master;
> +reset slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +start slave;
> +SET storage_engine=innodb;
> +--- Doing pre test cleanup --- 
> +DROP TABLE IF EXISTS t1;
> +--- Start test 1 Basic testing ---
> +--- Create Table Section ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE,PRIMARY KEY(id));
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1
> +--- Show table on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly --
> +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly --- 
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 1 Basic testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 2 partition RANGE testing --
> +--- Do setup --
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY RANGE (YEAR(t)) 
> +(PARTITION p0 VALUES LESS THAN (1901), 
> +PARTITION p1 VALUES LESS THAN (1946),  
> +PARTITION p2 VALUES LESS THAN (1966), 
> +PARTITION p3 VALUES LESS THAN (1986), 
> +PARTITION p4 VALUES LESS THAN (2005), 
> +PARTITION p5 VALUES LESS THAN MAXVALUE);
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = InnoDB, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (1966) ENGINE = InnoDB, PARTITION p3
> VALUES LESS THAN (1986) ENGINE = InnoDB, PARTITION p4 VALUES LESS THAN (2005) ENGINE =
> InnoDB, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
> +--- Show table on slave --
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = ndbcluster, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = ndbcluster, PARTITION p2 VALUES LESS THAN (1966) ENGINE = ndbcluster,
> PARTITION p3 VALUES LESS THAN (1986) ENGINE = ndbcluster, PARTITION p4 VALUES LESS THAN
> (2005) ENGINE = ndbcluster, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = ndbcluster)
> */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(t,id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = InnoDB, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (1966) ENGINE = InnoDB, PARTITION p3
> VALUES LESS THAN (1986) ENGINE = InnoDB, PARTITION p4 VALUES LESS THAN (2005) ENGINE =
> InnoDB, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = ndbcluster, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = ndbcluster, PARTITION p2 VALUES LESS THAN (1966) ENGINE = ndbcluster,
> PARTITION p3 VALUES LESS THAN (1986) ENGINE = ndbcluster, PARTITION p4 VALUES LESS THAN
> (2005) ENGINE = ndbcluster, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = ndbcluster)
> */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 2 partition RANGE testing ---
> +--- Do Cleanup ---
> +DROP TABLE IF EXISTS t1;
> +--- Start test 3 partition LIST testing ---
> +--- Do setup ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY LIST(id) 
> +(PARTITION p0 VALUES IN (2, 4), 
> +PARTITION p1 VALUES IN (42, 142));
> +--- Test 3 Alter to add partition ---
> +ALTER TABLE t1 ADD PARTITION (PARTITION p2 VALUES IN (412));
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id) (PARTITION p0
> VALUES IN (2,4) ENGINE = InnoDB, PARTITION p1 VALUES IN (42,142) ENGINE = InnoDB,
> PARTITION p2 VALUES IN (412) ENGINE = InnoDB) */
> +--- Show table on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id)
> (PARTITION p0 VALUES IN (2,4) ENGINE = ndbcluster, PARTITION p1 VALUES IN (42,142) ENGINE
> = ndbcluster, PARTITION p2 VALUES IN (412) ENGINE = ndbcluster) */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id) (PARTITION p0
> VALUES IN (2,4) ENGINE = InnoDB, PARTITION p1 VALUES IN (42,142) ENGINE = InnoDB,
> PARTITION p2 VALUES IN (412) ENGINE = InnoDB) */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id)
> (PARTITION p0 VALUES IN (2,4) ENGINE = ndbcluster, PARTITION p1 VALUES IN (42,142) ENGINE
> = ndbcluster, PARTITION p2 VALUES IN (412) ENGINE = ndbcluster) */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 3 partition LIST testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 4 partition HASH testing ---
> +--- Do setup ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY HASH( YEAR(t) ) 
> +PARTITIONS 4;
> +--- show that tables have been created correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(t,id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 4 partition HASH testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 5 partition by key testing ---
> +--- Create Table Section ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE,PRIMARY KEY(id))
> +PARTITION BY KEY() 
> +PARTITIONS 4;
> +--- Show that tables on master are ndbcluster tables ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Show that tables on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total);
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Make sure that our tables on slave are still right type ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 5 key partition testing ---
> +--- Do Cleanup ---
> +DROP TABLE IF EXISTS t1;
> diff -Nrup a/mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result
> b/mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result
> --- /dev/null	Wed Dec 31 16:00:00 196900
> +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result	2007-09-14 18:51:53
> +02:00
> @@ -0,0 +1,855 @@
> +stop slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +reset master;
> +reset slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +start slave;
> +SET storage_engine=myisam;
> +--- Doing pre test cleanup --- 
> +DROP TABLE IF EXISTS t1;
> +--- Start test 1 Basic testing ---
> +--- Create Table Section ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE,PRIMARY KEY(id));
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1
> +--- Show table on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly --
> +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly --- 
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 1 Basic testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 2 partition RANGE testing --
> +--- Do setup --
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY RANGE (YEAR(t)) 
> +(PARTITION p0 VALUES LESS THAN (1901), 
> +PARTITION p1 VALUES LESS THAN (1946),  
> +PARTITION p2 VALUES LESS THAN (1966), 
> +PARTITION p3 VALUES LESS THAN (1986), 
> +PARTITION p4 VALUES LESS THAN (2005), 
> +PARTITION p5 VALUES LESS THAN MAXVALUE);
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = MyISAM, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (1966) ENGINE = MyISAM, PARTITION p3
> VALUES LESS THAN (1986) ENGINE = MyISAM, PARTITION p4 VALUES LESS THAN (2005) ENGINE =
> MyISAM, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
> +--- Show table on slave --
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = ndbcluster, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = ndbcluster, PARTITION p2 VALUES LESS THAN (1966) ENGINE = ndbcluster,
> PARTITION p3 VALUES LESS THAN (1986) ENGINE = ndbcluster, PARTITION p4 VALUES LESS THAN
> (2005) ENGINE = ndbcluster, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = ndbcluster)
> */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(t,id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = MyISAM, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (1966) ENGINE = MyISAM, PARTITION p3
> VALUES LESS THAN (1986) ENGINE = MyISAM, PARTITION p4 VALUES LESS THAN (2005) ENGINE =
> MyISAM, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (YEAR(t))
> (PARTITION p0 VALUES LESS THAN (1901) ENGINE = ndbcluster, PARTITION p1 VALUES LESS THAN
> (1946) ENGINE = ndbcluster, PARTITION p2 VALUES LESS THAN (1966) ENGINE = ndbcluster,
> PARTITION p3 VALUES LESS THAN (1986) ENGINE = ndbcluster, PARTITION p4 VALUES LESS THAN
> (2005) ENGINE = ndbcluster, PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = ndbcluster)
> */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 2 partition RANGE testing ---
> +--- Do Cleanup ---
> +DROP TABLE IF EXISTS t1;
> +--- Start test 3 partition LIST testing ---
> +--- Do setup ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY LIST(id) 
> +(PARTITION p0 VALUES IN (2, 4), 
> +PARTITION p1 VALUES IN (42, 142));
> +--- Test 3 Alter to add partition ---
> +ALTER TABLE t1 ADD PARTITION (PARTITION p2 VALUES IN (412));
> +--- Show table on master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id) (PARTITION p0
> VALUES IN (2,4) ENGINE = MyISAM, PARTITION p1 VALUES IN (42,142) ENGINE = MyISAM,
> PARTITION p2 VALUES IN (412) ENGINE = MyISAM) */
> +--- Show table on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id)
> (PARTITION p0 VALUES IN (2,4) ENGINE = ndbcluster, PARTITION p1 VALUES IN (42,142) ENGINE
> = ndbcluster, PARTITION p2 VALUES IN (412) ENGINE = ndbcluster) */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id) (PARTITION p0
> VALUES IN (2,4) ENGINE = MyISAM, PARTITION p1 VALUES IN (42,142) ENGINE = MyISAM,
> PARTITION p2 VALUES IN (412) ENGINE = MyISAM) */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (id)
> (PARTITION p0 VALUES IN (2,4) ENGINE = ndbcluster, PARTITION p1 VALUES IN (42,142) ENGINE
> = ndbcluster, PARTITION p2 VALUES IN (412) ENGINE = ndbcluster) */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 3 partition LIST testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 4 partition HASH testing ---
> +--- Do setup ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE)
> +PARTITION BY HASH( YEAR(t) ) 
> +PARTITIONS 4;
> +--- show that tables have been created correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 ADD PRIMARY KEY(t,id);
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date NOT NULL DEFAULT '0000-00-00',
> +  PRIMARY KEY (`t`,`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH ( YEAR(t))
> PARTITIONS 4  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 4 partition HASH testing ---
> +--- Do Cleanup --
> +DROP TABLE IF EXISTS t1;
> +--- Start test 5 partition by key testing ---
> +--- Create Table Section ---
> +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255), 
> +bc CHAR(255), d DECIMAL(10,4) DEFAULT 0, 
> +f FLOAT DEFAULT 0, total BIGINT UNSIGNED, 
> +y YEAR, t DATE,PRIMARY KEY(id))
> +PARTITION BY KEY() 
> +PARTITIONS 4;
> +--- Show that tables on master are ndbcluster tables ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Show that tables on slave ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned DEFAULT NULL,
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total);
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Make sure that our tables on slave are still right type ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` varchar(255) DEFAULT NULL,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- Check that simple Alter statements are replicated correctly ---
> +ALTER TABLE t1 MODIFY vc TEXT;
> +--- Show the new improved table on the master ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4 
> */
> +--- Make sure that our tables on slave are still same engine ---
> +--- and that the alter statements replicated correctly ---
> +SHOW CREATE TABLE t1;
> +Table	Create Table
> +t1	CREATE TABLE `t1` (
> +  `id` mediumint(9) NOT NULL,
> +  `b1` bit(8) DEFAULT NULL,
> +  `vc` text,
> +  `bc` char(255) DEFAULT NULL,
> +  `d` decimal(10,4) DEFAULT '0.0000',
> +  `f` float DEFAULT '0',
> +  `total` bigint(20) unsigned NOT NULL DEFAULT '0',
> +  `y` year(4) DEFAULT NULL,
> +  `t` date DEFAULT NULL,
> +  PRIMARY KEY (`id`,`total`)
> +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY () PARTITIONS 4
>  */
> +--- Perform basic operation on master ---
> +--- and ensure replicated correctly ---
> +"--- Insert into t1 --" as "";
> +--- Select from t1 on master --- 
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Select from t1 on slave ---
> +select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +2	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1965-11-14
> +4	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1985-11-14
> +42	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1905-11-14
> +142	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	1995-11-14
> +412	1	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2005-11-14
> +--- Update t1 on master --
> +UPDATE t1 SET b1 = 0, t="2006-02-22" WHERE id = 412;
> +--- Check the update on master --- 
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Check Update on slave ---
> +SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
> +id	hex(b1)	vc	bc	d	f	total	y	t
> +412	0	Testing MySQL databases is a cool 	Must make it bug free for the
> customer	654321.4321	15.21	0	1965	2006-02-22
> +--- Remove a record from t1 on master ---
> +DELETE FROM t1 WHERE id = 42;
> +--- Show current count on master for t1 ---
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +--- Show current count on slave for t1 --- 
> +SELECT COUNT(*) FROM t1;
> +COUNT(*)
> +4
> +DELETE FROM t1;
> +--- End test 5 key partition testing ---
> +--- Do Cleanup ---
> +DROP TABLE IF EXISTS t1;
> diff -Nrup a/mysql-test/suite/rpl_ndb/t/disabled.def
> b/mysql-test/suite/rpl_ndb/t/disabled.def
> --- a/mysql-test/suite/rpl_ndb/t/disabled.def	2007-07-29 20:04:00 +02:00
> +++ b/mysql-test/suite/rpl_ndb/t/disabled.def	2007-09-14 18:51:50 +02:00
> @@ -14,8 +14,6 @@
>  rpl_ndb_2innodb          : BUG#19227 2006-04-20 pekka pk delete apparently not
> replicated
>  rpl_ndb_2myisam          : BUG#19227 Seems to pass currently
>  rpl_ndb_dd_partitions    : BUG#19259 2006-04-21 rpl_ndb_dd_partitions fails on
> s/AMD
> -rpl_ndb_innodb2ndb       : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on
> Solaris for pack_length issue
> -rpl_ndb_myisam2ndb       : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on
> Solaris for pack_length issue
>  rpl_ndb_ddl              : BUG#28798 2007-05-31  lars  Valgrind failure in NDB
>  rpl_ndb_mix_innodb       : BUG#28123 rpl_ndb_mix_innodb.test casue slave to core on
> sol10-sparc-a
>  rpl_ndb_ctype_ucs2_def   : BUG#27404 util thd mysql_parse sig11 when mysqld default
> multibyte charset
> diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt
> b/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt
> --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt	2007-06-27 14:27:25
> +02:00
> +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt	2007-09-14 18:51:50
> +02:00
> @@ -1 +1 @@
> ---default-storage-engine=ndbcluster
> +--default-storage-engine=ndbcluster --new
> diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test
> b/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test
> --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test	2007-06-27 14:28:30 +02:00
> +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test	2007-09-14 18:51:50 +02:00
> @@ -7,8 +7,10 @@
>  # to be able to use the same code for all these different
>  # test and to have control over the tests.
>  ##############################################################
> --- source include/have_ndb.inc
> --- source include/have_innodb.inc
> --- source include/ndb_master-slave.inc
> +source include/have_ndb.inc;
> +source include/have_innodb.inc;
> +source include/have_log_bin.inc;
> +source include/ndb_master-slave.inc;
> +
>  SET storage_engine=innodb;
> ---source extra/rpl_tests/rpl_ndb_2multi_eng.test
> +source extra/rpl_tests/rpl_ndb_2multi_eng.test;
> diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt
> b/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt
> --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt	2007-06-27 14:27:30
> +02:00
> +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt	2007-09-14 18:51:51
> +02:00
> @@ -1 +1 @@
> ---default-storage-engine=ndbcluster
> +--default-storage-engine=ndbcluster --new
> diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test
> b/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test
> --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test	2007-06-27 14:28:30 +02:00
> +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test	2007-09-14 18:51:51 +02:00
> @@ -7,6 +7,9 @@
>  # to be able to use the same code for all these different
>  # test and to have control over the tests.
>  ##############################################################
> --- source include/ndb_master-slave.inc
> +source include/have_ndb.inc;
> +source include/have_log_bin.inc;
> +source include/ndb_master-slave.inc;
> +
>  SET storage_engine=myisam;
> ---source extra/rpl_tests/rpl_ndb_2multi_eng.test
> +source extra/rpl_tests/rpl_ndb_2multi_eng.test;
> diff -Nrup a/mysql-test/t/partition.test b/mysql-test/t/partition.test
> --- a/mysql-test/t/partition.test	2007-07-02 20:11:52 +02:00
> +++ b/mysql-test/t/partition.test	2007-09-14 18:51:51 +02:00
> @@ -3,7 +3,8 @@
>  # Simple test for the partition storage engine
>  # Taken fromm the select test
>  #
> --- source include/have_partition.inc
> +source include/have_partition.inc;
> +source include/have_archive.inc;
>  
>  --disable_warnings
>  drop table if exists t1;
> diff -Nrup a/sql/field.cc b/sql/field.cc
> --- a/sql/field.cc	2007-08-13 21:39:23 +02:00
> +++ b/sql/field.cc	2007-09-14 18:51:51 +02:00
> @@ -37,6 +37,27 @@
>    Instansiate templates and static variables
>  *****************************************************************************/
>  
> +template <typename Type> class serializer {
> +public:
> +  serializer(bool lbf) : low_byte_first(lbf) { }
> +  void write(void *to, Type const& from, size_t bytes = sizeof(Type)) {
> +    memcpy(to, (void*) &from, bytes);
> +  }
> +  void read(Type &to, void *from, size_t bytes = sizeof(Type)) {
> +    memcpy((void*) &to, from, bytes);
> +  }
> +private:
> +  bool low_byte_first;
> +};
> +
> +template <>
> +struct serializer<float> {
> +  void write(void *to, float from, size_t bytes = sizeof(float)) {
> +  }
> +  void read(float &to, void *from, size_t bytes = sizeof(float)) {
> +  }
> +};
> +
>  #ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
>  template class List<Create_field>;
>  template class List_iterator<Create_field>;
> @@ -1373,11 +1394,57 @@ int Field::store(const char *to, uint le
>  
>  
>  /**
> +   Pack the field into a format suitable for storage and transfer.
> +
> +   To implement packing functionality, only the virtual function
> +   should be overridden. The other functions are just convenience
> +   functions and hence should not be overridden.
> +
> +   The value of <code>low_byte_first</code> is dependent on how the
> +   packed data is going to be used: for local use, e.g., temporary
> +   store on disk or in memory, use the native format since that is
> +   faster. For data that is going to be transfered to other machines
> +   (e.g., when writing data to the binary log), data should always be
> +   stored in little-endian format.
> +
> +   @note The default method for packing fields just copy the raw bytes
> +   of the record into the destination, but never more than
> +   <code>max_length</code> characters.
> +
> +   @param to
> +   Pointer to memory area where representation of field should be put.
> +
> +   @param from
> +   Pointer to memory area where record representation of field is
> +   stored.
> +
> +   @param max_length
> +   Maximum length of the field, as given in the column definition. For
> +   example, for <code>CHAR(1000)</code>, the
> <code>max_length</code>
> +   is 1000. This information is sometimes needed to decide how to pack
> +   the data.
> +
> +   @param low_byte_first
> +   @c TRUE if integers should be stored little-endian, @c FALSE if
> +   native format should be used.
> +*/

> +uchar *Field::pack(uchar *to, const uchar *from,
> +                   uint max_length, bool low_byte_first)

Should not the last arg to be
 bool /* low_byte_first */
or rather with __attribute__((unused))?

As I see the basic class is "endian-agnostic" which sounds to be
reasonable. If I am not wrong thinking that could you please
reflect it in the comments?


> +{
> +  uint32 length= pack_length();

> +  set_if_smaller(length, max_length);
> +  memcpy(to, from, length);

I'd write

   + memcpy (to, from, min(lenth, max_length));

My eyes like references to math.

> +  return to+length;
> +}

BTW, i don't see a big reason for `set_if_smaller'. Why not

  x = min(x, y);

Would a "normal" compiler try avoiding to write into &x with reading x first?


> +
> +/**
>     Unpack a field from row data.
>  
> -   This method is used to unpack a field from a master whose size 
> -   of the field is less than that of the slave.
> -  
> +   This method is used to unpack a field from a master whose size of
> +   the field is less than that of the slave.
> +
> +   This is the default method for unpacking a field.
> +
>     @param   to         Destination of the data
>     @param   from       Source of the data
>     @param   param_data Pack length of the field data
> @@ -1386,7 +1453,8 @@ int Field::store(const char *to, uint le
>  */
>  const uchar *Field::unpack(uchar* to,
>                             const uchar *from, 
> -                           uint param_data)
> +                           uint param_data,
> +                           bool /* low_byte_first */)

Why not with
__attribute__((unused))

which I have thought is a kind of the standard to use in our code?

>  {
>    uint length=pack_length();
>    int from_type= 0;
> @@ -1401,17 +1469,14 @@ const uchar *Field::unpack(uchar* to,
>    }
>    uint len= (param_data && (param_data < length)) ?
>              param_data : length;
> -  /*
> -    If the length is the same, use old unpack method.
> -    If the param_data is 0, use the old unpack method.
> -      This is possible if the table map was generated from a down-level
> -      master or if the data was not available on the master.
> -    If the real_types are not the same, use the old unpack method.
> -  */
> +
>    if ((length == param_data) ||
>        (param_data == 0) ||
>        (from_type != real_type()))
> -    return(unpack(to, from));
> +  {
> +    memcpy(to, from, length);
> +    return from+length;
> +  }
>    memcpy(to, from, param_data > length ? length : len);
>    return from+len;
>  }
> @@ -2716,8 +2781,16 @@ uint Field_new_decimal::is_equal(Create_
>  */
>  const uchar *Field_new_decimal::unpack(uchar* to, 
>                                         const uchar *from, 
> -                                       uint param_data)
> +                                       uint param_data,
> +                                       bool /* low_byte_first */)
>  {
> +  if (param_data == 0)
> +  {
> +    uint const length= pack_length();
> +    memcpy(to, from, pack_length());
> +    return from + length;
> +  }
> +
>    uint from_precision= (param_data & 0xff00) >> 8U;
>    uint from_decimal= param_data & 0x00ff;
>    uint length=pack_length();
> @@ -3857,6 +3930,49 @@ void Field_longlong::sql_type(String &re
>  }
>  
>  

I guess I found out where your hate to the float type got heated ... -:)

> +/*
> +  Floating-point numbers
> + */
> +
> +uchar *
> +Field_real::pack(uchar *to, const uchar *from,
> +                 uint max_length, bool low_byte_first)
> +{
> +  DBUG_ENTER("Field_real::pack");
> +  DBUG_ASSERT(max_length >= pack_length());
> +  DBUG_PRINT("debug", ("pack_length(): %u", pack_length()));
> +#ifdef WORDS_BIGENDIAN
> +  if (low_byte_first != table->s->db_low_byte_first)
> +  {
> +    const uchar *dptr= from + pack_length();
> +    while (dptr-- > from)
> +      *to++ = *dptr;
> +    DBUG_RETURN(to);
> +  }
> +  else
> +#endif
> +    DBUG_RETURN(Field::pack(to, from, max_length, low_byte_first));
> +}
> +
> +const uchar *
> +Field_real::unpack(uchar *to, const uchar *from,
> +                   uint param_data, bool low_byte_first)
> +{
> +  DBUG_ENTER("Field_real::unpack");
> +  DBUG_PRINT("debug", ("pack_length(): %u", pack_length()));
> +#ifdef WORDS_BIGENDIAN
> +  if (low_byte_first != table->s->db_low_byte_first)
> +  {
> +    const uchar *dptr= from + pack_length();
> +    while (dptr-- > from)
> +      *to++ = *dptr;
> +    DBUG_RETURN(from + pack_length());
> +  }
> +  else
> +#endif
> +    DBUG_RETURN(Field::unpack(to, from, param_data, low_byte_first));
> +}
> +
>  /****************************************************************************
>    single precision float
>  ****************************************************************************/
> @@ -6355,7 +6471,9 @@ void Field_string::sql_type(String &res)
>  }
>  
>  
> -uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
> +uchar *Field_string::pack(uchar *to, const uchar *from,
> +                          uint max_length,
> +                          bool /* low_byte_first */)
>  {
>    uint length=      min(field_length,max_length);
>    uint local_char_length= max_length/field_charset->mbmaxlen;
> @@ -6363,11 +6481,15 @@ uchar *Field_string::pack(uchar *to, con
>      local_char_length= my_charpos(field_charset, from, from+length,
>                                    local_char_length);
>    set_if_smaller(length, local_char_length);
> -  while (length && from[length-1] == ' ')
> +  while (length && from[length-1] == field_charset->pad_char)
>      length--;
> +
> +  // Length always stored little-endian
>    *to++= (uchar) length;
>    if (field_length > 255)
>      *to++= (uchar) (length >> 8);
> +
> +  // Store the actual bytes of the string
>    memcpy(to, from, length);
>    return to+length;
>  }
> @@ -6391,32 +6513,24 @@ uchar *Field_string::pack(uchar *to, con
>  */
>  const uchar *Field_string::unpack(uchar *to,
>                                    const uchar *from,
> -                                  uint param_data)
> -{
> -  uint from_len= param_data & 0x00ff;                 // length.
> -  uint length= 0;
> -  uint f_length;
> -  f_length= (from_len < field_length) ? from_len : field_length;
> -  DBUG_ASSERT(f_length <= 255);
> -  length= (uint) *from++;
> -  bitmap_set_bit(table->write_set,field_index);
> -  store((const char *)from, length, system_charset_info);
> -  return from+length;
> -}
> -
> -
> -const uchar *Field_string::unpack(uchar *to, const uchar *from)
> +                                  uint param_data,
> +                                  bool /* low_byte_first */)
>  {
> +  uint from_length=
> +    param_data ? min(param_data & 0x00ff, field_length) : field_length;
>    uint length;
> -  if (field_length > 255)
> +
> +  if (from_length > 255)
>    {
>      length= uint2korr(from);
>      from+= 2;
>    }
>    else
>      length= (uint) *from++;
> -  memcpy(to, from, (int) length);
> -  bfill(to+length, field_length - length, ' ');
> +
> +  memcpy(to, from, length);
> +  // Pad the string with the pad character of the fields charset
> +  bfill(to + length, field_length - length, field_charset->pad_char);
>    return from+length;
>  }
>  
> @@ -6796,22 +6910,29 @@ uint32 Field_varstring::data_length()
>    Here the number of length bytes are depending on the given max_length
>  */
>  
> -uchar *Field_varstring::pack(uchar *to, const uchar *from, uint max_length)
> +uchar *Field_varstring::pack(uchar *to, const uchar *from,
> +                             uint max_length,
> +                             bool /* low_byte_first */)
>  {
>    uint length= length_bytes == 1 ? (uint) *from : uint2korr(from);
>    set_if_smaller(max_length, field_length);
>    if (length > max_length)
>      length=max_length;
> -  *to++= (char) (length & 255);
> +
> +  /* Length always stored little-endian */
> +  *to++= length & 0xFF;
>    if (max_length > 255)
> -    *to++= (char) (length >> 8);
> -  if (length)
> +    *to++= (length >> 8) & 0xFF;
> +
> +  /* Store bytes of string */
> +  if (length > 0)
>      memcpy(to, from+length_bytes, length);
>    return to+length;
>  }
>  
>  
> -uchar *Field_varstring::pack_key(uchar *to, const uchar *key, uint max_length)
> +uchar *Field_varstring::pack_key(uchar *to, const uchar *key,
> +                                 uint max_length, bool /* low_byte_first */)
>  {
>    uint length=  length_bytes == 1 ? (uint) *key : uint2korr(key);
>    uint local_char_length= ((field_charset->mbmaxlen > 1) ?
> @@ -6851,7 +6972,7 @@ uchar *Field_varstring::pack_key(uchar *
>  */
>  
>  const uchar *Field_varstring::unpack_key(uchar *to, const uchar *key,
> -                                         uint max_length)
> +                                         uint max_length, bool /* low_byte_first
> */)
>  {
>    /* get length of the blob key */
>    uint32 length= *key++;
> @@ -6881,7 +7002,8 @@ const uchar *Field_varstring::unpack_key
>  */
>  
>  uchar *Field_varstring::pack_key_from_key_image(uchar *to, const uchar *from,
> -                                                uint max_length)
> +                                                uint max_length,
> +                                                bool /* low_byte_first */)
>  {
>    /* Key length is always stored as 2 bytes */
>    uint length= uint2korr(from);
> @@ -6901,6 +7023,9 @@ uchar *Field_varstring::pack_key_from_ke
>  
>     This method is used to unpack a varstring field from a master
>     whose size of the field is less than that of the slave.
> +
> +   @note
> +   The string length is always packed little-endian.
>    
>     @param   to         Destination of the data
>     @param   from       Source of the data
> @@ -6908,9 +7033,10 @@ uchar *Field_varstring::pack_key_from_ke
>  
>     @return  New pointer into memory based on from + length of the data
>  */
> -const uchar *Field_varstring::unpack(uchar *to, 
> -                                     const uchar *from,
> -                                     uint param_data)
> +const uchar *
> +Field_varstring::unpack(uchar *to, const uchar *from,
> +                        uint param_data,
> +                        bool /* low_byte_first */)
>  {
>    uint length;
>    uint l_bytes= (param_data && (param_data < field_length)) ? 
> @@ -6922,28 +7048,7 @@ const uchar *Field_varstring::unpack(uch
>      if (length_bytes == 2)
>        to[1]= 0;
>    }
> -  else
> -  {
> -    length= uint2korr(from);
> -    to[0]= *from++;
> -    to[1]= *from++;
> -  }
> -  if (length)
> -    memcpy(to+ length_bytes, from, length);
> -  return from+length;
> -}
> -
> -
> -/*
> -  unpack field packed with Field_varstring::pack()
> -*/
> -
> -const uchar *Field_varstring::unpack(uchar *to, const uchar *from)
> -{
> -  uint length;
> -  if (length_bytes == 1)
> -    length= (uint) (*to= *from++);
> -  else
> +  else /* l_bytes == 2 */
>    {
>      length= uint2korr(from);
>      to[0]= *from++;
> @@ -7192,9 +7297,9 @@ void Field_blob::store_length(uchar *i_p
>  }
>  
>  
> -uint32 Field_blob::get_length(const uchar *pos, bool low_byte_first)
> +uint32 Field_blob::get_length(const uchar *pos, uint packlength_arg, bool
> low_byte_first)
>  {
> -  switch (packlength) {
> +  switch (packlength_arg) {
>    case 1:
>      return (uint32) pos[0];
>    case 2:
> @@ -7608,28 +7713,36 @@ void Field_blob::sql_type(String &res) c
>    }
>  }
>  
> -
> -uchar *Field_blob::pack(uchar *to, const uchar *from, uint max_length)
> +uchar *Field_blob::pack(uchar *to, const uchar *from,
> +                        uint max_length, bool low_byte_first)
>  {
> +  DBUG_ENTER("Field_blob::pack");
> +  DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;"
> +                       " max_length: %u; low_byte_first: %d",
> +                       to, from, max_length, low_byte_first));
> +  DBUG_DUMP("record", from, table->s->reclength);
>    uchar *save= ptr;
>    ptr= (uchar*) from;
>    uint32 length=get_length();			// Length of from string
> -  if (length > max_length)
> -  {
> -    ptr=to;
> -    length=max_length;
> -    store_length(length);			// Store max length
> -    ptr= (uchar*) from;
> -  }
> -  else
> -    memcpy(to,from,packlength);			// Copy length
> -  if (length)
> +
> +  /*
> +    Store max length, which will occupy packlength bytes. If the max
> +    length given is smaller than the actual length of the blob, we
> +    just store the initial bytes of the blob.
> +  */
> +  store_length(to, packlength, min(length, max_length), low_byte_first);
> +
> +  /*
> +    Store the actual blob data, which will occupy 'length' bytes.
> +   */
> +  if (length > 0)
>    {
>      get_ptr((uchar**) &from);
>      memcpy(to+packlength, from,length);
>    }
>    ptr=save;					// Restore org row pointer
> -  return to+packlength+length;
> +  DBUG_DUMP("packed", to, packlength + length);
> +  DBUG_RETURN(to+packlength+length);
>  }
>  
>  
> @@ -7644,28 +7757,26 @@ uchar *Field_blob::pack(uchar *to, const
>  
>     @param   to         Destination of the data
>     @param   from       Source of the data
> -   @param   param_data <not used>
>  
>     @return  New pointer into memory based on from + length of the data
>  */
>  const uchar *Field_blob::unpack(uchar *to, 
>                                  const uchar *from,
> -                                uint param_data)
> -{
> -  return unpack(to, from);
> -}
> -
> -
> -const uchar *Field_blob::unpack(uchar *to, const uchar *from)
> +                                uint param_data,
> +                                bool low_byte_first)
>  {
> -  memcpy(to,from,packlength);
> -  uint32 length=get_length(from);
> -  from+=packlength;
> -  if (length)
> -    memcpy_fixed(to+packlength, &from, sizeof(from));
> -  else
> -    bzero(to+packlength,sizeof(from));
> -  return from+length;
> +  DBUG_ENTER("Field_blob::unpack");
> +  DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;"
> +                       " param_data: %u; low_byte_first: %d",
> +                       to, from, param_data, low_byte_first));
> +  uint const master_packlength=
> +    param_data > 0 ? param_data & 0xFF : packlength;
> +  uint32 const length= get_length(from, master_packlength, low_byte_first);
> +  DBUG_DUMP("packed", from, length + master_packlength);
> +  store(reinterpret_cast<const char*>(from) + master_packlength,
> +        length, field_charset);
> +  DBUG_DUMP("record", to, table->s->reclength);
> +  DBUG_RETURN(from + master_packlength + length);
>  }
>  
>  /* Keys for blobs are like keys on varchars */
> @@ -7715,7 +7826,9 @@ int Field_blob::pack_cmp(const uchar *b,
>  
>  /* Create a packed key that will be used for storage from a MySQL row */
>  
> -uchar *Field_blob::pack_key(uchar *to, const uchar *from, uint max_length)
> +uchar *
> +Field_blob::pack_key(uchar *to, const uchar *from,
> +                     uint max_length, bool /* low_byte_first */)
>  {
>    uchar *save= ptr;
>    ptr= (uchar*) from;
> @@ -7761,7 +7874,8 @@ uchar *Field_blob::pack_key(uchar *to, c
>  */
>  
>  const uchar *Field_blob::unpack_key(uchar *to, const uchar *from,
> -                                    uint max_length)
> +                                    uint max_length,
> +                                    bool /* low_byte_first */)
>  {
>    /* get length of the blob key */
>    uint32 length= *from++;
> @@ -7784,8 +7898,10 @@ const uchar *Field_blob::unpack_key(ucha
>  
>  /* Create a packed key that will be used for storage from a MySQL key */
>  
> -uchar *Field_blob::pack_key_from_key_image(uchar *to, const uchar *from,
> -                                           uint max_length)
> +uchar *
> +Field_blob::pack_key_from_key_image(uchar *to, const uchar *from,
> +                                    uint max_length,
> +                                    bool /* low_byte_first */)
>  {
>    uint length=uint2korr(from);
>    if (length > max_length)
> @@ -8672,9 +8788,11 @@ void Field_bit::sql_type(String &res) co
>  }
>  
>  
> -uchar *Field_bit::pack(uchar *to, const uchar *from, uint max_length)
> +uchar *Field_bit::pack(uchar *to, const uchar *from,
> +                       uint max_length,
> +                       bool /* low_byte_first */)
>  {
> -  DBUG_ASSERT(max_length);
> +  DBUG_ASSERT(max_length > 0);
>    uint length;
>    if (bit_len > 0)
>    {
> @@ -8720,17 +8838,34 @@ uchar *Field_bit::pack(uchar *to, const 
>  */
>  const uchar *Field_bit::unpack(uchar *to,
>                                 const uchar *from,
> -                               uint param_data)
> +                               uint param_data,
> +                               bool /* low_byte_first */)
>  {
>    uint const from_len= (param_data >> 8U) & 0x00ff;
>    uint const from_bit_len= param_data & 0x00ff;
>    /*
> -    If the master and slave have the same sizes, then use the old
> -    unpack() method.
> +    If the parameter data is undefined, or if the master and slave
> +    have the same sizes, then use the old unpack() method.

I had a confusion to undestand. Imo it's better to say
"If the parameter data is zero (undefined)".

>    */
> -  if ((from_bit_len == bit_len) &&
> -      (from_len == bytes_in_rec)) 
> -    return(unpack(to, from));
> +  if (param_data == 0 ||
> +      (from_bit_len == bit_len) && (from_len == bytes_in_rec))
> +  {
> +    if (bit_len > 0)
> +    {
> +      /*
> +        set_rec_bits is a macro, don't put the post-increment in the
> +        argument since that might cause strange side-effects.
> +
> +        For the choice of the second argument, see the explanation for
> +        Field_bit::pack().
> +      */
> +      set_rec_bits(*from, bit_ptr + (to - ptr), bit_ofs, bit_len);
> +      from++;
> +    }
> +    memcpy(to, from, bytes_in_rec);
> +    return from + bytes_in_rec;
> +  }
> +
>    /*
>      We are converting a smaller bit field to a larger one here.
>      To do that, we first need to construct a raw value for the original
> @@ -8755,25 +8890,6 @@ const uchar *Field_bit::unpack(uchar *to
>    store(value, new_len, system_charset_info);
>    my_afree(value);
>    return from + len;
> -}
> -
> -
> -const uchar *Field_bit::unpack(uchar *to, const uchar *from)
> -{
> -  if (bit_len > 0)
> -  {
> -    /*
> -      set_rec_bits is a macro, don't put the post-increment in the
> -      argument since that might cause strange side-effects.
> -
> -      For the choice of the second argument, see the explanation for
> -      Field_bit::pack().
> -    */
> -    set_rec_bits(*from, bit_ptr + (to - ptr), bit_ofs, bit_len);
> -    from++;
> -  }
> -  memcpy(to, from, bytes_in_rec);
> -  return from + bytes_in_rec;
>  }
>  
>  
> diff -Nrup a/sql/field.h b/sql/field.h
> --- a/sql/field.h	2007-08-04 11:08:07 +02:00
> +++ b/sql/field.h	2007-09-14 18:51:51 +02:00
> @@ -339,32 +339,45 @@ public:
>      return str;
>    }
>    virtual bool send_binary(Protocol *protocol);
> -  virtual uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0)
> +
> +  virtual uchar *pack(uchar *to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
> +  /**
> +     @overload Field::pack(uchar*, const uchar*, uint, bool)
> +  */
> +  uchar *pack(uchar *to, const uchar *from)
>    {
> -    uint32 length=pack_length();
> -    memcpy(to,from,length);
> -    return to+length;
> +    DBUG_ENTER("Field::pack");
> +    uchar *result= this->pack(to, from, UINT_MAX,
> table->s->db_low_byte_first);
> +    DBUG_RETURN(result);
>    }
> -  virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
> -  virtual const uchar *unpack(uchar* to, const uchar *from)
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
> +  /**
> +     @overload Field::unpack(uchar*, const uchar*, uint, bool)
> +  */
> +  const uchar *unpack(uchar* to, const uchar *from)
>    {
> -    uint length=pack_length();
> -    memcpy(to,from,length);
> -    return from+length;
> +    DBUG_ENTER("Field::unpack");
> +    const uchar *result= unpack(to, from, 0U, table->s->db_low_byte_first);
> +    DBUG_RETURN(result);
>    }
> -  virtual uchar *pack_key(uchar* to, const uchar *from, uint max_length)
> +
> +  virtual uchar *pack_key(uchar* to, const uchar *from,
> +                          uint max_length, bool low_byte_first)
>    {
> -    return pack(to,from,max_length);
> +    return pack(to, from, max_length, low_byte_first);
>    }
>    virtual uchar *pack_key_from_key_image(uchar* to, const uchar *from,
> -					uint max_length)
> +					uint max_length, bool low_byte_first)
>    {
> -    return pack(to,from,max_length);
> +    return pack(to, from, max_length, low_byte_first);
>    }
>    virtual const uchar *unpack_key(uchar* to, const uchar *from,
> -                                  uint max_length)
> +                                  uint max_length, bool low_byte_first)
>    {
> -    return unpack(to,from);
> +    return unpack(to, from, max_length, low_byte_first);
>    }
>    virtual uint packed_col_length(const uchar *to, uint length)
>    { return length;}
> @@ -556,6 +569,10 @@ public:
>    int truncate(double *nr, double max_length);
>    uint32 max_display_length() { return field_length; }
>    uint size_of() const { return sizeof(*this); }
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
> +  virtual uchar *pack(uchar* to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
>  };
>  
>  
> @@ -584,6 +601,16 @@ public:
>    void overflow(bool negative);
>    bool zero_pack() const { return 0; }
>    void sql_type(String &str) const;
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    return Field::unpack(to, from, param_data, low_byte_first);
> +  }
> +  virtual uchar *pack(uchar* to, const uchar *from,
> +                      uint max_length, bool low_byte_first)
> +  {
> +    return Field::pack(to, from, max_length, low_byte_first);
> +  }
>  };
>  
>  
> @@ -629,7 +656,8 @@ public:
>    uint size_of() const { return sizeof(*this); } 
>    uint32 pack_length() const { return (uint32) bin_size; }
>    uint is_equal(Create_field *new_field);
> -  virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
>  };
>  
>  
> @@ -660,6 +688,20 @@ public:
>    uint32 pack_length() const { return 1; }
>    void sql_type(String &str) const;
>    uint32 max_display_length() { return 4; }
> +
> +  virtual uchar *pack(uchar* to, const uchar *from,
> +                      uint max_length, bool low_byte_first)
> +  {
> +    *to= *from;
> +    return to + 1;
> +  }
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    *to= *from;
> +    return from + 1;
> +  }
>  };
>  
>  
> @@ -695,8 +737,39 @@ public:
>    uint32 pack_length() const { return 2; }
>    void sql_type(String &str) const;
>    uint32 max_display_length() { return 6; }
> -};
>  
> +  virtual uchar *pack(uchar* to, const uchar *from,
> +                      uint max_length, bool low_byte_first)
> +  {
> +    int16 val;
> +    if (table->s->db_low_byte_first)
> +      val = sint2korr(from);
> +    else
> +      shortget(val, from);
> +
> +    if (low_byte_first)
> +      int2store(to, val);
> +    else
> +      shortstore(to, val);
> +    return to + sizeof(val);
> +  }
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    int16 val;
> +    if (low_byte_first)
> +      val = sint2korr(from);
> +    else
> +      shortget(val, from);
> +
> +    if (table->s->db_low_byte_first)
> +      int2store(to, val);
> +    else
> +      shortstore(to, val);
> +    return from + sizeof(val);
> +  }
> +};
>  
>  class Field_medium :public Field_num {
>  public:
> @@ -725,6 +798,18 @@ public:
>    uint32 pack_length() const { return 3; }
>    void sql_type(String &str) const;
>    uint32 max_display_length() { return 8; }
> +
> +  virtual uchar *pack(uchar* to, const uchar *from,
> +                      uint max_length, bool low_byte_first)
> +  {
> +    return Field::pack(to, from, max_length, low_byte_first);
> +  }
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    return Field::unpack(to, from, param_data, low_byte_first);
> +  }
>  };
>  
>  
> @@ -760,6 +845,37 @@ public:
>    uint32 pack_length() const { return 4; }
>    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)
> +  {
> +    int32 val;
> +    if (table->s->db_low_byte_first)
> +      val = sint4korr(from);
> +    else
> +      longget(val, from);
> +
> +    if (low_byte_first)
> +      int4store(to, val);
> +    else
> +      longstore(to, val);
> +    return to + sizeof(val);
> +  }
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    int32 val;
> +    if (low_byte_first)
> +      val = sint4korr(from);
> +    else
> +      longget(val, from);
> +
> +    if (table->s->db_low_byte_first)
> +      int4store(to, val);
> +    else
> +      longstore(to, val);
> +    return from + sizeof(val);
> +  }
>  };
>  
>  
> @@ -802,6 +918,37 @@ public:
>    void sql_type(String &str) const;
>    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)
> +  {
> +    int64 val;
> +    if (table->s->db_low_byte_first)
> +      val = sint8korr(from);
> +    else
> +      longlongget(val, from);
> +
> +    if (low_byte_first)
> +      int8store(to, val);
> +    else
> +      longlongstore(to, val);
> +    return to + sizeof(val);
> +  }
> +
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first)
> +  {
> +    int64 val;
> +    if (low_byte_first)
> +      val = sint8korr(from);
> +    else
> +      longlongget(val, from);
> +
> +    if (table->s->db_low_byte_first)
> +      int8store(to, val);
> +    else
> +      longlongstore(to, val);
> +    return from + sizeof(val);
> +  }
>  };
>  #endif
>  
> @@ -1176,9 +1323,10 @@ public:
>    int cmp(const uchar *,const uchar *);
>    void sort_string(uchar *buff,uint length);
>    void sql_type(String &str) const;
> -  uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
> -  virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
> -  const uchar *unpack(uchar* to, const uchar *from);
> +  virtual uchar *pack(uchar *to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
>    int pack_cmp(const uchar *a,const uchar *b,uint key_length,
>                 my_bool insert_or_update);
>    int pack_cmp(const uchar *b,uint key_length,my_bool insert_or_update);
> @@ -1250,13 +1398,15 @@ public:
>    uint get_key_image(uchar *buff,uint length, imagetype type);
>    void set_key_image(const uchar *buff,uint length);
>    void sql_type(String &str) const;
> -  uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
> -  uchar *pack_key(uchar *to, const uchar *from, uint max_length);
> +  virtual uchar *pack(uchar *to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
> +  uchar *pack_key(uchar *to, const uchar *from, uint max_length, bool
> low_byte_first);
>    uchar *pack_key_from_key_image(uchar* to, const uchar *from,
> -                                 uint max_length);
> -  virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
> -  const uchar *unpack(uchar* to, const uchar *from);
> -  const uchar *unpack_key(uchar* to, const uchar *from, uint max_length);
> +                                 uint max_length, bool low_byte_first);
> +  virtual const uchar *unpack(uchar* to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
> +  const uchar *unpack_key(uchar* to, const uchar *from,
> +                          uint max_length, bool low_byte_first);
>    int pack_cmp(const uchar *a, const uchar *b, uint key_length,
>                 my_bool insert_or_update);
>    int pack_cmp(const uchar *b, uint key_length,my_bool insert_or_update);
> @@ -1374,13 +1524,13 @@ public:
>       @retval The length in the row plus the size of the data.
>    */
>    uint32 get_packed_size(const uchar *ptr_arg, bool low_byte_first)
> -    {return packlength + get_length(ptr_arg, low_byte_first);}
> +    {return packlength + get_length(ptr_arg, packlength, low_byte_first);}
>  
>    inline uint32 get_length(uint row_offset= 0)
> -  { return get_length(ptr+row_offset, table->s->db_low_byte_first); }
> -  uint32 get_length(const uchar *ptr, bool low_byte_first);
> +  { return get_length(ptr+row_offset, this->packlength,
> table->s->db_low_byte_first); }
> +  uint32 get_length(const uchar *ptr, uint packlength, bool low_byte_first);
>    uint32 get_length(const uchar *ptr_arg)
> -  { return get_length(ptr_arg, table->s->db_low_byte_first); }
> +  { return get_length(ptr_arg, this->packlength,
> table->s->db_low_byte_first); }
>    void put_length(uchar *pos, uint32 length);
>    inline void get_ptr(uchar **str)
>      {
> @@ -1421,13 +1571,16 @@ public:
>      memcpy_fixed(ptr+packlength,&tmp,sizeof(char*));
>      return 0;
>    }
> -  uchar *pack(uchar *to, const uchar *from, uint max_length= ~(uint) 0);
> -  uchar *pack_key(uchar *to, const uchar *from, uint max_length);
> +  virtual uchar *pack(uchar *to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
> +  uchar *pack_key(uchar *to, const uchar *from,
> +                  uint max_length, bool low_byte_first);
>    uchar *pack_key_from_key_image(uchar* to, const uchar *from,
> -                                 uint max_length);
> -  virtual const uchar *unpack(uchar *to, const uchar *from, uint param_data);
> -  const uchar *unpack(uchar *to, const uchar *from);
> -  const uchar *unpack_key(uchar* to, const uchar *from, uint max_length);
> +                                 uint max_length, bool low_byte_first);
> +  virtual const uchar *unpack(uchar *to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
> +  const uchar *unpack_key(uchar* to, const uchar *from,
> +                          uint max_length, bool low_byte_first);
>    int pack_cmp(const uchar *a, const uchar *b, uint key_length,
>                 my_bool insert_or_update);
>    int pack_cmp(const uchar *b, uint key_length,my_bool insert_or_update);
> @@ -1602,9 +1755,10 @@ public:
>    uint32 pack_length() const { return (uint32) (field_length + 7) / 8; }
>    uint32 pack_length_in_rec() const { return bytes_in_rec; }
>    void sql_type(String &str) const;
> -  uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
> -  virtual const uchar *unpack(uchar *to, const uchar *from, uint param_data);
> -  const uchar *unpack(uchar* to, const uchar *from);
> +  virtual uchar *pack(uchar *to, const uchar *from,
> +                      uint max_length, bool low_byte_first);
> +  virtual const uchar *unpack(uchar *to, const uchar *from,
> +                              uint param_data, bool low_byte_first);
>    virtual void set_default();
>  
>    Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
> diff -Nrup a/sql/log.cc b/sql/log.cc
> --- a/sql/log.cc	2007-08-14 14:20:02 +02:00
> +++ b/sql/log.cc	2007-09-14 18:51:52 +02:00
> @@ -3571,9 +3571,6 @@ bool MYSQL_BIN_LOG::write(Log_event *eve
>  	(!binlog_filter->db_ok(local_db)))
>      {
>        VOID(pthread_mutex_unlock(&LOCK_log));
> -      DBUG_PRINT("info",("OPTION_BIN_LOG is %s, db_ok('%s') == %d",
> -                         (thd->options & OPTION_BIN_LOG) ? "set" : "clear",
> -                         local_db, binlog_filter->db_ok(local_db)));
>        DBUG_RETURN(0);
>      }
>  #endif /* HAVE_REPLICATION */
> diff -Nrup a/sql/log_event.cc b/sql/log_event.cc
> --- a/sql/log_event.cc	2007-08-27 20:22:01 +02:00
> +++ b/sql/log_event.cc	2007-09-14 18:51:52 +02:00
> @@ -5697,7 +5697,9 @@ Rows_log_event::Rows_log_event(const cha
>                                 *description_event)
>    : Log_event(buf, description_event),
>      m_row_count(0),
> +#ifndef MYSQL_CLIENT
>      m_table(NULL),
> +#endif
>      m_rows_buf(0), m_rows_cur(0), m_rows_end(0),
>      m_curr_row(NULL), m_curr_row_end(NULL),
>      m_key(NULL)
> @@ -6168,6 +6170,8 @@ int Rows_log_event::do_apply_event(RELAY
>          unpack_current_row(rli);
>    
>        // at this moment m_curr_row_end should be set
> +      DBUG_PRINT("debug", ("m_curr_row_end: 0x%lx; m_curr_row: 0x%lx; m_rows_end:
> 0x%lx",
> +                           m_curr_row_end, m_curr_row, m_rows_end));
>        DBUG_ASSERT(error || m_curr_row_end != NULL); 
>        DBUG_ASSERT(error || m_curr_row < m_curr_row_end);
>        DBUG_ASSERT(error || m_curr_row_end <= m_rows_end);
> diff -Nrup a/sql/rpl_record.cc b/sql/rpl_record.cc
> --- a/sql/rpl_record.cc	2007-08-26 14:31:03 +02:00
> +++ b/sql/rpl_record.cc	2007-09-14 18:51:52 +02:00
> @@ -65,6 +65,8 @@ pack_row(TABLE *table, MY_BITMAP const* 
>    my_ptrdiff_t const rec_offset= record - table->record[0];
>    my_ptrdiff_t const def_offset= table->s->default_values -
> table->record[0];
>  
> +  DBUG_ENTER("pack_row");
> +
>    /*
>      We write the null bits and the packed records using one pass
>      through all the fields. The null bytes are written little-endian,
> @@ -96,26 +98,11 @@ pack_row(TABLE *table, MY_BITMAP const* 
>            For big-endian machines, we have to make sure that the
>            length is stored in little-endian format, since this is the
>            format used for the binlog.
> -
> -          We do this by setting the db_low_byte_first, which is used
> -          inside some store_length() to decide what order to write the
> -          bytes in.
> -
> -          In reality, db_log_byte_first is only set for legacy table
> -          type Isam, but in the event of a bug, we need to guarantee
> -          the endianess when writing to the binlog.
> -
> -          This is currently broken for NDB due to BUG#29549, so we
> -          will fix it when NDB has fixed their way of handling BLOBs.
>          */
> -#if 0
> -        bool save= table->s->db_low_byte_first;
> -        table->s->db_low_byte_first= TRUE;
> -#endif
> -        pack_ptr= field->pack(pack_ptr, field->ptr + offset);
> -#if 0
> -        table->s->db_low_byte_first= save;
> -#endif
> +        const uchar *old_pack_ptr= pack_ptr;
> +        pack_ptr= field->pack(pack_ptr, field->ptr + offset, UINT_MAX, TRUE);
> +        DBUG_PRINT("debug", ("field: %s; pack_ptr: 0x%lx; pack_ptr':0x%lx; bytes:
> %d",
> +                             field->field_name, old_pack_ptr, pack_ptr, pack_ptr
> - old_pack_ptr));
>        }
>  
>        null_mask <<= 1;
> @@ -143,8 +130,8 @@ pack_row(TABLE *table, MY_BITMAP const* 
>      packed data. If it doesn't, something is very wrong.
>    */
>    DBUG_ASSERT(null_ptr == row_data + null_byte_count);
> -
> -  return static_cast<size_t>(pack_ptr - row_data);
> +  DBUG_DUMP("row_data", row_data, pack_ptr - row_data);
> +  DBUG_RETURN(static_cast<size_t>(pack_ptr - row_data));
>  }
>  #endif
>  
> @@ -242,18 +229,11 @@ unpack_row(RELAY_LOG_INFO const *rli,
>            Use the master's size information if available else call
>            normal unpack operation.
>          */
> -#if 0
> -        bool save= table->s->db_low_byte_first;
> -        table->s->db_low_byte_first= TRUE;
> -#endif
>          uint16 const metadata= tabledef->field_metadata(i);
> -        if (tabledef && metadata)
> -          pack_ptr= f->unpack(f->ptr, pack_ptr, metadata);
> -        else
> -          pack_ptr= f->unpack(f->ptr, pack_ptr);
> -#if 0
> -        table->s->db_low_byte_first= save;
> -#endif
> +        uchar const *const old_pack_ptr= pack_ptr;
> +        pack_ptr= f->unpack(f->ptr, pack_ptr, metadata, TRUE);
> +	DBUG_PRINT("debug", ("field: %s; metadata: 0x%x; pack_ptr: 0x%lx; pack_ptr': 0x%lx;
> bytes: %d",
> +                             f->field_name, metadata, old_pack_ptr, pack_ptr,
> pack_ptr - old_pack_ptr));
>        }
>  
>        null_mask <<= 1;
> @@ -265,6 +245,7 @@ unpack_row(RELAY_LOG_INFO const *rli,
>      throw away master's extra fields
>    */
>    uint max_cols= min(tabledef->size(), cols->n_bits);
> +  DBUG_PRINT("debug", ("Master has %u fields, slave %u", tabledef->size(),
> cols->n_bits));
>    for (; i < max_cols; i++)
>    {
>      if (bitmap_is_set(cols, i))
> @@ -279,6 +260,7 @@ unpack_row(RELAY_LOG_INFO const *rli,
>  
>        if (!((null_bits & null_mask) && tabledef->maybe_null(i)))
>          pack_ptr+= tabledef->calc_field_size(i, (uchar *) pack_ptr);
> +      DBUG_PRINT("debug", ("pack_ptr: 0x%lx", pack_ptr));
>        null_mask <<= 1;
>      }
>    }
> @@ -288,6 +270,8 @@ unpack_row(RELAY_LOG_INFO const *rli,
>      really wrong.
>     */
>    DBUG_ASSERT(null_ptr == row_data + master_null_byte_count);
> +
> +  DBUG_DUMP("row_data", row_data, pack_ptr - row_data);
>  
>    *row_end = pack_ptr;
>    if (master_reclength)
> diff -Nrup a/sql/sql_show.cc b/sql/sql_show.cc
> --- a/sql/sql_show.cc	2007-08-16 18:04:11 +02:00
> +++ b/sql/sql_show.cc	2007-09-14 18:51:53 +02:00
> @@ -29,6 +29,8 @@
>  #include "event_data_objects.h"
>  #include <my_dir.h>
>  
> +#define STR_OR_NIL(S) ((S) ? (S) : "<nil>")
> +
>  #ifdef WITH_PARTITION_STORAGE_ENGINE
>  #include "ha_partition.h"
>  #endif
> @@ -3096,8 +3098,8 @@ int get_all_tables(THD *thd, TABLE_LIST 
>    schema_table_idx= get_schema_table_idx(schema_table);
>    get_lookup_field_values(thd, cond, tables, &lookup_field_vals);
>    DBUG_PRINT("INDEX VALUES",("db_name='%s', table_name='%s'",
> -                             lookup_field_vals.db_value.str,
> -                             lookup_field_vals.table_value.str));
> +                             STR_OR_NIL(lookup_field_vals.db_value.str),
> +                             STR_OR_NIL(lookup_field_vals.table_value.str)));
>  
>    if (!lookup_field_vals.wild_db_value &&
> !lookup_field_vals.wild_table_value)
>    {
>
> -- 
> MySQL Code Commits Mailing List
> For list archives: http://lists.mysql.com/commits
> To unsubscribe:    http://lists.mysql.com/commits?unsub=1
>

regards,

-- 
Andrei Elkin, Software Developer, PhD
MySQL Finland Oy, Helsinki, Finland, www.mysql.com

Are you MySQL certified?  www.mysql.com/certification
Thread
bk commit into 5.1 tree (mats:1.2571) BUG#29549Mats Kindahl14 Sep
  • RE: bk commit into 5.1 tree (mats:1.2571) BUG#29549Chuck Bell2 Oct
  • Re: bk commit into 5.1 tree (mats:1.2571) BUG#29549Andrei Elkin4 Oct
    • Re: bk commit into 5.1 tree (mats:1.2571) BUG#29549Mats Kindahl4 Oct