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?

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
bloggedhis waythrough 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.