On 19 May 2015 at 10:23, Kevin Grittner <kgri...@ymail.com> wrote:

> David G. Johnston <david.g.johns...@gmail.com> wrote:
> > On Mon, May 18, 2015 at 3:31 PM, Bruno Harbulot <
> br...@distributedmatter.net>wrote:
>
> >> In the discussion on the OpenJDK JDBC list two years ago
> >> (
> http://mail.openjdk.java.net/pipermail/jdbc-spec-discuss/2013-February/000050.html
> ),
> >> Lance Andersen said "There is nothing in the SQL standard that
> >> would support the use of an '?' as anything but a parameter
> >> marker.".
>
> > ​"​CREATE OPERATOR is a PostgreSQL extension. There are no
> > provisions for user-defined operators in the SQL standard."
>
> Exactly.  The standard specifies the characters to use for the
> predicates that it defines, and provides no mechanism for adding
> additional predicates; but who in the world would want to exclude
> all extensions to the standard?
>
> > ​And by extension if indeed the standard does require the use of
> > "?" for parameters we are in violation there because the backend
> > protocol deals with $# placeholders and not "?"​
>
> We're talking about a different specification that has question
> marks as parameter placeholders.  That's in the Java Database
> Connector (JDBC) specification.  (It is apparently also specified
> in other documents, although I'm not familiar enough with those to
> comment.)  Note that it would create all sorts of pain if both the
> SQL statements and a connector issuing them used the same
> convention for substituting parameters; it is a *good* thing that
> plpgsql and SQL function definitions use a different convention
> than JDBC!
>
> The JDBC spec provides for escapes using curly braces (including
> product-specific escapes); it seems like a big mistake for us to
> have chosen a completely different mechanism for escaping the
> question mark character in a SQL statement.  Perhaps the least
> painful path would be to add support for {?} as the escape for a
> question mark, and a connection option to supplement that with
> support for the legacy \? escape.  I would bet a lot of money that
> even with an "if" test for that option, the curly brace escape
> would be faster than what's there now (when the option was not
> set).  Some operators would look a little funny in Java string
> literals, but that's not so bad.
>

Perhaps reviewing https://github.com/pgjdbc/pgjdbc/pull/187 might help
understand why we chose ??

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

Reply via email to