Re: Support for H2Database
"hkara1" <[email protected]>
| Newsgroups | gmane.comp.java.orm.simpleorm |
|---|---|
| Message-ID | <[email protected]> |
Hi, the unit tests are OK, except for the long transaction test
that fails with a lock timeout (this should not be too serious).
BUT READ ON !
However, the unit tests only work for H2 version 1.0, version 0.9
raises some errors, especially for correlated queries. So ONLY USE
V. 1.0 (and above, when available) of H2.
There is also a problem I encountered in the SFieldEnum class,
because H2 tries to write it as Object, and this raises an error :
Value too long for column ETYPE:
'aced00057e72002173696d706c656f726d2e6578616d706c65732e456d706c6f79656524455479706500000000000000001200007872000e6a6176612e6c616...
[90005-79]
Now the column is declared as VARCHAR when SFieldEnum is used, so
I guess it should return an object of type String (not of type
EnumClass). So the unit test works OK when I add the following
method to SFieldEnum :
@Override
public Object writeFieldValue(Object value) {
if (value == null) return null;
return value.toString();
}
And anyway Enums should be transformed to Strings using toString()
according to the JDK docs.
Here is the driver I have used :
/**
* The H2 is mostly HSQL (H2 is a fork, by the original author of HSQLDB)
*/
public class H2Driver
extends SDriverHSQL
{
@Override
protected String driverName() {
return "H2 JDBC Driver";
}
@Override
protected OffsetStrategy getOffsetStrategy() {
return OffsetStrategy.QUERY;
}
@Override
protected String limitSQL(long offset, long limit) {
StringBuffer sb = new StringBuffer();
if (limit != Integer.MAX_VALUE) sb.append(" LIMIT "+limit);
if (offset > 0) sb.append(" OFFSET "+offset);
return sb.toString();
}
}
And in the TestUte class, I have added the driver registration
when the properties file gets loaded; this should not be
necessary if the H2 driver is built-in
...
in.close();
new H2Driver().registerDriver();
...
I guess maybe in the future we could "standardize" a bit more
the way someone can add a driver for a particular database,
without having to include it in the H2 distribution (I am thinking
of sqlite, for example, which has peculiar SQL but has some very
interesting cross-platform usages, where not all of Simpleorm would
work, but sufficiently to be interestin). We could look for a
system property like "simpleorm.extra.drivers" and use
the class names declared there, for example. This would
remove the need to support those external drivers, that would come
in separate jars from elsewhere.
Hope this helps,
Harry
--- In [email protected], Anthony Berglas <anthony@...> wrote:
>
> Oops, I see what you have done, just extended HSQL Driver. I'll
> refactor a bit and add it.
>
> Please confirm the unit tests pass.
>
> Anthony
>
> At 07:39 PM 25/09/2008, Anthony Berglas wrote:
> >Hello Harry,
> >
> >Thanks for that.
> >
> >But before I include your code, what about the other things in
> >SDriverHSQL? In particular, is the support for SEQUENCES the same
> >in H2 as it is in HSQL? Did you remove the code deliberately?
> >
> >Your loading code is OK, but if you look at the beginning of
> >SDriver.java you will see where drivers are loaded
> >automatically. I'll do that when your done.
> >
> >Anthony
> >
> >At 07:25 PM 23/09/2008, you wrote:
> >
> >>Hi,
> >>
> >>I've been using this just as you described, and it works fine.
> >>Here is the class I use :
> >>
> >>package org.hmn.jrsd.demo;
> >>
> >>import simpleorm.drivers.SDriverHSQL;
> >>import simpleorm.sessionjdbc.SDriver;
> >>
> >>/*
> >>*
> >>* Cree par Harry Karadimas a 9 sept. 08
> >>*/
> >>/**
> >>* The H2 is mostly HSQL (H2 is a fork, by the original author of
HSQLDB)
> >>*/
> >>public class H2Driver
> >>extends SDriverHSQL
> >>{
> >>@Override
> >>protected String driverName() {
> >>return "H2 JDBC Driver";
> >>}
> >>
> >>}
> >>
> >>To use the driver, it must first be registered when the
> >>application starts :
> >>
> >>//we register the H2 driver
> >>new H2Driver().registerDriver();
> >>
> >>You can then connect to the H2 database as usual :
> >>
> >>try {
> >>Class.forName("org.h2.Driver");
> >>driverLoaded = true;
> >>}
> >>catch (Exception ex) {
> >>throw new SQLException("Could not load H2 driver ("+ex+")");
> >>}
> >>Connection cxn = DriverManager.getConnection(url, user, password);
> >>
> >>I don't really know if that is the best way to do it, however.
> >>
> >>Harry
> >>
> >>--- In
> >><mailto:SimpleORM%40yahoogroups.com>[email protected],
> >>Anthony Berglas <anthony@> wrote:
> >> >
> >> > Have not done this yet. But if you copy the HSQL driver it should
> >> > only require trivial changes. SimpleORM minimizes database
> >>dependent code.
> >> >
> >> > If you do this and it runs through the test cases then please
post it
> >> > back to the list and I'll add it to the source.
> >> >
> >> > Anthony
> >> >
> >> > At 06:15 AM 23/09/2008, alspaughb wrote:
> >> > >Does SimpleORM support H2Database? I can't find an SDriver
subclass
> >> > >for it.
> >> > >
> >> > ><http://www.h2database.com>http://www.h2database.com
> >> > >
> >> > >I like the fact that H2 is lightweight, pure Java, and
supports multi
> >> > >version concurrency.
> >> > >
> >> > >Bruce
> >> >
> >> > Dr Anthony Berglas, anthony@ Mobile: +61 4 4838 8874
> >> > Just because it is possible to push twigs along the ground with
ones
> >>nose
> >> > does not necessarily mean that is the best way to collect firewood.
> >> >
> >>
> >>
> >
> >Dr Anthony Berglas, anthony@... Mobile: +61 4 4838 8874
> >Just because it is possible to push twigs along the ground with
ones nose
> >does not necessarily mean that is the best way to collect firewood.
>
> Dr Anthony Berglas, anthony@... Mobile: +61 4 4838 8874
> Just because it is possible to push twigs along the ground with ones
nose
> does not necessarily mean that is the best way to collect firewood.
>
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/SimpleORM/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/SimpleORM/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:[email protected]
mailto:[email protected]
<*> To unsubscribe from this group, send an email to:
[email protected]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/