On 16 January 2017 at 16:20, Kevin Wooten <kdubb@me.com> wrote:
As the OP I’d like to make a clarification….
I didn’t want to use a string of “1.0” and convert it to a Boolean. The driver, in its test suite, tests for this specific case (and a few others). These seemed really out of the norm since the database doesn’t support this. Thus my investigation began.
Since we now know the JDBC spec doesn’t support this (thanks to all of Mark Rotteveel’s sleuthing) & we know Postgres doesn’t support this. It seems the “feature" should be removed or placed behind an option. Postgres results in an error here and considering this is a driver tied to that database I look to that to clarify ambiguity. These examples should all result in an error.
Yes, I agree, a "feature" that allows bad code should be considered a "bug".
The OP in the original post used a string of "1.0" and wanted to convert it into a boolean. If you use setBoolean in a prepared statement it expects the argument to be a "numeric" type, so it is not surprising that the string was converted to a double. You'd expect something along the lines of ps.setBoolean(5,"xyz") to throw an error.
I don't know how many string values are to be considered "true" in the application. Maybe use some regular expressions to suss out "true" values?