Thread: PQexecParams question
I had a closer look at PQexecParams and even started moving ecpglib to use this function. However, there is one behaviour that troubles me some. I declare a binary cursor using PQexecParams, which of course works nicely and then fetch data from it. I'm not able to tell whether the cursor is binary, unless I keep my own client side cursor list. So I call PQexecParams with the fetch command without knowing that the results are binary. Using the default values however all data is returned in ascii. It appears you have to tell the fetch command to return data in binary, or else it will return ascii, no matter how the cursor was defined. Is this a feature? Essantially with this behaviour programmers do not need to declare binary cursors at all because for a normal cursor the behaviour is exactly the same. I can surely work around this, for instance by calling PQexec instead for fetch commands, which does the right thing, but I wonder if this is desirable. Michael -- Michael Meskes Email: Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!
>I declare a binary cursor using PQexecParams, which of course works >nicely and then fetch data from it. I'm not able to tell whether the >cursor is binary, unless I keep my own client side cursor list. So I >call PQexecParams with the fetch command without knowing that the >results are binary. Using the default values however all data is >returned in ascii. It appears you have to tell the fetch command to >return data in binary, or else it will return ascii, no matter how the >cursor was defined. In the documentation for the frontend/backend protocol, it says: Note: The choice between text and binary output is determined by the format codes given in Bind, regardless of the SQLcommand involved. The BINARY attribute in cursor declarations is irrelevant when using extended query protocol. http://www.postgresql.org/docs/8.2/static/protocol-flow.html PQexecParams does the Bind behind the scenes, the resultFormat parameter deciding whether you get binary or text. -- Andrew McNamara, Senior Developer, Object Craft http://www.object-craft.com.au/
On Wed, May 16, 2007 at 09:13:42AM +1000, Andrew McNamara wrote: > In the documentation for the frontend/backend protocol, it says: > ... I wonder why I didn't see it myself. Anyway, thanks for the clarification. I'm not sure I like this situation, but will surely work around it, so ecpg remains working as it is right now. Michael -- Michael Meskes Email: Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!