Alzabo
view release on metacpan or search on metacpan
work.
- The Alzabo::Runtime::Row->is_potential method didn't exist.
- The caching had a very nasty interaction with reverse engineering
that could cause data loss (of foreign keys) when the "sync with
backend" functionality was called from the Mason GUI. There may
have been other bugs as well. This was fixed by not caching reverse
engineered schemas, which is somewhat of a hack.
Anyone using the Mason GUI with MySQL is encouraged to upgrade
because of this bug.
0.83 June 9, 2004
MISCELLANEOUS:
- I got fed up with the instability of CVS on Sourceforge, and am now
using a Subversion repository I host myself. See "source" page on
www.alzabo.org for details.
ENHANCEMENTS:
- All SQL-generating methods for the Alzabo::Runtime::Schema and
Alzabo::Runtime::Table classes now accept a "quote_identifiers"
parameter, which allows you to turn this on for a single query.
- Improved handling of MySQL's "default defaults" when reverse
engineering or comparing two schemas, so that the code doesn't
generate ALTER TABLE statements that don't do anything.
- Make many Params::Validate specs into constants, which may improve
speed a bit, and may affect memory usage under mod_perl. This is
probably a useless micro-optimization, though.
BUG FIXES
- Make sure generated SQL for Postgres schema diffs does not include
dropping & adding the same FK constraint more than once.
- Reverse engineering works with Postgres 7.4. Thanks to Josh Jore
for this big patch. Hopefully this won't break anything for
Postgres 7.3 ;)
- The Alzabo::Column->is_time_interval method was misspelled, and so
did not work at all. Patch from Josh Jore.
- With Postgres 7.4, the DBI tables method always includes system
tables, so we have to filter these out in the
Alzabo::Driver::PostgreSQL->tables method. Patch from Josh Jore.
- Make the is_date & is_datetime method consistent across various
databases. For Postgres, is_date was only returning true for the
DATE type, not TIMESTAMP.
- Make is_datetime return true for Postgres' TIMESTAMPTZ column type.
- Turning on SQL debugging could cause Alzabo to alter bound values
that were null to the string "NULL" before performing a query.
- If a table name was changed and an index, column, or foreign key
dropped from that table, then the generated "diff" SQL could refer
to the old table name in the various DROP statements that were
generated.
- Workaround a bug in MySQL that reports a "Sub_part" of 1 for
fulltext indexes.
- The changes introduced in 0.71 to track table and column renames
could cause bogus SQL to be generated if something was renamed, the
schema was instantiated, and then the schema was compared to an
existing live database which also had the same renaming done to it.
- If you tried to create a relationship between two tables where one
of the tables had a varchar or char column as part of its PK, and
you let Alzabo create the foreign key column in the other table,
then Alzabo would try to set the length of the varchar/char column
to undef, which would cause an exception to be thrown.
---------------------------------------------------------------------------
0.82 January 6, 2004
ENHANCEMENTS:
- The Alzabo::Runtime::Table->insert() and
Alzabo::Runtime::InsertHandle->insert() methods will not create a
new row object when called in void context. This should make
inserts faster when you don't need a row object back.
- When reverse engineering a MySQL schema, Alzabo will now set a table
attribute for the table type (MyISAM, InnoDB, etc.) if the server
supports table types (which any modern version of MySQL does do).
BUG FIXES:
- When creating the test database for MySQL, we now explicitly set the
table type to MYISAM, in case the default is something else.
Otherwise the tests will fail when we try to create a fulltext
index.
KNOWN BUGS:
- This release will fail several tests when tested with Postgres 7.4.
Specifically, reverse engineering with Postgres 7.4 is known to be
broken. This will be fixed in the next release.
---------------------------------------------------------------------------
0.81 December 21, 2003
ENHANCEMENTS:
- Added a new insert handle feature, which should be significantly
faster for batch inserts than repeatedly calling the table class's
insert() method. Development funded by Marigold Technologies.
BUG FIXES:
because there is no longer a Makefile ;)
BUG FIXES:
- Fixed the Alzabo::MethodMaker->docs_as_pod method, which simply died
when used with a recent version of Params::Validate. Reported by
Ken Williams.
---------------------------------------------------------------------------
0.71 April 6, 2003
ENHANCEMENTS:
- Alzabo now tracks table and column renames after a schema has been
instantiated. This means that when updating the schema in the
database after such a change, Alzabo can ensure that there is no
data lost because of the change. Previously, Alzabo treated name
changes as a drop followed by an add, which caused data loss.
- Alzabo::DriverStatement->next_hash has been renamed next_as_hash, in
order to be consistent with the Alzabo::Runtime::Cursor classes.
- Experimental support for restriction clauses as part of an outer
join, such as
SELECT ...
FROM Foo
LEFT OUTER JOIN Bar
ON Foo.foo_id = Bar.foo_id
AND Bar.something > 2
- Added support for HAVING in queries.
BUG FIXES:
- Exceptions did not include a stack trace.
- Trying to create a Postgres schema with foreign keys defined caused
an exception. Reported by Josh Jore.
- Fetching rows from the cursor for a join with multiple outer joins
could fail if data was being prefetched.
DEPRECATIONS:
- Alzabo::DriverStatement->next_hash method has been renamed
next_as_hash.
---------------------------------------------------------------------------
0.70 November 21, 2002
ENHANCEMENTS:
- The exception thrown when you attempt to set a non-nullable column
to NULL is now an Alzabo::Exception::NotNullable exception, instead
of an Alzabo::Exception::Params exception. In the interests of
backwards compatibility, the former is a subclass of the latter.
- Improved debugging options. See the new Alzabo::Debug module for
details.
BUG FIXES:
- Fixed Alzabo::Table->primary_key, which would die when no primary
key existed and it was called in a scalar context. In an array
context, all the columns in the table were returned. Reported by
Eric Prestemon.
- Alzabo::ObjectCache::Sync::RDBMS created a table that it would later
consider incorrect. This made this module unusable.
- Alzabo::ObjectCache::Sync::RDBMS caused weird random errors when
used with MySQL's InnoDB tables.
- In the schema creator, the link to the graph page, and the link _on_
the graph page to the image, were both broken.
- Alzabo was allowing you to rename a column to the name of an
existing column in a table. Similarly, a table could be renamed to
the same name as an existing table. Doing this could trash a
schema.
- Alzabo::Runtime::Table->one_row would return undef if no row was
found, which in a list context evaluated to a true value.
- Allow no_cache option when calling Alzabo::Runtime::Schema->join.
- When displaying SQL, the schema creator now makes sure to
HTML-escape it, because it's possible to have HTML in there (in a
default, most likely).
- The "children" method generated by Alzabo::MethodMaker did not allow
you to add additional where clause constraints to the query.
---------------------------------------------------------------------------
0.69 September 19, 2002
ENHANCEMENTS:
- Add count method to Alzabo::DriverStatement objects.
BUG FIXES:
- ** A particularly nasty bug sometimes manifested itself when
removing a foreign key. This bug caused the deletion of all foreign
keys involving the _corresponding_ column(s) in the foreign table.
Needless to say, this could make a big mess.
- Fix some typos in the generated docs created by Alzabo::MethodMaker.
- A join that included a where clause with an 'OR' generated improper
SQL. Reported by Ilya Martynov.
- Calling the Alzabo::Runtime::JoinCursor->next_as_hash method when
the query involved an outer join could cause a runtime error.
- In where clause specifications, 'and' and 'or' were only being
allowed in lower-case. They are now allowed in any case.
- Added a missing file to the MANIFEST. 0.46 was missing a needed
file from the tarball.
---------------------------------------------------------------------------
0.46 Jul 2, 2001
ENHANCEMENTS:
- Column types are now canonized to be all upper case. When multiple
keywords specify the same type ('INT' and 'INTEGER', for example),
one will be chosen. This improves the quality of the reverse
engineering and the usability of the schema creation interface.
- You can now use SQL functions pretty much anywhere you would want
(in inserts, updates, where clauses, etc). See the "Using SQL
Functions" section in the Alzabo.pm docs for more details.
- As a corollary to the above, the Alzabo::Runtime::Table->function
method has been created to replace the old
Alzabo::Runtime::Table->func method. This new method takes
advantage of the new system for using SQL functions and is simpler
and more flexible. It allows you to perform all sorts of aggregate
selects.
- Added the Alzabo::Runtime::Row->select_hash method. Requested by
Dana Powers.
DEPRECATIONS:
- The Alzabo::Runtime::Table->func method has been deprecated.
BUG FIXES:
- When adding an AUTO_INCREMENT column to an existing MySQL table, the
SQL generated would cause an error. This has been fixed. However,
if the table already has more than row then chances are this still
won't work (because MySQL does not try to generate needed unique
values for the column when it is added).
---------------------------------------------------------------------------
0.45 Jun 6, 2001
INCOMPATIBILITIES:
- The 'dbm_file' parameter given when loading a syncing module that
used DBM files (such as Alzabo::ObjectCache::Sync::SDBM_File) has
been changed to 'sync_dbm_file', because this release includes a new
cache storage module that uses DBM files as well.
- The schema creator now requires HTTP::BrowserDetect.
- Fix what was arguably a bug in the caching/syncing code.
Previously, one process could update a row and another process could
then update that same row. Now the second process will throw an
exception.
BUG FIXES:
- Accidentally left debugging turned on in Alzabo::Exceptions.
- The schema creator did not allow you to remove a length or precision
setting for a column once it had been made.
- Require a length for CHAR and VARCHAR columns with MySQL.
- Add error on setting precision for any column that doesn't allow
them with MySQL.
- The interaction of caching rows and Alzabo::MethodMaker was not
right. Basically, it was determined at compile time whether or not
to use the cached row class but this needs to be determined at run
time. This has been fixed.
- Using the Alzabo::Runtime::Row->rows_by_foreign_key method would
fail when the column in one table did not have the same name as a
column in the other table. Reported by Michael Graham (along with a
correct diagnosis, thanks!).
- Don't specify a database name when creating or dropping a database.
Reported and patched by Dana Powers.
ENHANCEMENTS:
- Rules violations error messages (bad table name, for example) in the
schema creator are now handled in a much friendlier manner. Instead
of the big error dump exception page it returns you to the page you
submitted from with an error message.
- Add Alzabo::Create::Column->alter method which allows you to change
the column type, length, and precision all at once. This is
necessary because some of the column type validation code will
insist that a column have a length setting. If you try to change
them in two separate operations it will throw an exception.
- Add Alzabo::ObjectCache::Store::Null - This allows you to use any
multi-process syncing module without using up the memory that
Alzabo::ObjectCache::Store::Memory uses.
- Add Alzabo::ObjectCache::Store::BerkeleyDB - I'm not sure if storing
in a db file is really a performance win (vs. null storage) because
of the work needed to freeze & thaw the row objects. Benchmarks are
needed.
- Add support for fulltext indexes (MySQL).
- Don't show fulltext or column prefix options when creating indexes
for databases that don't support these features.
- Use cardinality & dependency language for relations.
- Add some style to the schema creator (via stylesheets). It looks a
little better now.
---------------------------------------------------------------------------
0.44 May 4, 2001
BUG FIXES:
( run in 0.540 second using v1.01-cache-2.11-cpan-39bf76dae61 )