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. 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.
