Re: queries against CIDR fail against 8.0.3? - Mailing list pgsql-jdbc

From Oliver Jowett
Subject Re: queries against CIDR fail against 8.0.3?
Date
Msg-id 433C7725.1040707@opencloud.com
Whole thread Raw
In response to queries against CIDR fail against 8.0.3?  (Russell Francis <rfrancis@ev.net>)
Responses Re: queries against CIDR fail against 8.0.3?  (Russell Francis <rfrancis@ev.net>)
List pgsql-jdbc
Russell Francis wrote:

> PreparedStatement s = dbConn.prepareStatement(
> "SELECT * FROM institution WHERE ( institution.network >>=  ? ) LIMIT 1" );
> s.setObject( 1, (String)request.getRemoteAddr() );

> net.ev.dao.DAOException: ERROR: operator does not exist: cidr >>=
> character varying

You will need to either create a PGobject subclass that returns the
correct typename (cidr), or explicitly cast to cidr in your query:

SELECT * FROM institution WHERE ( institution.network >>= ?::cidr )
LIMIT 1

> Does anyone have any ideas on how to address this issue?  Or at least an
> explanation as to why it works in 7.3.9 but not 8.0.3?

The 8.0 drivers type parameters more strongly than earlier drivers due
to a change in the protocol used, so setObject(String) is passing the
parameter explicitly as a 'text' value not as an untyped literal that
gets implicitly casted to cidr. See the archives for more details.

-O

pgsql-jdbc by date:

Previous
From: Kris Jurka
Date:
Subject: Re: "Conversion of interval failed" on PGInterval with
Next
From: Oliver Jowett
Date:
Subject: Re: Intermittent I/O error?