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.63 ENHANCEMENTS: - Calling Alzabo::Runtime::Row->select or Alzabo::Runtime::Row->select_hash with no arguments returns the values for all of the columns in the table. Suggested by Jeremy R. Semeiks. - The Alzabo::Runtime::Row->id method has been renamed to id_as_string for the benefit of those crazy people who like to use "id" as a column name and want Alzabo::MethodMaker to be able to create such a method. Suggested by Alexei Barantsev. - Changed the Alzabo::Create::Schema->sync_backend method so that if there was no corresponding schema in the RDBMS, then it will instantiate a new schema instead of just blowing up. Similarly, the sync_backend_sql method will just return the SQL necessary to create the schema from scratch. BUG FIXES: - Removing column attributes via the schema creator was broken. Adding them could have caused errors but generally worked. - If you changed a column from non-sequenced to sequenced, the SQL "diff" was not reflecting this. - Revert a previous change to MySQL reverse engineering. Now default for numeric columns that are not 0 or 0.00 are used instead of being ignored. The fact that MySQL has 'default defaults' _really_ screws things up. Bad MySQL! - A query that ended with a subgroup could not be followed with an order by or group by clause. Bug report and test case submitted by Ilya Martynov. - Nested subgroups in where clauses (like where => [ '(', '(', ....) were not being allowed. Bug report and test case submitted by Ilya Martynov. - Alzabo::MethodMaker would overwrite methods in the Alzabo::Runtime::Row/CachedRow/PotentialRow classes. This has been fixed. Reported by Alexei Barantsev. - Allow order by clause to contain only a SQL function to allow things like "SELECT foo FROM Bar ORDER BY RAND()", which works with MySQL.
