Ok looks like a comparision of an int and a long is always false, no matter
whether the underlying value is the same or not.
>From a technical point of view this is understandable but not from a logical
>point of view.
Still, I think the problem here is out test code that uses an int on one side
and an object on the other:
int id = department.getInt(db.DEPARTMENT.ID);
...
assertEquals(id, r.getValue(DEP.ID));
Hence we should eighter use int, long or objects on both sides.
Either this:
Object id = department.getValue(db.DEPARTMENT.ID);
...
assertEquals(id, r.getValue(DEP.ID));
or something like this:
int id = department.getValue(db.DEPARTMENT.ID);
...
assertEquals(id, r.getInt(DEP.ID));
(int or long doesn't matter)
Regards
Rainer
> from: Francis De Brabandere [mailto:[email protected]]
> to: [email protected]
> Re: Failure of PreparedStatementTest
>
> On Mon, Oct 10, 2011 at 4:51 PM, Rainer Döbele <[email protected]>
> wrote:
> > Hi Francis,
> >
> > it took me a while to find the cause for this bug.
> > Obviously it's the following line in the test that is the problem:
> > assertEquals(id, r.getValue(DEP.ID)); This assert fails if
> > id is int and getValue() returns a long.
> >
> > Strangely it does not fail if id is a long and you write:
> > assertEquals(id, r.getInt(DEP.ID)); which will also compare
> > a long with an int, but the other way round.
> >
> > In both cases the value is 1 - hence there are effectively equal.
> > (Is this a bug in JUnit?)
>
> Don't think this is a bug. I just think that assertEquals(int, int) has a
> specific
> behavior that assertEquals(Object, Object) does not have. What does java
> Long#equals(Integer) do?
>
> Cheers,
> Francis
>
> >
> > The reason why this error occurs now, is that previously in HSQLDB all
> integer columns were declared as BIGINT.
> > However all other drivers created integer columns as INT.
> > Now, there is a way to specify the size in the table definition:
> >
> > // DEFAULT (usually 4 bytes = 32bit)
> > DEPARTMENT_ID = addColumn("DEPARTMENT_ID",
> > DataType.INTEGER, DEFAULT, true);
> >
> > // SMALLINT (usually 2 bytes = 16bit)
> > DEPARTMENT_ID = addColumn("DEPARTMENT_ID",
> > DataType.INTEGER, SMALLINT, true);
> >
> > // BIGINT (usually 8 bytes = 64bit)
> > DEPARTMENT_ID = addColumn("DEPARTMENT_ID",
> > DataType.INTEGER, BIGINT, true);
> >
> > This is consistent over all drivers.
> > However the exact interpretation of INT, SMALLINT an BIGINT is left to the
> database.
> >
> > That also solves EMPIREDB-105.
> >
> > Regards
> > Rainer
> >
> >> from: [email protected] [mailto:[email protected]]
> >> to: [email protected]
> >> re: svn commit: r1180840 - /incubator/empire-db/trunk/empire-
> >> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
> >>
> >> Author: francisdb
> >> Date: Mon Oct 10 09:27:18 2011
> >> New Revision: 1180840
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1180840&view=rev
> >> Log:
> >> This id field is now int instead of long (is this expected?)
> >>
> >> Modified:
> >> incubator/empire-db/trunk/empire-
> >> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
> >>
> >> Modified: incubator/empire-db/trunk/empire-
> >> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
> >> URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-
> >>
> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java?rev=
> >> 1180840&r1=1180839&r2=1180840&view=diff
> >>
> ==========================================================
> >> ====================
> >> --- incubator/empire-db/trunk/empire-
> >> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
> >> (original)
> >> +++ incubator/empire-db/trunk/empire-
> >> db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
> Mon
> >> Oct 10 09:27:18 2011 @@ -54,7 +54,7 @@ public class
> >> PreparedStatementTest{
> >> department.setValue(db.DEPARTMENT.BUSINESS_UNIT, "test");
> >> department.update(conn);
> >>
> >> - long id = department.getInt(db.DEPARTMENT.ID);
> >> + int id = department.getInt(db.DEPARTMENT.ID);
> >> assertTrue("Department add failed", id > 0);
> >>
> >>
> >>
> >
> >
>
>
>
> --
> http://www.somatik.be
> Microsoft gives you windows, Linux gives you the whole house.