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://www.alzabo.org/ for more info. You can also install Alzabo via CPAN. 0.65 May 16, 2002 INCOMPATIBILITIES: - Alzabo now uses the natively created Postgres sequence for SERIAL columns. If you have existing Alzabo code with SERIAL columns that is using the Alzabo-created sequence, then this release will break things for you. One easy fix is to simply drop the existing Postgres-created sequence and recreate it with a new starting number one higher than the highest row already in existence. So if your hightest "foo_id" value in the "Foo" table is 500, you would do this: DROP SEQUENCE foo_foo_id_seq; CREATE SEQUENCE foo_foo_id_seq START 501; - The Alzabo::Table->primary_key method is now context-sensitive, returning a single column object in scalar context. - The data browser is no longer installed, until such time as I can rewrite it to be more useful. DEPRECATIONS: - The Alzabo::Create::Schema->add_relation method has been renamed as Alzabo::Create::Schema->add_relationship. ENHANCEMENTS: - Check out the mason/widgets directory for some handy widgets that can help integrate Mason and Alzabo in useful ways. These aren't really well-documented yet but may be useful for playing with. More widgets will be included in future releases (I hope). - When creating a relationship between tables in the schema creator, you can now let Alzabo figure out which columns to use instead of choosing them yourself. For most relationships, Alzabo will simply do the right thing, adding a column to one of the tables as needed. - The problems running the tests with Postgres should now be fixed. - Fix stupid and inefficient internal handling of "SELECT DISTINCT" queries. Now Alzabo simply lets the database handle this, the way it should have in the first place. - The Alzabo::Runtime::Schema and Alzabo::Runtime::Table ->function and ->select methods now allow you to select scalars so you can do things like SELECT 1 FROM Foo WHERE ... in order to test for the existence of a row. - Added Alzabo::Table->primary_key_size method, which indicates how many columns participate in the table's primary key. - Added Alzabo::Runtime::Schema->row_count. Suggested by Daniel Gaspani. - Alzabo now detects older versions of schemas and transparently updates them. This will work for all schemas created with version 0.55 or later. See the section titled "Backwards Compability" in Alzabo.pm for more details. - Added comment attribute for tables, columns, and foreign keys. - Add VARBIT and TIMESTAMPTZ as legal types for Postgres. - Handle SERIAL columns in Postgres better. Use the sequence Postgres creates for the columns rather than making our own and just insert undef into new rows for that column. BUG FIXES: - Adding a column that is not-nullable or has a default to a table under Postgres was causing an error with Postgres 7.2.1. It seems likely that with earlier versions of Postgres, this was simply failing silently. Patch by Daniel Gaspani. - Fixed buggy handling of joins that had a table with a multi-column primary key as the "distinct" parameter. - Calling the Alzabo::Runtime::Schema->join method with no 'select' parameter and a 'join' parameter that was an array reference of array references would fail. - Avoid an uninit value in Alzabo::MethodMaker. Reported by Daniel Gaspani. - If you created a cursor inside an eval{} block, the cursor contained an object whose DESTROY method would overwrite $@ as it went out of scope when the eval block exited. This could basically make it look like an exception had disappeared. Thanks to Brad Bowman for an excellent bug report. - Loading a schema failed in taint mode. This was reported ages ago by Raul Nohea Goodness and dropped on the floor by me. My bad. - The schema creator's exception handling was a little bit buggered up when handling Alzabo::Exception::Driver exceptions.
