pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
PQprepare question
6+ messages / 3 participants
[nested] [flat]

* PQprepare question
@ 2007-05-11 11:16  Michael Meskes <meskes@postgresql.org>
  0 siblings, 1 reply; 6+ messages in thread

From: Michael Meskes @ 2007-05-11 11:16 UTC (permalink / raw)
  To: pgsql-interfaces

According to the docs parameters are referenced as $1, $2, and so. Is
there a reason not to use "?" as placeholder? It seems to be quite
common to use "?" and of course a simple counting gives the same
information.

ECPG used to accept "?" notation. Now I started to switch from PQexec to
PQexecParams and at the same time add PQprepare. However, I'd like to
still be able to accept old sources using "?". The question now is, do I
replace the "?"s on the clien side in ecpglib or libpq, or is it
possible to add this in the backend for more general use?

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!



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: PQprepare question
@ 2007-05-11 13:08  Tom Lane <tgl@sss.pgh.pa.us>
  parent: Michael Meskes <meskes@postgresql.org>
  0 siblings, 2 replies; 6+ messages in thread

From: Tom Lane @ 2007-05-11 13:08 UTC (permalink / raw)
  To: Michael Meskes <meskes@postgresql.org>; +Cc: pgsql-interfaces

Michael Meskes <meskes@postgresql.org> writes:
> According to the docs parameters are referenced as $1, $2, and so. Is
> there a reason not to use "?" as placeholder?

It's an operator name.

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: PQprepare question
@ 2007-05-11 13:32  Gregory Stark <stark@enterprisedb.com>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  1 sibling, 0 replies; 6+ messages in thread

From: Gregory Stark @ 2007-05-11 13:32 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Michael Meskes <meskes@postgresql.org>; pgsql-interfaces

"Tom Lane" <tgl@sss.pgh.pa.us> writes:

> Michael Meskes <meskes@postgresql.org> writes:
>> According to the docs parameters are referenced as $1, $2, and so. Is
>> there a reason not to use "?" as placeholder?
>
> It's an operator name.

Most drivers such as JDBC and DBD::Pg do allow you to use ? parameters because
they're the ODBC standard. But they're just replacing them with $1 and so on
behind your back. If you want your code to be portable to other databases then
it makes sense to use ? 

But otherwise there are a few advantages to using $1, $2... a) You can change
your query to possibly use the arguments in a different order without having
to change the execute parameters as well. b) You can use a parameter multiple
times in a query without having to burden your execute call site with multiple
copies of the parameter.

I think you lose if you have an operator ? and want to use these drivers
though. Even if you only use $n parameters the driver may still get confused.
(At the very least if you ever have a query with no parameters and a ?
operator in it). 

-- 
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com




^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: PQprepare question
@ 2007-05-11 13:48  Michael Meskes <meskes@postgresql.org>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  1 sibling, 1 reply; 6+ messages in thread

From: Michael Meskes @ 2007-05-11 13:48 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Michael Meskes <meskes@postgresql.org>; pgsql-interfaces

On Fri, May 11, 2007 at 09:08:01AM -0400, Tom Lane wrote:
> Michael Meskes <meskes@postgresql.org> writes:
> > According to the docs parameters are referenced as $1, $2, and so. Is
> > there a reason not to use "?" as placeholder?
> 
> It's an operator name.

Ah, didn't notice. But that means that ecpg should not accept "?" as
placeholder either as this is prone to give errors depending on the
usage right? I'm not sure how often this is used with external strings
that are prepared. The internal stuff could easily be changed.

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!



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: PQprepare question
@ 2007-05-11 13:52  Tom Lane <tgl@sss.pgh.pa.us>
  parent: Michael Meskes <meskes@postgresql.org>
  0 siblings, 1 reply; 6+ messages in thread

From: Tom Lane @ 2007-05-11 13:52 UTC (permalink / raw)
  To: Michael Meskes <meskes@postgresql.org>; +Cc: pgsql-interfaces

Michael Meskes <meskes@postgresql.org> writes:
> On Fri, May 11, 2007 at 09:08:01AM -0400, Tom Lane wrote:
>> It's an operator name.

> Ah, didn't notice. But that means that ecpg should not accept "?" as
> placeholder either as this is prone to give errors depending on the
> usage right?

I'd vote that way if you haven't accepted it in the past.  Otherwise
you'll need some kind of compromise for backward compatibility ...

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: PQprepare question
@ 2007-05-12 11:35  Michael Meskes <meskes@postgresql.org>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 0 replies; 6+ messages in thread

From: Michael Meskes @ 2007-05-12 11:35 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Michael Meskes <meskes@postgresql.org>; pgsql-interfaces

On Fri, May 11, 2007 at 09:52:55AM -0400, Tom Lane wrote:
> I'd vote that way if you haven't accepted it in the past.  Otherwise
> you'll need some kind of compromise for backward compatibility ...

In the past ecpg not only accepted "?" as placeholder but also created
it! This is what I was talking about, to not create those placeholders
anymore. As far as user supplied placehodlers are concerned I agree that
we need some backward compatibility. I think the best way is to
implement a command line option to enable the old behaviour.

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!



^ permalink  raw  reply  [nested|flat] 6+ messages in thread


end of thread, other threads:[~2007-05-12 11:35 UTC | newest]

Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2007-05-11 11:16 PQprepare question Michael Meskes <meskes@postgresql.org>
2007-05-11 13:08 ` Tom Lane <tgl@sss.pgh.pa.us>
2007-05-11 13:32   ` Gregory Stark <stark@enterprisedb.com>
2007-05-11 13:48   ` Michael Meskes <meskes@postgresql.org>
2007-05-11 13:52     ` Tom Lane <tgl@sss.pgh.pa.us>
2007-05-12 11:35       ` Michael Meskes <meskes@postgresql.org>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox