I have thought about dbunit in the past, but have always been  
concerned about changes to the database scema breaking your dbunit  
loading tests.  Is there a way to avoid that or is it not really a  
problem.  I have generally used liquibase with contexts for that  
reason rather than dbunit.

Nathan



On Mar 12, 2009, at 7:56 AM, "Paul Keeble" <cs...@yahoo.co.uk> wrote:

>
> In the past for database testing I've used DBUnit to clear out the  
> database data and only insert what you wanted, effectively  
> generating a database fixture. Its got little to do with Liquibase  
> but its a nice neat way to deal with the data that functional tests  
> need - meaning you only need to build the database once rather than  
> recreating over and over a clean one.
>
> Paul
>
>
> ----- Original Message ----
> From: David C. Hicks <dhi...@i-hicks.org>
> To: liquibase-user@lists.sourceforge.net
> Sent: Thursday, 12 March, 2009 2:41:19
> Subject: Re: [Liquibase-user] How to debug upgrade called from API?
>
> That's not a bad idea, Paul.  Thanks for the tip.
>
> My solution ended up being somewhat hacked, but it works.  In addition
> to our usual "development" databases, we will add a "test" database  
> that
> can be trashed by these functional unit tests.  So, from our  
> functional
> test base class we drop and recreate the database then run the  
> Liquibase
> update on it.  Each "TestCase" now gets a clean database to play with.
>
> I would have preferred to have an in-memory DB for speed, but since
> speed isn't a possibility, I'm working on segregating the execution of
> these functional unit tests so that they don't have to run every  
> time a
> developer does a build.
>
> All's well that ends well, I suppose.  I agree that it's shameful the
> DBMS vendors don't feel any need to conform to accepted standards, but
> that's the world we live and develop in.
>
> Dave
>
> Paul Keeble wrote:
>> I would love to say one day the portability issues between  
>> databases would be fixed, but well I only see yet more divergence  
>> in the future. None of the database designers care much about the  
>> SQL standards, which means that without DBMS specific setups only  
>> the simplest of databases can work without any targeting.
>>
>> One thing you might want to try is using the dbms/context  
>> properties on ChangeSet to make specific versions for testing (but  
>> they won't get applied in production, acting as replacements for  
>> the non supported things in HSQL). Although its not perfect because  
>> the databases will be different, if you can find a way to represent  
>> your types/indexes in HSQL then these settings will keep the  
>> specific changes away from production but still get the same  
>> changelog used for both, with the known differences explicitly shown.
>>
>> I know its not perfect because now your test database differs to  
>> the real one and that could cause its own problems but its better  
>> than not having a test database setup automatically at all.
>>
>> Paul
>>
>>
>> ----- Original Message ----
>> From: David C. Hicks <dhi...@i-hicks.org>
>> To: liquibase-user@lists.sourceforge.net
>> Sent: Wednesday, 11 March, 2009 19:53:23
>> Subject: Re: [Liquibase-user] How to debug upgrade called from API?
>>
>> I figured out the problem.
>>
>> HypersonicSQL does not keep indexes as subordinates to their
>> corresponding tables.  In our changelog.xml, we have indexes  
>> associated
>> with multiple tables for which the index has the same name.  (ie.  
>> K_code
>> is an index name on tables A, B, and C).  This works fine in most
>> databases, because the indexes are subordinate to their tables.  The
>> index names, in our case, were generated by the Liquibase schema
>> generator, based on an existing MySQL database.  I can't even think  
>> of a
>> way to "fix" this without altering the existing changesets, which  
>> would
>> break in our existing production database.  So, I'll have to go a
>> different route for our testing.
>>
>> I discovered after changing some of the index names (just for kicks),
>> that we have data types that Hypersonic doesn't get along with, as  
>> well
>> - like LONGTEXT.  So, that, too, made this whole thing a bit of a  
>> moot
>> point.
>>
>> Dave
>>
>> Peter Rebholz wrote:
>>
>>> I'm not very familiar with HSQL or MySQL but is it possible that  
>>> it's
>>> complaining because the primary key (product_type) is indexed by
>>> default? Oracle behaves this way.
>>>
>>>
>>> On Mar 11, 2009, at 12:43 PM, David C. Hicks wrote:
>>>
>>>
>>>
>>>> A little more info/revision:
>>>>
>>>> I see now that the entire changelog.xml is *not* being  
>>>> performed.  It
>>>> does, indeed, bail out on the first failure.  I just don't  
>>>> understand
>>>> why, I guess.  Here is the specific change set that is failing:
>>>>
>>>>       <changeSet author="dhicks (generated)" id="1224863298725-24">
>>>>           <createIndex indexName="K_code" tableName="product_type"
>>>>               unique="false">
>>>>               <column name="code" />
>>>>           </createIndex>
>>>>       </changeSet>
>>>>
>>>> It complains that this index already exists, but I don't see  
>>>> where it
>>>> would have been created previously.  In fact, outside of some  
>>>> "insert"
>>>> statements to create data, here is the only other mention of that
>>>> table:
>>>>
>>>>       <changeSet author="dhicks (generated)" id="1224863298725-11">
>>>>           <createTable tableName="product_type">
>>>>               <column autoIncrement="true" name="id" type="BIGINT">
>>>>                   <constraints nullable="false"  
>>>> primaryKey="true" />
>>>>               </column>
>>>>               <column name="version" type="BIGINT">
>>>>                   <constraints nullable="false" />
>>>>               </column>
>>>>               <column defaultValue="" name="code"
>>>> type="varchar(255)">
>>>>                   <constraints nullable="false" />
>>>>               </column>
>>>>               <column defaultValue="" name="name"
>>>> type="varchar(255)">
>>>>                   <constraints nullable="false" />
>>>>               </column>
>>>>           </createTable>
>>>>       </changeSet>
>>>>
>>>> You can see, by the ID, that this changeset would come before the
>>>> previous one.
>>>>
>>>>
>>>> David C. Hicks wrote:
>>>>
>>>>
>>>>> Hi guys,
>>>>>
>>>>> I've been trying to get Liquibase to run our changelog.xml using  
>>>>> the
>>>>> API.  I found a piece of code that Nathan had made available to
>>>>> someone at a previous time.  It seems to work, mostly, but I get a
>>>>> SQLException at the end of it all.  Here's a code excerpt:
>>>>>
>>>>>       private void doLiquibaseUpdate() throws Exception {
>>>>>           FileOpener fileOpener = new FileSystemFileOpener();
>>>>>           DatabaseFactory databaseFactory =
>>>>>   DatabaseFactory.getInstance();
>>>>>           Database database = null;
>>>>>           database =
>>>>>
>>>>> databaseFactory. 
>>>>> findCorrectDatabaseImplementation(getConnection());
>>>>>           Liquibase liquibase = new  
>>>>> Liquibase(databaseChangeLogFile,
>>>>>   fileOpener, database);
>>>>>           liquibase.update("");
>>>>>       }
>>>>>
>>>>> As I mentioned, everything seems to work correctly, up to the  
>>>>> end.  I
>>>>> get log messages indicating that each change set gets applied.  At
>>>>> the
>>>>> end of it all, though, a SQLException is thrown from
>>>>> liquibase.update("") indicating that an attempt to create an index
>>>>> that already exists has occurred.  I've searched through our
>>>>> changeLog.xml and I don't see any duplication of that particular
>>>>> index.
>>>>>
>>>>> My goal is to use this in a unit test base class to set up an
>>>>> in-memory HSQLDB database during the onSetUp() phase of an
>>>>> AbstractTransactionalDataSourceSpringContextTests test case.  The
>>>>> idea
>>>>> being that it's a nice way to set up a database for testing DAO
>>>>> methods.  [I'm not interested in a religious war about how to test
>>>>> DAO
>>>>> methods.]
>>>>>
>>>>> Normally, I apply our changeLog.xml using either
>>>>> maven-liquibase-plugin, or the command line tools.  So, the
>>>>> differences are:  a) using the API, b) using HSQLDB instead of  
>>>>> MySQL.
>>>>> I just don't know of any good way to "debug" what's happening on  
>>>>> the
>>>>> inside of that call to try to track this down.
>>>>>
>>>>> Any thoughts?
>>>>> Thanks,
>>>>> Dave
>>>>>
>>>>> --- 
>>>>> --- 
>>>>> ------------------------------------------------------------------
>>>>>
>>>>> --- 
>>>>> --- 
>>>>> --- 
>>>>> --- 
>>>>> ------------------------------------------------------------------
>>>>> Apps built with the Adobe(R) Flex(R) framework and Flex  
>>>>> Builder(TM)
>>>>> are
>>>>> powering Web 2.0 with engaging, cross-platform capabilities.
>>>>> Quickly and
>>>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based
>>>>> development
>>>>> software that enables intelligent coding and step-through  
>>>>> debugging.
>>>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>>>> --- 
>>>>> --- 
>>>>> ------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> Liquibase-user mailing list
>>>>> Liquibase-user@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>>>>>
>>>>>
>>>>>
>>>> --- 
>>>> --- 
>>>> --- 
>>>> --- 
>>>> ------------------------------------------------------------------
>>>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)
>>>> are
>>>> powering Web 2.0 with engaging, cross-platform capabilities.  
>>>> Quickly
>>>> and
>>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based
>>>> development
>>>> software that enables intelligent coding and step-through  
>>>> debugging.
>>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>>> _______________________________________________
>>>> Liquibase-user mailing list
>>>> Liquibase-user@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>>>>
>>>>
>>> --- 
>>> --- 
>>> --- 
>>> --- 
>>> ------------------------------------------------------------------
>>> Apps built with the Adobe(R) Flex(R) framework and Flex  
>>> Builder(TM) are
>>> powering Web 2.0 with engaging, cross-platform capabilities.  
>>> Quickly and
>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based  
>>> development
>>> software that enables intelligent coding and step-through debugging.
>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>> _______________________________________________
>>> Liquibase-user mailing list
>>> Liquibase-user@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>>>
>>>
>>
>> --- 
>> --- 
>> --- 
>> ---------------------------------------------------------------------
>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)  
>> are
>> powering Web 2.0 with engaging, cross-platform capabilities.  
>> Quickly and
>> easily build your RIAs with Flex Builder, the Eclipse(TM)based  
>> development
>> software that enables intelligent coding and step-through debugging.
>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>> _______________________________________________
>> Liquibase-user mailing list
>> Liquibase-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>>
>>
>>
>>
>>
>> --- 
>> --- 
>> --- 
>> ---------------------------------------------------------------------
>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)  
>> are
>> powering Web 2.0 with engaging, cross-platform capabilities.  
>> Quickly and
>> easily build your RIAs with Flex Builder, the Eclipse(TM)based  
>> development
>> software that enables intelligent coding and step-through debugging.
>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>> _______________________________________________
>> Liquibase-user mailing list
>> Liquibase-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>>
>
> --- 
> --- 
> --- 
> ---------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)  
> are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly  
> and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based  
> development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Liquibase-user mailing list
> Liquibase-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/liquibase-user
>
>
>
>
>
> --- 
> --- 
> --- 
> ---------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)  
> are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly  
> and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based  
> development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Liquibase-user mailing list
> Liquibase-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/liquibase-user

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Liquibase-user mailing list
Liquibase-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/liquibase-user

Reply via email to