As part of my DBIx::SQLEngine distribution, I've put together a brief document that lists some of the other DBI wrapper modules and highlights a few broad categories of features. I was aiming for something broader and more shallow than the Poop Group comparison, reviewing more modules but going into less depth.
I've tried to populate this list with modules I've seen others discuss, as well as some I just found on CPAN, but for the many modules I haven't used, I've simply based my evaluation on a few minutes reading the documentation.
Could those of my fellow monks who use one of these modules take a moment to check whether I've classified it appropriately, or let me know if I've omitted something useful in this DBI wrapper/assistant arena?
I examined each module to see if it had the following features:
DBI Wrapper: | Does the module maintain a connection to DBI handle? |
One Call Query: | Does it provide combined prepare/fetch/finish methods? |
Data-driven SQL: | Does it generate SQL queries from DWIM-ish data structures? |
Schema Access: | Does it detect or create tables and other structures? |
Named Configs: | Does it handle a library of named queries or connection parameters? |
Portability: | Does it provide a consistent interface that hides idiomatic DBMS implementations? |
Object Mapping: | Does it provide classes to treat rows of data as objects? |
I know that just counting tick marks doesn't tell you which module is better, but I found it helpful to see which modules had related functionality; for example, I think I had previously overlooked DBIx::SearchProfiles because I didn't realize what it did.
Package | DBI Wrapper | One Call | Data SQL | Named Config | Schema Access | DBMS Portability | Object Mapping | |
---|---|---|---|---|---|---|---|---|
DBIx::Abstract | Y | Y | Y | - | - | - | - | |
DBIx::AbstractLite | Y | - | Y | - | - | - | - | |
DBIx::Broker | Y | Y | Y | - | - | - | - | |
DBIx::Browse | Y | Y | Y | - | - | - | - | |
DBIx::DWIW | Y | Y | - | - | - | Y/- | - | |
DBIx::Easy | Y | Y | Y | - | - | Y/- | - | |
DBIx::Schema | Y | Y | Y | - | - | - | - | |
DBIx::Simple | Y | Y | - | - | - | - | - | |
DBIx::Wrap | Y | Y | Y | - | - | - | - | |
DBIx::YAWM | Y | Y | Y | - | - | - | - | |
MySQL::Easy | Y | Y | - | - | - | - | - | |
SQL::AnyDBD | Y | - | Y | - | - | Y | - | |
Sql::Simple | Y | Y | Y | - | - | - | - | |
DBIx::Librarian | Y | - | - | Y | - | - | - | |
DBIx::PhraseBook | Y | Y | Y | Y/- | - | - | - | |
DBIx::SearchProfiles | Y | Y | Y | Y | - | - | - | |
SQL::Catalog | Y | - | - | Y | - | - | - | |
Class::Phrasebook::SQL | - | - | - | Y | - | - | - | |
SQL::Abstract | - | - | Y | - | - | - | - | |
SQL::Generator | - | - | Y | Y | - | - | ||
SQL::Library | - | - | - | Y | - | ? | - | |
DBIx::Admin::TableInfo | Y | - | - | - | Y | - | - | |
DBIx::DataSource | - | - | - | - | Y | Y | - | |
DBIx::SystemCatalog | Y | - | - | - | Y | Y | - | |
Alzabo | Y | Y | Y | -? | Y | Y | Y | |
Class::DBI | Y | Y | Y | Y? | ? | Y | Y | |
DBIx::RecordSet | Y | ? | Y | -? | Y | Y | Y | |
DBIx::SearchBuilder | Y | Y | Y | - | - | Y | Y? | |
MKDoc::SQL | Y | Y | Y | -? | ? | Y/- | Y | |
Rosetta | Y? | -? | Y? | -? | Y? | Y? | Y? | |
SPOPS | Y | Y | Y | - | Y | Y | Y | |
Tangram | Y | Y | Y | - | Y? | Y | Y | |
DBIx::SQLEngine | Y | Y | Y | Y | Y | Y | Y | |
DBI Wrapper | One Call | Data SQL | Named Config | Schema Access | DBMS Portability | Object Mapping |
I typically didn't evaluate whether or not the implementation looked like it was high-kwalitee or not, but I would be interested in feedback on this aspect as well.
|
---|