SQLiteStatement.columnValue returns a Long when an Integer is expected

Issue #15 closed
Former user created an issue

Originally reported on Google Code with ID 15 ``` When you use columnValue method to retrieve an Integer, you obtain a Long. Here is a small test case:

SQLiteStatement st = cnx.prepare("select 1;"); st.step(); Assert.assertEquals(Integer.class, st.columnValue(0).getClass());

The problem comes from SQLiteStatement.java, line 1044:

return value == ((long) ((int) value)) ? Integer.valueOf((int) value) : Long.valueOf(value);

This instruction works fine unless you mix Integer, Byte, Short, Long, Float or Double value as the result of the inline condition. For example, the following inline condition:

<cond> ? new Integer(1) : new String()

has a type of Object: the common base class of Integer and String. But the following condition:

<cond> ? new Integer(1) : new Long(1)

has a type of Long. This is because a promotion occurs on Integer and it becomes a Long.

you must use standard condition like:

if (value == (int)value) { return Integer.valueOf(value); } return Long.valueOf(value);

It works fine for me. ```

Reported by `olivier.monaco@free.fr` on 2010-08-19 12:18:18

Comments (3)

  1. Igor Sereda

    ``` fixed in revision 193 ```

    Reported by `sereda` on 2010-08-21 22:55:11 - Status changed: `Fixed`

  2. Igor Sereda

    Reported by `sereda` on 2010-08-23 20:10:30 - Status changed: `Delivered` - Labels added: FixVersion-201

  3. Log in to comment