PostgreSQL Bugs

Collected from the PG bugs email list.

Bug ID16230
PG Version12.1
OSlinux / platform independent
Opened2020-01-25 19:05:22+00
Reported byClemens Eisserer

Body of first available message related to this bug follows.

The following bug has been logged on the website:

Bug reference:      16230
Logged by:          Clemens Eisserer
Email address:      (redacted)
PostgreSQL version: 12.1
Operating system:   linux / platform independent

Boolean columns always seem to stick to "false" after updateRow() is called
on updateable ResultSets (this is a regression and worked with 
PostgreSQL-8.4.21 & postgresql-8.4-701.jdbc3.jar ).
 The value stored however is correct, and calling refreshRow() right after
updateRow() seems to restore the "old" behaviour and restores the value set
a few lines aboce.

In PgResultSet.getBoolean() there is manual type conversion from byte[] to
boolean going on:

    int col = columnIndex - 1;
    if (Oid.BOOL == fields[col].getOID()) {
      final byte[] v = thisRow[col];
      return (1 == v.length) && (116 == v[0]); // 116 = 't'

... so in case the value of thisRow[col] is a single character with the
letter 't' the check succeeds.
This is the case when the value was sent from the server (right after the
select or after calling refreshRow()).

However after updateRow(), fields[col]. contains the string "true", because
of length != 1, the check fails.

Code to trigger the problem:

CREATE TABLE sometable (id integer NOT NULL, someprop boolean DEFAULT

//JDBC access
        Statement st =
        ResultSet rs = st.executeQuery("SELECT * FROM sometable WHERE
        System.out.println(rs.getBoolean("someprop")); // value stored in
        rs.updateBoolean("vereinsFlugzeug", true);
        System.out.println(rs.getBoolean("someprop")); //Matches the
value set above (true)
     //   rs.refreshRow();   //fetches the value stored
        System.out.println(rs.getBoolean("someprop")); // always returns


2020-01-25 19:05:22+00PG Bug reporting formBUG #16230: Boolean column stick to "false" after calling updateRow() on updateable ResultSet
2020-01-26 06:56:53+00"David G(dot) Johnston"Re: BUG #16230: Boolean column stick to "false" after calling updateRow() on updateable ResultSet