JDBC driver doesn't handle NaN values

From: Jonathan Purvis <jon(at)reeltwo(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: JDBC driver doesn't handle NaN values
Date: 2004-01-09 03:01:34
Message-ID: 3FFE198E.8080604@reeltwo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-jdbc

The JDBC driver that ships with PostgreSQL 7.4.1 doesn't insert floats
of value NaN. As it uses Float.toString(x) to convert the value for
insertion into the database, it tries to insert NaN instead of 'NaN' and
gets the error "Attribute 'nan' not found". The same bug occurs for
doubles and will probably occur for infinite values as well (i haven't
tested it). This bug also exists in 7.2.4 and in the 7.2.1 version
currently in Debian stable.

Here is a patch for the
"src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java"
file. There may need to be other files changed (eg in the jdbc2 or
jdbc3 directories), but i don't know where.

1062c1062,1063
< bind(parameterIndex, Float.toString(x), PG_FLOAT);
---
> String value = Float.isNaN(x) ? "'NaN'" : Float.toString(x);
> bind(parameterIndex, value, PG_FLOAT);
1075c1076,1077
< bind(parameterIndex, Double.toString(x), PG_DOUBLE);
---
> String value = Double.isNaN(x) ? "'NaN'" : Double.toString(x);
> bind(parameterIndex, value, PG_DOUBLE);
1553a1556,1559
> else if (x instanceof Float)
> return ((Float) x).isNaN() ? "'NaN'" : x.toString();
> else if (x instanceof Double)
> return ((Double) x).isNaN() ? "'NaN'" : x.toString();
1555,1556c1561
< x instanceof Double || x instanceof Short ||
< x instanceof Number || x instanceof Float)
---
> x instanceof Number || x instanceof Short)

Regards,

Jon

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Denis N. Stepanov 2004-01-09 06:10:46 Re: BUG #1044: snprintf() shipped with PostgreSQL is not
Previous Message Tom Lane 2004-01-09 02:22:33 Re: BUG #1045: hostname lookup in psql or libpg.sl does work

Browse pgsql-jdbc by date

  From Date Subject
Next Message Antonio Gallardo 2004-01-09 05:18:39 [BUG] - Invalid UNICODE character sequence found (0xc000)
Previous Message Oliver Jowett 2004-01-08 22:56:25 Re: PreparedStatement parameters and mutable objects