Changes for version 0.900000 - 2026-06-23

  • First DBIO release. DBIO is a fork of DBIx::Class; the entries below summarize everything that changed relative to the upstream codebase. See DBIO::Manual::Heritage for the full reference and DBIO::Manual::Migration for a step-by-step conversion guide.
  • Breaking Changes
    • Namespace DBIx::Class::* renamed to DBIO:: throughout; a clean break, with no runtime DBIx::Class compatibility shim
    • Remove the Class::DBI compatibility layer (CDBICompat) and the legacy DB.pm shim; no replacement
    • Drop SQL::Abstract::Classic in favour of canonical SQL::Abstract (>= 1.99)
    • Replace sql_limit_dialect / emulate_limit() with an apply_limit() method on each driver's SQLMaker (default: LIMIT ? OFFSET ?)
    • Rename the schema-version table dbix_class_schema_versions to dbio_schema_versions (no DBIx::Class upgrade path)
    • Rename test environment variables DBICTEST_* to DBIO_TEST_*
    • Extract every database-specific storage and SQLMaker class out of core into its own CPAN distribution (see Database Drivers)
  • Result Class Styles
    • use DBIO 'Role': DBIO.pm is itself a sugar pragma (analogous to Moose.pm). The role (Core / ResultSet / Schema) is auto-detected from the package name or given explicitly. Driver shortcuts pin a database via use DBIO Schema => -pg (sets storage_type) and load the driver's Result component on a Result class; each driver registers its own shortcut (DBIO::Shortcut::<key>) so core names no driver
    • Vanilla: the classic __PACKAGE__-> API, unchanged, via use base 'DBIO::Core'
    • DBIO::Candy: import-based sugar with method renaming and table-name inference (integrates DBIx::Class::Candy)
    • DBIO::Cake: a DDL-like DSL of type functions and modifiers, with driver flags (-Pg / -MySQL / -SQLite) and inflate flags
    • DBIO::Moo / DBIO::Moose: use Moo or Moose attributes alongside DBIO columns in the same Result, ResultSet or Schema class
  • Integrated Components (no load_components required)
    • DBIO::Timestamp (was DBIx::Class::TimeStamp): auto created/updated
    • Row/ResultSet/Schema helpers from DBIx::Class::Helpers: TO_JSON, serializable_columns, self_rs, get_storage_value, on-column-change hooks, proxy_resultset_method
    • many_to_many introspection (was IntrospectableM2M) via DBIO::Relationship::ManyToMany
    • DBIO::UUIDColumns (was DBIx::Class::UUIDColumns)
    • DBIO::Ordered (was DBIx::Class::Ordered): position-column ordering
    • DBIO::EncodedColumn: one-way column encoding for passwords/tokens
    • DBIO::HashAccessor: accessors for serialized hash columns
    • InflateColumn::Serializer: JSON, YAML, Sereal, MsgPack
    • PopulateMore: cross-source refs, file fixtures, batch insert
  • New Concepts (no DBIx::Class equivalent)
    • DBIO::AccessBroker: a credential-source interface; pass a broker to Schema->connect($broker). Static, Vault and HostBound brokers ship; broker connect-info is refreshed on reconnect, with transaction-safety metadata and unsafe-broker transaction guards
    • DBIO::ChangeLog: per-Result row-level audit trail in a companion table (JSON changes; native jsonb on PostgreSQL)
    • Async storage: DBIO::Storage::Async defines a Future-based, DBI-free interface, implemented by DBIO::PostgreSQL::Async (libpq / EV::Pg; LISTEN/NOTIFY, COPY, pipelining) and DBIO::MySQL::Async (EV::MariaDB; pipelining, connection-pool transaction pinning)
    • DBIO::Storage::DateTimeFormat: a shared driver datetime base declaring strptime patterns plus an optional preferred CPAN DateTime::Format::* class
    • Storage type registry (cake_defaults / type_info) driving driver-aware Cake column-type resolution
    • DBIO::Generate / DBIO::Loader: generate Result classes from a live database in any style (Vanilla, Candy, Cake, Moo, Moose)
    • DBIO::Admin: schema introspection and management
    • DBIO::GraphQL: project Result classes to GraphQL types (satellite distribution)
  • Database Drivers
    • All driver storage and SQLMaker classes now live in per-database distributions: DBIO-PostgreSQL (with -Async, -PostGIS, -AGE), DBIO-MySQL (with -Async), DBIO-SQLite, DBIO-DuckDB, DBIO-DB2, DBIO-Firebird, DBIO-Informix, DBIO-MSSQL, DBIO-Oracle, DBIO-Sybase
    • Every driver ships native Introspect, Diff and Deploy modules using a test-and-compare strategy; SQL::Translator is now an optional fallback rather than a requirement
    • Schema->deploy() routes to the storage's dbio_deploy_class when present (after forcing driver determination), otherwise falls back to SQL::Translator
    • A driver registry lets external storage distributions self-register
    • DBIO::Replicated ships in core (was the external DBIx::Class::Replicated); load it as a Schema component via load_components('DBIO::Replicated'), default balancer DBIO::Replicated::Balancer::First
    • DBD::MariaDB support; MySQL 8.0.1+ locking (FOR SHARE, NOWAIT, SKIP LOCKED); Firebird/InterBase and Informix support restored
  • Core and Internals
    • DBIO::Base: a single meta-infrastructure root (C3 MRO, Componentised, Class::Accessor::Grouped, code attributes, clean stack frames)
    • DBIO::Util replaces the DBIx::Class::_ENV_ pseudo-package and centralizes file, dump and utility helpers; Path::Class is no longer a dependency
    • Auto-discovery of joins from search conditions
    • Native query timing via Storage::Statistics
    • Deferred rollback prevents silent nested commit; explicit TxnScopeGuard->rollback(); guard against a double DESTROY rollback
    • Normalize +Absolute::Storage names in Schema->connection
    • Remove the "package # hide from PAUSE" trick; MetaNoIndex in dist.ini covers the internal DBIO::Test::* namespaces instead
    • Drop Sub::Name, SQL::Abstract::Util (merged upstream) and Path::Class
    • Build system converted to Dist::Zilla (the [@DBIO] bundle)
  • Testing
    • DBIO::Test: database-free mock storage (init_schema plus $storage->mock(qr//, \@rows)); core tests never touch a real DB
    • Shared DBIO::Test::Schema::* classes (Vanilla, Candy, Cake, Moo, Moose) across core and driver distributions; driver tests load their result classes via the load_classes hashref form
    • Database-specific tests moved into the driver distributions
  • Documentation
    • DBIO = "DBI Objects"; new DBIO::Manual::Heritage as the definitive "what changed from DBIx::Class" reference
    • POD normalized to =attr / =method / =func; ABSTRACT on every module; AUTHORS split into DBIO and DBIx::Class sections
  • Fixes
    • Schema->deploy() forces ensure_connected so the native deploy class is found on the DSN path (previously fell through to the unsupported SQL::Translator codepath)
    • Prevent repeated TxnScopeGuard DESTROY from attempting a second rollback
    • Fix namespace leaks (namespace::clean); invalidate cached related_resultsets on set_cache(); clear the inflated-column cache on update; undef handling in set_inflated_columns; false PK warning for scalar-ref values; rows() naming under namespace::clean; resolve_relationship_condition with compound PKs; column names containing spaces; DateTime::Format timezone-type method names; fast-path populate for MSSQL MONEY literals

Documentation

List or deploy the DBIO agent skills available to your app
CLI for DBIO schema administration
Dump a database schema to DBIO Result classes
Index of the Manual
Developing DBIO Components
Miscellaneous recipes
Guide to the DBIO documentation set
Simple CD database example
Frequently Asked Questions (in theory)
Feature overview with links to the relevant DBIO documentation
Clarification of terms used.
Everything that changed from DBIx::Class to DBIO
Introduction to DBIO
Manual on joining tables with DBIO
Step-by-step guide for migrating an existing DBIx::Class codebase to DBIO
Up and running with DBIO in 10 minutes
Conventions for reading and writing DBIO POD
Representing a single result (row) from a DB query
Troubleshooting common DBIO problems
Run DBIO tests against Kubernetes-provisioned databases

Modules

Native relational mapping for Perl, built on DBI
Credential lifecycle for DBIO connections
One credential identity pinned to one host
Single-DSN AccessBroker drop-in replacement
Credential rotation with TTL
per-driver base->native column type resolver (one-way)
Lightweight schema administration helper for DBIO
Meta-infrastructure base for all DBIO internal classes
DDL-like DSL for defining DBIO result classes
Sugar syntax for defining DBIO result classes
Create sugar for DBIO components
Error reporting utilities for DBIO
Row-level change tracking component
ResultSource definition for per-source changelog tables
Schema-level change tracking component
ResultSource definition for the changelog_set table
Shared utilities for changelog table source definitions
Component loading and management for DBIO
Standard base class for DBIO result classes
Abstract object representing a query cursor on a resultset.
Base class for DBIO driver deploy orchestrators
Deploy base for drivers that diff against a temporary database
Extensible DBIO deployment
Parent class for DeploymentHandlers
Native DBIO driver deploy (no SQL::Translator needed)
Interface for deploy methods
Interface for version storage methods
Interface for version methods
Standard version storage implementation
Attach this component to your schema to ensure you stay up to date
The typical way to store versions in the database
Base class for DBIO driver diff orchestrators
Engine-agnostic comparison helpers for DBIO diff operations
Base class for DBIO driver diff operation objects
One-way encode selected columns (e.g. passwords)
Exception objects for DBIO
Automatically convert column data
Future interface contract for async DBIO operations
Driver-agnostic Result class generator for DBIO
Relationship inference for DBIO::Generate
DBIO::Cake DSL emitter for DBIO::Generate
DBIO::Candy DSL emitter for DBIO::Generate
Moo-style emitter for DBIO::Generate
Moose-style emitter for DBIO::Generate
Vanilla-style Result class emitter for DBIO::Generate
Accessor methods for serialized hash columns
Automatically create references from column data
Auto-create DateTime objects from date and datetime columns.
Inflators to serialize data structures for DBIO
Base class for DBIO driver introspectors
DBI-based introspection via standard metadata APIs
Enable Moo attributes in DBIO result classes
Enable Moose attributes in DBIO result classes
Optional dependency declarations for DBIO
Maintain a position column over an ordered list of rows
Primary Key class
Automatic primary key class (compatibility shim)
Enhanced populate with cross-source references
Relationship declaration helpers for DBIO result classes
Inter-table relationships
Declare a foreign-key relationship to a parent row
Cascade delete and update actions across relationships
Schema-time relationship method synthesis (accessors and proxies)
Declare a one-to-many relationship
Declare a one-to-one relationship
Load all standard relationship declaration components
Declare a many-to-many relationship via a bridge table
Replicated storage support for DBIO
Wrapper base class for replicated backends
Master backend wrapper
Replicant backend wrapper
Base class for replicated read balancing
Always use the first active replicant
Randomly choose an active replicant
Prefix trace output with replicated backend identity
Manage a pool of replicant backends
Replicated DBI storage coordinator
Get raw hashrefs from a resultset
Lazy query object for fetching and manipulating DBIO rows
help when paging through sets of results
Convenience wrapper for working with a single ResultSet column
Metadata object describing a table, view, or query source
Build row-inflating parsers from result source metadata
Assemble row-parser source code for simple and collapsing queries
ResultSource object representing a view
Serializable pointers to ResultSource instances
Proxy result source methods onto a result class
Basic row methods
Shared SQL utility functions for DBIO
An SQL::Abstract-based SQL maker class
Class containing generic enhancements to SQL::Abstract
Schema class and connection container for DBIO applications
compile a base-type schema into one engine's native target model
portable base-type vocabulary for multi-engine schemas
DBIO::Schema plugin for Schema upgrades (DEPRECATED)
Runtime access to the AI agent skills bundled with DBIO
Run environment checks on startup
Generic Storage Handler
Base class for async storage implementations
Execute code blocks with transaction wrapping and retry logic
DBI storage handler
DBI-specific AccessBroker integration for DBIO storage
Storage component for RDBMS requiring explicit placeholder typing
Two-tier capability probing for DBI storage drivers
Object representing a query cursor on a resultset.
Native data type and LOB classification helpers for DBI storage
Storage Component for Sybase ASE and MSSQL for Identity Inserts / Updates
Some DBDs have poor to no support for bind variables
Base class for ODBC drivers
Storage component for RDBMSes supporting GUID types
Strptime-backed datetime format base for driver format classes
Pretty Tracing DebugObj
Abstract connection pool interface for async storage
Shared connection pool mechanics for async DBIO drivers
SQL analysis and query rewrite utilities
SQL Statistics
Scope-based transaction handling
Test utilities for DBIO and DBIO driver distributions
Base class for DBIO test Result classes
Base class for DBIO test ResultSet classes
Test cursor subclass for DBIO storage testing
Minimal datetime parser for DBIO offline test storage
Test component for sqlt_deploy_hook testing
Test result class for dynamic foreign column resolution
Test result class for dynamic foreign column joining
Test component that fails to load due to missing true value
Test component for ensure_class_loaded testing
Test class for foreign component loading
Test component loaded as a foreign component
Synchronous mock Future for DBIO test suite
Provision temporary database pods in Kubernetes for DBIO testing
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test fixture for namespace resolution
Test component for optional component loading
Test schema for ResultSetManager component testing
Test result class for ResultSetManager component testing
Test SQLMaker subclass with select call counting
SQL statement tracing object for test diagnostics
Standard test schema for the DBIO ecosystem
Test result class for the artist table
Test result class for the artist_guid table (UNIQUEIDENTIFIER PK)
Test result class for custom source name on the artist table
Test result subclass of the artist table
Test result class for the artist_undirected_map table
Test result class for the cd_artwork table
Test result class for the artwork_to_artist table
Test result class for the bindtype_test table
Test result class for the bookmark table
Test result class for the books table
Test result class for the cd table
Test result class for the cd_to_producer table
Test result class for the collection table
Test result class for the collection_object table
Test result class for the computed_column_test table
Test result class using a custom SQL query as source
Test result class for the dummy table
Test result class for the employee table with ordering
Test result class for the encoded table
Test result class for the event table with datetime inflation
Test result class for the event_small_dt table with smalldatetime inflation
Test result class for the forceforeign table
Test result class for the fourkeys table
Test result class for the fourkeys_to_twokeys table
Test result class for the genre table
Test result class for the images table
Test result class for the liner_notes table
Test result class for the link table
Test result class for the lyric_versions table
Test result class for the lyrics table
Test result class for the money_test table (MONEY column)
Test schema with Moo-enabled result classes
Moo-enabled test result class for the artist table
Moo-enabled test result class for the cd table
Custom Moo-based ResultSet for the artist source
Test schema with Moo + DBIO::Cake result classes
Moo + Cake test result class for the artist table
Moo + Cake test result class for the cd table (no custom ResultSet)
Custom Moo-based ResultSet for the MooCake artist source
Test schema with Moose-enabled result classes
Moose-enabled test result class for the artist table
Moose-enabled test result class for the cd table
Custom Moose-based ResultSet for the artist source
Test schema with Moose + DBIO::Cake result classes
Moose + Cake test result class for the artist table
Moose + Cake test result class for the cd table (no custom ResultSet)
Custom Moose-based ResultSet for the MooseSugar artist source
Test result class for a table with no primary key
Test non-result class for load_classes error testing
Test result class for the onekey table
Test result class for the owners table
Test result class for the producer table
Test result class for columns with punctuated names
Test schema using DBIO::Cake syntax
Test Cake result class for the artist table
Test Cake result class for the cd table
Test result class for the self_ref table
Test result class for the self_ref_alias table
Test result class for the serialized table
Test result class for the tags table
Test result class for timestamp primary key handling
Test result class for the track table
Test result class for the treelike table
Test result class for the twokeytreelike table
Test result class for the twokeys table
Test result class for the typed_object table
Test virtual view result class for 1999 CDs
Test virtual view result class for 2000 CDs
Fake storage for testing SQL generation without a database
Test component with intentional syntax error
Test component with intentional syntax error
Test component with intentional syntax error
Test class for taint mode with auto-loading
Test class for taint mode with manual loading
Test result class for taint mode namespace loading
Utility functions for DBIO test suite
Memory leak detection and tracing for DBIO tests
Override CORE::GLOBAL::require for testing
RAII guard that restores the umask on scope exit
Automatically set and update timestamp columns
Automatically populate UUID columns on insert
Internal utility functions for DBIO
Schema class for versioning support
Result class for the schema versions table
Bring your own database magic!