nonblocking PQsendQuery will fail for querysize > 8k - Mailing list pgsql-interfaces

From Andreas Pflug
Subject nonblocking PQsendQuery will fail for querysize > 8k
Date
Msg-id 3E88CE22.8010503@web.de
Whole thread Raw
Responses Re: nonblocking PQsendQuery will fail for querysize > 8k
List pgsql-interfaces
Repost from pgadmin-hackers
This happens with 7.3.2 windows libpq.

Regards,

Andreas

> -----Original Message-----
> From: Andreas Pflug [mailto:Andreas.Pflug@web.de] 
> Sent: 31 March 2003 17:57
> To: pgadmin-hackers@postgresql.org
> Subject: Re: [pgadmin-hackers] Maximum PQsendQuery size?
> 
> 
> Andreas Pflug wrote:
> 
> > I'm having trouble with PQsendQuery if sending medium sized 
> queries. 
> > Everything's fine with queries up to 8190 bytes (0x1fffe), but one 
> > byte more will not work. In this case, PQsendQuery and 
> PQconsumeInput 
> > will return ok, but PQisBusy stays busy. How can I get around this?
> >
> > Regards,
> >
> > Andreas
> >
> >
> I already found a solution in pgsql/src/interfaces/libpq/fe-misc.c.
> 
> conn->outBuffer initially has 8k size. For a successful 8190 byte
> execute, this contains a 'Q', the query and the terminating 
> zero byte. 
> If pqPutBytes() finds avail to be too small, it will first try to 
> pqSendSome(), but this will not be good if the connection is 
> nonblocking.
> 
> As a fix, the outbuffer is realloced to be big enough, before 
> processing 
> continues:
> 
>         avail = Max(conn->outBufSize - conn->outCount, 0);  
> >>>>>
>         if (nbytes > avail && pqIsnonblocking(conn))
>         {
>             char *newbuf;
>             conn->outBufSize = conn->outBufSize  - avail + nbytes;
>             newbuf = realloc(conn->outBuffer, conn->outBufSize);
>             conn->outBuffer = newbuf;
>             avail = conn->outBufSize - conn->outCount;
>         }
> <<<<<
>         remaining = Min(avail, nbytes);
> 
> 



pgsql-interfaces by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Oracle Porting, Compiere
Next
From: Tom Lane
Date:
Subject: Re: nonblocking PQsendQuery will fail for querysize > 8k