Alzabo
view release on metacpan or search on metacpan
->create, ->sync_backend_sql, and ->sync_backend to work properly
when the database server is on another machine. Patch by Ilya
Martynov.
- Added Alzabo::Runtime::*Row->is_live method to easily distinguish
between real and potential rows.
- Did some profiling of data retrieval (Alzabo::Runtime bits) and
optimized some of the most heavily used pieces of Alzabo.
- Added the Alzabo::Runtime::Schema->prefetch_all and
Alzabo::Runtime::Schema->prefetch_all_but_blobs convenience methods.
- Added a ->count method to the cursor classes.
- Added ->is_integer, ->is_floating_point, ->is_date, ->is_datetime,
->is_time, and ->generic_type methods to column objects.
- The Alzabo::Driver->schemas method now takes connection parameters.
See your specific driver subclass for details on which. Bug report
by Ilya Martynov.
- Added Alzabo::Runtime::Schema->disconnect method. Patch by Ilya
Martynov.
- Make the Makefile.PL act gracefully when it is invoked without a
tty. Patch by Ilya Martynov.
- The quoting of identifiers (table/column names) is now optional, and
_off_ by default. In profiling I found that a non-trivial amount of
time was being spent quoting these, and in most cases it's not
necessary. There is now a
Alzabo::Runtime::Schema->set_quote_identifiers method that can be
used to change this behavior.
Identifiers are always quoted when using Alzabo::Create::* with
Postgres, however.
- Did a fair amount of profiling in order to optimize Alzabo's data
fetching. In general, Alzabo::Runtime::* operations should be
faster.
- Added Alzabo::Runtime::Column->alias which is useful when executing
queries via the Alzabo::Runtime::Schema and Alzabo::Runtime::Table
->select methods.
BUG FIXES:
- Alzabo::MethodMake generated "lookup column/table" methods will
return if there is no matching entry in the related table, which is
important when the two tables are independent. Previously it would
have been a runtime error (attempting to call a method on an
undefined value).
- Fix warning from Row->update. Patch by Ilya Martynov.
- Alzabo::Runtime::PotentialRow's id_as_string method was misnamed id.
The docs had it wrong for all classes.
- Catch where clauses that contain non-column/function objects as left
hand side value (like if you accidentally pass in a table object).
- The Postgres TEXT column type is now considered a blob, not a
character type column.
- There was a fatal error when creating an n-to-n relationship if only
columns were given, without tables. This was fixed with a patch
from Dan Martinez.
- Explicitly check for errors after calling $dbh->func.
- There was a bug when trying to use the schema creator to create
relationships involving more than one column.
- Fixed a bug where a query using the Alzabo::Runtime::Table->one_row
could cause an exception if no rows were found.
- Alzabo::Create::Schema->sync_backend was not passing through the
connection parameters it was getting to the ->create method, causing
failures. Patch from Ilya Martynov.
---------------------------------------------------------------------------
0.67 June 6, 2002
BUG FIXES:
- There were some broken bits in the installation code in 0.66. These
are now fixed.
---------------------------------------------------------------------------
0.66 June 6, 2002
ENHANCEMENTS:
- It is now possible to retrieve auto-generated documentation to go
along with the methods generated by Alzabo::MethodMaker. See the
"GENERATED DOCUMENTATION" section of the Alzabo::MethodMaker docs
for more details.
- Added documentation to all the components in mason/widgets. You can
run perldoc on those files for more details.
- Added a very ugly hack to work around a bug with Storable 2.00 -
2.03 and a Perl < 5.8.0.
- It is now possible to install Alzabo without defining an Alzabo root
directory. This means you will have to set this by calling
Alzabo::Config::root_dir() every time you load Alzabo. An attempt
to load a schema without first defining the root_dir will throw an
exception. Based on a patch from Ilya Martynov.
BUG FIXES:
- Allow UNIQUE as a column attribute for Postgres. Reported by Dan
Martinez.
- Add DISTINCT back as an exportable function from the SQLMaker
subclasses. It may be useful when calling ->select and ->function.
Those who are doing this will notice that the generated code seems to
contain everything twice. This has to do with how Alzabo keeps track
of changes from one generation of a schema to the next. Simply use
the code up to right before the generated code contains the comment
"Previous generation of schema".
ENHANCEMENTS:
- Greatly improved the flexibility of the join and *_outer_join
methods for the schema class. It is now possible to construct
arbitrary joins between any set of tables in any manner.
- Eliminate use of transactions where not needed and shorten their
length in other places. Also make sure failed commit triggers a
rollback.
- Get rid of silly min/max language in favor of cardinality and
dependencies.
BUG FIXES:
- Fixed a problem with syncing after the Unix time rollover to 10
digits.
- Alzabo::ForeignKey->is_many_to_one always returned false.
- Alzabo::MethodMaker was interpreting foreign key cardinality
incorrectly (backwards). This meant it was treating one-to-many
relationships as many-to-one. Reported by Martin Ertl.
NOTE: This fix will break code that depended on this behavior. See
the UPGRADE INSTRUCTIONS above.
- This was also broken in Alzabo::Create::Schema->add_relation. I
took this opportunity to rewrite the code get rid of the use of
min_max_* and replace it with cardinality and dependency, which is
easier to understand.
NOTE: This fix will break old code that created schemas
programmatically. See the UPGRADE INSTRUCTIONS above.
DEPRECATIONS:
- The Alzabo::Runtime::RowCursor->next_row,
Alzabo::Runtime::JoinCursor->next_rows, and
Alzabo::Runtime::OuterJoinCursor->next_rows methods have all been
deprecated. Instead, simply use the ->next method for all of them.
INCOMPATIBILITIES:
- The Alzabo::Column->null and Alzabo::Create::Column->set_null
methods (deprecated in 0.20) are gone. Use ->nullable and
->set_nullable instead.
---------------------------------------------------------------------------
0.51 Aug 29, 2001
BUG FIXES:
- Accidentally broke foreign key display for schema creation interface
in 0.50. -- In retrospect, the bug was fixing this. Oh well, live
and learn.
ENHANCEMENTS:
- Add ->handle method to Alzabo::Driver class, which lets you set and
get the current database handle. Suggested by Ilya Martynov.
---------------------------------------------------------------------------
0.50 Aug 16, 2001
ENHANCEMENTS:
- There is now support for left and right outer joins. The interface
to this may change a bit in future releases.
- Added the following methods to foreign key objects:
from_is_dependent, to_is_dependent, is_one_to_one, is_one_to_many,
is_many_to_one.
- Improved and fixed the Alzabo::MethodMaker documentation.
DEPRECATIONS:
- In some future release all references to the concept 'min_max_from'
and 'min_max_to' will go away. Instead, relationships will be
described by their cardinality and dependencies. This was changed
in the schema creation interface a while ago but the APIs have not
yet completely switched over (there are accessors for the new way,
but the set methods still use the old concepts). I'll make sure
that there is a time when using these methods issues a warning about
their deprecation.
BUG FIXES:
- Fix pod merging, which broke a while back (this merges superclass
documentation into subclasses for things like
Alzabo::Runtime::Table).
- The code was accidentally serializing a DBI handle, which generates
lots of useless warnings. This wasn't affecting Alzabo's operations
as it never attempted to use the thawed handle.
- Fix handling of ENUM and SET column types for MySQL. These were not
being allowed through properly.
- Attempting to insert a value into a column that was related to a
non-primary key column were not allowed if the value being inserted
did not match the related column in the other table, even when the
columns were not dependent on each other. Now this is only
disallowed when the foreign key is a primary key in its own table.
---------------------------------------------------------------------------
0.49 Jul 18, 2001
BUG FIXES:
- Found out even more missing files from the MANIFEST (all related to
the schema creation interface). Fortunately, I just discovered
Perl's "make distcheck" so this shouldn't happen in the future.
- One link each in the schema creator and data browser were using a
hard-coded .mhtml extension instead of calling
Alzabo::Config::mason_extension(). Reported by Barry Hoggard.
---------------------------------------------------------------------------
0.48 Jul 17, 2001
BUG FIXES:
- I was missing yet another file from the MANIFEST. Thanks to Barry
Hoggard for helping me out with this.
- Fix a bug in the test number for 03-runtime.t.
---------------------------------------------------------------------------
0.47 Jul 17, 2001
ENHANCEMENTS:
- Make several of the config values settable via the Alzabo::Config
module. Suggested by Jared Rhine.
- Transactions should now work under MySQL. Whether it does anything
or not depends on the table type you are using. This needs testing
though.
BUG FIXES:
- Make sure that index names are not too long.
- 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:
- added ability to move columns and tables to arbitrary new locations
after they've been created (without the arrows).
---------------------------------------------------------------------------
0.05
- bug fix for Alzabo::Runtime::Row calling wrong method from schema
object
- got rid of the locking stuff in the MySQL driver. Since its not
possible to have more than 1 lock at a time with the GET_LOCK
function there's no way to have the right kinds of locks for
cascading deletes. It might be possible to do this kind of locking
via some other mechanism (semaphores, DBM files, whatever, but
that's a hack for another day.
---------------------------------------------------------------------------
0.04
- Switched to use Tie::IxHash object interface
- fixed stupid bug in Alzabo::RDBMSRules::MySQL
- changed the way Alzabo::ChangeTracker works. it requires fewer
method calls to do its job now.
- added set_referential_integrity/referential_integrity methods to
Alzabo::Runtime::Schema. The default is to not attempt to maintain
referential_integrity.
- It should no longer be possible for Alzabo::Runtime::ForeignKey
objects to create loops when maintaining referential integrity. It
also should be a bit more efficient in the register_delete method.
If no action needs to be taken, it won't loop through all the rows
in the related table before finding this out.
- fixed data browser bug when putting in a filter on any page that was
not the first page of results for a table.
- fixed data browser bug in paging with filters.
---------------------------------------------------------------------------
0.03
- Fixed bugs in Alzabo::ObjectCacheIPC so it now works.
- Added lazy column evaluation (see Alzabo::Runtime::Table) docs
- Added Alzabo::DriverStatement and Alzabo::Driver::Exception to Alzabo::Driver
- improved data browser memory efficiency
- minor bug fixes (bad links) in data browser and schema maker
- minor buglet fix in Alzabo::Driver::MySQL
- big fix to how Alzabo::Runtime::Schema is saved from
Alzabo::Create::Schema. Previous implementation was accidentally
saving both the runtime and create versions at once. The new
version fixes this.
( run in 0.874 second using v1.01-cache-2.11-cpan-ceb78f64989 )