Thread: Parse a statement, get parameter types and return types
Given a statement, eg: select foo from bar where col = $1 I'd really like to get the types deduced by the PostgreSQL parser for the input variables ($1, etc.) and the result column(s). eg. it might be $1 :: int4 and foo :: text, or whatever. It seems from reading about PQprepare that getting the input types isn't yet possible, but might be in future: http://www.postgresql.org/docs/current/static/libpq-exec.html#AEN23157 I have no idea where to start getting the result types. Is this possible in some way? Is the data perhaps hidden in one of the pg_* system tables? Note that I don't want to actually execute the statement, just parse it. Rich. -- Richard Jones, CTO Merjis Ltd. Merjis - web marketing and technology - http://merjis.com Team Notepad - intranets and extranets for business - http://team-notepad.com
Richard Jones <rich@annexia.org> writes: > Given a statement, eg: > select foo from bar where col = $1 > I'd really like to get the types deduced by the PostgreSQL parser for > the input variables ($1, etc.) and the result column(s). This is possible at the protocol level -- see Describe Statement. I'm not sure which client libraries let you get at the results ... libpq isn't one of them :-( regards, tom lane
On Mon, Jul 18, 2005 at 09:58:44AM -0400, Tom Lane wrote: > This is possible at the protocol level -- see Describe Statement. > I'm not sure which client libraries let you get at the results ... > libpq isn't one of them :-( Thanks for answering my question so promptly! I've made a small patch against 8.0.3 which adds this functionality to libpq-fe. However I am not very certain of how the asynchronous stuff works in this library, so it will need careful checking. Nevertheless, it Works For Me in the limited testing I have done against a 7.4 server. http://annexia.org/tmp/PQsendDescribeStatement.diff Note the user is expected to free(3) the Oids (types) array returned by PQgetDescription. Rich. -- Richard Jones, CTO Merjis Ltd. Merjis - web marketing and technology - http://merjis.com Team Notepad - intranets and extranets for business - http://team-notepad.com