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.



Reply via email to