I've experimented with H2 as well. It started off as a fork if h2, but appears 
to be much faster, especially for ddl operations. 

Nathan

On Jul 14, 2010, at 5:59 PM, Bram Whillock <[email protected]> wrote:

> Hey Jonathan,
> 
> So, we did this at our company.  However, we used an in-memory database for 
> all of our tests, in our case it was HyperSonic.
> 
> http://hsqldb.org/
> 
> If you're using Java, it's perfect for a db you want for unit tests only.  
> Your mileage may vary with your schemas running correctly against both types 
> of dbs.
> 
> Cheers,
> -Bram
> 
> On Wed, Jul 14, 2010 at 2:40 PM, Nathan Voxland <[email protected]> wrote:
> My concern would be that the normal use isn't to rollback your
> database changes and it could be accidentally triggered.  The way you
> are implementing it works well for your use, but I don't think it's
> something we want in the core library.  It would work well as an
> extension, though (http://liquibase.org/extensions)
> 
> Nathan
> 
> On Wed, Jul 14, 2010 at 7:46 AM, Baker,Jonathan <[email protected]> wrote:
> > I have begun evaluating liquibase.  So far I think it will be extemely
> > useful for our team.
> >
> > I am trying to use it in the context of unit testing.  I'd like to ensure
> > that my testing database matches our released database schema.  I am using
> > the spring framework and junit 4 for my testing harness.  I utilize the
> > SpringLiquibase object to load our tables for the tests.  This works great
> > for creating the tables, but once the tests are done, there is no clean way
> > to unload all of the changes I just made to ensure that the database is in
> > the same state as when I started.
> >
> > I know I can utilize the Liquibase object in @Before and @After methods to
> > load and unload the tables.  And for now, I have implemented that.
> >
> > <bean name="liquibase"  class="liquibase.Liquibase">
> >     <constructor-arg index="0" value="phonebook-create-changelog.xml"/>
> >     <constructor-arg index="1">
> >         <bean class="liquibase.ClassLoaderFileOpener"/>
> >     </constructor-arg>
> >     <constructor-arg index="2">
> >         <bean id="dataSource.connection"
> >
> > class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
> >     </constructor-arg>
> > </bean>
> >
> >     @Resource
> >   private Liquibase liquibase;
> >
> >   private void create_tables() throws Throwable {
> >       liquibase.update("");
> >   }
> >
> >   @After
> >   public void drop_tables() throws Throwable {
> >       liquibase.rollback(Integer.MAX_VALUE, "");
> >   }
> >
> >   @Before
> >   public void setup_database() throws Throwable {
> >       create_tables();
> >       load_test_data();
> >   }
> >
> > I would prefer if the SpringLiquibase object had something like a
> > rollbackOnDestroy() that would allow spring to trigger a rollback when it
> > unloaded the application context.  You could configure it like this:
> >
> > <bean name="spring.liquibase" class="liquibase.spring.SpringLiquibase"
> > destroy-method="rollbackOnDestroy">
> >     <property name="dataSource" ref="dataSource"/>
> >     <property name="changeLog"
> > value="classpath:phonebook-create-changelog.xml"/>
> >     <property name="contexts" value="test, production"/>
> > </bean>
> >
> > The rollbackOnDestroy method would only be called if it was configured.  I
> > am rolling back to Integer.MAX_VALUE because I want everything rolled back
> > so that my database is empty before and after any test, but that could be
> > added as a configured property on the SpringLiquibase object such as
> > maxChangeRollbackCount.
> >
> > I threw together a quick attempt at implementing this:
> >
> >     /**
> >      * Optionally executed when bean is destroyed
> >      */
> >     public void rollbackOnDestroy() throws LiquibaseException {
> >
> >         Connection c = null;
> >         try {
> >             c = getDataSource().getConnection();
> >             Liquibase liquibase = createLiquibase(c);
> >
> >             liquibase.rollback(Integer.MAX_VALUE, getContexts());
> >         } catch (SQLException e) {
> >             throw new JDBCException(e);
> >         } finally {
> >             if (c != null) {
> >                 try {
> >                     c.rollback();
> >                     c.close();
> >                 } catch (SQLException e) {
> >                     //nothing to do
> >                 }
> >             }
> >         }
> >     }
> >
> > Something along these lines would be a good enhancement to the
> > SpringLiquibase object, and would greatly assist with testing.
> > Unfortunately the maven plugin doesn't help here as there is no maven
> > lifecycle event such as after-test to ensure that things happen after the
> > unit tests when a user types mvn test.
> >
> > JB
> >
> > "The best way to predict the future is to invent it."
> > — Alan Kay
> >
> > ------------------------------------------------------------------------------
> > This SF.net email is sponsored by Sprint
> > What will you do first with EVO, the first 4G phone?
> > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> > _______________________________________________
> > Liquibase-user mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/liquibase-user
> >
> >
> 
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> Liquibase-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/liquibase-user
> 
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> Liquibase-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/liquibase-user
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Liquibase-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/liquibase-user

Reply via email to