DBIx::SQLEngine

Extends DBI with High-Level Operations
Download

DBIx::SQLEngine Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Matthew Simon Cavalletto
  • Publisher web site:
  • http://search.cpan.org/~ferrency/

DBIx::SQLEngine Tags


DBIx::SQLEngine Description

Extends DBI with High-Level Operations DBIx::SQLEngine - Extends DBI with High-Level OperationsABSTRACTThe DBIx::SQLEngine class provides an extended interface for the DBI database framework. Each SQLEngine object is a wrapper around a DBI database handle, adding methods that support ad-hoc SQL generation and query execution in a single call. Dynamic subclassing based on database server type enables cross-platform portability. An object mapping layer provides classes for tables, columns, and records.DBIx::SQLEngine is the latest generation of a toolkit used by the authors for several years to develop business data applications. Its goal is to simplify dynamic query execution and to minimize cross-RDMS portability issues.Layered Class FrameworkDBIx::SQLEngine is an object-oriented framework containing several class hierarchies grouped into three layers. Applications can use the Driver layer directly, or they can use the Schema and Record layers built on top of it.The Driver layer is the primary and lowest-level layer upon which the other layers depend. Each Driver object contains a DBI database handle and is responsible for generating SQL queries, executing them, and returning the results. These classes are described below in "Driver Layer Classes".The Schema layer centers around the Table object, which combines a Driver object with the name of a table to perform queries against that table. Table objects keep track of their structure as Column objects, and use that information to facilitate common types of queries. These classes are described below in "Schema Layer Classes".The Record layer builds on the Schema layer to create Perl classes which are bound to a given Table object. Your Record subclass can fetch rows from the table which will be blessed into that class, and have methods allowing them to be changed and updated back to the database. These classes are described below in "Record Layer Classes".DBI WrapperEach DBIx::SQLEngine::Driver object is implemented as a wrapper around a database handle provided by DBI, the Perl Database Interface.Arbitrary queries can be executed, bypassing the SQL generation capabilities. The methods whose names end in _sql, like fetch_sql and do_sql, each accept a SQL statement and parameters, pass it to the DBI data source, and return information about the results of the query. Error handling is standardized, and routine annoyances like timed-out connections are retried automatically.The Driver also allows direct access to the wrapped database handle, enabling use of the entire DBI API for cases when high-level interfaces are insufficient.Relevant methods are descrbed in the Driver Object Creation, Connection Methods, and Statement Methods sections of DBIx::SQLEngine::Driver.High-Level InterfaceDrivers have a combined query interface provides a useful high-level idiom to perform the typical cycle of SQL generation, query execution, and results fetching, all through a single method call.The various fetch_*, visit_* and do_* methods that don't end in _sql, like fetch_select and do_insert, are wrappers that combine a SQL-generation and a SQL-execution method to provide a simple ways to perform a query in one call.These methods are defined in the Fetching Data, Editing Data, and Defining Structures sections of DBIx::SQLEngine::Driver.Data-Driven SQLSeveral Driver methods are responsible for converting their arguments into commands and placeholder parameters in SQL, the Structured Query Language.The various methods whose names being with sql_, like sql_select and sql_insert, each accept a hash of arguments and combines then to return a SQL statement and corresponding parameters. Data for each clause of the statement is accepted in multiple formats to facilitate query abstraction, often including various strings, array refs, and hash refs. Each method also supports passing arbitrary queries through using a sql parameter.Named DefinitionsDriver connection arguments and query definitions may be registered in named collections. The named connection feature allows the definition of names for sets of connection parameters, while the named query methods support names for various types of queries in either data-driven or plain-SQL formats.The definitions may include nested data structures with a special type of placeholders to be replaced by additional values at run-time. References to subroutines can also be registed as definitions, to be called at run-time with any additional values to produce the connection or query arguments.This functionality is described in the Named Connections and Named Query Catalog sections of DBIx::SQLEngine::Driver.Portability SubclassesBehind the scenes, different Driver subclasses are instantiated depending on the type of server to which you connect, thanks to DBIx::AnyData.This release includes subclasses for connections to MySQL, PostgreSQL, Oracle, Informix, Sybase, and Microsoft SQL servers, as well as for the standalone SQLite, AnyData, CSV and XBase packages. For more information about supported drivers, see "Driver Subclasses" in DBIx::SQLEngine::Driver.As a result, if you use the data-driven query interface, some range of SQL dialect ideosyncracies can be compensated for. For example, the sql_limit method controls the syntax for select statements with limit and offset clauses, and both MySQL and Oracle override this method to use their local syntax.However, some features can not be effectively emulated; it's no use to pretend that you're starting a transaction if your database don't have a real atomic rollback/commit function. In those areas, the subclasses provide capability methods that allow callers to determine whether the current driver has the features they require. Features which are only available on a limited number of platforms are listed in "ADVANCED CAPABILITIES" in DBIx::SQLEngine::Driver.Object MappingBuilt on top of the core SQLEngine functionality is an object mapping layer that provides a variety of classes which serve as an alternate interface to database content.The Schema classes provide objects for tables and columns which call methods on a SQLEngine to fetch and store data, while the Record classes provide a means of creating subclasses whose instances map to to rows in a particular table using the Schema classes.Note that this is not a general-purpose "object persistence" system, or even a full-fledged "object-relational mapping" system. It is rather a "relational-object mapping" system: each record class is linked to a single table, each instance to a single row in that table, and each key in the record hash to a value in an identically named column.Furthermore, no effort has been made to obscure the relational implementation behind the object abstraction; for example, if you don't need the portability provided by the data-driven query interface, you can include arbitrary bits of SQL in the arguments passed to a method that fetch objects from the database.This functionality is described in "Schema Layer Classes" and "Record Layer Classes". Requirements: · Perl


DBIx::SQLEngine Related Software