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

Changes for version 0.80

  • ENHANCEMENTS:
  • Use the non-deprecated form of DBI->tables().
  • Added an is_time_interval method to Alzabo::Column.
  • Lots and lots of doc cleanup and re-formatting.

Changes for version 0.79_04

  • Identical to 0.79_03 except for minor POD changes in order to try to fix the problem of search.cpan.org treating the wrong file as the main Alzabo.pm docs. Again reported by Darren Duncan.

Changes for version 0.79_03

  • ENHANCEMENTS:
  • Many doc rewrites and updates.
  • Documented row state classes.
  • Added back the no_cache parameter to avoid caching one or more rows.
  • Moved the relevant documentation from Alzabo::Runtime::PotentialRow into Alzabo::Runtime::Row.
  • BUG FIXES:
  • Fixed the NAME portion of the Alzabo::MySQL and Alzabo::PostgreSQL POD files so that search.cpan.org doesn't think Alzabo::MySQL is the Alzabo.pm file. Reported by Darren Duncan.
  • The 12-rev_engineer_pg_fk.t test would try to load DBD::Pg even if you weren't using Postgres, which would cause the test file to die if DBD::Pg wasn't installed. Reported by Jost's smokehouse.
  • More documentation updates to remove outdated information.
  • Split out the documentation in Alzabo.pm into Alzabo::Intro and Alzabo::Design.
  • Added a FAQ from a question on the mailing list. Suggested by Terrence Brannon.
  • Eliminated a circular reference between tables created via the Alzabo::Runtime::Table->alias() method, and the columns those alias tables contain. This required the use of weak references.
  • NOTE: Alzabo regular tables and columns have circular references to each other, but this normally isn't a problem because you generally want to keep a whole schema around all the time anyway.

Changes for version 0.79_02

  • ENHANCEMENTS:
  • Added support for table attributes like MySQL's "TYPE = ..." or Postgres's "WITH OIDS".
  • Added support for functional indexes in Postgres, like "LOWER(some_col)". Funded by Kineticode, Inc. for Bricolage 2.0.
  • Added column/table constraint/check reverse engineering for Postgres. Funded by Kineticode, Inc. for Bricolage 2.0.
  • The SQL generated for Postgres schemas now includes foreign key constraints.
  • Added a new method to Alzabo::Runtime::Schema, prefetch_none().
  • Added a new method to Alzabo::Table, has_index().
  • Documented Alzabo::Runtime::UniqueRowCache.
  • The definitions of the is_character and is_blob column methods have been clarified. Note that these definitions have changed from the previous, undefined behavior.
  • When a 1..1 or 1..n foreign key is added to a table, a unique index is created on the columns involved in the foreign key, unless those columns are part of the table's primary key.
  • BUG FIXES:
  • Fixed a problem in the Makefile.PL which would cause it to fail even if you had Module::Build installed. Reported by Ken Williams.
  • Fixed (really, this time, I hope) a problem where the user-provided connection parameters were not respected in the 01-driver.t tests. Reported by Ken Williams.
  • FK reverse engineering for Postgres sometimes got the cardinality of the relationship wrong, making it 1..1 when it should be 1..n. This should be much improved in this release, though it may still have bugs.
  • Removed references to the old caching code in various spots.
  • Fixed handling of case_sensitive parameter to Alzabo::Column->has_attribute().
  • BACKWARDS INCOMPATIBILITIES:
  • When you load a runtime schema, it now calls "$self->prefetch_all_but_blobs" in order to turn on pre-fetching by default, since for the vast majority of users, this is a huge performance improvement. The new prefetch_none() method can be used to turn off all prefetching.
  • The is_character column method now returns true for any text type column, regardless of size.
  • The is_blob column method now returns true only for columns that are defined to hold binary data.

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 aliases to the same table 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

Documentation on Alzabo's design
Frequently Asked Questions
Introductory information about Alzabo
Alzabo and MySQL
Alzabo 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
Cursor that returns Alzabo::Runtime::Row objects
Row objects that have been deleted
Cached row objects that represent actual database rows
Row objects representing rows in the database
Row objects that are not in the database
Schema objects
Table objects
Implements a row cache for Alzabo
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/SQLMaker.pm
in lib/Alzabo/Runtime/Row.pm
in lib/Alzabo/Runtime/Row.pm