summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/Makefile.am10
-rw-r--r--mysql-test/r/ndb_restore_different_endian_data.result200
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.1.Databin0 -> 47900 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.2.Databin0 -> 17608 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.ctlbin0 -> 24644 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.logbin0 -> 44 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.ctlbin0 -> 24644 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.logbin0 -> 44 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.1.Databin0 -> 17656 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.2.Databin0 -> 47852 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.ctlbin0 -> 24644 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.logbin0 -> 44 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.ctlbin0 -> 24644 bytes
-rw-r--r--mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.logbin0 -> 44 bytes
-rw-r--r--mysql-test/t/ndb_restore_different_endian_data.test185
-rw-r--r--ndb/src/mgmclient/CommandInterpreter.cpp2
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.cpp15
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.hpp3
-rw-r--r--ndb/tools/restore/Restore.cpp33
-rw-r--r--ndb/tools/restore/restore_main.cpp2
-rw-r--r--sql/ha_ndbcluster.cc4
21 files changed, 443 insertions, 11 deletions
diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am
index 439b13af779..cbc3e754312 100644
--- a/mysql-test/Makefile.am
+++ b/mysql-test/Makefile.am
@@ -43,7 +43,9 @@ INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I..
dist-hook:
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
- $(distdir)/std_data $(distdir)/lib
+ $(distdir)/std_data \
+ $(distdir)/std_data/ndb_backup50_data_be $(distdir)/std_data/ndb_backup50_data_le \
+ $(distdir)/lib
-$(INSTALL_DATA) $(srcdir)/t/*.def $(distdir)/t
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(distdir)/t
@@ -62,6 +64,8 @@ dist-hook:
$(INSTALL_DATA) $(srcdir)/std_data/*.frm $(distdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(distdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
+ $(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(distdir)/std_data/ndb_backup50_data_be
+ $(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(distdir)/std_data/ndb_backup50_data_le
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
-rm -rf `find $(distdir)/suite -type d -name SCCS`
@@ -71,6 +75,8 @@ install-data-local:
$(DESTDIR)$(testdir)/r \
$(DESTDIR)$(testdir)/include \
$(DESTDIR)$(testdir)/std_data \
+ $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
+ $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \
$(DESTDIR)$(testdir)/lib
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
@@ -95,6 +101,8 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/std_data/*.frm $(DESTDIR)$(testdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(DESTDIR)$(testdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
+ $(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be
+ $(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
do \
diff --git a/mysql-test/r/ndb_restore_different_endian_data.result b/mysql-test/r/ndb_restore_different_endian_data.result
new file mode 100644
index 00000000000..e1efefb751a
--- /dev/null
+++ b/mysql-test/r/ndb_restore_different_endian_data.result
@@ -0,0 +1,200 @@
+USE test;
+DROP TABLE IF EXISTS t_num,t_datetime,t_string_1,t_string_2,t_gis;
+SHOW TABLES;
+Tables_in_test
+t_gis
+t_string_1
+t_num
+t_string_2
+t_datetime
+SHOW CREATE TABLE t_num;
+Table Create Table
+t_num CREATE TABLE `t_num` (
+ `t_pk` int(11) NOT NULL,
+ `t_bit` bit(64) default NULL,
+ `t_tinyint` tinyint(4) default NULL,
+ `t_bool` tinyint(1) default NULL,
+ `t_smallint` smallint(6) default NULL,
+ `t_mediumint` mediumint(9) default NULL,
+ `t_int` int(11) default NULL,
+ `t_bigint` bigint(20) default NULL,
+ `t_float` float default NULL,
+ `t_double` double default NULL,
+ `t_decimal` decimal(37,16) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_datetime;
+Table Create Table
+t_datetime CREATE TABLE `t_datetime` (
+ `t_pk` int(11) NOT NULL,
+ `t_date` date default NULL,
+ `t_datetime` datetime default NULL,
+ `t_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `t_time` time default NULL,
+ `t_year` year(4) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_string_1;
+Table Create Table
+t_string_1 CREATE TABLE `t_string_1` (
+ `t_pk` int(11) NOT NULL,
+ `t_char` char(255) default NULL,
+ `t_varchar` varchar(655) default NULL,
+ `t_binary` binary(255) default NULL,
+ `t_varbinary` varbinary(6553) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_string_2;
+Table Create Table
+t_string_2 CREATE TABLE `t_string_2` (
+ `t_pk` int(11) NOT NULL,
+ `t_tinyblob` tinyblob,
+ `t_tinytext` tinytext,
+ `t_blob` blob,
+ `t_text` text,
+ `t_mediumblob` mediumblob,
+ `t_mediumtext` mediumtext,
+ `t_longblob` longblob,
+ `t_longtext` longtext,
+ `t_enum` enum('001001','001004','001010','001018','001019','001020','001021','001027','001028','001029','001030','001031','001100','002003','002004','002005','002007') NOT NULL default '001001',
+ `t_set` set('a','B') default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_gis;
+Table Create Table
+t_gis CREATE TABLE `t_gis` (
+ `t_pk` int(11) NOT NULL,
+ `t_point` point default NULL,
+ `t_linestring` linestring default NULL,
+ `t_polygon` polygon default NULL,
+ `t_multipoint` multipoint default NULL,
+ `t_multilinestring` multilinestring default NULL,
+ `t_multipolygon` multipolygon default NULL,
+ `t_geometrycollection` geometrycollection default NULL,
+ `t_geometry` geometry default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SELECT * FROM t_datetime;
+t_pk t_date t_datetime t_timestamp t_time t_year
+1 1998-01-01 2006-08-10 10:11:12 2002-10-29 16:51:06 19:38:34 2155
+SELECT t_pk,hex(t_bit),t_tinyint,t_bool,t_smallint,t_mediumint,t_int,t_bigint,t_float,t_double,t_decimal FROM t_num;
+t_pk hex(t_bit) t_tinyint t_bool t_smallint t_mediumint t_int t_bigint t_float t_double t_decimal
+1 AAAAAAAAAAAAAAAA 125 1 32765 8388606 2147483647 9223372036854775807 1e+20 1e+150 331.0000000000000000
+SELECT t_pk,t_char,t_varchar,hex(t_binary),hex(t_varbinary) FROM t_string_1;
+t_pk t_char t_varchar hex(t_binary) hex(t_varbinary)
+1 abcdefghijklmn abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn 612020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4100
+SELECT * FROM t_string_2;
+t_pk t_tinyblob t_tinytext t_blob t_text t_mediumblob t_mediumtext t_longblob t_longtext t_enum t_set
+1 abcdefghijklmnabcdefghijklmn abcdefghijklmnabcdefghijklmn a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 001001 a
+SELECT AsText(t_point), AsText(t_linestring),AsText(t_polygon) FROM t_gis ORDER by t_pk;
+AsText(t_point) AsText(t_linestring) AsText(t_polygon)
+POINT(10 10) LINESTRING(10 10,20 10,20 20,10 20,10 10) POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
+POINT(10 20) LINESTRING(10 10,40 10) POLYGON((0 0,30 0,30 30,0 0))
+SELECT AsText(t_multipoint), AsText(t_multilinestring),AsText(t_multipolygon) FROM t_gis ORDER by t_pk;
+AsText(t_multipoint) AsText(t_multilinestring) AsText(t_multipolygon)
+MULTIPOINT(1 1,11 11,11 21,21 21) MULTILINESTRING((10 48,10 21,10 0)) MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+MULTIPOINT(3 6,4 10) MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7)) MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
+SELECT AsText(t_geometrycollection), AsText(t_geometry) FROM t_gis ORDER by t_pk;
+AsText(t_geometrycollection) AsText(t_geometry)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+DROP TABLE t_num,t_datetime,t_string_1,t_string_2,t_gis;
+SHOW TABLES;
+Tables_in_test
+t_gis
+t_string_1
+t_num
+t_string_2
+t_datetime
+SHOW CREATE TABLE t_num;
+Table Create Table
+t_num CREATE TABLE `t_num` (
+ `t_pk` int(11) NOT NULL,
+ `t_bit` bit(64) default NULL,
+ `t_tinyint` tinyint(4) default NULL,
+ `t_bool` tinyint(1) default NULL,
+ `t_smallint` smallint(6) default NULL,
+ `t_mediumint` mediumint(9) default NULL,
+ `t_int` int(11) default NULL,
+ `t_bigint` bigint(20) default NULL,
+ `t_float` float default NULL,
+ `t_double` double default NULL,
+ `t_decimal` decimal(37,16) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_datetime;
+Table Create Table
+t_datetime CREATE TABLE `t_datetime` (
+ `t_pk` int(11) NOT NULL,
+ `t_date` date default NULL,
+ `t_datetime` datetime default NULL,
+ `t_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `t_time` time default NULL,
+ `t_year` year(4) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_string_1;
+Table Create Table
+t_string_1 CREATE TABLE `t_string_1` (
+ `t_pk` int(11) NOT NULL,
+ `t_char` char(255) default NULL,
+ `t_varchar` varchar(655) default NULL,
+ `t_binary` binary(255) default NULL,
+ `t_varbinary` varbinary(6553) default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_string_2;
+Table Create Table
+t_string_2 CREATE TABLE `t_string_2` (
+ `t_pk` int(11) NOT NULL,
+ `t_tinyblob` tinyblob,
+ `t_tinytext` tinytext,
+ `t_blob` blob,
+ `t_text` text,
+ `t_mediumblob` mediumblob,
+ `t_mediumtext` mediumtext,
+ `t_longblob` longblob,
+ `t_longtext` longtext,
+ `t_enum` enum('001001','001004','001010','001018','001019','001020','001021','001027','001028','001029','001030','001031','001100','002003','002004','002005','002007') NOT NULL default '001001',
+ `t_set` set('a','B') default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SHOW CREATE TABLE t_gis;
+Table Create Table
+t_gis CREATE TABLE `t_gis` (
+ `t_pk` int(11) NOT NULL,
+ `t_point` point default NULL,
+ `t_linestring` linestring default NULL,
+ `t_polygon` polygon default NULL,
+ `t_multipoint` multipoint default NULL,
+ `t_multilinestring` multilinestring default NULL,
+ `t_multipolygon` multipolygon default NULL,
+ `t_geometrycollection` geometrycollection default NULL,
+ `t_geometry` geometry default NULL,
+ PRIMARY KEY (`t_pk`)
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+SELECT * FROM t_datetime;
+t_pk t_date t_datetime t_timestamp t_time t_year
+1 1998-01-01 2006-08-10 10:11:12 2002-10-29 16:51:06 19:38:34 2155
+SELECT t_pk,hex(t_bit),t_tinyint,t_bool,t_smallint,t_mediumint,t_int,t_bigint,t_float,t_double,t_decimal FROM t_num;
+t_pk hex(t_bit) t_tinyint t_bool t_smallint t_mediumint t_int t_bigint t_float t_double t_decimal
+1 AAAAAAAAAAAAAAAA 125 1 32765 8388606 2147483647 9223372036854775807 1e+20 1e+150 331.0000000000000000
+SELECT t_pk,t_char,t_varchar,hex(t_binary),hex(t_varbinary) FROM t_string_1;
+t_pk t_char t_varchar hex(t_binary) hex(t_varbinary)
+1 abcdefghijklmn abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn 612020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4100
+SELECT * FROM t_string_2;
+t_pk t_tinyblob t_tinytext t_blob t_text t_mediumblob t_mediumtext t_longblob t_longtext t_enum t_set
+1 abcdefghijklmnabcdefghijklmn abcdefghijklmnabcdefghijklmn a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 a123456789b123456789c123456789d123456789e123456789f123456789g123456789 001001 a
+SELECT AsText(t_point), AsText(t_linestring),AsText(t_polygon) FROM t_gis ORDER by t_pk;
+AsText(t_point) AsText(t_linestring) AsText(t_polygon)
+POINT(10 10) LINESTRING(10 10,20 10,20 20,10 20,10 10) POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
+POINT(10 20) LINESTRING(10 10,40 10) POLYGON((0 0,30 0,30 30,0 0))
+SELECT AsText(t_multipoint), AsText(t_multilinestring),AsText(t_multipolygon) FROM t_gis ORDER by t_pk;
+AsText(t_multipoint) AsText(t_multilinestring) AsText(t_multipolygon)
+MULTIPOINT(1 1,11 11,11 21,21 21) MULTILINESTRING((10 48,10 21,10 0)) MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+MULTIPOINT(3 6,4 10) MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7)) MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
+SELECT AsText(t_geometrycollection), AsText(t_geometry) FROM t_gis ORDER by t_pk;
+AsText(t_geometrycollection) AsText(t_geometry)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+DROP TABLE t_num,t_datetime,t_string_1,t_string_2,t_gis;
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.1.Data b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.1.Data
new file mode 100644
index 00000000000..90a8443cf45
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.1.Data
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.2.Data b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.2.Data
new file mode 100644
index 00000000000..763333c9b1a
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1-0.2.Data
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.ctl b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.ctl
new file mode 100644
index 00000000000..8849978e293
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.ctl
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.log b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.log
new file mode 100644
index 00000000000..780753239e1
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.1.log
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.ctl b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.ctl
new file mode 100644
index 00000000000..8849978e293
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.ctl
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.log b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.log
new file mode 100644
index 00000000000..780753239e1
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_be/BACKUP-1.2.log
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.1.Data b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.1.Data
new file mode 100644
index 00000000000..157c28b67b3
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.1.Data
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.2.Data b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.2.Data
new file mode 100644
index 00000000000..e7602c89db7
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1-0.2.Data
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.ctl b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.ctl
new file mode 100644
index 00000000000..e2b8f4977ed
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.ctl
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.log b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.log
new file mode 100644
index 00000000000..c8037dd453a
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.1.log
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.ctl b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.ctl
new file mode 100644
index 00000000000..e2b8f4977ed
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.ctl
Binary files differ
diff --git a/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.log b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.log
new file mode 100644
index 00000000000..c8037dd453a
--- /dev/null
+++ b/mysql-test/std_data/ndb_backup50_data_le/BACKUP-1.2.log
Binary files differ
diff --git a/mysql-test/t/ndb_restore_different_endian_data.test b/mysql-test/t/ndb_restore_different_endian_data.test
new file mode 100644
index 00000000000..208ab8b459d
--- /dev/null
+++ b/mysql-test/t/ndb_restore_different_endian_data.test
@@ -0,0 +1,185 @@
+-- source include/have_ndb.inc
+-- source include/ndb_default_cluster.inc
+-- source include/not_embedded.inc
+
+#
+# Bug #27543 restore of backup from different endian does not work for blob column
+# Bug #30024 restore of backup from different endian does not work for datetime column
+# Bug #28674 backup will run forever if disk full and later write succes will kill ndb node
+#
+# The table structure and data list below
+#
+# CREATE TABLE t_num (
+# t_pk INT PRIMARY KEY,
+# t_bit BIT(64),
+# t_tinyint TINYINT,
+# t_bool BOOL,
+# t_smallint SMALLINT,
+# t_mediumint MEDIUMINT,
+# t_int INT,
+# t_bigint BIGINT,
+# t_float FLOAT,
+# t_double DOUBLE,
+# t_decimal DECIMAL (37, 16)
+# ) ENGINE=NDBCLUSTER;
+#
+# INSERT INTO t_num VALUE (
+# 1,
+# b'1010101010101010101010101010101010101010101010101010101010101010',
+# 125,
+# 1,
+# 32765,
+# 8388606,
+# 2147483647,
+# 9223372036854775807,
+# 1e+20,
+# 1e+150,
+# '331.0000000000'
+# );
+#
+# CREATE TABLE t_datetime (
+# t_pk INT PRIMARY KEY,
+# t_date DATE,
+# t_datetime DATETIME,
+# t_timestamp TIMESTAMP,
+# t_time TIME,
+# t_year YEAR
+# ) ENGINE=NDBCLUSTER;
+#
+# INSERT INTO t_datetime VALUE (
+# 1,
+# '1998-01-01',
+# '2006-08-10 10:11:12',
+# 20021029165106,
+# '19:38:34',
+# 2155
+# );
+#
+# CREATE TABLE t_string_1 (
+# t_pk INT PRIMARY KEY,
+# t_char CHAR(255),
+# t_varchar VARCHAR(655),
+# t_binary BINARY(255),
+# t_varbinary VARBINARY(6553)
+# ) ENGINE=NDBCLUSTER;
+#
+# CREATE TABLE t_string_2 (
+# t_pk INT PRIMARY KEY,
+# t_tinyblob TINYBLOB,
+# t_tinytext TINYTEXT,
+# t_blob BLOB,
+# t_text TEXT,
+# t_mediumblob MEDIUMBLOB,
+# t_mediumtext MEDIUMTEXT,
+# t_longblob LONGBLOB,
+# t_longtext LONGTEXT,
+# t_enum ENUM('001001','001004','001010','001018','001019','001020','001021','001027','001028','001029','001030','001031','001100','002003','002004','002005','002007')DEFAULT '001001' NOT NULL,
+# t_set SET('a','B')
+# ) ENGINE=NDBCLUSTER;
+#
+# INSERT INTO t_string_1 VALUE (
+# 1,
+# 'abcdefghijklmn',
+# 'abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn',
+# 0x612020,
+# 0x4100
+# );
+#
+# INSERT INTO t_string_2 VALUE (
+# 1,
+# 'abcdefghijklmnabcdefghijklmn',
+# 'abcdefghijklmnabcdefghijklmn',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# 'a123456789b123456789c123456789d123456789e123456789f123456789g123456789',
+# '001001',
+# 'a'
+# );
+#
+# CREATE TABLE t_gis (
+# t_pk INT PRIMARY KEY,
+# t_point POINT,
+# t_linestring LINESTRING,
+# t_polygon POLYGON,
+# t_multipoint MULTIPOINT,
+# t_multilinestring MULTILINESTRING,
+# t_multipolygon MULTIPOLYGON,
+# t_geometrycollection GEOMETRYCOLLECTION,
+# t_geometry GEOMETRY
+# ) ENGINE=NDBCLUSTER;
+#
+# INSERT INTO t_gis VALUE (
+# 1,
+# PointFromText('POINT(10 10)'),
+# LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)'),
+# PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))'),
+# MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)'),
+# MLineFromText('MULTILINESTRING((10 48,10 21,10 0))'),
+# MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),
+# GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'),
+# MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')
+# );
+#
+# INSERT INTO t_gis VALUE (
+# 2,
+# PointFromWKB(AsWKB(PointFromText('POINT(10 20)'))),
+# LineStringFromWKB(LineString(Point(10, 10), Point(40, 10))),
+# PolyFromWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))),
+# MPointFromWKB(MultiPoint(Point(3, 6), Point(4, 10))),
+# MLineFromWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))),
+# MPolyFromWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))),
+# GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))),
+# GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))
+# );
+
+
+
+#
+# Restore backup files (from little endian)
+#
+
+--disable_warnings
+USE test;
+DROP TABLE IF EXISTS t_num,t_datetime,t_string_1,t_string_2,t_gis;
+--enable_warnings
+--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 1 -m -r $MYSQL_TEST_DIR/std_data/ndb_backup50_data_le >> $NDB_TOOLS_OUTPUT
+--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 2 -r $MYSQL_TEST_DIR/std_data/ndb_backup50_data_le >> $NDB_TOOLS_OUTPUT
+SHOW TABLES;
+SHOW CREATE TABLE t_num;
+SHOW CREATE TABLE t_datetime;
+SHOW CREATE TABLE t_string_1;
+SHOW CREATE TABLE t_string_2;
+SHOW CREATE TABLE t_gis;
+SELECT * FROM t_datetime;
+SELECT t_pk,hex(t_bit),t_tinyint,t_bool,t_smallint,t_mediumint,t_int,t_bigint,t_float,t_double,t_decimal FROM t_num;
+SELECT t_pk,t_char,t_varchar,hex(t_binary),hex(t_varbinary) FROM t_string_1;
+SELECT * FROM t_string_2;
+SELECT AsText(t_point), AsText(t_linestring),AsText(t_polygon) FROM t_gis ORDER by t_pk;
+SELECT AsText(t_multipoint), AsText(t_multilinestring),AsText(t_multipolygon) FROM t_gis ORDER by t_pk;
+SELECT AsText(t_geometrycollection), AsText(t_geometry) FROM t_gis ORDER by t_pk;
+
+#
+# Restore backup files (from big endian)
+#
+
+DROP TABLE t_num,t_datetime,t_string_1,t_string_2,t_gis;
+--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 1 -m -r $MYSQL_TEST_DIR/std_data/ndb_backup50_data_be >> $NDB_TOOLS_OUTPUT
+--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 2 -r $MYSQL_TEST_DIR/std_data/ndb_backup50_data_be >> $NDB_TOOLS_OUTPUT
+SHOW TABLES;
+SHOW CREATE TABLE t_num;
+SHOW CREATE TABLE t_datetime;
+SHOW CREATE TABLE t_string_1;
+SHOW CREATE TABLE t_string_2;
+SHOW CREATE TABLE t_gis;
+SELECT * FROM t_datetime;
+SELECT t_pk,hex(t_bit),t_tinyint,t_bool,t_smallint,t_mediumint,t_int,t_bigint,t_float,t_double,t_decimal FROM t_num;
+SELECT t_pk,t_char,t_varchar,hex(t_binary),hex(t_varbinary) FROM t_string_1;
+SELECT * FROM t_string_2;
+SELECT AsText(t_point), AsText(t_linestring),AsText(t_polygon) FROM t_gis ORDER by t_pk;
+SELECT AsText(t_multipoint), AsText(t_multilinestring),AsText(t_multipolygon) FROM t_gis ORDER by t_pk;
+SELECT AsText(t_geometrycollection), AsText(t_geometry) FROM t_gis ORDER by t_pk;
+
+DROP TABLE t_num,t_datetime,t_string_1,t_string_2,t_gis;
diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp
index 8abce4f9cc4..1036461d404 100644
--- a/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -2148,7 +2148,7 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
return -1;
}
- if (!nostart)
+ if (nostart)
ndbout_c("Shutting down nodes with \"-n, no start\" option, to subsequently start the nodes.");
result= ndb_mgm_restart3(m_mgmsrv, no_of_nodes, node_ids,
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index 3fed04de26d..bf0c02714db 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -1220,7 +1220,8 @@ indexTypeMapping[] = {
int
NdbDictInterface::parseTableInfo(NdbTableImpl ** ret,
const Uint32 * data, Uint32 len,
- bool fullyQualifiedNames)
+ bool fullyQualifiedNames,
+ bool hostByteOrder)
{
DBUG_ENTER("NdbDictInterface::parseTableInfo");
@@ -1379,13 +1380,19 @@ NdbDictInterface::parseTableInfo(NdbTableImpl ** ret,
if(tableDesc.FragmentDataLen > 0)
{
- Uint32 replicaCount = tableDesc.FragmentData[0];
- Uint32 fragCount = tableDesc.FragmentData[1];
+ Uint16 replicaCount = tableDesc.FragmentData[0];
+ Uint16 fragCount = tableDesc.FragmentData[1];
+
+ if(hostByteOrder == false)
+ {
+ replicaCount = ((replicaCount & 0xFF00) >> 8) |((replicaCount & 0x00FF) << 8);
+ fragCount = ((fragCount & 0xFF00) >> 8) |((fragCount & 0x00FF) << 8);
+ }
impl->m_replicaCount = replicaCount;
impl->m_fragmentCount = fragCount;
- for(i = 0; i<(fragCount*replicaCount); i++)
+ for(i = 0; i<(Uint32) (fragCount*replicaCount); i++)
{
if (impl->m_fragments.push_back(tableDesc.FragmentData[i+2]))
{
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.hpp b/ndb/src/ndbapi/NdbDictionaryImpl.hpp
index 819de921235..a8757b69472 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.hpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.hpp
@@ -262,7 +262,8 @@ public:
static int parseTableInfo(NdbTableImpl ** dst,
const Uint32 * data, Uint32 len,
- bool fullyQualifiedNames);
+ bool fullyQualifiedNames,
+ bool hostByteOrder = true);
static int create_index_obj_from_table(NdbIndexImpl ** dst,
NdbTableImpl* index_table,
diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp
index c07bfbc2bd4..b89d3e239c2 100644
--- a/ndb/tools/restore/Restore.cpp
+++ b/ndb/tools/restore/Restore.cpp
@@ -324,7 +324,11 @@ bool
RestoreMetaData::parseTableDescriptor(const Uint32 * data, Uint32 len)
{
NdbTableImpl* tableImpl = 0;
- int ret = NdbDictInterface::parseTableInfo(&tableImpl, data, len, false);
+ int ret = 0;
+ if(!m_hostByteOrder)
+ ret = NdbDictInterface::parseTableInfo(&tableImpl, data, len, false, false);
+ else
+ ret = NdbDictInterface::parseTableInfo(&tableImpl, data, len, false);
if (ret != 0) {
err << "parseTableInfo " << " failed" << endl;
@@ -478,6 +482,10 @@ RestoreDataIterator::getNextTuple(int & res)
attr_data->void_value = ptr;
attr_data->size = 4*sz;
+ if(!m_hostByteOrder
+ && attr_desc->m_column->getType() == NdbDictionary::Column::Timestamp)
+ attr_data->u_int32_value[0] = Twiddle32(attr_data->u_int32_value[0]);
+
if(!Twiddle(attr_desc, attr_data))
{
res = -1;
@@ -520,6 +528,29 @@ RestoreDataIterator::getNextTuple(int & res)
*/
const Uint32 arraySize = (4 * sz) / (attr_desc->size / 8);
assert(arraySize >= attr_desc->arraySize);
+
+ //convert the length of blob(v1) and text(v1)
+ if(!m_hostByteOrder
+ && (attr_desc->m_column->getType() == NdbDictionary::Column::Blob
+ || attr_desc->m_column->getType() == NdbDictionary::Column::Text))
+ {
+ char* p = (char*)&attr_data->u_int64_value[0];
+ Uint64 x;
+ memcpy(&x, p, sizeof(Uint64));
+ x = Twiddle64(x);
+ memcpy(p, &x, sizeof(Uint64));
+ }
+
+ if(!m_hostByteOrder
+ && attr_desc->m_column->getType() == NdbDictionary::Column::Datetime)
+ {
+ char* p = (char*)&attr_data->u_int64_value[0];
+ Uint64 x;
+ memcpy(&x, p, sizeof(Uint64));
+ x = Twiddle64(x);
+ memcpy(p, &x, sizeof(Uint64));
+ }
+
if(!Twiddle(attr_desc, attr_data, attr_desc->arraySize))
{
res = -1;
diff --git a/ndb/tools/restore/restore_main.cpp b/ndb/tools/restore/restore_main.cpp
index 9ec59b9b4a6..9887869a0b3 100644
--- a/ndb/tools/restore/restore_main.cpp
+++ b/ndb/tools/restore/restore_main.cpp
@@ -112,7 +112,7 @@ static struct my_option my_long_options[] =
"(parallelism can be 1 to 1024)",
(gptr*) &ga_nParallelism, (gptr*) &ga_nParallelism, 0,
GET_INT, REQUIRED_ARG, 128, 1, 1024, 0, 1, 0 },
- { "print", OPT_PRINT, "Print data and log to stdout",
+ { "print", OPT_PRINT, "Print metadata, data and log to stdout",
(gptr*) &_print, (gptr*) &_print, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "print_data", OPT_PRINT_DATA, "Print data to stdout",
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 608c5b84541..05e35bd0157 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -181,8 +181,8 @@ struct err_code_mapping
static const err_code_mapping err_map[]=
{
{ 626, HA_ERR_KEY_NOT_FOUND, 0 },
- { 630, HA_ERR_FOUND_DUPP_KEY, 0 },
- { 893, HA_ERR_FOUND_DUPP_KEY, 0 },
+ { 630, HA_ERR_FOUND_DUPP_KEY, 1 },
+ { 893, HA_ERR_FOUND_DUPP_KEY, 1 },
{ 721, HA_ERR_TABLE_EXIST, 1 },
{ 4244, HA_ERR_TABLE_EXIST, 1 },