From 331a27bf82d4362fed863424854425b63606a349 Mon Sep 17 00:00:00 2001 From: Paul Reeves Date: Thu, 26 Jan 2023 16:23:43 +0100 Subject: [PATCH] Restore LoadBlobFromFile --- src/MyFirstUDRKit.cpp | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/MyFirstUDRKit.cpp b/src/MyFirstUDRKit.cpp index 7fa0ebd..f479465 100644 --- a/src/MyFirstUDRKit.cpp +++ b/src/MyFirstUDRKit.cpp @@ -169,30 +169,28 @@ FB_UDR_END_FUNCTION /*** DDL -create or alter function LoadBlobFromFile ( - afilename varchar(8191), - ablob BLOB - ) returns bigint - external name 'MyFirstUDRKit!MFK_Load_Blob_From_File!Load file and save to Blob' - engine udr; -***/ - -static const size_t MaxSegmentSize = 65535; - -FB_UDR_BEGIN_FUNCTION(MFK_Load_Blob_From_File) - + * create or alter function LoadBlobFromFile ( + * afilename varchar(8191), + * ablob BLOB + * ) returns bigint + * external name 'MyFirstUDRKit!MFKLoadBlobFromFile!Load file and save to Blob' + * engine udr; + ***/ +FB_UDR_BEGIN_FUNCTION (MFK_LoadBlobFromFile) +//BEGIN FB_UDR_MESSAGE(InMessage, (FB_CHAR(8191), afilename) + (FB_BLOB, ablob) ); FB_UDR_MESSAGE(OutMessage, - (FB_BLOB, ablob) (FB_BIGINT, result) ); AutoRelease att; AutoRelease tra; +AutoRelease Blob; FB_UDR_EXECUTE_FUNCTION { @@ -208,7 +206,8 @@ FB_UDR_EXECUTE_FUNCTION return; } - AutoRelease Blob(att->createBlob(status, tra, &out->ablob, 0, nullptr)); + // This is wrong - the calling application should pass in a blob handle + AutoRelease Blob(att->createBlob(status, tra, &in->ablob, 0, nullptr)); if (Blob == nullptr) { out->result = -1; return; @@ -217,7 +216,7 @@ FB_UDR_EXECUTE_FUNCTION vector Buffer (MaxSegmentSize, 0); streamsize DataSize; - while ( !File.good() ) { + while ( File.good() ) { File.read( Buffer.data(), Buffer.size() ); DataSize = File.gcount(); Blob->putSegment( status, DataSize, Buffer.data() );