=head1 NAME

Rosetta::SimilarModules - Compare and contrast Rosetta with other modules

=head1 ABSTRACT

See the file Rosetta::Framework for the main Rosetta documentation.

=head1 COPYRIGHT AND LICENSE

This file is part of the Rosetta database abstraction framework.

Rosetta is Copyright (c) 1999-2003, Darren R. Duncan.  All rights reserved. 
Address comments, suggestions, and bug reports to B<perl@DarrenDuncan.net>, or
visit "http://www.DarrenDuncan.net" for more information.

Rosetta is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License (GPL) version 2 as published by the
Free Software Foundation (http://www.fsf.org/).  You should have received a
copy of the GPL as part of the Rosetta distribution, in the file named
"LICENSE"; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA.  

Any versions of Rosetta that you modify and distribute must carry prominent
notices stating that you changed the files and the date of any changes, in
addition to preserving this original copyright notice and other credits. 
Rosetta is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GPL for more details.

Linking Rosetta statically or dynamically with other modules is making a
combined work based on Rosetta.  Thus, the terms and conditions of the GPL
cover the whole combination.

As a special exception, the copyright holders of Rosetta give you permission to
link Rosetta with independent modules that are interfaces to or implementations
of databases, regardless of the license terms of these independent modules, and
to copy and distribute the resulting combined work under terms of your choice,
provided that every copy of the combined work is accompanied by a complete copy
of the source code of Rosetta (the version of Rosetta used to produce the
combined work), being distributed under the terms of the GPL plus this
exception.  An independent module is a module which is not derived from or
based on Rosetta, and which is fully useable when not linked to Rosetta in any
form.

Note that people who make modified versions of Rosetta are not obligated to
grant this special exception for their modified versions; it is their choice
whether to do so.  The GPL gives permission to release a modified version
without this exception; this exception also makes it possible to release a
modified version which carries forward this exception.

While it is by no means required, the copyright holders of Rosetta would
appreciate being informed any time you create a modified version of Rosetta
that you are willing to distribute, because that is a practical way of 
suggesting improvements to the standard version.

=head1 DESCRIPTION

Many thousands of reusable Perl modules have been created and shared by as many
generous programmers, with CPAN being the most popular repository.  These
modules serve a wide variety of functions, and demonstrate the great power and
flexability of Perl for solving day to day problems.  One of the most popular
tasks that module authors make them do is work with databases, which is
certainly reasonable given that databases are one of the primary or popular
functions of computers in general.  The Rosetta framework comprises only a
handful of modules out of the good hundred or more available.  A so common
question that application or script writers would ask is, with so many options
to choose from, which option is the best fit for them?  This choice is made
more complicated, and yet in some ways easier, by the fact that there is a fair
amount of redundant functionality between the options.

This document is meant to help you by briefly outlining the main features and
scope of each of the other database-related frameworks and modules out there as
I see them, and mainly showing how they compare and contrast with the Rosetta
framework.  Given that Rosetta is intended to be very comprehensive, it is
reasonable to guess that most existing modules will have at least some overlap
in functionality upon which to base a comparison.  This includes modules that
are drivers to connect to specific databases through which queries can be
executed, and modules that model or generate database schema, and modules that
generate SQL, and modules that simulate functionality for databases that don't
have it, and modules that abstract multiple databases behind one interface.

All database-related modules that I can find will be listed here, whether they
are on CPAN or not, in at least two groups: the first is for frameworks of
multiple modules that work together; the second is for individual modules that
are standalone offerings.  For each framework of module I have provided 3 main
types of information: the first is a few sentences summarizing the module or
framework on its own; the second is a list of commonalities it shares with
Rosetta; the third is a list of differences between it and Rosetta.

Each module has a one-liner about it in CPAN Module List format; if there is an
actual Module List entry, I use that; otherwise I construct one using the
module's NAME.  Note that not all modules mentioned below are on CPAN or in the 
official Module List.

Please note that given the large number, I have only actually tried executing a
few of these.  Most of my notes I am making based just on the documentation
that the module authors have provided, and from looking at the source code.

I<As a further note, given that the Rosetta framework is relatively new and
still under construction, the comparisons in this document are intended to be
relative to where Rosetta will be when it is done, and not where it is *now*.>

=head1 LARGER FRAMEWORK COMPARISONS

I<Note that this list is new and is mostly incomplete.>

=head2 DBI and DBD::*

Module List - DBI Core Framework (release 1.35; 2003 Mar 07):

	Name            DSLIP Description                                  Info
	------------    ----- -------------------------------------------- ----
	DBI             MmcOp Generic Database Interface (see DBD modules) DBIML

	DBI::
	::DBD                 Perl DBI Database Driver Writer's Guide
	::FAQ                 The Frequently Asked Questions for the Perl5 Database Interface
	::Profile             Performance profiling and benchmarking for the DBI
	::ProfileData         manipulate DBI::ProfileDumper data dumps
	::ProfileDumper       profile DBI usage and output data to a file
	::ProxyServer         a server for the DBD::Proxy driver

	DBI::Const::
	::GetInfoReturn       Data and functions for describing GetInfo results
	::GetInfoType         Data describing GetInfo type codes

	DBI::Const::GetInfo::
	::ANSI                ISO/IEC SQL/CLI Constants for GetInfo
	::ODBC                ODBC Constants for GetInfo

	DBI::DBD::
	::Metadata            Generate the code and data for some DBI metadata methods

	DBI::ProfileDumper::
	::Apache              capture DBI profiling data from Apache/mod_perl

	DBD::
	::ExampleP
	::NullP
	::Proxy               A proxy driver for the DBI
	::Sponge

Module List - Official DBI Driver Extensions (in their own distributions):

	Name           DSLIP Description                                  Info
	------------   ----- -------------------------------------------- ----
	DBD::
	::ADO          bmpO? Database interface modules of MS ADO for DBI TLOWERY
	::ASAny        adcO? Adaptive Server Anywhere Driver for DBI      SMIRNIOS
	::Altera       bdpO? Altera SQL Server for DBI - pure Perl code   DSOUFLIS
	::CSV          adcO? SQL engine and DBI driver for CSV files      JZUCKER
	::DB2          adcO? DB2 Driver for DBI                           MHM
	::DtfSQLmac    RdpO? dtF/SQL (Mac OS edition) driver for DBI      TWEGNER
	::Empress      adcO? Empress RDBMS Driver                         SWILLIAM
	::Excel        adpO? Excel database driver for the DBI module     KWITKNR
	::FreeTDS      adcO? DBI driver for MS SQLServer and Sybase       SPANNRING
	::Illustra     bmcO? Illustra Driver for DBI                      PMH
	::Informix     MmcO? Informix Driver for DBI                      JOHNL
	::Informix4    adcO? DBI driver for Informix SE 4.10              GTHYNI
	::Ingres       bmcO? Ingres Driver for DBI                        HTOUG
	::InterBase    bmcO? DBI driver for InterBase RDBMS server        EDPRATOMO
	::Multiplex    RmpO? Spreading database load across servers       TKISHEL
	::ODBC         amcO? ODBC Driver for DBI                          DBIML
	::Oracle       MmcO? Oracle Driver for DBI                        DBIML
	::PgPP         bdpOp Pure Perl PostgreSQL driver for the DBI      OYAMA
	::PrimeBase    bmc?p A primeBase database interface               PRIMEBASE
	::QBase        amcO? QBase Driver for DBI                         BENLI
	::RAM          bmpO? a DBI driver for files and data structures   JZUCKER
	::RDB          Rdof? DBI driver for Oracle RDB (OpenVMS only)     ASTILLER
	::Recall       adpOp Transparent database replication layer       AGUL
	::SQLrelay     bdpO? SQLrelay driver for DBI                      DMOW
	::SearchServer cdcO? PCDOCS/Fulcrum SearchServer Driver for DB    SHARI
	::Solid        amcO? Solid Driver for DBI                         TWENRICH
	::Sprite       RdpO? Sprite driver                                TURNERJW
	::Sqlflex      RdcO? SQLFLEX driver for DBI                       INFOFLEX
	::Sybase       bmcO? Sybase Driver for DBI                        MEWP
	::Unify        bdcO? Unify driver for DBI                         HMBRAND
	::XBase        RmpO? XBase driver for DBI                         JANPAZ
	::mSQL         RmcO? Msql Driver for DBI                          JWIED
	::mysql        RmcO? Mysql Driver for DBI                         JWIED
	::mysqlPP      bdpOp Pure Perl MySQL driver for the DBI           OYAMA
	::pNET         amcO? DBD proxy driver                             JWIED

=head2 Alzabo

Module List (release 0.70; 2002 Nov 21):

	Name               DSLIP Description                                  Info
	------------       ----- -------------------------------------------- ----
	Alzabo             RdpOp A data modelling tool and RDBMS-OO mapper    DROLSKY

	Alzabo::
	::BackCompat             Convert old data structuresÊ 
	::ChangeTracker          Saves a set of changes as callbacks that can be backed out if neededÊ 
	::Column                 Column objectsÊ 
	::ColumnDefinition       Holds the type attribute for a columnÊ 
	::Config                 Alzabo configuration informationÊ 
	::Create                 Loads all Alzabo::Create::* classesÊ 
	::Debug                  Creates constants used to turn on debuggingÊ    Ê
	::Driver                 Alzabo base class for RDBMS driversÊ 
	::Exceptions             Creates all exception subclasses used in Alzabo.Ê 
	::ForeignKey             Foreign key (relation) objectsÊ 
	::Index                  Index objectsÊ 
	::MethodMaker            Auto-generate useful methods based on an existing schemaÊ 
	::ObjectCache            A simple in-memory cache for row objects.Ê 
	::RDBMSRules             Base class for Alzabo RDBMS rulesetsÊ 
	::Runtime                Loads all Alzabo::Runtime::* classesÊ 
	::SQLMaker               Alzabo base class for RDBMS driversÊ 
	::Schema                 Schema objectsÊ 
	::Table                  Table objectsÊ 

	Alzabo::Create::
	::Column                 Column objects for use in schema creationÊ 
	::ColumnDefinition       Column definition object for schema creationÊ 
	::ForeignKey             Foreign key objects for schema creation.Ê 
	::Index                  Index objects for schema creationÊ 
	::Schema                 Schema objects for schema creationÊ 
	::Table                  Table objects for schema creationÊ 

	Alzabo::Driver::
	::MySQL                  MySQL specific Alzabo driver subclassÊ 
	::PostgreSQL             PostgreSQL specific Alzabo driver subclassÊ 

	Alzabo::ObjectCache::
	::Sync                   Base class for syncing classesÊ 

	Alzabo::ObjectCache::Store::
	::BerkeleyDB             Cache objects in a BerkeleyDB fileÊ 
	::LRU                    Make any storage module an LRUÊ 
	::Memory                 Cache objects in memoryÊ 
	::Null                   Doesn't really store anythingÊ 
	::RDBMS                  Cache objects in an RDBMS backendÊ 

	Alzabo::ObjectCache::Sync::
	::BerkeleyDB             Uses a DBM file to sync object cachesÊ 
	::DBM                    Base class for syncing modules that use DBM filesÊ 
	::DB_File                Uses a Berkeley DB file to sync object cachesÊ 
	::IPC                    Uses a IPC file to sync object cachesÊ 
	::Mmap                   Uses a Mmap file to sync object cachesÊ 
	::Null                   No inter-process cache syncingÊ 
	::RDBMS                  Uses an RDBM backend to sync object cachesÊ 
	::SDBM_File            Ê 

	Alzabo::RDBMSRules::
	::MySQL                  MySQL specific database rules.Ê 
	::PostgreSQL             PostgreSQL specific database rulesÊ 

	Alzabo::Runtime::
	::CachedRow              Cached row objectsÊ 
	::Column                 Column objectsÊ 
	::ColumnDefinition       Column definition objectsÊ 
	::Cursor                 Base class for Alzabo cursorsÊ 
	::ForeignKey             Foreign key objectsÊ 
	::Index                  Index objectsÊ 
	::JoinCursor             Cursor that returns arrays of Alzabo::Runtime::Row objectsÊ 
	::PotentialRow           Row objects that aren't yet in the databaseÊ 
	::Row                    Row objectsÊ 
	::RowCursor              Cursor that returns Alzabo::Runtime::Row objectsÊ 
	::Schema                 Schema objectsÊ 
	::Table                  Table objectsÊ 

	Alzabo::SQLMaker::
	::MySQL                  Alzabo SQL making class for MySQLÊ 
	::PostgreSQL             Alzabo SQL making class for PostgreSQLÊ 

=head1 SMALLER FRAMEWORK COMPARISONS

I<Note that this list is new and is mostly incomplete.>

=head2 DBIx::SearchBuilder

Module List (release 0.80; 2003 Mar 08):

	Name            DSLIP Description                                  Info
	------------    ----- -------------------------------------------- ----
	DBIx::
	::SearchBuilder ????? Perl extension for easy SQL SELECT Statement generation  JESSE

	DBIx::SearchBuilder::
	::Handle              Perl extension which is a generic DBI handle
	::Record              Perl extension for subclassing, so you can deal with a Record

	DBIx::SearchBuilder::Handle::
	::Oracle              an oracle specific Handle object
	::Pg
	::mysql               a mysql specific Handle object
	::mysqlPP

	DBIx::SearchBuilder::Record::
	::Cachable

=head2 SQL::Schema

Module List (release 0.31; 2000 Apr 25):

	Name         DSLIP Description                                  Info
	------------ ----- -------------------------------------------- ----
	SQL::
	::Schema     bdpO? Convert a data dictionary to SQL statements  TODD

	SQL::Schema::
	::Constraint       A constraint of a database tableÊ 
	::Function         A function stored within the databaseÊ 
	::Package          A package stored within the databaseÊ 
	::Procedure        A procedure stored within the databaseÊ 
	::Sequence         An Oracle sequenceÊ 
	::Source           A source stored within the databaseÊ 
	::Table            A database tableÊ 
	::Trigger          A database triggerÊ 
	::View             A database viewÊ 

	SQL::Schema::Package::
	::Body             A package's body stored within the databaseÊ 

	SQL::Schema::Table::
	::Column           A column of a database tableÊ 

=head1 INDIVIDUAL MODULE COMPARISONS (1 core module)

I<Note that this list is new and is mostly incomplete.>

=head2 DBIx::Abstract

Module List (release 1.004; 2003 Feb 17):

	Name       DSLIP Description                                  Info
	---------- ----- -------------------------------------------- ----
	DBIx::
	::Abstract RmpO? Wrapper for DBI that generates SQL           TURNERA

=head2 DBIx::AnyDBD

Module List (release 2.01; 2002 Sep 04):

	Name      DSLIP Description                                  Info
	--------- ----- -------------------------------------------- ----
	DBIx::
	::AnyDBD  bdpO? Module to make cross db applications easier  MSERGEANT

	Example::
	::DB            Example class for DBIx::AnyDBD usageÊ 	Ê

	Example::DB::
	::Default 
	::Oracle
	::Pg

=head2 DBIx::Browse

Module List (release 2.09; 2002 Dec 10):

	Name     DSLIP Description                                  Info
	-------- ----- -------------------------------------------- ----
	DBIx::
	::Browse bdpOg A class to browse related tables via CGI/Web EJDRS

	DBIx::Browse::
	::CGI 	       Perl extension to browse tables with a CGI interface.

=head1 SEE ALSO

perl(1), Rosetta::Framework, SQL::SyntaxModel, DBI, DBD::*, Alzabo,
DBIx::SearchBuilder, SQL::Schema, DBIx::Abstract, DBIx::AnyDBD, DBIx::Browse,
and various other modules.

=cut
