diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql index 2c7e87a7f3944670305005ab72700c4f060dc4cc..d6614edcf0b6648f865912840b1aca5a1ea4262f 100644 --- a/catalogue/common_catalogue_schema.sql +++ b/catalogue/common_catalogue_schema.sql @@ -168,7 +168,7 @@ CREATE TABLE ARCHIVE_FILE( DISK_FILE_UID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_DFUID_NN NOT NULL, DISK_FILE_GID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_DFGID_NN NOT NULL, SIZE_IN_BYTES NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_SIB_NN NOT NULL, - CHECKSUM_BLOB CHECKSUM_BLOB_TYPE CONSTRAINT ARCHIVE_FILE_CB1_NN NOT NULL, + CHECKSUM_BLOB CHECKSUM_BLOB_TYPE, CHECKSUM_ADLER32 NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_CB2_NN NOT NULL, STORAGE_CLASS_ID NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_SCI_NN NOT NULL, CREATION_TIME NUMERIC(20, 0) CONSTRAINT ARCHIVE_FILE_CT2_NN NOT NULL, diff --git a/common/checksum/ChecksumBlob.cpp b/common/checksum/ChecksumBlob.cpp index 84b0b646fc5a8864ab87b9d1bc60e66e3276d18a..507243fefc348d60ab17fe6764f066a551e0f790 100644 --- a/common/checksum/ChecksumBlob.cpp +++ b/common/checksum/ChecksumBlob.cpp @@ -113,7 +113,9 @@ void ChecksumBlob::deserialize(const std::string &bytearray) { void ChecksumBlob::deserializeOrSetAdler32(const std::string &bytearray, uint32_t adler32) { common::ChecksumBlob p_csb; - if(p_csb.ParseFromString(bytearray)) { + // A NULL value in the CHECKSUM_BLOB column will return an empty bytearray. If the bytearray is empty + // or otherwise invalid, default to using the contents of the CHECKSUM_ADLER32 column. + if(!bytearray.empty() && p_csb.ParseFromString(bytearray)) { ProtobufToChecksumBlob(p_csb, *this); } else { insert(ADLER32, adler32);