Archive for the ‘Announcement’ Category.

Liquibase 2.0.4 Released

2.0.4 has been released. This is primarily a bug fix release during the main development on 3.0, but does include a few  enhancements as well.

Download from http://liquibase.org/download

New features:

  • LoadUpdate support for H2
  • Support ${} params in sql files
  • Ability to load blob/clob data from files

Full release notes: https://liquibase.jira.com/secure/ReleaseNote.jspa?projectId=10020&version=10160

Liquibase 2.0.2 Released

Liquibase 2.0.2 has been released. It is primarily a bugfix release on the 2.0.1 release and can be downloaded from http://liquibase.org/download.

Visit the forum with any comments or questions. Release notes are available from liquibase.jira.com

With the 2.0.2 release, main development will shift to the 2.1 release. Liquibase 2.1 planning has begun with this forum post

Liquibase Online Meetup: July 28th

I am planning a Liquibase Online Meetup for July 28th, 2011 at 12:00 US Central Time (GMT-5).

For more information, see http://forum.liquibase.org/#Topic/49382000000252083

Liquibase Source Moved to Github

For those of you watching and/or contributing to the Liquibase source code, the repository has now moved from the old subversion repository at liquibase.jira.com to http://github.com/liquibase/liquibase.

Liquibase extensions maintained by the main Liquibase team have also been moved to the liquibase github group at http://github.com/liquibase.

If you have any questions, feel free to ask on the Liquibase development forum

NetBeans Liquibase Plugin Available

For NetBeans users, there is a Liquibase plugin now available.

The current, 0.2 version implements rudimentary support and concentrates on the most needed functionality.

Features:

  • Database connections stored in the Database Explorer plugin, so the developer doesn’t have to separately maintain the registry of connections.
  • Executing a changeset by simply selecting it in the File or Project explorer windows and call the execution from a context menu action. The database connection can be selected during the execution
  • A formatted log is displayed in the Output Window about the execution of the changeset, so the developer is properly informed if the changeset execution has failed.
  • Custom icon for the Liquibase changeset files, so they can better distinguished from the ordinary files.

More information: http://plugins.netbeans.org/plugin/38564/liquorice-core

Clojure wrapper for Liquibase now available

Kumar Shantanu has implemented a Clojure DSL/wrapper for Liquibase which is has reached version 0.1. It is available at https://bitbucket.org/kumarshantanu/clj-liquibase/src. One more option for all you XML-haters out there :)

Nathan

New Liquibase Forum

If you visit http://liquibase.org/forum you will notice that it looks completely different. We were getting hit pretty hard with spam over the last few months on the old forum and I concluded that we could not stop it with the current simple machines software. As a result, we have moved to a Zoho-based forum.

There were suggestions to simply go with Google Groups, but in the end Zoho provided question-tracking features I liked as well as the ability to import in all the old forum topics and so I went with them.

Please check out the new forum and let me know if you have any suggestions or questions on it.

Liquibase 2.0 Officially Released

At long last, Liquibase 2.0 has been released. For those of you watching closely, you know that 2.0.0 was actually released December 19th, but I wanted to give it a couple weeks (and a 2.0.1 release) before making the official announcement. Liquibase 2.0 has been a long time coming, but I am very proud of it. The most recent version (now 2.0.1) is available from the download page along with the v2.0 upgrade guide.

With version 1.9, Liquibase had hit the point where it had a growing user base and 90% of the functionality that developers needed to manage their databases. As I was looking at what to add for version 1.10, it was becoming clear that everyone wants a different (and often contradicting) final 10%. One team wants CLOBS to match to a UTF-8 compliant datatype, another wants them to be full text indexable. One team wants logging using slf4j, another wants log4j. And don’t forget the biggest war of all: XML changesets vs. the XML-haters. Add to this a tool with complex (and sometimes confusing) functionality and there were two obvious requirements for the future of Liquibase: Extensibility and Community.

Extensibility

Feature-wise, the biggest change with Liquibase 2.0 is the new extension system. The goal of the Liquibase extension system is to allow end users to modify and mold Liquibase to suite their particular development needs. While 1.9 and before included features like custom change classes, and changelog parameters, it wasn’t a true plugin system. With 2.0, we introduced the ability to create custom java classes that will replace or augment virtually all areas of Liquibase’s execution including changelog parsing, database support, available refactorings, generated SQL, logging and more.

Now, if you don’t like that the generated CREATE TABLE SQL does not include “ENGINE=INNODB”, you can create a subclass of CreateTableGenerator to modify it. If you would rather use a different logger you can create a subclass of AbstractLogger. If you don’t like XML, you can write a new changelog parser (there are now groovy, scala, and clojure versions underway).

The general pattern for all extensions is to create a subclass for an existing Liquibase class or interface and override the public void getPriority() method. At runtime, Liquibase will find all classes that implement a given class/interface and choose the one with the highest value from getPriority(). Registering your extension only requires you to put your class in a sub-package of liquibase.ext.

Community

Although there is often conflicting requirements behind extensions, there is also many groups that need the same problems solved. To help facilitate the sharing and development of Liquibase extensions, we have created the Liquibase Extension Portal where anyone can post and share extensions they have created, including using our subversion and/or bug tracking if needed.

Beyond the extension portal, there have been several other “improve the Liquibase community” changes since 1.9 was released, including:

  • Replacing the mailing lists with a forum system
  • Changed from LGPL license to the more permissive Apache 2.0 license
  • Switched to Jira for bug and feature tracking
  • Introduced an official Liquibase training and support channel
  • Moved SVN for better source browsing and Jira integration
  • Created an announcement mailing list/newsletter (see http://liquibase.org sidebar to subscribe)
  • Major code refactoring/simplification effort to make a smaller learning curve to contributing code

But Wait, There’s More!

Beyond the big goals of extensibility and community (and the bug fixes), there is also important new functionality in the core Liquibase library including:

  • SQL-based Changelogs
  • Informix support
  • Ability to specify target changelog parameters to particular databases and/or context
  • Ability to specify target modifySql to particular contexts
  • Expanded use of changelog properties, including in preconditions and SQL text
  • Performance improvements

The Future

With the official release of Liquibase 2.0, the plan is to go back to a more standard release schedule. That means that 2.1 will not take 2 years… The jump from 1.9 to 2.0 had a lot of pieces to move around but the primary reason for the long release schedule was ensuring that the internal Liquibase API will be stable going forward for end users to code extensions against without fear of breaking changes.

Going forward, Liquibase development will be broken into two areas: work on the core library and work on extensions. While the extension system is great for end users, it will also help us to build deeper support for particular databases without trying to force database-specific functionality into the main library, iterate new and experimental features independently of the main library, and add take advantage of 3rd party libraries without adding a required dependency for everyone. This will allow the core Liquibase library to be better focused on providing a solid feature-set that is common to all databases and users.

I have already began some work on 2.1 which is primarily targeted at improving the database diff support which will allow the hibernate integration to improve as well as changelog generation for existing databases. Work beyond 2.1 will, like usual, be driven by user request. I would like to get back to the .net and Liquibase IDE proof-of-concepts I had began as well. There is also additional community improvements I would like to investigate including a less spam-attracting forum and possibly moving from SVN to github.

As always, let us know if you have any questions or suggestions, and thanks to everyone that contributed code, bug reports, and help during the 2.0 development.

New Standard Liquibase Plugin: Grails Database Migration

Now that the Grails Database Migration plugin has had its first release, I will no longer continue maintaining a the Liquibase Grails plugin past the current 1.9.x series.

Although the Database Migration plugin is still at version 0.1, it is based on Liquibase 2.0 and will get the attention and expertise that I was not able to give my version. For those of you using Liquibase 1.9, the old plugin will still be available and updated, but I will not release a new version of it built on Liquibase 2.0+.

The Database Migration plugin includes all the functionality in the old plugin, plus support for Groovy DSL changelogs rather than XML, GORM, and more.

Teradata Extension Now Available

Teradata support is now available as an extension for Liquibase 2.0. The extension was created by Xavier Poinsard and can be downloaded from http://liquibase.jira.com/wiki/display/CONTRIB/Teradata+extension

For more information on available Liquibase extensions and how to write your own, see the extension portal