Re: Support for H2Database

"hkara1" <[email protected]>
Newsgroups gmane.comp.java.orm.simpleorm
Message-ID <[email protected]>
Hi,
In your implementation (v.3.2), you have put for SDriverHSQLH2

    protected OffsetStrategy getOffsetStrategy() {
		return OffsetStrategy.JDBC;
	}

This causes an error indicating that this is not supported.
Overring with 

  @Override
  protected OffsetStrategy getOffsetStrategy() {
	return OffsetStrategy.QUERY;
  }

for H2 driver works correctly.

Harry

--- In [email protected], Anthony Berglas <anthony@...> wrote:
>
> Hello Harry,
> 
> Thanks for your work on H2, which looks quite good.  I'm thinking we 
> should probably make it the default db in the next release of 
> SimpleORM.  The compatibility with the PostgreSQL might be handy for 
> people like Franck.
> 
> Unlike HSQLDB H2 seems to support locking.  Maybe try override
>          public boolean supportsLocking() {
>                  return true; // was false.
>          }
> It would be interesting to know if that fixes the lock test.
> 
> I do not understand your point about Enum.  The current code is
>    return ((Enum<T>)value).name();
> where .name() returns a string.
> 
> Your Offset/Limit code also works for HSLQDB, so has been added to 
> the SDriverHSQLH2.
> 
> As to registering drivers,  I have added the H2 driver to the current 
> version in subversion.  I strongly suggest that you check out from 
> there.   I have added your updates, please check out and confirm that 
> they work for you.  (The crude code in SDriver that registers them 
> could be improved.)
> 
> Anthony
> 
> 
> At 03:27 AM 1/10/2008, hkara1 wrote:
> 
> >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 
> ><mailto:SimpleORM%40yahoogroups.com>[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>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.
> > >
> >
> >
> 
> 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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.