External Engines, UDR Function, IN Param ----------------------------------------
Key: CORE-5403 URL: http://tracker.firebirdsql.org/browse/CORE-5403 Project: Firebird Core Issue Type: Bug Components: API / Client Library Affects Versions: 3.0.1, 3.0.0, 4.0 Initial Reporter: Norbert Saint Georges CREATE OR ALTER FUNCTION INT16_BIN( FINT16 SMALLINT) RETURNS CHAR(2) CHARACTER SET OCTETS EXTERNAL NAME 't4s_to_bin!int16_bin' ENGINE UDR; int16Procedure = class(IExternalFunctionImpl) ... procedure int16Procedure.execute(status: IStatus; context: IExternalContext; inMsg: Pointer; outMsg: Pointer); var fsmal : int16; inbuffer, outbuffer: array of byte; isnull : wordbool; wordval : word; begin inbuffer := inMsg ; move(inbuffer[0],int16(fsmal),sizeof(int16)); move(inbuffer[2],word(wordval),2); isnull := wordval<>0; outbuffer := outmsg; ...... select int16_bin(0) from rdb$database outbuffer := outmsg; <-- ERROR : Invalid pointer operation ! /*----------------------------------------------------------------------*/ CREATE OR ALTER FUNCTION INT32_BIN( FINT32 INTEGER) RETURNS CHAR(4) CHARACTER SET OCTETS EXTERNAL NAME 't4s_to_bin!int32_bin' ENGINE UDR; int32Procedure = class(IExternalFunctionImpl) ... procedure int32Procedure.execute(status: IStatus; context: IExternalContext; inMsg: Pointer; outMsg: Pointer); var fsmal : int32; inbuffer, outbuffer: array of byte; isnull : wordbool; wordval : word; begin inbuffer := inMsg ; move(inbuffer[0],int32(fsmal),sizeof(int32)); move(inbuffer[2],word(wordval),2); isnull := wordval<>0; outbuffer := outmsg; ...... select int32_bin(0) from rdb$database; outbuffer := outmsg; <-- ERROR : Invalid pointer operation ! select int32_bin(32768) from rdb$database; fsmal := 32768; wordval := 0; isnull := false; select int32_bin(-32768) from rdb$database; fsmal := -32768; wordval := 65535; <-- Error; isnull := true; <-- Error; select int32_bin(2147483647) from rdb$database; fsmal := 2147483647; wordval := 32767; <-- Error; isnull := true; <-- Error; select int32_bin(-2147483648) from rdb$database; fsmal := -2147483648; wordval := 32768; <-- Error; isnull := true; <-- Error; /*----------------------------------------------------------------------*/ CREATE OR ALTER FUNCTION INT64_BIN( FINT64 BIGINT) RETURNS CHAR(8) CHARACTER SET OCTETS EXTERNAL NAME 't4s_to_bin!int64_bin' ENGINE UDR; int64Procedure = class(IExternalFunctionImpl) ... procedure int64Procedure.execute(status: IStatus; context: IExternalContext; inMsg: Pointer; outMsg: Pointer); var fsmal : int64; inbuffer, outbuffer: array of byte; isnull : wordbool; wordval : word; begin inbuffer := inMsg ; move(inbuffer[0],int64(fsmal),sizeof(int64)); move(inbuffer[2],word(wordval),2); isnull := wordval<>0; outbuffer := outmsg; ...... for all 'select int64_bin(?) from rdb$database;' outbuffer := outmsg; <-- ERROR : Invalid pointer operation ! -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------------ Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel