2017-08-27 18:13 GMT+03:00 Tom Lane <t...@sss.pgh.pa.us>: > Dmitry Igrishin <dmit...@gmail.com> writes: > > I'm working on finishing beta release of my C++ API for PostgreSQL. The > > library > > have simple SQL parser (preprocessor) to support the queries like that: > > > SELECT :"column", $tag$constant string$tag$ > > FROM :tables > > WHERE name LIKE :'name' AND > > sex = $1 AND > > age > $age > > > where: > > :"column" is a variable which will be quoted as identifier (like in > > psql), > > :tables is a variable which will be not be quoted at all (like in > psql), > > :'name' is a variable which will be quoted as literal (like in psql), > > $1 is a positional parameter, > > $age is a named parameter > > > Is there are any contraindications/caveats/gotchas on using the dollar > sign > > as a prefix for the named parameters? > > How are you going to distinguish named parameters from dollar-quote tags? >
Well, since "The tag, if any, of a dollar-quoted string follows the same rules as an unquoted identifier ... ", dollar-quote tags cannot contain spaces, right? This fact can be used to distingush named parameters from dollar-quote tags. If so, the only problem I see here is legalisation of spaces in the tags in future releases, for example: select $foo bar$stuff$foo bar$; > > I think you're going to end up with weird corner case behaviors if > you try to squeeze still another meaning into "$letters..." > But yes, probably it is better to use another syntax for named parameters. How about ":_parameter_"? (Looks not so nice as "$parameter", but compatible with psql and can be used as easy query testing.) Thanks!