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://alzabo.sourceforge.net/ for more info. You can also
install Alzabo via CPAN.
This release breaks old stuff. Please be careful and email the
alzabo list (alzabo-general@...) for help first if
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
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
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
So the steps you should take are:
1. Backup all of your schema files (by default, these are stored under
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
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".
- 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
- Get rid of silly min/max language in favor of cardinality and
- Fixed a problem with syncing after the Unix time rollover to 10
- 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.
- The Alzabo::Runtime::RowCursor->next_row,
Alzabo::Runtime::OuterJoinCursor->next_rows methods have all been
deprecated. Instead, simply use the ->next method for all of them.
- The Alzabo::Column->null and Alzabo::Create::Column->set_null
methods (deprecated in 0.20) are gone. Use ->nullable and