Archive for the ‘Uncategorized’ Category.

Liquibase 2.0 RC4 Released

2.0 RC4 is now available. Like always, you can download it from

The main changes in RC4 are improvements to the Maven POM configuration, and a change to how Liquibase classes and extensions are found and loaded.

The 2.0 features and 2.0 upgrade notes are still being added to as well.

As usual, let us know if you have any questions or problems

NOTE: There appears to be a bug, at least in the command line version. I’m looking into it…

Liquibase 2.0 RC3 Released

2.0 RC3 is now available.  Like always, you can download it from

RC3 includes:

  • Bug fixes, including a change to how classes are loaded which should make it work better in application servers.
  • The first 2.0 RC build that is pushed to the maven repository.  We switched to pushing our jars to a new location, so if they don’t sync with the central repository, let me know

The 2.0 features and 2.0 upgrade notes are still being added to.

As usual, let us know if you have any questions or problems

Lower Case B

I was never a huge fan of the upper case B in “LiquiBase” but had gone along with it since that was how it was.  However, I’ve decided now that it bugs me too much, and so I am officially changing the product name to “Liquibase” with a lower case B.

I changed some of the documentation and all uses in the code.  If you find a documentation page with the old capitalization, please fix it up.

Liquibase 2.0 will switch to the Apache 2.0 License

As of the 2.0 release of Liquibase, we will switch to being licensed under the Apache License, version 2.0 rather than the LGPL.

The reason for the change is to make Liquibase more business friendly, especially with regards to being able to write extensions without worrying about license requirements that may be imposed by the LGPL. I’ll work on updating the license information on the web site and in the 2.0 codebase over the next few days.  Let me know if you have any questions.

LiquiBase Formatted SQL

Part of the changes made in the upcoming 2.0 release is supporting the ability to specify changelog files in formats other than XML.

As a proof of concept, I added the ability to write your changelog files in specially formatted  SQL format rather than XML.

You can now write your changelogs like this:

–liquibase formatted sql

–changeset nvoxland:1
create table test1 (
id int primary key,
name varchar(255)

–changeset nvoxland:2
insert into test1 (id, name) values (1, ‘name 1′);
insert into test1 (id, name) values (2, ‘name 2′);

–changeset nvoxland:3 (dbms:oracle)
create sequence seq_test

which, when run, will run three separate changeSets on oracle, and two changesets on all other databases.  Note that this is specifying raw SQL, not abstracted liqubase changes like “createTable” that generate different SQL depending on the target database.

You do need to have your file contain “–liquibase formatted sql” on the first line, and delineate your changelogs with the “–changeset AUTHOR:ID” lines.

After the AUTHOR:ID, you can specify any attribute normally available on the or XML tags, including:


Since the formatted SQL builds the same internal changelog structure as the XML changelogs do, all the normal liquibase functionality (rollback, tag, dbdoc, updateCount, updateSQL, changelog parameters, etc.) are still available.

You can try out this new feature from the current 2.0 snapshot (  Let me know if you have any suggestions or problems.   I am considering it an early access feature until 2.0 final is released, and there may be changes in the format of this file based on user feedback.

LiquiBase 2009 Plugin Contest Winners

sponsorsCongratulations to the winners of the 2009 LiquiBase Plugin Contest!

Grand Prize (Choice of 5 O’Reilly Books, donated by O’Reilly):

Oracle Extensions by Artur Kopacz, Damian Pezda, Łukasz Rejkowicz, Tomasz Wicherski

Runner Up (Laptop Bag, donated by Atlassian):

LiquiBase for JRuby on Rails by Tal Rotbart

Honorable Mentions (Choice of one O’Reilly Book):

  1. GarinDriver by Mark Farnsworth
  2. TableCount Precondition by Chris Imershein
  3. PostgreSQL Extensions by Shane Miller
  4. MS SQL Server Extensions by Dave Gorman
  5. LiquiBase Documentation, Japanese Translation by Yasuo Honda

I would like to thank everyone who participated, as well as the generous prize donations by Atlassian and O’Reilly.  I will be contacting the winners via email, if you do not hear from me, please let me know.

Reminder: LiquiBase Online Meetup, Today at Noon US Central Time

Just a reminder that we will be having an online meetup in a few hours: Noon US Central Time (GMT-5) using the “Chat” functionality of the LiquiBase community forum ( To log in, you will need to be registered on

Hope to see you there!

.Net LiquiBase Port: Any Volunteers?

As part of re-evaluating the LiquiBase APIs as part of the 2.0 codebase, I started an experimental .Net implementation to see what changes would need to be incorporated into the regular codebase to produce a liquibase.dll with as new little code as possible.  I have the code to the point that I know it would work, and can see the direction it would need to go, but I will not have time to fully implement it for quite some time.  That is where you could come in…

Despite thinking about alternate languages, I ended up finding that ikvm is the best option for us.  I was able to split the existing java code into a “core” and “core-jvm” source directories.  The “core” code is/will be java code, but without any jdbc or xml libraries (or java-specific technologies like Ant, Maven, and Servlets).  The core-jvm source is all the remaining “java specific” code.

I then compiled the “core” java library into a dll and added it as a reference in a new “core-clr” source directory and visual studio solution.  I was able to begin implementing the liquibase abstraction interfaces using OleDbConnection-based classes.

What is the current state?  The liquibase code is divided between core, core-jvm, and core-clr, but the core-clr is far from complete.  Since we can use the core liquibase.dll, 90% of the liquibase code will be shared between the two projects, so bugfixes will be applicable to both, new features will be applicable to both, and the .net port will include all the cross-database support and refactorings that currently exist in liquibase.  What needs to be done is:

  • Re-implement the connection based logic using OleDbConnection (or better .net interface?).  This includes translating the abstracted liquibase “execute this sql” calls as well as the database metadata reading logic.
  • Re-implement the XML parser using .net libraries.  This has not been started, but the abstractions are already there in the liquibase code.
  • Create any .Net specific integrations (IIS, NHibernate, MSBuild, Installer, etc.)

If you are interested in helping, please send me an email (nathan [at]  You do not need to be proficient in java to help, we can handle any changes to the java liquibase codebase to support you as needed.

Extension Ideas

The LiquiBase plugin contest is underway and there is still time to submit your extensions.    If you are looking for inspriation, there is now an “Ideas Page” on the Extension Portal to get you started.

If you are not planning on creating an extension, but have something that you would like to see created, please add it to the list as well.

Remember, the contest deadline is August 31st and the sooner you submit an entry, the more time you have for feedback to improve it before the contest ends.

Now Open: LiquiBase Extension Portal

Although it is currently just a skeleton of what it will be, the LiquiBase Extension Portal is now open at

The goal of the extension portal is to provide:

  • A place for database-specific or experimental functionality that has not/should not be incorporated into the main LiquiBase library
  • A single location for end-users to find plug-ins of value to them
  • An easy way for 3rd parties to submit, manage and maintain plug-ins by providing a documentation wiki, issue tracking, and source control
  • Documentation on how to create your own extensions for public or private use

I was hoping to improve the sample extension pages (set-identity-insert and vacuum) to provide a better template, but I wanted to get something out before the online meetup tomorrow.  We will improve the content on the portal over the next week once real work settles down.

As always, let us know if you have any questions or comments on the portal.