[Info-Ingres] E_QS0018 Request for an illegal piece size. -- isIngres reacting to spam?

Martin Bowes martin.bowes at ctsu.ox.ac.uk
Wed Sep 19 06:51:28 CDT 2007


Whoops

 

Sorry about that, I had one sql loading into iidbdb and another into my
test database.  Change the code to load into the same database and
you'll see the problem. 

 

Marty

 

From: info-ingres-bounces at kettleriverconsulting.com
[mailto:info-ingres-bounces at kettleriverconsulting.com] On Behalf Of
Martin Bowes
Sent: 19 September 2007 12:38
To: info-ingres at kettleriverconsulting.com
Subject: [Info-Ingres] E_QS0018 Request for an illegal piece size. --
isIngres reacting to spam?

 

Hi Guys,

 

Since the ingres site has become bombarded with Penis enlargement spam,
I've been getting this strange error about illegal piece size  when
loading database procedures into a database.

 

Typically we see a procedure fail with a simple error, and then the
following - perfectly sound - procedure will generate errors:

 E_OP0886_QSF_PALLOC    Error calling QSF to allocate a piece of memory.

And either:

+ E_QS0001 QSF dynamic memory pool is exhausted.

+ E_QS0018 Request for an illegal piece size.  Size must be a positive
number of bytes.

 

I'm running  II 9.0.4 (a64.lnx/105)NPTL +patch12343.

 

Has anyone seen anything like this before?

 

Try this....

sql iidbdb <<SQL_END

\r

drop table base_table;

drop table base_table_audit;

commit

\p\g

create table base_table (

    id      integer not null not default,

    active  integer not null not default

    )

with nojournaling;

 

create table base_table_audit (

    change_action char(1) not null not default,

    changed_when  date not null not default,

    changed_who   char(32) not null not default,

    id      integer not null not default,

    active  integer not null not default

    )

with nojournaling;

\p\g

drop procedure bad_proc;

commit

\p\g

drop procedure good_proc;

commit

\p\g

\q

SQL_END

 

And then...

sql bowtest << SQL_END

\r

set autocommit on;

set trace point qs501;

\p\g

create procedure bad_proc (

    id_o          = integer,

    change_action = char(1)

) =

{

    -- This insert fails to mention the mandatory column 'active'

    -- and uses the system constant initial_user

    insert into base_table_audit (

        change_action, changed_when, changed_who, id

    ) values (

        :change_action, date('now') ,initial_user, :id_o

    );

};

\p\g

set trace point qs501;

\p\g

/* Procedure: good_proc

** This procedure is correct, but it will (occassionaly) fail with:

E_OP0886_QSF_PALLOC    Error calling QSF to allocate a piece of memory.

And either:

+ E_QS0001 QSF dynamic memory pool is exhausted.

+ E_QS0018 Request for an illegal piece size.  Size must be a positive
number of bytes.

**

** But the failure only seems to occur after the prior proceure
generates its

** error!

*/

create procedure good_proc (

    id_o          = integer,

    id_n          = integer,

    change_action = char(1)

) =

declare

    __msg = varchar(128) not null with default;

{

    if( id_n != id_o ) then

        __msg = 'cannot change primary key column ID value "' +
varchar(id_o)

            + '" to "' + varchar(id_n) + '"';

        raise error 100 :__msg;

    endif;

    insert into base_table_audit select

        :change_action, date('now'), initial_user, base_table.*

        from base_table

        where id=id_n;

};

\p\g

set trace point qs501;

\p\g

\q

SQL_END

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.kettleriverconsulting.com/mailman/private/info-ingres/attachments/20070919/492a5396/attachment-0001.html 


More information about the Info-Ingres mailing list