Skip to content

FB4 can't backup/restore int128-array #7846

@dmitry-lipetsk

Description

@dmitry-lipetsk

Hello.

Problem in backup

put_array function (backup.epp)

switch (field->fld_type)
{
case blr_short:
case blr_long:
case blr_quad:
case blr_int64:
add_byte(blr, field->fld_scale);
break;

This switch must include case blr_int128:

Without this case, gbak generates wrong SDL and server generates the errors like these:

gbak:error accessing BLOB column COL_INT128 -- continuing
gbak: ERROR:invalid slice description language at offset 5
gbak:error accessing BLOB column COL_NUM_30_2 -- continuing
gbak: ERROR:invalid slice description language at offset 5

Same problems in restore

get_array function (restore.epp)

firebird/src/burp/restore.epp

Lines 1781 to 1788 in d1e6921

break;
case blr_short:
case blr_long:
case blr_quad:
case blr_int64:
add_byte(blr, field->fld_type);
add_byte(blr, field->fld_scale);
break;

firebird/src/burp/restore.epp

Lines 2015 to 2022 in d1e6921

break;
case blr_short:
case blr_long:
case blr_quad:
case blr_int64:
add_byte(blr, field->fld_type);
add_byte(blr, field->fld_scale);
break;

These switches must have case blr_int128

Error messages:

gbak:error accessing BLOB column COL_INT128 -- continuing
gbak: ERROR:column not array or invalid dimensions (expected 0, encountered 1)
gbak:error accessing BLOB column COL_NUM_30_2 -- continuing
gbak: ERROR:column not array or invalid dimensions (expected 0, encountered 1)


Test database - https://dropmefiles.com/kQeLq (link is valid within 14 days)

Table with arrays: TEST_ARRAY_DIM1

Metadata

Metadata