Subject | RE: [ib-support] gds_$compile_request failed error message |
---|---|
Author | Mark Shapiro |
Post date | 2002-02-14T14:28:39Z |
Hmm. I did have a table that had some large varchar fields in it... The
odd thing is, this table has been accessed in the same way almost every day
for over a year, without causing any problems. o_O I reduced the field
sizes and the problem seems to have gone away.
Thanks.
-----Original Message-----
From: news@... [mailto:news@...]On Behalf Of
Claudio Valderrama C.
Sent: Thursday, February 14, 2002 1:29 AM
To: ib-support@yahoogroups.com
Subject: Re: [ib-support] gds_$compile_request failed error message
""Mark Shapiro"" <shapirom@...> wrote in message
news:NBBBJFDMLBCCJIDNOIIFGECNLIAB.shapirom@......
Do you have really a monster procedure doing big SELECT statements?
Do you join views where each one produces a lot of long fields?
This message is telling you that the engine cannot return a message longer
than MAX_FORMAT_SIZE, that happens to be 64K-1.
The message length is the sum of its parameters' length. (This is internal
stuff, nothing that you're going to control in a stored proc directly.)
For example, this is possible:
SQL> select cast(0 as char(32000)) || cast(1 as char(32000)) || cast(1 as
char(2000)) from rdb$database;
=> ok
But this may cause problems:
SQL> select cast(0 as char(32000)) || cast(1 as char(32000)) || cast(1 as
char(4000)) from rdb$database;
================
²²²²²²²²²²²²²²²²
[snip]
²²²²²²²²²²²²²²²²
Statement failed, SQLCODE = -901
connection lost to database
Oh [red face], my example was extreme, I broke the engine! Do you want
another item for the bug tracker, Sean? <g> Certainly I wanted to
demonstrate the BLR error, not this. Using cast(), I threw the engine by the
window! It seems that I need two executions to kill the engine (the second
fails while being prepared), and the failure happens inside gds__free().
This means corrupted memory that the first run left.
What I wanted to demonstrate what this:
SQL> create table cc(a char(30000));
SQL> select a,a from cc; => 60000, ok
SQL> select a,a,a from cc; => see this, it is 90000.
Statement failed, SQLCODE = -104
invalid request BLR at offset 38
-Implementation limit exceeded
-block size exceeds implementation restriction
And this is the message I was prepared to reproduce. I hope I won't have to
live the equivalent Bill Gates' shame in that demo of Win98 when it crashed
in a simple Plug And Play test in front of the public, when it was being
launched officially. This is why I don't do IB/FB public presentations, less
even a demo.
:-)
C.
--
Claudio Valderrama C. - http://www.cvalde.com - http://www.firebirdSql.org
Independent developer
Owner of the Interbase® WebRing
To unsubscribe from this group, send an email to:
ib-support-unsubscribe@egroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
odd thing is, this table has been accessed in the same way almost every day
for over a year, without causing any problems. o_O I reduced the field
sizes and the problem seems to have gone away.
Thanks.
-----Original Message-----
From: news@... [mailto:news@...]On Behalf Of
Claudio Valderrama C.
Sent: Thursday, February 14, 2002 1:29 AM
To: ib-support@yahoogroups.com
Subject: Re: [ib-support] gds_$compile_request failed error message
""Mark Shapiro"" <shapirom@...> wrote in message
news:NBBBJFDMLBCCJIDNOIIFGECNLIAB.shapirom@......
>Do you have a statement that retrieves a lot of fields and they are long?
> The error messages are:
>
> Invalid request BLR at offset 21
> Implementation limit exceeded
> Block size exceeds implementation restriction
> gds_$compile_request failed
Do you have really a monster procedure doing big SELECT statements?
Do you join views where each one produces a lot of long fields?
This message is telling you that the engine cannot return a message longer
than MAX_FORMAT_SIZE, that happens to be 64K-1.
The message length is the sum of its parameters' length. (This is internal
stuff, nothing that you're going to control in a stored proc directly.)
For example, this is possible:
SQL> select cast(0 as char(32000)) || cast(1 as char(32000)) || cast(1 as
char(2000)) from rdb$database;
=> ok
But this may cause problems:
SQL> select cast(0 as char(32000)) || cast(1 as char(32000)) || cast(1 as
char(4000)) from rdb$database;
================
²²²²²²²²²²²²²²²²
[snip]
²²²²²²²²²²²²²²²²
Statement failed, SQLCODE = -901
connection lost to database
Oh [red face], my example was extreme, I broke the engine! Do you want
another item for the bug tracker, Sean? <g> Certainly I wanted to
demonstrate the BLR error, not this. Using cast(), I threw the engine by the
window! It seems that I need two executions to kill the engine (the second
fails while being prepared), and the failure happens inside gds__free().
This means corrupted memory that the first run left.
What I wanted to demonstrate what this:
SQL> create table cc(a char(30000));
SQL> select a,a from cc; => 60000, ok
SQL> select a,a,a from cc; => see this, it is 90000.
Statement failed, SQLCODE = -104
invalid request BLR at offset 38
-Implementation limit exceeded
-block size exceeds implementation restriction
And this is the message I was prepared to reproduce. I hope I won't have to
live the equivalent Bill Gates' shame in that demo of Win98 when it crashed
in a simple Plug And Play test in front of the public, when it was being
launched officially. This is why I don't do IB/FB public presentations, less
even a demo.
:-)
C.
--
Claudio Valderrama C. - http://www.cvalde.com - http://www.firebirdSql.org
Independent developer
Owner of the Interbase® WebRing
To unsubscribe from this group, send an email to:
ib-support-unsubscribe@egroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/