polardbxengine/mysql-test/suite/ndb/t/ndb_restore_conv_binary.test

711 lines
30 KiB
Plaintext

-- source include/have_ndb.inc
-- source include/not_windows.inc
-- source suite/ndb/include/backup_restore_setup.inc
--echo ***********************
--echo Test binary conversions
--echo ***********************
create table test.t1 (
a int unsigned primary key,
b binary(20),
c varbinary(200),
d varbinary(2000),
e blob,
f tinyblob,
g mediumblob,
h longblob
) engine=ndb;
insert into test.t1 values (1,
'1111111111', # binary
repeat('Pattern', 20), # varbinary
repeat('LongPattern', 100), # longvarbinary
repeat('Tartan', 4096), # blob
repeat('Tartan', 40), # tinyblob
repeat('Tartan', 4096), # mediumblob
repeat('Tartan', 4096)); # longblob
insert into test.t1 select a+1, repeat(a+1, 10), c, d, e, f, g, h from test.t1;
insert into test.t1 select a+2, repeat(a+2, 10), c, d, e, f, g, h from test.t1;
insert into test.t1 select a+4, repeat(a+4, 10), c, d, e, f, g, h from test.t1;
--echo Source data
select a,
hex(b),
sha1(c),
length(c),
sha1(d),
length(d),
sha1(e),
length(e),
sha1(f),
length(f),
sha1(g),
length(g),
sha1(h),
length(h) from test.t1 order by a;
--echo Run backup
--source include/ndb_backup.inc
rename table test.t1 to test.t1_orig;
--echo ********************
--echo Test type promotions
--echo ********************
--echo Have one of each we are interested in to start with
--echo Repeatedly 'shift left' onto wider types
--echo longblob <- mediumblob <- blob <- longvarbinary <- tinyblob <- varbinary <- binary
create table test.t1 (
a int unsigned primary key,
b varbinary(20), # binary -> varbinary
c varbinary(2000), # varbinary -> longvarbinary
d blob, # longvarbinary -> blob
e mediumblob, # blob -> mediumblob
f blob, # tinyblob -> blob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b varbinary(2000), # binary -> longvarbinary
c tinyblob, # varbinary -> tinyblob
d mediumblob, # longvarbinary -> mediumblob
e longblob, # blob -> longblob
f mediumblob, # tinyblob -> mediumblob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b tinyblob, # binary -> tinyblob
c blob, # varbinary -> blob
d longblob, # longvarbinary -> longblob
e longblob, # blob -> longblob
f longblob, # tinyblob -> longblob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b blob, # binary -> blob
c mediumblob, # varbinary -> mediumblob
d longblob, # longvarbinary -> longblob
e longblob, # blob -> longblob
f longblob, # tinyblob -> longblob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b mediumblob, # binary -> mediumblob
c longblob, # varbinary -> longblob
d longblob, # longvarbinary -> longblob
e longblob, # blob -> longblob
f longblob, # tinyblob -> longblob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b longblob, # binary -> longblob
c longblob, # varbinary -> longblob
d longblob, # longvarbinary -> longblob
e longblob, # blob -> longblob
f longblob, # tinyblob -> longblob
g longblob, # mediumblob -> longblob
h longblob # longblob -> longblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no data differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where LEFT(o.b,10) != r.b or # ignore Binary padding
length(r.b) != 10 or
o.c != r.c or
o.d != r.d or
o.e != r.e or
o.f != r.f or
o.g != r.g or
o.h != r.h;
drop table test.t1;
--echo *******************
--echo Test type demotions
--echo *******************
--echo Have one of each we are interested in to start with
--echo Repeatedly 'shift right' onto smaller types
--echo longblob -> mediumblob -> blob -> longvarbinary -> tinyblob -> varbinary -> binary
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d tinyblob, # longvarbinary -> tinyblob
e varbinary(2000), # blob -> longvarbinary
f varbinary(200), # tinyblob -> varbinary
g blob, # mediumblob -> blob
h mediumblob # longblob -> mediumblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 255) != r.d # d truncated to 255
or left(o.e,2000) != r.e
or length(r.e) != 2000 # e truncated to 2000
or left(o.f,200) != r.f
or length(r.f) != 200 # f truncated to 200
or o.g != r.g # g as-is
or o.h != r.h # h as-is
;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d varbinary(200), # longvarbinary -> varbinary
e tinyblob, # blob -> tinyblob
f binary(200), # tinyblob -> binary
g varbinary(2000), # mediumblob -> longvarbinary
h blob # longblob -> blob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 200) != r.d # d truncated to 200
or left(o.e, 255) != r.e
or length(r.e) != 255 # e truncated to 255
or left(o.f, 200) != r.f
or length(r.f) != 200 # f truncated to 200
or left(o.g, 2000) != r.g
or length(r.g) != 2000 # g truncated to 2000
or o.h != r.h # h as-is
;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d binary(200), # longvarbinary -> binary
e varbinary(200), # blob -> varbinary
f binary(200), # tinyblob -> binary
g tinyblob, # mediumblob -> tinyblob
h varbinary(2000) # longblob -> longvarbinary
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 200) != r.d # d truncated to 200
or left(o.e, 200) != r.e
or length(r.e) != 200 # e truncated to 200
or left(o.f, 200) != r.f
or length(r.f) != 200 # f truncated to 200
or left(o.g, 255) != r.g
or length(r.g) != 255 # g truncated to 255
or left(o.h, 2000) != r.h
or length(r.h) != 2000 # h truncated to 2000
;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d binary(200), # longvarbinary -> binary
e binary(200), # blob -> binary
f binary(200), # tinyblob -> binary
g varbinary(200), # mediumblob -> varbinary
h tinyblob # longblob -> tinyblob
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 200) != r.d # d truncated to 200
or left(o.e, 200) != r.e
or length(r.e) != 200 # e truncated to 200
or left(o.f, 200) != r.f
or length(r.f) != 200 # f truncated to 200
or left(o.g, 200) != r.g
or length(r.g) != 200 # g truncated to 200
or left(o.h, 255) != r.h
or length(r.h) != 255 # h truncated to 255
;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d binary(200), # longvarbinary -> binary
e binary(200), # blob -> binary
f binary(200), # tinyblob -> binary
g binary(200), # mediumblob -> binary
h varbinary(200) # longblob -> varbinary
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 200) != r.d # d truncated to 200
or left(o.e, 200) != r.e
or length(r.e) != 200 # e truncated to 200
or left(o.f, 200) != r.f
or length(r.f) != 200 # f truncated to 200
or left(o.g, 200) != r.g
or length(r.g) != 200 # g truncated to 200
or left(o.h, 200) != r.h
or length(r.h) != 200 # h truncated to 200
;
drop table test.t1;
create table test.t1 (
a int unsigned primary key,
b binary(20), # binary -> binary
c binary(200), # varbinary -> binary
d binary(200), # longvarbinary -> binary
e binary(200), # blob -> binary
f binary(200), # tinyblob -> binary
g binary(200), # mediumblob -> binary
h binary(200) # longblob -> binary
) engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo Expect no unexpected differences between orig and restored
select o.a, o.b, sha1(o.c), length(o.c), sha1(o.d), length(o.d), sha1(o.e), length(o.e), sha1(o.f), length(o.f), sha1(o.g), length(o.g), sha1(o.h), length(o.h),
r.a, r.b, sha1(r.c), length(r.c), sha1(r.d), length(r.d), sha1(r.e), length(r.e), sha1(r.f), length(r.f), sha1(r.g), length(r.g), sha1(r.h), length(r.h)
from t1_orig o join t1 r
on o.a = r.a
where o.b != r.b # b as is
or o.c != left(r.c, 140)
or length(o.c) != 140 # c expanded to 200
or left(o.d, 200) != r.d # d truncated to 200
or left(o.e, 200) != r.e
or length(r.e) != 200 # e truncated to 200
or left(o.f, 200) != r.f
or length(r.f) != 200 # f truncated to 200
or left(o.g, 200) != r.g
or length(r.g) != 200 # g truncated to 200
or left(o.h, 200) != r.h
or length(r.h) != 200 # h truncated to 200
;
drop table test.t1;
drop table test.t1_orig;
--echo ********************************
--echo Text to blob conversions
--echo ********************************
create table test.t2 (
a int unsigned primary key,
tinytext1 tinytext,
tinytext2 tinytext,
tinytext3 tinytext,
tinytext4 tinytext,
text1 text,
text2 text,
text3 text,
text4 text,
mediumtext1 mediumtext,
mediumtext2 mediumtext,
mediumtext3 mediumtext,
mediumtext4 mediumtext,
longtext1 longtext,
longtext2 longtext,
longtext3 longtext,
longtext4 longtext
) engine=ndb character set UTF8MB4;
insert into test.t2 values (1,
repeat('Tartan', 40), # tinytext
repeat('Tartan', 40),
repeat('Tartan', 40),
repeat('Tartan', 40),
repeat('Tartan', 4096), # text
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096), # mediumtext
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096), # longtext
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096));
insert into test.t2 values (0,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL);
--echo Source data
select a,
sha(tinytext1), sha(tinytext2), sha(tinytext3), sha(tinytext4),
length(tinytext1), length(tinytext2), length(tinytext3), length(tinytext4),
sha(text1), sha(text2), sha(text3), sha(text4),
length(text1), length(text2), length(text3), length(text4),
sha(mediumtext1), sha(mediumtext2), sha(mediumtext3), sha(mediumtext4),
length(mediumtext1), length(mediumtext2), length(mediumtext3), length(mediumtext4),
sha(longtext1), sha(longtext2), sha(longtext3), sha(longtext4),
length(longtext1), length(longtext2), length(longtext3), length(longtext4) from test.t2 order by a;
--echo Run backup
--source include/ndb_backup.inc
rename table test.t2 to test.t2_orig;
create table test.t2 (
a int unsigned primary key,
tinytext1 tinyblob, # tinytext -> tinyblob
tinytext2 blob, # tinytext -> blob
tinytext3 mediumblob, # tinytext -> mediumblob
tinytext4 longblob, # tinytext -> longblob
text1 tinyblob, # text -> tinyblob
text2 blob, # text -> blob
text3 mediumblob, # text -> mediumblob
text4 longblob, # text -> longblob
mediumtext1 tinyblob, # mediumtext -> tinyblob
mediumtext2 blob, # mediumtext -> blob
mediumtext3 mediumblob,# mediumtext -> mediumblob
mediumtext4 longblob, # mediumtext -> longblob
longtext1 tinyblob, # longtext -> tinyblob
longtext2 blob, # longtext -> blob
longtext3 mediumblob, # longtext -> mediumblob
longtext4 longblob # longtext -> longblob
) engine=ndb;
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
select count(*) from test.t2;
select a,
sha(tinytext1), sha(tinytext2), sha(tinytext3), sha(tinytext4),
length(tinytext1), length(tinytext2), length(tinytext3), length(tinytext4),
sha(text1), sha(text2), sha(text3), sha(text4),
length(text1), length(text2), length(text3), length(text4),
sha(mediumtext1), sha(mediumtext2), sha(mediumtext3), sha(mediumtext4),
length(mediumtext1), length(mediumtext2), length(mediumtext3), length(mediumtext4),
sha(longtext1), sha(longtext2), sha(longtext3), sha(longtext4),
length(longtext1), length(longtext2), length(longtext3), length(longtext4) from test.t2 order by a;
drop table test.t2;
drop table test.t2_orig;
--echo ********************************
--echo Blob to text conversions
--echo ********************************
create table test.t2 (
a int unsigned primary key,
tinyblob1 tinyblob,
tinyblob2 tinyblob,
tinyblob3 tinyblob,
tinyblob4 tinyblob,
blob1 blob,
blob2 blob,
blob3 blob,
blob4 blob,
mediumblob1 mediumblob,
mediumblob2 mediumblob,
mediumblob3 mediumblob,
mediumblob4 mediumblob,
longblob1 longblob,
longblob2 longblob,
longblob3 longblob,
longblob4 longblob
) engine=ndb character set UTF8MB4;
insert into test.t2 values (1,
repeat('Tartan', 40), # tinyblob
repeat('Tartan', 40),
repeat('Tartan', 40),
repeat('Tartan', 40),
repeat('Tartan', 4096), # blob
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096), # mediumblob
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096), # longblob
repeat('Tartan', 4096),
repeat('Tartan', 4096),
repeat('Tartan', 4096));
insert into test.t2 values (0,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL);
--echo Source data
select a,
sha(tinyblob1), sha(tinyblob2), sha(tinyblob3), sha(tinyblob4),
length(tinyblob1), length(tinyblob2), length(tinyblob3), length(tinyblob4),
sha(blob1), sha(blob2), sha(blob3), sha(blob4),
length(blob1), length(blob2), length(blob3), length(blob4),
sha(mediumblob1), sha(mediumblob2), sha(mediumblob3), sha(mediumblob4),
length(mediumblob1), length(mediumblob2), length(mediumblob3), length(mediumblob4),
sha(longblob1), sha(longblob2), sha(longblob3), sha(longblob4),
length(longblob1), length(longblob2), length(longblob3), length(longblob4) from test.t2 order by a;
--echo Run backup
--source include/ndb_backup.inc
rename table test.t2 to test.t2_orig;
create table test.t2 (
a int unsigned primary key,
tinyblob1 tinytext, # tinyblob -> tinytext
tinyblob2 text, # tinyblob -> text
tinyblob3 mediumtext, # tinyblob -> mediumtext
tinyblob4 longtext, # tinyblob -> longtext
blob1 tinytext, # blob -> tinytext
blob2 text, # blob -> text
blob3 mediumtext, # blob -> mediumtext
blob4 longtext, # blob -> longtext
mediumblob1 tinytext, # mediumblob -> tinytext
mediumblob2 text, # mediumblob -> text
mediumblob3 mediumtext,# mediumblob -> mediumtext
mediumblob4 longtext, # mediumblob -> longtext
longblob1 tinytext, # longblob -> tinytext
longblob2 text, # longblob -> text
longblob3 mediumtext, # longblob -> mediumtext
longblob4 longtext # longblob -> longtext
) engine=ndb;
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
select count(*) from test.t2;
select a,
sha(tinyblob1), sha(tinyblob2), sha(tinyblob3), sha(tinyblob4),
length(tinyblob1), length(tinyblob2), length(tinyblob3), length(tinyblob4),
sha(blob1), sha(blob2), sha(blob3), sha(blob4),
length(blob1), length(blob2), length(blob3), length(blob4),
sha(mediumblob1), sha(mediumblob2), sha(mediumblob3), sha(mediumblob4),
length(mediumblob1), length(mediumblob2), length(mediumblob3), length(mediumblob4),
sha(longblob1), sha(longblob2), sha(longblob3), sha(longblob4),
length(longblob1), length(longblob2), length(longblob3), length(longblob4) from test.t2 order by a;
drop table test.t2;
drop table test.t2_orig;
--echo *****************************************************************************
--echo Charset-aware truncation in blob -> tinytext and text ->tinyblob conversions
--echo *****************************************************************************
--echo # ndb_restore TEXT -> TINYBLOB and BLOB->TINYTEXT truncation with UTF8MB4
set character_set_client=UTF8MB4;
create table t2(id int primary key, text_val text character set UTF8MB4, blob_val blob)engine=ndb;
insert into t2 values(11111, REPEAT(UNHEX("E38182"), 100), REPEAT(UNHEX("E38182"), 100));
insert into t2 values(22222, CONCAT("AA",REPEAT(UNHEX("E38182"), 100)), CONCAT("AA",REPEAT(UNHEX("E38182"), 100)));
select length(text_val), char_length(text_val), length(blob_val), char_length(blob_val) from t2 order by id;
--echo # run backup
--source include/ndb_backup.inc
drop table t2;
create table t2(id int primary key, text_val tinyblob, blob_val tinytext character set UTF8MB4)engine=ndb;
--echo # run restore
--exec $NDB_RESTORE -b $the_backup_id -n 1 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--exec $NDB_RESTORE -b $the_backup_id -n 2 -r --promote-attributes --lossy-conversions $NDB_BACKUPS-$the_backup_id >> $NDB_TOOLS_OUTPUT
--echo # run ndb_select_all to see charset-aware truncation in ndb
--echo # text_val = TINYBLOB, truncation on byte boundary, mid-character
--echo # last char E38182 truncated to E3
--echo # blob_val = TINYTEXT, truncation on well-formed char boundary
--echo # last char E38182 not truncated
--exec $NDB_SELECT_ALL -d test t2 -o PRIMARY
--echo # run mysql select to see charset-aware truncation in mysqld
--echo # blob_val = TINYTEXT, truncation on well-formed char boundary
--echo # length = well-formed char length * sizeof(UTF8MB4 char)
--echo # 1. pk-based read
select length(blob_val), char_length(blob_val) from t2 where id = 11111;
select length(blob_val), char_length(blob_val) from t2 where id = 22222;
--echo # 2. scan
select length(blob_val), char_length(blob_val) from t2 order by id;
--echo # text_val = TINYBLOB, truncation on byte boundary, mid-character
--echo # length = well-formed char length
--echo # 1. pk-based read
select length(text_val), char_length(text_val) from t2 where id = 11111;
select length(text_val), char_length(text_val) from t2 where id = 22222;
--echo # 2. scan
select length(text_val), char_length(text_val) from t2 order by id;
drop table t2;
--source suite/ndb/include/backup_restore_cleanup.inc
--remove_file $NDB_TOOLS_OUTPUT