2010 Reflections - The Chainsaw Song

Uh-oh, December 1st - time does indeed fly, and it's time to recap what has happened in our-favorite-language-land. It is my honor to start off this year's Advent Calendar with a walk through the changelog of one of the most popular M's of your MVC - DBIx::Class.

The Past

So what exciting things have happened with your (hopefully) favorite SQL de-hater? The answer is - a lot!

First the obligatory numbers: this year up until the latest official release 0.08124 DBIC saw code and documentation contributions from 42 (no joke!) people in over 1,000 commits, touching over 400 files with a total of over 14,000 non-whitespace lines of changes! But what do these scary numbers give us?

The killer feature remains resultset chaining, but what a facelift it got this year: searches, relationship traversals, set operations, subselects, limits, column slices (and by the end of this week custom joins ) - all work together in perfect harmony, producing mind-numbing but fully functional SQL. Just slap your methods together and DBIC will almost always do the right thing (these days it even manages to surprise its authors).

Did I mention the mind-numbing SQL? Do you also avoid looking at SQL directly with the remaining eye? Well no more! Thanks to frew, SQL::Abstract (and thus by proxy DBIC) now comes with an awesome SQL formatter. Just add DBIC_TRACE_PROFILE=console to your environment and watch a rainbow of properly indented SQL dance on your otherwise dull console any time you request SQL traces with DBIC_TRACE or with storage->debug. Catalyst/Plack users are not left out in the cold either, thanks to jnap and his Plack::Middleware::Debug::DBIC::QueryLog, which leverages the same awesome formatting capabilities.

But we surely are taxing the RDBMS with these twisted queries, and the DBA knows where you live.... Fear not! DBIC ships with a wicked join-pruning optimizer (akin to the one available in PostgreSQL since 9.0). Of course being internal to DBIC it works on any database, and is more efficient since it has more metadata about the result sources. Just stack these joins and nested searches with reckless abandon, and DBIC will do its best to remove unreferenced LEFT JOIN's before sending the coveted query to the RDBMS.

So you have a DBA - you are most likely using some opinionated commercial RDBMS. Thanks to Caelum DBIC now supports oddballs like Informix, Firebird and Interbase, Sybase ASE and Sybase SQL Anywhere. Note that "supports" means real support - with proper limit dialects, datetime formatters, transaction handlers, savepoints, and other fixups and workarounds for minor but irritating RDBMS-specific quirks.

Outside of the main workflow there is still more news:

Thanks to frew DBIC now has a neat stack of handy helpers, organized in the DBIx::Class::Helpers distribution. Great for mixing and matching various small utilities to make data retrieval easier. He also managed to write DBIx::Class::DeploymentHandler - a replacement for the nice but architecturally limited DBIx::Class::Schema::Versioned. While it may seem daunting at first, it is well worth a look, as it makes a lot of advanced stuff possible (and even easy), for example in-line data migration during schema upgrades. Finally in order to attract more followers of the sugar-club, he spilled some DBIx::Class::Candy to make the life of DBIC newcomers sweeter^Weasier.

Caelum adopted DBIx::Class::Schema::Loader and taught it neat tricks on all databases he could get his hands on. The new generation loaders are more precise, support more database metadata, and quite importantly choose saner names for Result Classes and Relationships.

goraxe contributed a brand-new fully Moosified control module DBIx::Class::Admin, making it dead simple to write CLI apps and other control interfaces against your DBIC schema.

Last but not least the repository was migrated from SVN to GIT by the awesome Haarg. He not only properly transferred our non-trivial history, he blogged his way through it , documenting the bits and pieces necessary to pull off such a complex migration. As a direct result of this contributing to DBIC got even easier than before - simply fork our GitHub Mirror, edit and send pull requests directly from your browser without ever needing a checkout!

And many other small and big changes by dedicated individuals - my personal gratitude goes to you all for making DBIC the kick-ass project it is today!

The Present

But the year is not over yet! As I am writing this two major features are getting groomed for immediate CPAN release: the already mentioned custom relationships and INSERT ... RETURNING support for Oracle. Another exciting feature may land into master before New Year, but it will deserve its own announcement if it materializes. Suffice to say lots of hopes are set for the post-LPW hackathon :)

The Future

Well of course the future depends on YOU! The DBIx::Class team is as active as ever and is always looking for eager minds striving to make SQL-interaction even less hateful :) If you have tuits, ideas, comments, or plain old questions, stop by our hivemind irc.perl.org#dbix-class and become a part of a stellar community of Perl hackers (and hopefully a part of the next 1,000 commits :) )

On this note I pass the reins to the next Advent author. Once again thank you all for the awesome ride so far, and for the great things that are yet to come.


-- ribasushi, DBIx::Class chainsaw delegate in residence


Peter Rabbitson <ribasushi@cpan.org>