NAME
Rosetta::SimilarModules - Compare and contrast Rosetta with other modules
ABSTRACT
See the file Rosetta::Framework for the main Rosetta documentation.
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 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.
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.
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*.
LARGER FRAMEWORK COMPARISONS
Note that this list is new and is mostly incomplete.
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
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Ê
SMALLER FRAMEWORK COMPARISONS
Note that this list is new and is mostly incomplete.
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
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Ê
INDIVIDUAL MODULE COMPARISONS (1 core module)
Note that this list is new and is mostly incomplete.
DBIx::Abstract
Module List (release 1.004; 2003 Feb 17):
Name DSLIP Description Info
---------- ----- -------------------------------------------- ----
DBIx::
::Abstract RmpO? Wrapper for DBI that generates SQL TURNERA
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
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.
SEE ALSO
perl(1), Rosetta::Framework, SQL::ObjectModel, DBI, DBD::*, Alzabo, DBIx::SearchBuilder, SQL::Schema, DBIx::Abstract, DBIx::AnyDBD, DBIx::Browse, and various other modules.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 194:
Non-ASCII character seen before =encoding in 'structuresÊ'. Assuming CP1252