Thread: cannot dollar-quote $$?$$ in PreparedStatements

cannot dollar-quote $$?$$ in PreparedStatements

From
Marc Herbert
Date:
With 8.0 postgresql and driver, this works fine:
ps = con.prepareStatement("insert into product values(?, '?' , ?)");

But this fails:
ps = con.prepareStatement("insert into product values(?, $$?$$ , ?)");

It looks like "someone" (driver or engine?) is counting 3 parameters instead of 3:

org.postgresql.util.PSQLException: Pas de valeur specifiee pour le parametre 3.
    at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:102)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:166)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:389)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:330)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:282)
    at TestFetchSize.main(TestFetchSize.java:86)


How dollar-quoting and question marks are supposed to interact?
Sorry if this a well-known issue.


Re: cannot dollar-quote $$?$$ in PreparedStatements

From
Kris Jurka
Date:

On Wed, 11 Jan 2006, Marc Herbert wrote:

>
> With 8.0 postgresql and driver, this works fine:
> ps = con.prepareStatement("insert into product values(?, '?' , ?)");
>
> But this fails:
> ps = con.prepareStatement("insert into product values(?, $$?$$ , ?)");
>
> It looks like "someone" (driver or engine?) is counting 3 parameters
> instead of 3:
>

This is a known issue.  The driver has no knowledge of dollar quotes in
its query parser.  This is not just a problem for parameters, but also an
issue when people want to issue a create function command with
Statement.execute("CREATE FUNCTION f() RETURNS int AS $$ [a number of
statements separated by semicolons] $$ language plpgsql");  The driver
will detect the semicolons and try to execute each fragment separately.
So this is a know issue with the only workaround being to not use dollar
quotes.

Kris Jurka