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

Changes for version 0.62

  • ENHANCEMENTS:
  • Add support for IFNULL, NULLIF, and IF for MySQL.
  • Document that Alzabo supports COALESCE and NULLIF for Postgres.
  • Added Alzabo::ObjectCache::Sync::Mmap which uses Cache::Mmap. This is just slightly slower than using SDBM_File.
  • New table alias feature for making queries that join against a table more than once. An example:
    • my $foo_alias = $foo_tab->alias;
    • my $cursor = $schema->join( select => $foo_tab, tables => [ $foo_tab, $bar_tab, $foo_alias ], where => [ [ $bar_tab->column('baz'), '=', 10 ], [ $foo_alias->column('quux'), '=', 100 ] ], order_by => $foo_alias->column('briz') );
  • In this query, we want to get all the entries in the foo table based on a join between foo and bar with certain conditions. However, we want to order the results by a _different_ criteria than that used for the join. This doesn't necessarily happen often, but when it does its nice to be able to do it. In SQL, this query would look something like this:
    • SELECT foo.foo_id FROM foo, bar, foo as foo1 WHERE foo.foo_id = bar.foo_id AND bar.foo_id = foo1.foo_id AND bar.baz = 10 AND foo1.quux = 100 ORDER BY foo1.quux
  • FEATURE REMOVAL:
  • It is no longer possible to pass sorting specifications ('ASC' or 'DESC') as part of the group_by parameter. This was only supported by MySQL and it was broken in MySQL until 3.23.47 anyway. Its weird and non-standard. Just use order_by instead.
  • BUG FIXES:
  • If prefetch wasn't set, all the rows in the table were being pre-fetched.
  • The newest Test::More (0.40) uses eval{} inside its isa_ok() function. The test suite was passing $@ directly into isa_ok() and it would then get reset by the eval{} in the isa_ok() function. This has been fixed by copying $@ into another variable before passing it into isa_ok(). Apparently, Test::More 0.41 will fix this as well.
  • Make Alzabo::ObjectCache::Store::RDBMS and Alzabo::ObjectCache::Sync::RDBMS play nice with Postgres. Pg aborts transactions when there are errors like an attempt to insert a duplicate inside a transaction. These module would just try to insert potentially duplicate rows and ignore the error. Now Pg is handled specially.
  • If you told the installer that you didn't want to run any tests with a live database, there would be errors when it tried to run 03-runtime.t. Now it just skips it.
  • Alzabo includes a script called 'pod_merge.pl' that is run before installing its modules. This script merges POD from a parent class into a child class (like from Alzabo::Table into Alzabo::Create::Table) in order to get all the relevant documentation in one place. The way the Makefile.PL ran this script was not working for some people, and in addition, did not end up putting the merged documentation into the generated man pages. This release includes a patch from Ilya Martynov that fixes both of these problems.

Documentation

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

Modules

A data modelling tool and RDBMS-OO mapper
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
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
A simple in-memory cache for row objects.
Cache objects in a BerkeleyDB file
Make any storage module an LRU
Cache objects in memory
Doesn't really store anything
Cache objects in an RDBMS backend
Base class for syncing classes
Uses a DBM file to sync object caches
Base class for syncing modules that use DBM files
Uses a Berkeley DB file to sync object caches
Uses a IPC file to sync object caches
Uses a IPC file to sync object caches
No inter-process cache syncing
Uses an RDBM backend to sync object caches
Uses an SDBM file to sync object caches
Base class for Alzabo RDBMS rulesets
MySQL specific database rules.
PostgreSQL specific database rules
Loads all Alzabo::Runtime::* classes
Cached row objects
Column objects
Column definition objects
Base class for Alzabo cursors
Foreign key objects
Index objects
Cursor that returns arrays of Alzabo::Runtime::Row objects
Cursor that returns arrays of Alzabo::Runtime::Row objects or undef
Row objects that aren't yet in the database
Row objects
Cursor that returns Alzabo::Runtime::Row objects
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
Alzabo configuration information

Provides

in lib/Alzabo/Driver.pm
in lib/Alzabo/Exceptions.pm
in lib/Alzabo/SQLMaker.pm