0.92

BUG FIXES:

0.91 Mar 25, 2007

BUG FIXES:

0.90 Mar 9, 2007

ENHANCEMENTS

BUG FIXES:

0.8904 Nov 17, 2006

BUG FIXES:

0.8903 Nov 16, 2006

BUG FIXES:

0.8902 Nov 9, 2006

BUG FIXES:

0.8901 Jul 19, 2006

BUG FIXES:

0.89 Jun 20, 2006

ENHANCEMENTS

BUG FIXES:

0.8801 Mar 13, 2006

BUG FIXES:

0.88 Mar 13, 2006

ENHANCEMENTS

BUG FIXES:

0.87 May 14, 2005

BUG FIXES:

0.86 December 22, 2004

BUG FIXES:

0.85 October 12, 2004

BUG FIXES:

0.84 September 4, 2004

ENHANCEMENTS

BUG FIXES:

0.83 June 9, 2004

MISCELLANEOUS
ENHANCEMENTS

BUG FIXES


0.82 January 6, 2004

ENHANCEMENTS

BUG FIXES:

KNOWN BUGS:


0.81 December 21, 2003

ENHANCEMENTS

BUG FIXES:


0.80 October 24, 2003

ENHANCEMENTS

0.79_04 October 18, 2003


0.79_03 October 18, 2003

ENHANCEMENTS

BUG FIXES:


0.79_02 October 17, 2003

ENHANCEMENTS

BUG FIXES:

BACKWARDS INCOMPATIBILITIES:


0.79_01 October 10, 2003

ENHANCEMENTS

[ 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 ] ]

BUG FIXES:

BACKWARDS INCOMPATIBILITIES:


0.73 October 5, 2003

BACKWARDS INCOMPATIBILITIES:

BUG FIXES:


0.72 April 12, 2003

ENHANCEMENTS

BUG FIXES:


0.71 April 6, 2003

ENHANCEMENTS

SELECT ...

      FROM Foo
           LEFT OUTER JOIN Bar
              ON Foo.foo_id = Bar.foo_id
                 AND Bar.something > 2

BUG FIXES:


0.70 November 21, 2002

ENHANCEMENTS

BUG FIXES:


0.69 September 19, 2002

ENHANCEMENTS

BUG FIXES:


0.68 July 20, 2002

ENHANCEMENTS

BUG FIXES:


0.67 June 6, 2002

BUG FIXES:


0.66 June 6, 2002

ENHANCEMENTS

BUG FIXES:


0.65 May 16, 2002

INCOMPATIBILITIES
DEPRECATIONS
ENHANCEMENTS

BUG FIXES:


0.64 Mar 27, 2002

ENHANCEMENTS

$schema->join( join => [ left_outer_join => $foo, $bar ], ... )

BUG FIXES:


0.63 Feb 18, 2002

ENHANCEMENTS

BUG FIXES:


0.62 Jan 15, 2002

ENHANCEMENTS

my $foo_alias = $foo_tab->alias;

my $cursor = $schema->join( select => $foo_tab,

                                tables => [ $foo_tab, $bar_tab, $foo_alias ],
                                where  => [ [ $bar_tab->column('baz'), '=', 10 ],
                                            [ $foo_alias->column('quux'), '=', 100 ] ],
                                order_by => $foo_alias->column('briz') );

In this query, we want to get all the entries in the foo table based on a join between foo and bar with certain conditions. However, we want to order the results by a different criteria than that used for the join. This doesn't necessarily happen often, but when it does its nice to be able to do it. In SQL, this query would look something like this:

SELECT foo.foo_id
FROM foo, bar, foo as foo1
WHERE foo.foo_id = bar.foo_id

      AND  bar.foo_id = foo1.foo_id
      AND  bar.baz = 10
      AND  foo1.quux = 100

ORDER BY foo1.quux

FEATURE REMOVAL:

BUG FIXES:


0.61 Dec 25, 2001

ENHANCEMENTS

my $cursor = $schema->select( select => [ COUNT(''), $id_col ],

                                  tables => [ $foo_tab, $bar_tab ],
                                  group_by => $id_col,
                                  order_by => [ COUNT(''), 'DESC' ] );

BUG FIXES:


0.60 Dec 6, 2001

ENHANCEMENTS

order_by => [ $col1, $col2, 'DESC', $col3, 'ASC' ]

which allow for multiple levels of sorting as well as being much simpler to remember.

$table->select( select => [ 1, $column ] ... );

and have it work. In this case, every row returned by the cursor will have 1 as its first element.

BUG FIXES:

order_by => { columns => ..., sort => ... }

has been deprecated in favor of a simpler syntax.


0.59 Nov 17, 2001

ENHANCEMENTS

BUG FIXES:

( where => [ $col_foo, '=', 1,

$col_bar, '=', 2 ] )

worked when it shouldn't.


0.58 Oct 18, 2001

ENHANCEMENTS

BUG FIXES:


0.57 Oct 9, 2001

ENHANCEMENTS

BUG FIXES:

DEPRECATIONS


0.56

Had to become 0.57 cause I was too hasty in uploading to CPAN. Doh!


0.55 Sep 24, 2001

UPGRADE INSTRUCTIONS:

Because of changes to the internal data structures for some objects, the saved schema files from older versions of Alzabo will no longer work with this new version.

In the eg/ directory of this distribution, there is a script called convert.pl that can be used to convert your schemas.

It is crucial that this script be run while you still have your current version of Alzabo installed.

To repeat, DO NOT INSTALL THE NEWEST VERSION OF Alzabo BEFORE RUNNING THIS SCRIPT!

Now that we've got that straightened out...

What this script does is read an existing schema and generate code that you can run after installing the new version of Alzabo. This code will recreate your schema from scratch.

It should be noted that this script will reverse the cardinalities of the relationships in your schema. See the entries in BUG FIXES about this.

If you don't like this and want it the old broken way, you can run the reverse_cardinality.pl script in the eg/ directory on your schemas. However, you can only do this after installing this new version of Alzabo.

So the steps you should take are:

  1. Backup all of your schema files (by default, these are stored under /usr/local/alzabo).
  2. Run convert.pl against each schema you have created by doing:

perl convert.pl <schema name>

This will create a file named <schema name>_schema.pl

3. After doing this for all of your schemas, install this version

Alzabo.

4. Simply run each file created by the convert.pl script. This will

overwrite the old schema files.

If you are creating your schemas via a script, then you can use the code generated by convert.pl to replace the code that does this. Do note that the cardinalities will be reversed in the generated code. 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

BUG FIXES:


0.51 Aug 29, 2001

BUG FIXES:


0.50 Aug 16, 2001

ENHANCEMENTS
DEPRECATIONS

BUG FIXES:


0.49 Jul 18, 2001

BUG FIXES:


0.48 Jul 17, 2001

BUG FIXES:


0.47 Jul 17, 2001

ENHANCEMENTS

BUG FIXES:


0.46 Jul 2, 2001

ENHANCEMENTS
DEPRECATIONS

BUG FIXES:


0.45 Jun 6, 2001

INCOMPATIBILITIES

BUG FIXES:


0.44 May 4, 2001

BUG FIXES:


0.43 Apr 25, 2001

ENHANCEMENTS

BUG FIXES:


0.42 Apr 25, 2001

BUG FIXES:


0.41 Apr 24, 2001

BUG FIXES:


0.40 Apr 24, 2001

INCOMPATIBILITIES

The classes in the ObjectCache hierarchy have been reorganized. The renaming is as follows:

Alzabo::ObjectCache::MemoryStore => Alzabo::ObjectCache::Store::Memory

  Alzabo::ObjectCache::DBMSync     => Alzabo::ObjectCache::Sync::DB_File
  Alzabo::ObjectCache::IPCSync     => Alzabo::ObjectCache::Sync::IPC.pm

Alzabo::ObjectCache::NullSync => Alzabo::ObjectCache::Sync::Null.pm

ENHANCEMENTS

BUG FIXES:


0.36 Mar 20, 2001


0.35 Mar 18, 2001


0.34 Feb 26, 2001


0.33 Feb 21, 2001


0.32 Feb 7, 2001


0.31 Feb 5, 2001

Bug fixes only


0.30 Feb 4, 2001

INCOMPATIBILITIES

use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',

sync => 'Alzabo::ObjectCache::NullSync' );

or just:

use Alzabo::ObjectCache; # the above modules are the defaults

3. To get the behavior of the old Alzabo::ObjectCacheIPC module, do:

use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',

sync => 'Alzabo::ObjectCache::IPCSync' );

However, the new DBMSync module will probably scale better, and performance should be about the same for smaller applications. To use it, do:

use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',

sync => 'Alzabo::ObjectCache::DBMSync' );

4. If you run without any caching at all then the Alzabo::Runtime::Row class's behavior has changed somewhat. In particular, selects or updates against a deleted object will always throw an Alzabo::Exception::NoSuchRow exception. Before, the behavior wasn't very well defined.

Please read the section on clearing the cache in the Alzabo::ObjectCache module, as this is an important concept. By default, the caching and syncing modules will just grow unchecked. You need to clear at the appropriate points (usually your application's entry points) in order to keep them under control.


0.20 Jan 9, 2001


0.10_5 Oct 10, 2000


0.10_4 Oct 10, 2000


0.10_3


0.10

**FIRST BETA VERSION**


0.09


0.08


0.07


0.06


0.05


0.04


0.03