Subject | Problem with loading libfbclient.so under linux |
---|---|
Author | b0bik2000 |
Post date | 2008-12-09T09:55:36Z |
Hello
I have a little problem with udf function that needs to load fbclient
library under linux.
It is about: FirebirdSS-2.1.1.17910-0.ntpl.i686.tar.gz.tar
After "instalation" I did following things:
1. aliases.conf - new line pointing to my fdb file
2. firebird.conf:
RemoteServicePort = 5005
UdfAccess = Restrict UDF
BugcheckAbort = 1
3. Restart firebird server
I created a simple library with - Free Pascal Compiler:
test.dpr:
library test;
uses funcs in 'funcs.pas';
exports ftest;
begin
end.
funcs.pas:
unit funcs;
interface
uses Types;
type
TM = record
tm_sec: integer;
tm_min: integer;
tm_hour: integer;
tm_mday: integer;
tm_mon: integer;
tm_year: integer;
tm_wday: integer;
tm_yday: integer;
tm_isdst: integer;
end;
ISC_TIMESTAMP = record
timestamp_data: LongInt;
timestamp_time: DWord;
end;
PTM = ^TM;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;
procedure isc_decode_timestamp(ib_date: PISC_TIMESTAMP; tm_date: PTM);
cdecl; external 'fbclient';
function ib_util_malloc(l: integer): pointer; cdecl; external
'ib_util';
function ftest(aDateTime : PISC_TIMESTAMP): Integer; cdecl;
implementation
function ftest(aDateTime: PISC_TIMESTAMP): Integer; cdecl;
var theTM: TM;
begin
Result := 0;
isc_decode_timestamp(aDateTime, @theTM); {*}
Result := 1;
end;
end.
After building library I copied it into UDF directory
(/opt/firebird/UDF/)
I declared external function using:
DECLARE EXTERNAL FUNCTION FTEST
TIMESTAMP NULL
RETURNS INTEGER BY VALUE
ENTRY_POINT 'ftest'
MODULE_NAME 'test'
After committing, I connected to my database using isql utility and
run a query:
select ftest(current_timestamp) from rdb$database
and nothing, query execution never ends. But neither fbserver nor
fbguard process takes lot of CPU time. When I connect to Linux machine
from Windows (using flamerobin) and execute the same query, flame
writes:
"Starting transaction ..."
and nothing happens too.
When I comment line marked with {*} in my udf everything works OK.
Where did I make mistake ?
Best regards
b0bik
I have a little problem with udf function that needs to load fbclient
library under linux.
It is about: FirebirdSS-2.1.1.17910-0.ntpl.i686.tar.gz.tar
After "instalation" I did following things:
1. aliases.conf - new line pointing to my fdb file
2. firebird.conf:
RemoteServicePort = 5005
UdfAccess = Restrict UDF
BugcheckAbort = 1
3. Restart firebird server
I created a simple library with - Free Pascal Compiler:
test.dpr:
library test;
uses funcs in 'funcs.pas';
exports ftest;
begin
end.
funcs.pas:
unit funcs;
interface
uses Types;
type
TM = record
tm_sec: integer;
tm_min: integer;
tm_hour: integer;
tm_mday: integer;
tm_mon: integer;
tm_year: integer;
tm_wday: integer;
tm_yday: integer;
tm_isdst: integer;
end;
ISC_TIMESTAMP = record
timestamp_data: LongInt;
timestamp_time: DWord;
end;
PTM = ^TM;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;
procedure isc_decode_timestamp(ib_date: PISC_TIMESTAMP; tm_date: PTM);
cdecl; external 'fbclient';
function ib_util_malloc(l: integer): pointer; cdecl; external
'ib_util';
function ftest(aDateTime : PISC_TIMESTAMP): Integer; cdecl;
implementation
function ftest(aDateTime: PISC_TIMESTAMP): Integer; cdecl;
var theTM: TM;
begin
Result := 0;
isc_decode_timestamp(aDateTime, @theTM); {*}
Result := 1;
end;
end.
After building library I copied it into UDF directory
(/opt/firebird/UDF/)
I declared external function using:
DECLARE EXTERNAL FUNCTION FTEST
TIMESTAMP NULL
RETURNS INTEGER BY VALUE
ENTRY_POINT 'ftest'
MODULE_NAME 'test'
After committing, I connected to my database using isql utility and
run a query:
select ftest(current_timestamp) from rdb$database
and nothing, query execution never ends. But neither fbserver nor
fbguard process takes lot of CPU time. When I connect to Linux machine
from Windows (using flamerobin) and execute the same query, flame
writes:
"Starting transaction ..."
and nothing happens too.
When I comment line marked with {*} in my udf everything works OK.
Where did I make mistake ?
Best regards
b0bik