=head1 NAME

DBIx::SQLEngine::Docs::Related - Survey of DBI Wrappers


=head1 SYNOPSIS

  http://search.cpan.org/search?mode=module&query=DBIx


=head1 DESCRIPTION

Several other CPAN modules provide a similar wrapper around DBI for purposes
of simplification, abstraction, or portability.

=head2 Caution

I've commented on a few of these below, but please remember that these notes
were written some time ago and may be somewhat out of date, and many modules
have been omitted.


=head1 RELATED MODULES 

Most of these provide simple wrappers around DBI's connect, prepare, and fetch
methods, but do not appear to support any kind of cross-DBMS portability
mechanism. See L<DBIx::Abstract>, L<DBIx::Broker>, L<DBIx::Simple>, and
L<Sql::Simple> for examples of this group. See also L<DBIx::AbstractLite>,
L<DBIx::Schema>, L<DBIx::Wrap>, and L<DBIx::YAWM>. Single-platform solutions
like L<MySQL::Easy> are also available.

Some provide only SQL generation mechanisms. See L<SQL::Abstract>.

Some provide at least partial cross-DBMS support via specialized subclasses
for the DBDs they support. See L<DBIx::SearchBuilder>, L<DBIx::Easy>, and
L<DBIx::DWIW> for examples of this group.

The DBIx::Recordset framework provides similar functionality, including a
substantial library of cross-DBMS compatibilty information.  It also includes
a tied-hash interface that allows automatic updates on retrieved rows. See
L<DBIx::RecordSet>, L<DBIx::Database>, and L<DBIx::Compat>.

The Rosetta framework provides a higher-level interface with a great deal of
portability, including supports non-DBI and non-SQL datasources; see
L<Rosetta> for details.

The Alzabo framework provides similar functionality, including DBMS-specific
SQL generation, as part of an RDBMS-OO mapper; see L<Alzabo::Driver> and
L<Alzabo::SQLMaker>.

There are signs of ongoing development in the L<Class::DBI> framework to
support cross-DBMS portability, so check CPAN for the latest in this area.

The L<SQL::AnyDBD> is new addition which uses L<DBIx::AnyDBD>.

Some packages focus on storing libraries of pre-defined named queries. See
L<SQL::Catalog>, L<SQL::Library>, L<DBIx::PhraseBook>,
L<Class::Phrasebook::SQL>, and L<DBIx::Librarian>.

Some packages focus on managing database schema information. See
L<DBIx::DataSource>, L<DBIx::Admin::TableInfo>, L<DBIx::SystemCatalog>.

For more information about the object mapping modules, see the Poop-Group comparison page at http://poop.sourceforge.net/.

=head2 Feature Matrix

Please note that much of this information was collected just from scanning documentation, and may be incorrect or out of date. (Corrections welcome!)

  DBI Wrapper     -- Maintains connection to DBI handle.
  One Call Query  -- Provides combined prepare/fetch/finish method.
  Data-driven SQL -- Generates queries from Perl-ish arguments.
  Schema Access   -- Detect or create tables and other structures.
  Named Configs   -- Manage connection params and query definitions.
  Portability     -- Consistent way of performing queries across platforms.
  Object Mapping  -- Treat rows of data as objects or tied references.

Comparison:

 __PACKAGE__        	DBIWrap	OneCall	DataSQL	NameCfg	Schema	Portble	ObjectM
 
 __DBI_Wrappers__
 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/DBIx::AnyDBD Y	  -	  Y	  -	  -	  Y	  -
 Sql::Simple        	  Y	  Y	  Y	  -	  -	  -	  -
 
 __Named_Configs__
 DBIx::Librarian	  Y	  -	  -	  Y	  -	  -	  -
 DBIx::PhraseBook	  Y	  Y	  Y	  Y/-	  -	  -	  -
 DBIx::SearchProfiles	  Y	  Y	  Y	  Y	  -	  -	  -
 SQL::Catalog        	  Y	  -	  -	  Y	  -	  -	  -
 
 __Query_Generation__
 Class::Phrasebook::SQL	  -	  -	  -	  Y	  -	  -	  -	  
 SQL::Abstract        	  -	  -	  Y	  -	  -	  -	  -
 SQL::Generator        	  -	  -	  Y	  Y	  -	  -
 SQL::Library        	  -	  -	  -	  Y	  -	  ?	  -
 
 __Schema_Information__
 DBIx::Admin::TableInfo	  Y	  -	  -	  -	  Y	  -	  -
 DBIx::DataSource	  -	  -	  -	  -	  Y	  Y	  -
 DBIx::SystemCatalog	  Y	  -	  -	  -	  Y	  Y	  -
 
 __Tied_Access__
 DBIx::RecordSet/Compat	  Y	  ?	  Y	  -	  Y	  Y	  tie
 Tie::DBI		  Y	  Y	  -	  -	  -	  -	  tie
 Tie::RDBM/::Cached	  Y	  Y	  -	  -	  Y/-	  -	  tie
 Tie::Table		  Y	  Y	  -	  -	  -	  -	  tie

 __Object_Mappers__
 Alzabo                	  Y	  Y	  Y	  -?	  Y	  Y	  Y
 Class::DBI/Ima::DBI	  Y	  Y	  Y	  Y?	  ?	  Y	  Y
 Class::Tables		  Y	  Y	  Y/-	  -	  Y	  Y	  Y
 DBIx::SearchBuilder	  Y	  Y	  Y	  -	  -	  Y	  Y
 MKDoc::SQL         	  Y	  Y	  Y	  -?	  ?	  Y/-	  Y
 Rosetta/SQL::Routine     Y	  Y	  Y 	  Y	  Y	  Y	  -
 SPOPS              	  Y	  Y	  Y	  -	  Y	  Y	  Y
 Tangram        	  Y	  Y	  Y	  -	  Y?	  Y	  Y
  
 __This Module__
 DBIx::SQLEngine	  Y	  Y	  Y	  Y	  Y	  Y	  Y

                  	DBIWrap	OneCall	DataSQL	NameCfg	Schema	Portble	ObjectM

Items marked C<Y/-> seem to have only partial support for the feature. I've included a question mark for the cases I was least certain about. 


=head1 SEE ALSO

See L<DBIx::SQLEngine> for module interface and developer documentation.

See L<DBIx::SQLEngine::Docs::ReadMe> for general information about
this distribution, including installation and license information.

=cut
