The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 0.79_01

  • ENHANCEMENTS:
  • Distribution is now signed with Module::Signature.
  • Lots of refactoring of the row object internals to simplify the code. Implemented by Ilya Martynov.
  • The testing code has been cleaned up quite a bit, and all of the utility functions used in the tests have been consolidated in t/lib/Alzabo/Test/Utils.pm.
  • Added intermediate table and row classes for MethodMaker created classes, to provide a central point for adding new methods to table and row objects. Based on a patch from Ken Williams.
  • Support for "self-linking" tables in Alzabo::MethodMaker, a linking table which connects a table to itself in an n..n relationship. Implemented by Ken Williams.
  • Added rdbms_version method to driver classes. Implemented by Ken Williams.
  • Added Alzabo::Create::Schema->is_saved() method.
  • Foreign keys are now reverse engineered for Postgres 7.3+. Implemented by Ken Williams.
  • Don't try to include dropped columns when reverse engineering Postgres 7.3+. Implemented by Ken Williams.
  • Do a better job of detecting SERIAL type columns when reverse engineering Postgres schemas. Based on a patch from Ken Williams.
  • Treat Postgres data types SERIAL4, SERIAL8, BIGSERIAL, and BIGINT as valid types. Implemented by Josh Jore.
  • NotNullable exception now include the table and schema name. Based on a patch from Ken Williams.
  • Primary keys are updateable.
  • Debugging output from Alzabo::MethodMaker is clearer about what methods are being made. Implemented by Ken Williams.
  • Alzabo::MethodMaker will now create foreign key methods when two tables have multiple relationships, as long as the name generation callback returns different names for each of them. Implemented by Ken Williams.
  • A join parameter can now specify an outer join with a single array reference, such as:
    • left_outer_join => $table_A, $table_B
  • Previously, this could only be done as a double array reference, like:
    • [ [ left_outer_join => $table_A, $table_B ] ]
  • Various doc fixes and rewriting, most notably in Alzabo.pm.
  • BUG FIXES:
  • A join using multiple aliased tables would fail with an error message like "Cannot use column (Foo.bar_id) in select unless its table is included in the FROM clause".
  • Remove the long-ago deprecated next_row() and next_rows() methods.
  • Postgres 7.3 allows identifiers to be up to 63 characters. This broke the code that handled sequenced columns for Postgres. Patch by Josh Jore.
  • If you tried to create a relationship between two tables, and the "table_to" table already had a column of the same name as the "column_from" column, then Alzabo died with an error. Reported by Ping Liang.
  • If you had previously installed Alzabo, and then provided a new Alzabo root directory or a new directory for the Mason components, this was not respected during the installation process.
  • Alzabo's referential integrity checks will no longer complain if you attempt to set a foreign key column to NULL. Previously it would throw an exception if the column was part of the dependent table in a foreign key relationship. Now, it just assumes you really meant to allow the column to be NULLable.
  • The schema class's load_from_file() method now blesses the loaded schema into the calling class. So if you use MethodMaker to generate classes, and then call My::Schema->load_from_file, it should always return an object blessed into the My::Schema class. Reported by Ken Williams.
  • When checking for the MySQL variable sql_mode, the value may be simply '' as opposed to 0. Patch by Andrew Baumhauer.
  • BACKWARDS INCOMPATIBILITIES:
  • Alzabo now requires at least Perl 5.6.0 (5.6.1+ recommended).
  • The old caching system has been removed, as it had way too much overhead. There is a new, much simpler caching system provided by the Alzabo::UniqueRowCache module.
  • The Alzabo::Runtime::Table->row_by_pk() method no longer dies if it cannot find a matching row. Instead it simply returns false.
  • Some deprecated MethodMaker options were removed: insert, update, lookup_table
  • The Alzabo::Runtime::Row->delete() method now works for potential rows.

Documentation

Frequently Asked Questions
and MySQL
and PostgreSQL
A quick reference to methods in the Alzabo classes

Modules

A data modelling tool and RDBMS-OO mapper
Convert old data structures
Saves a set of changes as callbacks that can be backed out if needed
Column objects
Holds the type attribute for a column
Loads all Alzabo::Create::* classes
Column objects for use in schema creation
Column definition object for schema creation
Foreign key objects for schema creation.
Index objects for schema creation
Schema objects for schema creation
Table objects for schema creation
Creates constants used to turn on debugging
Alzabo base class for RDBMS drivers
MySQL specific Alzabo driver subclass
PostgreSQL specific Alzabo driver subclass
Creates all exception subclasses used in Alzabo.
Foreign key (relation) objects
Index objects
Auto-generate useful methods based on an existing schema
Base class for Alzabo RDBMS rulesets
MySQL specific database rules.
PostgreSQL specific database rules
Loads all Alzabo::Runtime::* classes
Column objects
Column definition objects
Base class for Alzabo cursors
Foreign key objects
Index objects
Cursor that returns arrays of Alzabo::Runtime::Row objects
Row objects that aren't yet in the database
Row objects
Cursor that returns Alzabo::Runtime::Row objects
Row objects that aren't yet in the database
Row objects that aren't yet in the database
Schema objects
Table objects
Alzabo base class for RDBMS drivers
Alzabo SQL making class for MySQL
Alzabo SQL making class for PostgreSQL
Schema objects
Table objects

Provides

in lib/Alzabo/MethodMaker.pm
in lib/Alzabo/MethodMaker.pm
in lib/Alzabo/Driver.pm
in lib/Alzabo/Exceptions.pm
in lib/Alzabo/Exceptions.pm
in lib/Alzabo/MethodMaker.pm
in lib/Alzabo/Runtime/RowState/InCache.pm
in lib/Alzabo/Runtime/RowState/Live.pm
in lib/Alzabo/Runtime/UniqueRowCache.pm
in lib/Alzabo/SQLMaker.pm
in lib/Alzabo/Runtime/Row.pm
in lib/Alzabo/Runtime/Row.pm