Well, here it is.  The big 0.80 release.  Please note that this release
has quite a number of backwards incompatibilities.  The biggest of these
is that the old caching system is gone.  If you were using it, you won't
get an error when you load it, because the modules will probably still be
on your system, but they won't actually do anything!

Thanks again to Ken Williams and Ilya Martynov, who were both big
contributors towards this release.

The changes below includes all the changes between the last stable version
(0.73) and 0.80.

0.80  October 24, 2003

ENHANCEMENTS:

- Use the non-deprecated form of DBI->tables().

- Added an is_time_interval method to Alzabo::Column.

- Lots and lots of doc cleanup and re-formatting.


0.79_04  October 18, 2003

Identical to 0.79_03 except for minor POD changes in order to try to
fix the problem of search.cpan.org treating the wrong file as the main
Alzabo.pm docs.  Again reported by Darren Duncan.


0.79_03  October 18, 2003

ENHANCEMENTS:

- Many doc rewrites and updates.

- Documented row state classes.

- Added back the no_cache parameter to avoid caching one or more rows.

- Moved the relevant documentation from Alzabo::Runtime::PotentialRow
into Alzabo::Runtime::Row.

BUG FIXES:

- Fixed the NAME portion of the Alzabo::MySQL and Alzabo::PostgreSQL
POD files so that search.cpan.org doesn't think Alzabo::MySQL is the
Alzabo.pm file.  Reported by Darren Duncan.

- The 12-rev_engineer_pg_fk.t test would try to load DBD::Pg even if
you weren't using Postgres, which would cause the test file to die if
DBD::Pg wasn't installed.  Reported by Jost's smokehouse.

- More documentation updates to remove outdated information.

- Split out the documentation in Alzabo.pm into Alzabo::Intro and
Alzabo::Design.

- Added a FAQ from a question on the mailing list.  Suggested by
Terrence Brannon.

- Eliminated a circular reference between tables created via the
Alzabo::Runtime::Table->alias() method, and the columns those alias
tables contain.  This required the use of weak references.

NOTE: Alzabo regular tables and columns have circular references to
each other, but this normally isn't a problem because you generally
want to keep a whole schema around all the time anyway.


0.79_02  October 17, 2003

ENHANCEMENTS:

- Added support for table attributes like MySQL's "TYPE = ..." or
Postgres's "WITH OIDS".

- Added support for functional indexes in Postgres, like
"LOWER(some_col)".  Funded by Kineticode, Inc. for Bricolage 2.0.

- Added column/table constraint/check reverse engineering for
Postgres.  Funded by Kineticode, Inc. for Bricolage 2.0.

- The SQL generated for Postgres schemas now includes foreign key
constraints.

- Added a new method to Alzabo::Runtime::Schema, prefetch_none().

- Added a new method to Alzabo::Table, has_index().

- Documented Alzabo::Runtime::UniqueRowCache.

- The definitions of the is_character and is_blob column methods have
been clarified.  Note that these definitions have changed from the
previous, undefined behavior.

- When a 1..1 or 1..n foreign key is added to a table, a unique index
is created on the columns involved in the foreign key, unless those
columns are part of the table's primary key.

BUG FIXES:

- Fixed a problem in the Makefile.PL which would cause it to fail even
if you had Module::Build installed.  Reported by Ken Williams.

- Fixed (really, this time, I hope) a problem where the user-provided
connection parameters were not respected in the 01-driver.t tests.
Reported by Ken Williams.

- FK reverse engineering for Postgres sometimes got the cardinality of
the relationship wrong, making it 1..1 when it should be 1..n.  This
should be much improved in this release, though it may still have
bugs.

- Removed references to the old caching code in various spots.

- Fixed handling of case_sensitive parameter to
Alzabo::Column->has_attribute().

BACKWARDS INCOMPATIBILITIES:

- When you load a runtime schema, it now calls
"$self->prefetch_all_but_blobs" in order to turn on pre-fetching by
default, since for the vast majority of users, this is a huge
performance improvement.  The new prefetch_none() method can be used
to turn off all prefetching.

- The is_character column method now returns true for any text type
column, regardless of size.

- The is_blob column method now returns true only for columns that are
defined to hold binary data.


0.79_01  October 10, 2003

ENHANCEMENTS:

- Distribution is now signed with Module::Signature.

- Lots of refactoring of the row object internals to simplify the
code.  Implemented by Ilya Martynov.

- The testing code has been cleaned up quite a bit, and all of the
utility functions used in the tests have been consolidated in
t/lib/Alzabo/Test/Utils.pm.

- Added intermediate table and row classes for MethodMaker created
classes, to provide a central point for adding new methods to table
and row objects.  Based on a patch from Ken Williams.

- Support for "self-linking" tables in Alzabo::MethodMaker, a linking
table which connects a table to itself in an n..n relationship.
Implemented by Ken Williams.

- Added rdbms_version method to driver classes.  Implemented by Ken
Williams.

- Added Alzabo::Create::Schema->is_saved() method.

- Foreign keys are now reverse engineered for Postgres 7.3+.
Implemented by Ken Williams.

- Don't try to include dropped columns when reverse engineering
Postgres 7.3+.  Implemented by Ken Williams.

- Do a better job of detecting SERIAL type columns when reverse
engineering Postgres schemas.  Based on a patch from Ken Williams.

- Treat Postgres data types SERIAL4, SERIAL8, BIGSERIAL, and BIGINT as
valid types.  Implemented by Josh Jore.

- NotNullable exception now include the table and schema name.  Based
on a patch from Ken Williams.

- Primary keys are updateable.

- Debugging output from Alzabo::MethodMaker is clearer about what
methods are being made.  Implemented by Ken Williams.

- Alzabo::MethodMaker will now create foreign key methods when two
tables have multiple relationships, as long as the name generation
callback returns different names for each of them.  Implemented by Ken
Williams.

- A join parameter can now specify an outer join with a single array
reference, such as:

 [ left_outer_join => $table_A, $table_B ]

Previously, this could only be done as a double array reference, like:

 [ [ left_outer_join => $table_A, $table_B ] ]

- Various doc fixes and rewriting, most notably in Alzabo.pm.

BUG FIXES:

- A join using multiple aliases to the same table would fail with an
error message like "Cannot use column (Foo.bar_id) in select unless
its table is included in the FROM clause".

- Remove the long-ago deprecated next_row() and next_rows() methods.

- Postgres 7.3 allows identifiers to be up to 63 characters.  This
broke the code that handled sequenced columns for Postgres.  Patch by
Josh Jore.

- If you tried to create a relationship between two tables, and the
"table_to" table already had a column of the same name as the
"column_from" column, then Alzabo died with an error.  Reported by
Ping Liang.

- If you had previously installed Alzabo, and then provided a new
Alzabo root directory or a new directory for the Mason components,
this was not respected during the installation process.

- Alzabo's referential integrity checks will no longer complain if you
attempt to set a foreign key column to NULL.  Previously it would
throw an exception if the column was part of the dependent table in a
foreign key relationship.  Now, it just assumes you really meant to
allow the column to be NULLable.

- The schema class's load_from_file() method now blesses the loaded
schema into the calling class.  So if you use MethodMaker to generate
classes, and then call My::Schema->load_from_file, it should always
return an object blessed into the My::Schema class.  Reported by Ken
Williams.

- When checking for the MySQL variable sql_mode, the value may be
simply '' as opposed to 0.  Patch by Andrew Baumhauer.

BACKWARDS INCOMPATIBILITIES:

- Alzabo now requires at least Perl 5.6.0 (5.6.1+ recommended).

- The old caching system has been removed, as it had way too much
overhead.  There is a new, much simpler caching system provided by the
Alzabo::UniqueRowCache module.

- The Alzabo::Runtime::Table->row_by_pk() method no longer dies if it
cannot find a matching row.  Instead it simply returns false.

- Some deprecated MethodMaker options were removed: insert, update,
lookup_table

- The Alzabo::Runtime::Row->delete() method now works for potential
rows.



-dave

/*=======================
House Absolute Consulting
www.houseabsolute.com
=======================*/

Reply via email to