Changes for version 0.54 - 2026-11-02

  • Enhancements
    • join 'on' condition now accepts Perl-native forms in addition to raw SQL strings. Hashref form { 'left.col' => 'right.col', ... } expresses one or more equality conditions (multiple pairs are AND-ed); arrayref 2-element form [ 'left.col', 'right.col' ] implies '='; arrayref 3-element form [ 'left.col', operator, 'right.col' ] accepts any of = != <> < > <= >=. Column names in both structured forms are validated against $SAFE_QUALIFIED to prevent SQL injection. The existing raw-string form is unchanged.
  • Bug Fixes
    • A table could not share its name with one of the object's own fields: the DBI handle was kept in the object under the table's name, so a table called "data" overwrote the rows read into memory, and reading it died with "Not an ARRAY reference" (as did DESTROY). "id", "directory", "logger", "cache" and the rest were affected the same way. Handles now live in $self->{'_dbh'}{$table}. Code that reached into $self->{$table} for the handle must read $self->{'_dbh'}{$table} instead.

Documentation

Modules

Read-only Database Abstraction Layer (ORM)
Fluent, chainable query builder for Database::Abstraction