Parameter placeholders, $n vs ?

From: Lele Gaifax <lele(at)metapensiero(dot)it>
To: pgsql-general(at)postgresql(dot)org
Subject: Parameter placeholders, $n vs ?
Date: 2018-05-24 07:28:15
Message-ID: 87o9h5bjhs.fsf@metapensiero.it
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi all,

while improving the technical documentation of my current project, I hit a SQL
statement that triggered a bug in my pg_query[1] based prettifier.

The statement in question was using '?' as param placeholders instead of the
'$n' style I'm used to: to my surprise the parser (pg_query uses the nice
standalone packaging of the PG parser provided by libpg_query[2]) accepted it
without problems, although emitting an AST that the prettifier was not able to
cope with.

Briefly:

$ diff -u <(echo 'SELECT * FROM foo WHERE bar = $1' | pgpp -t) \
<(echo 'SELECT * FROM foo WHERE bar = ?' | pgpp -t)
--- /dev/fd/63 2018-05-24 09:13:40.877301119 +0200
+++ /dev/fd/62 2018-05-24 09:13:40.877301119 +0200
@@ -56,8 +56,7 @@
],
"rexpr": {
"ParamRef": {
- "location": 30,
- "number": 1
+ "location": 30
}
}
}

While the fix to pg_query was trivial, to satisfy my own curiosity I looked
around to get evidence of whether the '?' style is officially accepted or
what.

The ParamRef documentation[3] does not mention that the "number" may be
"missing", and given that '?' is very difficult to search I failed to find a
definitive answer.

So the questions: is the '?' style placeholder a supported variant? and if so,
should the ParamRef doc tell something about that?

Thanks in advance,
ciao, lele.

[1] https://github.com/lelit/pg_query/
[2] https://github.com/lfittl/libpg_query
[3] https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/nodes/parsenodes.h;h=6390f7e8c129e84607e1bb3c56ddd8578115f298;hb=HEAD#l243
--
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele(at)metapensiero(dot)it | -- Fortunato Depero, 1929.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message talk to ben 2018-05-24 08:21:33 Re: Streaming Replication between PostGreSQL 9.2.2 on Red Hat and PostGreSQL 9.2.24 on Debian
Previous Message Andrey Borodin 2018-05-24 06:30:05 Re: Error on vacuum: xmin before relfrozenxid