Changes for version 0.08250 - 2013-04-29
- New Features / Changes
- Rewrite from scratch the result constructor codepath - many bugfixes and performance improvements (the current codebase is now capable of outperforming both DBIx::DataModel and Rose::DB::Object on some workloads). Some notable benefits:
- Multiple has_many prefetch
- Partial prefetch - you now can select only columns you are interested in, while preserving the collapse functionality (collapse is now exposed as a first-class API attribute)
- Prefetch of resultsets with arbitrary order (RT#54949, RT#74024, RT#74584)
- Prefetch no longer inserts right-side table order_by clauses (massively helps the deficient MySQL optimizer)
- Prefetch with limit on right-side ordered resultsets now works correctly (via aggregated grouping)
- No longer order the insides of a complex prefetch subquery, unless required to satisfy a limit
- Stop erroneously considering order_by criteria from a join under distinct => 1 (the distinct should apply to the main source only)
- Massively optimize codepath around ->cursor(), over 10x speedup on some iterating workloads.
- Support standalone \[ $sql, $value ] in literal SQL with bind specifications: \[ '? + ?', 42, 69 ] is now equivalent to \[ '? + ?', [ {} => 42 ], [ {} => 69 ] ]
- Changing the result_class of a ResultSet in progress is now explicitly forbidden. The behavior was undefined before, and would result in wildly differing outcomes depending on $rs attributes.
- Deprecate returning of prefetched 'filter' rels as part of get_columns() and get_inflated_columns() data
- Invoking get_inflated_columns() no longer fires get_columns() but instead retrieves data from individual non-inflatable columns via get_column()
- Emit a warning on incorrect use of nullable columns within a primary key
- Limited checks are performed on whether columns without declared is_nullable => 1 metadata do in fact sometimes fetch NULLs from the database (the check is currently very limited and is performed only on resultset collapse when the alternative is rather worse)
- Rewrite from scratch the result constructor codepath - many bugfixes and performance improvements (the current codebase is now capable of outperforming both DBIx::DataModel and Rose::DB::Object on some workloads). Some notable benefits:
- Fixes
- Fix _dbi_attrs_for_bind() being called befor DBI has been loaded (regression in 0.08210)
- Fix update/delete operations on resultsets *joining* the updated table failing on MySQL. Resolves oversights in the fixes for RT#81378 and RT#81897
- Fix open cursors silently resetting when inherited across a fork or a thread
- Properly support "MySQL-style" left-side group_by with prefetch
- Fix $grouped_rs->get_column($col)->func($func) producing incorrect SQL (RT#81127)
- Stop Sybase ASE storage from generating invalid SQL in subselects when a limit without offset is encountered
- Even more robust behavior of GenericSubQuery limit dialect
- Make sure deployment_statements() and cursor_class() are called on a resolved storage subclass
- Misc
- Fix tests failing due to unspecified resultset retrieval order (test suite now will pass with newest SQLite libs)
Documentation
Index of the Manual
Developing DBIx::Class Components
Miscellaneous recipes
What documentation do we have?
Simple CD database example
Frequently Asked Questions (in theory)
A boatload of DBIx::Class features with links to respective documentation
Clarification of terms used.
Introduction to DBIx::Class
Manual on joining tables with DBIx::Class
How to read and write DBIx::Class POD.
Representing a single result (row) from a DB query
Got a problem? Shoot it.
Minimum Need to Know
utility for administrating DBIx::Class schemata
Modules
Extensible and flexible object <-> relational mapper.
See Class::Accessor::Grouped
Administration object for schemas
Class::DBI Compatibility layer.
Provides advanced Carp::Clan-like warning functions for DBIx::Class internals
Core set of DBIx::Class modules
Abstract object representing a query cursor on a resultset.
(DEPRECATED) classdata schema component
Exception objects for DBIx::Class
Automatically convert column data
Automatically create references from column data
Auto-create DateTime objects from date and datetime columns.
DEPRECATED (superseded by DBIx::Class::InflateColumn::FS)
Optional module dependency specifications (for module authors)
Modify the position of objects in an ordered list.
Primary Key class
Automatic primary key class
Inter-table relationships
Inter-table relationships
Get raw hashrefs from a resultset
Represents a query used for fetching a set of results.
helpful methods for messing with a single column of the resultset
scheduled for deletion in 09000
Result source object
Table object
ResultSource object representing a view
Serializable pointers to ResultSource instances
provides a classdata table object and method proxies
Basic row methods
An SQL::Abstract-based SQL maker class
SQL::Abstract::Limit-like functionality for DBIx::Class::SQLMaker
Pre-ANSI Joins-via-Where-Clause Syntax
composable schemas
DBIx::Class::Schema plugin for Schema upgrades
hooks for Storable nfreeze/thaw
Run environment checks on startup
Generic Storage Handler
Try running a block of code until success with a configurable retry logic
DBI storage handler
Support specific to MS Access
Support for DBD::ADO
Support for MS Access over ADO
GUID Support for MS Access over ADO
Support for Microsoft SQL Server via DBD::ADO
Remove trailing NULLs in binary data and normalize GUIDs for MSSQL over ADO
Storage component for RDBMS requiring explicit placeholder typing
Object representing a query cursor on a resultset.
IBM DB2 support for DBIx::Class
Driver for the Firebird RDBMS via DBD::Firebird
Driver Base Class for the Firebird RDBMS
Storage Component for Sybase ASE and MSSQL for Identity Inserts / Updates
Base Storage Class for Informix Support
Driver for the Firebird RDBMS via DBD::InterBase
Base Class for Microsoft SQL Server support in DBIx::Class
Sometime DBDs have poor to no support for bind variables
Base class for ODBC drivers
Support specific to MS Access over ODBC
Support specific to DB2/400 over ODBC
Driver for using the Firebird RDBMS through ODBC
Support specific to Microsoft SQL Server over ODBC
Driver for using Sybase SQL Anywhere through ODBC
Base class for Oracle driver
Oracle Support for DBIx::Class
Oracle joins in WHERE syntax support (instead of ANSI).
Automatic primary key class for PostgreSQL
BETA Replicated database support
A Software Load Balancer
Just get the First Balancer
A 'random' Balancer
Manage a pool of replicants
A replicated DBI Storage Role
A DBI Storage Role with DSN information in trace output
Driver for SQL Anywhere
GUID Support for SQL Anywhere over DBD::SQLAnywhere
Automatic primary key class for SQLite
Base class for drivers using DBD::Sybase
Sybase ASE SQL Server support for DBIx::Class
Storage::DBI subclass for Sybase ASE without placeholder support
Base class for drivers using DBD::Sybase over FreeTDS.
(DEPRECATED) Legacy storage class for MSSQL via DBD::Sybase
Support for Microsoft SQL Server via DBD::Sybase
Support for Microsoft SQL Server via DBD::Sybase without placeholders
Storage component for RDBMSes supporting GUID types
Storage::DBI class implementing MySQL specifics
SQL Statistics
Scope-based transaction handling
Force UTF8 (Unicode) flag on columns (DEPRECATED)
Create a SQL::Translator schema from a DBIx::Class::Schema instance
DBIx::Class file producer
Examples
- examples/Benchmarks/benchmark_datafetch.pl
- examples/Benchmarks/benchmark_hashrefinflator.pl
- examples/MiscTools/determine_cpan_joint_deps.pl
- examples/Schema/MyDatabase/Main.pm
- examples/Schema/MyDatabase/Main/Result/Artist.pm
- examples/Schema/MyDatabase/Main/Result/Cd.pm
- examples/Schema/MyDatabase/Main/Result/Track.pm
- examples/Schema/db/example.sql
- examples/Schema/insertdb.pl
- examples/Schema/testdb.pl