Alzabo is a program and a module suite, with two core functions. Its first use is as a data modelling tool. Through either a schema creation interface or a perl program, you can create a set of schema, table, column, etc. objects to represent your data model. Alzabo is also capable of reverse engineering your data model from an existing system.
Its second function is as an RDBMS to object mapping system. Once you have created a schema, you can use the Alzabo::Runtime::Table and Alzabo::Runtime::Row classes to access its data. These classes offer a high level interface to common operations such as SQL SELECT, INSERT, DELETE, and UPDATE commands. Please see http://alzabo.sourceforge.net/ for more info. You can also install Alzabo via CPAN. I think I somehow forgot to announce 0.58 so here is the changelog for 0.58 and 0.59 0.59 ENHANCEMENTS: - Got rid of the post_select_hash hook and combined it with post_select, which now receives a hash reference. Suggested by Ilya Martynov. - Run all hooks inside Alzabo::Schema->run_in_transaction method to ensure database integrity in cases where your hooks might update/delete/insert data. Suggested by Ilya Martynov. - Added new Alzabo::Runtime::Table->select method. This is just like the existing ->function method, but returns a cursor instead of the entire result set. - Added a 'limit' parameter to the ->function method (also works for the ->select method). - Added new Alzabo::Runtime::Schema->select method. This is like the method of the same name in the table class but it allows for joins. - Added new potential rows, which are objects with (largely) the same interface as regular rows, but which are not (yet) inserted into the database. They are created via the new Alzabo::Runtime::Table->potential_row method. Thanks to Ilya Martynov for suggestions and code for this feature. - Added Alzabo::Runtime::Row->schema method. Suggested by Ilya Martynov. - Made it possible to use Storable to freeze and thaw any type of row object. Previously, this would have worked but would have serialized basically every single Alzabo object in memory (whee!). Patch by Ilya Martynov. - Make Alzabo::Schema->run_in_transaction preserve scalar/array context and return whatever was returned by the wrapped code. BUG FIXES: - Did some review and cleanup of the exception handling code. There were some places where exceptions were being handled in an unsafe manner as well as some spots where exception objects should have been thrown that were just using die. - Ignore failure to rollback for MySQL when not using transactional table. - Alzabo was not handling the BETWEEN operator in where clauses properly. Patch by Eric Hillman. - Passing in something like this to rows_where: ( where => [ $col_foo, '=', 1, $col_bar, '=', 2 ] ) worked when it shouldn't. - Trying to do a select that involved a group by and a limit was not being allowed. INCOMPATIBILITIES: - Got rid of the post_select_hash hook and combined it with post_select, which now receives a hash reference. ---------------------------------------------------------- 0.58 ENHANCEMENTS: - Added new insert_hooks, update_hooks, select_hooks, and delete_hooks options to Alzabo::MethodMaker. Suggested by Ilya Martynov. - Moved all the important document for the object caching system into Alzabo::ObjectCache, including the import options for all of the various modules. - Added Alzabo::ObjectCache::Sync::RDBMS & Alzabo::ObjectCache::Store::RDBMS. The former finally allows synchronization of multiple processes across multiple machines! - Add Alzabo::Schema->has_table and Alzabo::Table->has_column methods. - Make BYTEA a legal column type for postgres. This is treated as a blob type. BUG FIXES: - The way cardinality and dependency was being represented in the schema graphs was sometimes backward and sometimes just broken. - Fixed Alzabo::ObjectCache::Store::BerkeleyDB->clear, which was not actually doing anything. Added tests that catch this. - The lookup_tables option, which was deprecated in 0.57, was not being allowed at all. - Calls to select_hash on cached rows were not going through the cache checking routines, possibly returning expired data. Added tests for this. - Eliminate race condition in Alzabo::ObjectCache::Sync::BerkeleyDB. - The Alzabo::Runtime::Row->rows_by_foreign_key method wasn't doing quite what it said. In cases where there was a 1..1 or n..1 relationship to columns that were not the table's primary key, a cursor would be returned instead of a single row. Reported by Ilya Martynov. - Alzabo::MethoMaker could generate 'subroutine foo redefined' warnings . Reported by Ilya Martynov. - Fixed clear method for all Alzabo::ObjectCache::Store::* modules. DEPRECATIONS: - The insert and update options for Alzabo::MethodMaker have been deprecated. They have been replaced by the new insert_hooks and update_hooks options, along with new select_hooks and delete_hooks options. INCOMPATIBILITIES: - If you specify give the 'all' parameter to MethodMaker, 'insert' and 'update' are no longer included.
