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

Reply via email to