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