Subject | Re: IBO 4.9.14 Build 14 with stack overflow error on FB1.5 |
---|---|
Author | bausufm |
Post date | 2011-07-20T08:57:53Z |
Hi Jason,
thank you for the quick fix of the sql-statement.
But i still get an stack overflow error when a statement with a parameter in the where clause is prepared. Other statements are ok.
The stack overflow occurs because of an endless recursive loop:
...
TIB_Columns.GetCharId
TIB_Columns.GetCharSetFromSchema
TIB_Columns.GetNativeCharID
TIB_Columns.GetCharId
TIB_Columns.GetCharSetFromSchema
TIB_Columns.GetNativeCharID
TIB_Columns.GetCharId
TIB_Columns.GetTextInfo
I'm using Fb 1.5.6, IBO 4.9.14 latest Build and Delphi 7.
You can use any FB1.5 Database for reproducing the error.
Here is an example:
procedure TForm1.Button1Click(Sender: TObject);
var
qr: TIB_cursor;
cn : TIBODatabase;
begin
try
cn := TIBODatabase.create( self);
cn.Params.Add('USER NAME=SYSDBA');
cn.Params.Add('PROTOCOL=TCP/IP');
cn.server := 'localhost';
cn.path := 'c:\test.fdb'; // FB1.5 Dialect 1, Charset=None
cn.password := 'masterkey';
cn.connected := true;
qr := TIB_cursor.create( self);
qr.IB_Connection := cn;
qr.sql.text := 'select * from rdb$relations where rdb$relation_name = ''TEST''';
qr.prepare; // OK
qr.sql.text := 'select * from rdb$relations where rdb$relation_name = :name';
qr.prepare; // <--- access violation or stack overflow
qr.free;
except
on e:Exception do
begin
Showmessage(e.message);
end;
end;
end;
Regards
Falko Meinke
thank you for the quick fix of the sql-statement.
But i still get an stack overflow error when a statement with a parameter in the where clause is prepared. Other statements are ok.
The stack overflow occurs because of an endless recursive loop:
...
TIB_Columns.GetCharId
TIB_Columns.GetCharSetFromSchema
TIB_Columns.GetNativeCharID
TIB_Columns.GetCharId
TIB_Columns.GetCharSetFromSchema
TIB_Columns.GetNativeCharID
TIB_Columns.GetCharId
TIB_Columns.GetTextInfo
I'm using Fb 1.5.6, IBO 4.9.14 latest Build and Delphi 7.
You can use any FB1.5 Database for reproducing the error.
Here is an example:
procedure TForm1.Button1Click(Sender: TObject);
var
qr: TIB_cursor;
cn : TIBODatabase;
begin
try
cn := TIBODatabase.create( self);
cn.Params.Add('USER NAME=SYSDBA');
cn.Params.Add('PROTOCOL=TCP/IP');
cn.server := 'localhost';
cn.path := 'c:\test.fdb'; // FB1.5 Dialect 1, Charset=None
cn.password := 'masterkey';
cn.connected := true;
qr := TIB_cursor.create( self);
qr.IB_Connection := cn;
qr.sql.text := 'select * from rdb$relations where rdb$relation_name = ''TEST''';
qr.prepare; // OK
qr.sql.text := 'select * from rdb$relations where rdb$relation_name = :name';
qr.prepare; // <--- access violation or stack overflow
qr.free;
except
on e:Exception do
begin
Showmessage(e.message);
end;
end;
end;
Regards
Falko Meinke
--- In IBObjects@yahoogroups.com, "Support List" <supportlist@...> wrote:
>
> > Why is there any DISTINCT at all in this statement? When using UNION, it
> > is implicitly distinct, if you don't want things to be distinct, you have
> > to use UNION ALL.
> >
> > If you remove all three DISTINCTs, the result should be the same, the only
> > exception being that it also works on Firebird 1.5.
> >
> > Though that was from my SQL perspective, I've no clue about the IBO
> > perspective (so you might still get an overflow).
>
> I didn't realize earlier versions of Firebird would break as a result of
> that SQL statement. I have fixed this immediately and it will be in the next
> release.
>
> I cannot say why there was a stack overflow when it was modified as the
> results of the query should indeed be the same as Set points out.
>
> I already made the change and I get no stack overflow condition.
>
> Regards,
> Jason LeRoy Wharton
> www.ibobjects.com
>