On Tue, Sep 10, 2013 at 5:17 AM, Lachezar Dobrev <l.dobrev@gmail.com> wrote:
Hello colleagues,
There seems to be a problem with the latest driver and Timestamp arguments uses in IS NULL comparisons: QUERY: SELECT ? IS NULL ARGUMENTS: statement.setTimestamp(1, new Timestamp(System.currentTimeMillis()))
Result: Exception in thread "main" org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
The problem arises on: protocolVersion=3, or not specifying protocol version argument type: Timestamp
The problem does not arise on other types (tested on BigDecimal and String) The problem does not arise when using protocolVersion=2 The problem does not arise if the expression is not ? IS NULL
List of work-around methods: - Degrade the protocol: jdbc:postgresql://host:port/database?protocolVersion=2 * does not work with PgPool-2
- Explicitly cast the argument SELECT ?::timestamp IS NULL SELECT CAST(? AS timestamp) IS NULL * requires rewriting of currently working code