5
- Reverse engineering with MySQL broke when the tables were returned
6
_without_ the schema name.
8
- Enable subselects for MySQL, though there's still no good API for
11
- Pass any unknown command line options through to Module::Build, for
12
example things like "--install-base". Reported by Lars Dieckow. RT
15
- Fix a possible bug in Alzabo::Config::available_schemas. Reported by
16
Otto Hirr. RT Ticket #28312
23
- Alzabo checked whether a particular variable was an array reference
24
with a construct like this "eval { @$thing } ? @$thing :
25
$thing". Under most circumstances, this is ok, but Mason installs a
26
$SIG{__DIE__} handler that turns all string exceptions into
27
exception objects. This meant that under Mason, for any eval where
28
the reference in question was _not_ an array reference, a string
29
exception was caught and turned into a full-blown exception
30
object. This could cause a massive performance hit in some cases.
37
- Added handling of multi-column indexes which include one function
38
when reverse-engineering Pg schemas.
43
- When a row was deleted, it was not being deleted from the cache. If
44
you then inserted a row with the same primary key, you got back the
45
row from the cache, which was marked as deleted, instead of the new
48
- Newer versions of MySQL may return fully qualified and quoted table
49
names (`Schema`.`Table`) from $dbh->tables. This broke
52
- The Alzabo::Column->is_time() method was totally broken for MySQL.
59
- The t/21-row_by_pk-exception test blew up if no test config was
60
provided, instead of just skipping its tests gracefully. Reported by
68
- The change in 0.8902 to not use UNIVERSAL::isa exposed a bug in the
69
handling of an attempt to load a row which doesn't exist in the
70
DBMS. Reported by Jon Prettyman.
77
- Make Alzabo "safe" to use with UNIVERSAL::can (the module), which
78
spits out lots of warning if you use Alzabo after it has been
81
- Fixed a warning from DBI in the 03-runtime.t tests.
83
- Fixed reverse engineering of nextval() as a column default with Pg.
90
- Fix reverse engineering of "now()" as default for a column with Pg.
97
- Improved schema diffs for Postgres, particularly in the area of
98
comparing two columns. Now we attempt to determine if two columns
99
are logically equivalent, even if they might have minor variations
100
(INT vs INTEGER type name, 'f' versus 'false' for BOOLEAN default,
103
- Added Alzabo::SQLMaker->distinct_requires_order_by_in_select for the
104
benefit of Pg, which requires that anything in the ORDER BY clause
105
show up in the SELECT when you SELECT DISTINCT. This change is
106
experimental, and may go away in future versions.
108
- Removed support for passing order_by and group_by as a hash
109
reference. This was deprecated in 0.59.
113
- When reverse engineering a Postgres schema, Alzabo did not look for
114
its own sequences to determine if a column should be marked as
117
- Defer FK creation until all other DDL has been executed. This
118
ensures that the table to which we're referring will be available.
120
- When recreating a table during a SQL diff, make this an exception so
121
we don't do other column diff/add/drop operations on the same table.
123
- Fixed a test failure in 07-methodmaker.t when testing with
124
Postgres. This failure may not have showed up often because it came
125
from a test that depended on the DBMS returning rows in a speific
126
order by without specifying an ORDER BY.
128
- When a Postgres table is renamed, its sequences are also renamed.
135
- Quoting of PostgreSQL column defaults in DDL SQL was completely
143
- Added a new option when creating a column, "default_is_raw", which
144
can be used to allow for a function like NOW() as a column default.
146
- Added an "--automated" option for Build.PL, to force it to just use
147
default prereqs. Also added other options to be used with this one,
148
see "perl Build.PL --help" for detalis.
150
- The Alzabo::Driver classes will now transparently reconnect to the
151
DBMS if you attempt to use them in a child process after a
152
fork. This prevents various problems that can occur if you attempt
153
to share a DBI handle between two processes. One notable problem is
154
that the parent's DBI handle is closed when the child exits.
156
- Added support for (VAR)BINARY type columns in MySQL. Request by
157
Martin Groenemeyer. RT Ticket #16338.
161
- Alzabo::Table->foreign_keys_by_table() and foreign_keys_by_column()
162
could return the same object more than once when using
163
multiple-column foreign keys. Reported by Rainer Rohmfeld. RT Ticket
166
- Calling connect() on a driver object (via a schema object) with
167
different parameters did not reconnect if the existing handle was
168
still good. This was explicitly opposite what the docs said the code
169
was doing. RT Ticket #17942.
171
- Fix bug in reverse engineering function indexes in Postgres. The
172
reverse engineering code always ended up thinking all of the columns
173
in the table were used in the index.
175
- Fix failing MySQL test in 03-runtime.t. The problem was the test,
176
not the Alzabo core. Reported by Alex McLintock.
178
- Fixed adding too many "=cut" directives in docs generated by
181
- Fixed SQL generation for the Postgres functions CURRENT_DATE,
182
CURRENT_TIME, and CURRENT_TIMESTAMP, which should not have
183
parentheses after them.
185
- Documented that DATE_TRUNC() is a support Pg function in
186
Alzabo::SQLMaker::PostgreSQL. RT Ticket #13843.
118
308
- I got fed up with the instability of CVS on Sourceforge, and am now
119
using a Subversion repository I host myself. See "source" page on
120
www.alzabo.org for details.
309
using a Subversion repository I host myself. See "source" page on
310
www.alzabo.org for details.
125
315
- All SQL-generating methods for the Alzabo::Runtime::Schema and
126
Alzabo::Runtime::Table classes now accept a "quote_identifiers"
127
parameter, which allows you to turn this on for a single query.
316
Alzabo::Runtime::Table classes now accept a "quote_identifiers"
317
parameter, which allows you to turn this on for a single query.
129
319
- Improved handling of MySQL's "default defaults" when reverse
130
engineering or comparing two schemas, so that the code doesn't
131
generate ALTER TABLE statements that don't do anything.
320
engineering or comparing two schemas, so that the code doesn't
321
generate ALTER TABLE statements that don't do anything.
133
323
- Make many Params::Validate specs into constants, which may improve
134
speed a bit, and may affect memory usage under mod_perl. This is
135
probably a useless micro-optimization, though.
324
speed a bit, and may affect memory usage under mod_perl. This is
325
probably a useless micro-optimization, though.
140
330
- Make sure generated SQL for Postgres schema diffs does not include
141
dropping & adding the same FK constraint more than once.
331
dropping & adding the same FK constraint more than once.
143
333
- Reverse engineering works with Postgres 7.4. Thanks to Josh Jore
144
for this big patch. Hopefully this won't break anything for Postgres
334
for this big patch. Hopefully this won't break anything for
147
337
- The Alzabo::Column->is_time_interval method was misspelled, and so
148
did not work at all. Patch from Josh Jore.
338
did not work at all. Patch from Josh Jore.
150
340
- With Postgres 7.4, the DBI tables method always includes system
151
tables, so we have to filter these out in the
152
Alzabo::Driver::PostgreSQL->tables method. Patch from Josh Jore.
341
tables, so we have to filter these out in the
342
Alzabo::Driver::PostgreSQL->tables method. Patch from Josh Jore.
154
344
- Make the is_date & is_datetime method consistent across various
155
databases. For Postgres, is_date was only returning true for the DATE
345
databases. For Postgres, is_date was only returning true for the
346
DATE type, not TIMESTAMP.
158
- Make is_datetime return true for Postgres' TIMESTAMPTZ column
348
- Make is_datetime return true for Postgres' TIMESTAMPTZ column type.
161
350
- Turning on SQL debugging could cause Alzabo to alter bound values
162
that were null to the string "NULL" before performing a query.
351
that were null to the string "NULL" before performing a query.
164
353
- If a table name was changed and an index, column, or foreign key
165
dropped from that table, then the generated "diff" SQL could refer to
166
the old table name in the various DROP statements that were generated.
354
dropped from that table, then the generated "diff" SQL could refer
355
to the old table name in the various DROP statements that were
168
358
- Workaround a bug in MySQL that reports a "Sub_part" of 1 for
171
361
- The changes introduced in 0.71 to track table and column renames
172
could cause bogus SQL to be generated if something was renamed, the
173
schema was instantiated, and then the schema was compared to an
174
existing live database which also had the same renaming done to it.
362
could cause bogus SQL to be generated if something was renamed, the
363
schema was instantiated, and then the schema was compared to an
364
existing live database which also had the same renaming done to it.
176
366
- If you tried to create a relationship between two tables where one
177
of the tables had a varchar or char column as part of its PK, and you
178
let Alzabo create the foreign key column in the other table, then
179
Alzabo would try to set the length of the varchar/char column to
180
undef, which would cause an exception to be thrown.
367
of the tables had a varchar or char column as part of its PK, and
368
you let Alzabo create the foreign key column in the other table,
369
then Alzabo would try to set the length of the varchar/char column
370
to undef, which would cause an exception to be thrown.
182
372
---------------------------------------------------------------------------
364
555
- Distribution is now signed with Module::Signature.
366
557
- Lots of refactoring of the row object internals to simplify the
367
code. Implemented by Ilya Martynov.
558
code. Implemented by Ilya Martynov.
369
560
- The testing code has been cleaned up quite a bit, and all of the
370
utility functions used in the tests have been consolidated in
371
t/lib/Alzabo/Test/Utils.pm.
561
utility functions used in the tests have been consolidated in
562
t/lib/Alzabo/Test/Utils.pm.
373
564
- Added intermediate table and row classes for MethodMaker created
374
classes, to provide a central point for adding new methods to table
375
and row objects. Based on a patch from Ken Williams.
565
classes, to provide a central point for adding new methods to table
566
and row objects. Based on a patch from Ken Williams.
377
568
- Support for "self-linking" tables in Alzabo::MethodMaker, a linking
378
table which connects a table to itself in an n..n relationship.
379
Implemented by Ken Williams.
569
table which connects a table to itself in an n..n relationship.
570
Implemented by Ken Williams.
381
572
- Added rdbms_version method to driver classes. Implemented by Ken
384
575
- Added Alzabo::Create::Schema->is_saved() method.
386
577
- Foreign keys are now reverse engineered for Postgres 7.3+.
387
Implemented by Ken Williams.
578
Implemented by Ken Williams.
389
580
- Don't try to include dropped columns when reverse engineering
390
Postgres 7.3+. Implemented by Ken Williams.
581
Postgres 7.3+. Implemented by Ken Williams.
392
583
- Do a better job of detecting SERIAL type columns when reverse
393
engineering Postgres schemas. Based on a patch from Ken Williams.
584
engineering Postgres schemas. Based on a patch from Ken Williams.
395
586
- Treat Postgres data types SERIAL4, SERIAL8, BIGSERIAL, and BIGINT as
396
valid types. Implemented by Josh Jore.
587
valid types. Implemented by Josh Jore.
398
589
- NotNullable exception now include the table and schema name. Based
399
on a patch from Ken Williams.
590
on a patch from Ken Williams.
401
592
- Primary keys are updateable.
403
594
- Debugging output from Alzabo::MethodMaker is clearer about what
404
methods are being made. Implemented by Ken Williams.
595
methods are being made. Implemented by Ken Williams.
406
597
- Alzabo::MethodMaker will now create foreign key methods when two
407
tables have multiple relationships, as long as the name generation
408
callback returns different names for each of them. Implemented by Ken
598
tables have multiple relationships, as long as the name generation
599
callback returns different names for each of them. Implemented by
411
602
- A join parameter can now specify an outer join with a single array
414
[ left_outer_join => $table_A, $table_B ]
416
Previously, this could only be done as a double array reference, like:
418
[ [ left_outer_join => $table_A, $table_B ] ]
605
[ left_outer_join => $table_A, $table_B ]
607
Previously, this could only be done as a double array reference, like:
609
[ [ left_outer_join => $table_A, $table_B ] ]
420
611
- Various doc fixes and rewriting, most notably in Alzabo.pm.
424
615
- A join using multiple aliases to the same table would fail with an
425
error message like "Cannot use column (Foo.bar_id) in select unless
426
its table is included in the FROM clause".
616
error message like "Cannot use column (Foo.bar_id) in select unless
617
its table is included in the FROM clause".
428
619
- Remove the long-ago deprecated next_row() and next_rows() methods.
430
621
- Postgres 7.3 allows identifiers to be up to 63 characters. This
431
broke the code that handled sequenced columns for Postgres. Patch by
622
broke the code that handled sequenced columns for Postgres. Patch
434
625
- If you tried to create a relationship between two tables, and the
435
"table_to" table already had a column of the same name as the
436
"column_from" column, then Alzabo died with an error. Reported by
626
"table_to" table already had a column of the same name as the
627
"column_from" column, then Alzabo died with an error. Reported by
439
630
- If you had previously installed Alzabo, and then provided a new
440
Alzabo root directory or a new directory for the Mason components,
441
this was not respected during the installation process.
631
Alzabo root directory or a new directory for the Mason components,
632
this was not respected during the installation process.
443
634
- Alzabo's referential integrity checks will no longer complain if you
444
attempt to set a foreign key column to NULL. Previously it would
445
throw an exception if the column was part of the dependent table in a
446
foreign key relationship. Now, it just assumes you really meant to
447
allow the column to be NULLable.
635
attempt to set a foreign key column to NULL. Previously it would
636
throw an exception if the column was part of the dependent table in
637
a foreign key relationship. Now, it just assumes you really meant
638
to allow the column to be NULLable.
449
640
- The schema class's load_from_file() method now blesses the loaded
450
schema into the calling class. So if you use MethodMaker to generate
451
classes, and then call My::Schema->load_from_file, it should always
452
return an object blessed into the My::Schema class. Reported by Ken
641
schema into the calling class. So if you use MethodMaker to
642
generate classes, and then call My::Schema->load_from_file, it
643
should always return an object blessed into the My::Schema class.
644
Reported by Ken Williams.
455
646
- When checking for the MySQL variable sql_mode, the value may be
456
simply '' as opposed to 0. Patch by Andrew Baumhauer.
647
simply '' as opposed to 0. Patch by Andrew Baumhauer.
458
649
BACKWARDS INCOMPATIBILITIES:
460
651
- Alzabo now requires at least Perl 5.6.0 (5.6.1+ recommended).
462
653
- The old caching system has been removed, as it had way too much
463
overhead. There is a new, much simpler caching system provided by the
464
Alzabo::UniqueRowCache module.
654
overhead. There is a new, much simpler caching system provided by
655
the Alzabo::UniqueRowCache module.
466
657
- The Alzabo::Runtime::Table->row_by_pk() method no longer dies if it
467
cannot find a matching row. Instead it simply returns false.
658
cannot find a matching row. Instead it simply returns false.
469
660
- Some deprecated MethodMaker options were removed: insert, update,
472
663
- The Alzabo::Runtime::Row->delete() method now works for potential
475
666
---------------------------------------------------------------------------
670
864
->is_time, and ->generic_type methods to column objects.
672
866
- The Alzabo::Driver->schemas method now takes connection parameters.
673
See your specific driver subclass for details on which. Bug report by
867
See your specific driver subclass for details on which. Bug report
676
870
- Added Alzabo::Runtime::Schema->disconnect method. Patch by Ilya
679
873
- Make the Makefile.PL act gracefully when it is invoked without a
680
tty. Patch by Ilya Martynov.
874
tty. Patch by Ilya Martynov.
682
876
- The quoting of identifiers (table/column names) is now optional, and
683
_off_ by default. In profiling I found that a non-trivial amount of
684
time was being spent quoting these, and in most cases it's not
685
necessary. There is now a
686
Alzabo::Runtime::Schema->set_quote_identifiers method that can be used
687
to change this behavior.
877
_off_ by default. In profiling I found that a non-trivial amount of
878
time was being spent quoting these, and in most cases it's not
879
necessary. There is now a
880
Alzabo::Runtime::Schema->set_quote_identifiers method that can be
881
used to change this behavior.
689
Identifiers are always quoted when using Alzabo::Create::* with
883
Identifiers are always quoted when using Alzabo::Create::* with
692
886
- Did a fair amount of profiling in order to optimize Alzabo's data
693
fetching. In general, Alzabo::Runtime::* operations should be faster.
887
fetching. In general, Alzabo::Runtime::* operations should be
695
890
- Added Alzabo::Runtime::Column->alias which is useful when executing
696
queries via the Alzabo::Runtime::Schema and Alzabo::Runtime::Table
891
queries via the Alzabo::Runtime::Schema and Alzabo::Runtime::Table
701
896
- Alzabo::MethodMake generated "lookup column/table" methods will
702
return if there is no matching entry in the related table, which is
703
important when the two tables are independent. Previously it would
704
have been a runtime error (attempting to call a method on an undefined
897
return if there is no matching entry in the related table, which is
898
important when the two tables are independent. Previously it would
899
have been a runtime error (attempting to call a method on an
707
902
- Fix warning from Row->update. Patch by Ilya Martynov.
709
904
- Alzabo::Runtime::PotentialRow's id_as_string method was misnamed id.
710
The docs had it wrong for all classes.
905
The docs had it wrong for all classes.
712
907
- Catch where clauses that contain non-column/function objects as left
713
hand side value (like if you accidentally pass in a table object).
908
hand side value (like if you accidentally pass in a table object).
715
910
- The Postgres TEXT column type is now considered a blob, not a
716
character type column.
911
character type column.
718
913
- There was a fatal error when creating an n-to-n relationship if only
719
columns were given, without tables. This was fixed with a patch from
914
columns were given, without tables. This was fixed with a patch
722
917
- Explicitly check for errors after calling $dbh->func.
724
919
- There was a bug when trying to use the schema creator to create
725
relationships involving more than one column.
920
relationships involving more than one column.
727
922
- Fixed a bug where a query using the Alzabo::Runtime::Table->one_row
728
could cause an exception if no rows were found.
923
could cause an exception if no rows were found.
730
925
- Alzabo::Create::Schema->sync_backend was not passing through the
731
connection parameters it was getting to the ->create method, causing
732
failures. Patch from Ilya Martynov.
926
connection parameters it was getting to the ->create method, causing
927
failures. Patch from Ilya Martynov.
734
929
---------------------------------------------------------------------------
806
1001
INCOMPATIBILITIES:
808
1003
- Alzabo now uses the natively created Postgres sequence for SERIAL
809
columns. If you have existing Alzabo code with SERIAL columns that is
810
using the Alzabo-created sequence, then this release will break things
811
for you. One easy fix is to simply drop the existing Postgres-created
812
sequence and recreate it with a new starting number one higher than
813
the highest row already in existence. So if your hightest "foo_id"
814
value in the "Foo" table is 500, you would do this:
1004
columns. If you have existing Alzabo code with SERIAL columns that
1005
is using the Alzabo-created sequence, then this release will break
1006
things for you. One easy fix is to simply drop the existing
1007
Postgres-created sequence and recreate it with a new starting number
1008
one higher than the highest row already in existence. So if your
1009
hightest "foo_id" value in the "Foo" table is 500, you would do
816
DROP SEQUENCE foo_foo_id_seq;
817
CREATE SEQUENCE foo_foo_id_seq START 501;
1012
DROP SEQUENCE foo_foo_id_seq;
1013
CREATE SEQUENCE foo_foo_id_seq START 501;
819
1015
- The Alzabo::Table->primary_key method is now context-sensitive,
820
returning a single column object in scalar context.
1016
returning a single column object in scalar context.
822
1018
- The data browser is no longer installed, until such time as I can
823
rewrite it to be more useful.
1019
rewrite it to be more useful.
827
1023
- The Alzabo::Create::Schema->add_relation method has been renamed as
828
Alzabo::Create::Schema->add_relationship.
1024
Alzabo::Create::Schema->add_relationship.
832
1028
- Check out the mason/widgets directory for some handy widgets that
833
can help integrate Mason and Alzabo in useful ways. These aren't
834
really well-documented yet but may be useful for playing with. More
835
widgets will be included in future releases (I hope).
1029
can help integrate Mason and Alzabo in useful ways. These aren't
1030
really well-documented yet but may be useful for playing with. More
1031
widgets will be included in future releases (I hope).
837
1033
- When creating a relationship between tables in the schema creator,
838
you can now let Alzabo figure out which columns to use instead of
839
choosing them yourself. For most relationships, Alzabo will simply do
840
the right thing, adding a column to one of the tables as needed.
1034
you can now let Alzabo figure out which columns to use instead of
1035
choosing them yourself. For most relationships, Alzabo will simply
1036
do the right thing, adding a column to one of the tables as needed.
842
1038
- The problems running the tests with Postgres should now be fixed.
844
1040
- Fix stupid and inefficient internal handling of "SELECT DISTINCT"
845
queries. Now Alzabo simply lets the database handle this, the way it
846
should have in the first place.
1041
queries. Now Alzabo simply lets the database handle this, the way
1042
it should have in the first place.
848
1044
- The Alzabo::Runtime::Schema and Alzabo::Runtime::Table ->function
849
and ->select methods now allow you to select scalars so you can do
850
things like SELECT 1 FROM Foo WHERE ... in order to test for the
1045
and ->select methods now allow you to select scalars so you can do
1046
things like SELECT 1 FROM Foo WHERE ... in order to test for the
853
1049
- Added Alzabo::Table->primary_key_size method, which indicates how
854
many columns participate in the table's primary key.
1050
many columns participate in the table's primary key.
856
1052
- Added Alzabo::Runtime::Schema->row_count. Suggested by Daniel
859
1055
- Alzabo now detects older versions of schemas and transparently
860
updates them. This will work for all schemas created with version
1056
updates them. This will work for all schemas created with version
863
See the section titled "Backwards Compability" in Alzabo.pm for more
1059
See the section titled "Backwards Compability" in Alzabo.pm for more
866
1062
- Added comment attribute for tables, columns, and foreign keys.
868
1064
- Add VARBIT and TIMESTAMPTZ as legal types for Postgres.
870
1066
- Handle SERIAL columns in Postgres better. Use the sequence Postgres
871
creates for the columns rather than making our own and just insert
872
undef into new rows for that column.
1067
creates for the columns rather than making our own and just insert
1068
undef into new rows for that column.
876
1072
- Adding a column that is not-nullable or has a default to a table
877
under Postgres was causing an error with Postgres 7.2.1. It seems
878
likely that with earlier versions of Postgres, this was simply failing
879
silently. Patch by Daniel Gaspani.
1073
under Postgres was causing an error with Postgres 7.2.1. It seems
1074
likely that with earlier versions of Postgres, this was simply
1075
failing silently. Patch by Daniel Gaspani.
881
1077
- Fixed buggy handling of joins that had a table with a multi-column
882
primary key as the "distinct" parameter.
1078
primary key as the "distinct" parameter.
884
1080
- Calling the Alzabo::Runtime::Schema->join method with no 'select'
885
parameter and a 'join' parameter that was an array reference of array
886
references would fail.
1081
parameter and a 'join' parameter that was an array reference of
1082
array references would fail.
888
1084
- Avoid an uninit value in Alzabo::MethodMaker. Reported by Daniel
891
1087
- If you created a cursor inside an eval{} block, the cursor contained
892
an object whose DESTROY method would overwrite $@ as it went out of
893
scope when the eval block exited. This could basically make it look
894
like an exception had disappeared. Thanks to Brad Bowman for an
895
excellent bug report.
1088
an object whose DESTROY method would overwrite $@ as it went out of
1089
scope when the eval block exited. This could basically make it look
1090
like an exception had disappeared. Thanks to Brad Bowman for an
1091
excellent bug report.
897
1093
- Loading a schema failed in taint mode. This was reported ages ago
898
by Raul Nohea Goodness and dropped on the floor by me. My bad.
1094
by Raul Nohea Goodness and dropped on the floor by me. My bad.
900
- The schema creator's exception handling was a little bit buggered
901
up when handling Alzabo::Exception::Driver exceptions.
1096
- The schema creator's exception handling was a little bit buggered up
1097
when handling Alzabo::Exception::Driver exceptions.
903
1099
---------------------------------------------------------------------------
1021
1218
- Document that Alzabo supports COALESCE and NULLIF for Postgres.
1023
1220
- Added Alzabo::ObjectCache::Sync::Mmap which uses Cache::Mmap. This
1024
is just slightly slower than using SDBM_File.
1221
is just slightly slower than using SDBM_File.
1026
1223
- New table alias feature for making queries that join against a table
1027
more than once. An example:
1029
my $foo_alias = $foo_tab->alias;
1031
my $cursor = $schema->join( select => $foo_tab,
1032
tables => [ $foo_tab, $bar_tab, $foo_alias ],
1033
where => [ [ $bar_tab->column('baz'), '=', 10 ],
1034
[ $foo_alias->column('quux'), '=', 100 ] ],
1035
order_by => $foo_alias->column('briz') );
1037
In this query, we want to get all the entries in the foo table based
1038
on a join between foo and bar with certain conditions. However, we
1039
want to order the results by a _different_ criteria than that used for
1040
the join. This doesn't necessarily happen often, but when it does its
1041
nice to be able to do it. In SQL, this query would look something
1045
FROM foo, bar, foo as foo1
1046
WHERE foo.foo_id = bar.foo_id
1047
AND bar.foo_id = foo1.foo_id
1224
more than once. An example:
1226
my $foo_alias = $foo_tab->alias;
1228
my $cursor = $schema->join( select => $foo_tab,
1229
tables => [ $foo_tab, $bar_tab, $foo_alias ],
1230
where => [ [ $bar_tab->column('baz'), '=', 10 ],
1231
[ $foo_alias->column('quux'), '=', 100 ] ],
1232
order_by => $foo_alias->column('briz') );
1234
In this query, we want to get all the entries in the foo table based
1235
on a join between foo and bar with certain conditions. However, we
1236
want to order the results by a _different_ criteria than that used
1237
for the join. This doesn't necessarily happen often, but when it
1238
does its nice to be able to do it. In SQL, this query would look
1239
something like this:
1242
FROM foo, bar, foo as foo1
1243
WHERE foo.foo_id = bar.foo_id
1244
AND bar.foo_id = foo1.foo_id
1052
1249
FEATURE REMOVAL:
1054
1251
- It is no longer possible to pass sorting specifications ('ASC' or
1055
'DESC') as part of the group_by parameter. This was only supported by
1056
MySQL and it was broken in MySQL until 3.23.47 anyway. It's weird and
1057
non-standard. Just use order_by instead.
1252
'DESC') as part of the group_by parameter. This was only supported
1253
by MySQL and it was broken in MySQL until 3.23.47 anyway. It's
1254
weird and non-standard. Just use order_by instead.
1061
1258
- If prefetch wasn't set, all the rows in the table were being
1064
1261
- The newest Test::More (0.40) uses eval{} inside its isa_ok()
1065
function. The test suite was passing $@ directly into isa_ok() and it
1066
would then get reset by the eval{} in the isa_ok() function. This has
1067
been fixed by copying $@ into another variable before passing it into
1068
isa_ok(). Apparently, Test::More 0.41 will fix this as well.
1262
function. The test suite was passing $@ directly into isa_ok() and
1263
it would then get reset by the eval{} in the isa_ok() function.
1264
This has been fixed by copying $@ into another variable before
1265
passing it into isa_ok(). Apparently, Test::More 0.41 will fix this
1070
1268
- Make Alzabo::ObjectCache::Store::RDBMS and
1071
Alzabo::ObjectCache::Sync::RDBMS play nice with Postgres. Postgres
1072
aborts transactions when there are errors like an attempt to insert a
1073
duplicate inside a transaction. These module would just try to insert
1074
potentially duplicate rows and ignore the error. Now Postgres is
1269
Alzabo::ObjectCache::Sync::RDBMS play nice with Postgres. Postgres
1270
aborts transactions when there are errors like an attempt to insert
1271
a duplicate inside a transaction. These module would just try to
1272
insert potentially duplicate rows and ignore the error. Now
1273
Postgres is handled specially.
1077
1275
- If you told the installer that you didn't want to run any tests with
1078
a live database, there would be errors when it tried to run
1079
03-runtime.t. Now it just skips it.
1276
a live database, there would be errors when it tried to run
1277
03-runtime.t. Now it just skips it.
1081
1279
- Alzabo includes a script called 'pod_merge.pl' that is run before
1082
installing its modules. This script merges POD from a parent class
1083
into a child class (like from Alzabo::Table into
1084
Alzabo::Create::Table) in order to get all the relevant documentation
1085
in one place. The way the Makefile.PL ran this script was not working
1086
for some people, and in addition, did not end up putting the merged
1087
documentation into the generated man pages. This release includes a
1088
patch from Ilya Martynov that fixes both of these problems.
1280
installing its modules. This script merges POD from a parent class
1281
into a child class (like from Alzabo::Table into
1282
Alzabo::Create::Table) in order to get all the relevant
1283
documentation in one place. The way the Makefile.PL ran this script
1284
was not working for some people, and in addition, did not end up
1285
putting the merged documentation into the generated man pages. This
1286
release includes a patch from Ilya Martynov that fixes both of these
1090
1289
---------------------------------------------------------------------------
1096
1295
- Improve documentation for new Alzabo::Create::Schema->sync_backend
1097
method and note its caveats.
1296
method and note its caveats.
1099
1298
- It is now possible to use SQL functions as part of order_by clauses.
1102
my $cursor = $schema->select( select => [ COUNT('*'), $id_col ],
1103
tables => [ $foo_tab, $bar_tab ],
1104
group_by => $id_col,
1105
order_by => [ COUNT('*'), 'DESC' ] );
1301
my $cursor = $schema->select( select => [ COUNT('*'), $id_col ],
1302
tables => [ $foo_tab, $bar_tab ],
1303
group_by => $id_col,
1304
order_by => [ COUNT('*'), 'DESC' ] );
1107
1306
- Allow a call to Alzabo::Runtime::Table->insert without a values
1108
parameter. This is potentially useful for tables where the primary
1109
key is sequenced and the other columns have defaults or are NULLable.
1110
Patch by Ilya Martynov.
1307
parameter. This is potentially useful for tables where the primary
1308
key is sequenced and the other columns have defaults or are
1309
NULLable. Patch by Ilya Martynov.
1114
1313
- A call to the schema class's select or function methods that had
1115
both an order_by and group_by parameter would fail because it tried to
1116
process the order by clause before the group by clause.
1314
both an order_by and group_by parameter would fail because it tried
1315
to process the order by clause before the group by clause.
1118
1317
- When thawing potential row objects, Alzabo was trying to stick them
1119
into the cache, which may have worked before but not now, and should
1318
into the cache, which may have worked before but not now, and should
1122
1321
- The parent and children methods created by Alzabo::MethodMaker were
1123
incorrect (and unfortunately the tests of this feature were hosed
1322
incorrect (and unfortunately the tests of this feature were hosed
1126
1325
- Add YEAR as exportable function from Alzabo::SQLMaker::MySQL.
1128
1327
- Fix definition of WEEK and YEARWEEK functions exported from
1129
Alzabo::SQLMaker::MySQL to accept 1 or 2 parameters.
1328
Alzabo::SQLMaker::MySQL to accept 1 or 2 parameters.
1131
1330
- A bug in the caching code was throwing an exception when attempting
1132
to update objects that weren't expired. This only seemed to occur in
1133
conjuction with the prefetch functionality. The caching code has been
1134
simplified a bit and is hopefully now bug-free (I can dream, can't
1331
to update objects that weren't expired. This only seemed to occur
1332
in conjuction with the prefetch functionality. The caching code has
1333
been simplified a bit and is hopefully now bug-free (I can dream,
1137
1336
- Make it possible to call Alzabo::Runtime::Schema->join with only one
1138
table in the tables parameter. This is useful if you are constructing
1139
your join at runtime and you don't know how many tables you'll end up
1337
table in the tables parameter. This is useful if you are
1338
constructing your join at runtime and you don't know how many tables
1142
1341
- Where clauses that began with '(' were not working. Reported (with
1143
a test suite patch) by Ilya Martynov.
1342
a test suite patch) by Ilya Martynov.
1145
1344
- Where clauses that contained something like ( ')', 'and' (or 'or') )
1146
were not working either.
1345
were not working either.
1148
1347
- This file incorrectly thanked TJ Mather for separating out
1149
Class::Factory::Util, but this was done by Terrence Brannon. Oops,
1348
Class::Factory::Util, but this was done by Terrence Brannon. Oops,
1152
1351
- Improve the recognition of more defaults that MySQL uses for column
1153
lengths and defaults, in order to improve reverse engineering.
1352
lengths and defaults, in order to improve reverse engineering.
1155
1354
- Recognize defaults like 0 or '' for MySQL.
1165
1364
- When passing order_by specifications, it is now possible to do this:
1167
order_by => [ $col1, $col2, 'DESC', $col3, 'ASC' ]
1366
order_by => [ $col1, $col2, 'DESC', $col3, 'ASC' ]
1169
which allow for multiple levels of sorting as well as being much
1170
simpler to remember.
1368
which allow for multiple levels of sorting as well as being much
1369
simpler to remember.
1172
1371
- It is now possible to do something like
1174
$table->select( select => [ 1, $column ] ... );
1373
$table->select( select => [ 1, $column ] ... );
1176
and have it work. In this case, every row returned by the cursor will
1177
have 1 as its first element.
1375
and have it work. In this case, every row returned by the cursor
1376
will have 1 as its first element.
1179
1378
- Added Alzabo::MySQL and Alzabo::PostgreSQL POD pages. These pages
1180
document how Alzabo does (or does not) support various RDBMS specific
1379
document how Alzabo does (or does not) support various RDBMS
1183
1382
- Remove Alzabo::Util. Use Class::Factory::Util from CPAN instead.
1184
Class::Factory::Util is a slight revision of Alzabo::Util that has
1185
been separated from the Alzabo core code by Terrence Brannon. Thanks
1383
Class::Factory::Util is a slight revision of Alzabo::Util that has
1384
been separated from the Alzabo core code by Terrence Brannon.
1188
1387
- Add the ability to sync the RDBMS backend to the current state of
1189
the Alzabo schema. This allows you to arbitrarily update the RDBMS
1190
schema to match the current state of the Alzabo schema.
1388
the Alzabo schema. This allows you to arbitrarily update the RDBMS
1389
schema to match the current state of the Alzabo schema.
1192
1391
- Add support for SELECT and WHERE clauses that use MySQL's fulltext
1195
1394
- Add BIT and BIT VARYING as allowed types for Postgres.
1199
1398
- Reverse engineering was not checking for fulltext indexes with
1200
MySQL. These indexes were treated the same as other indexes.
1399
MySQL. These indexes were treated the same as other indexes.
1202
1401
- Make sure Alzabo::SQLMaker always handles stringification of
1205
1404
- Improve recognition of default column lengths under MySQL (and
1206
ignore them). Also improve recognition of default defaults (like
1207
'0000-00-00' for DATE columns) and ignore those.
1405
ignore them). Also improve recognition of default defaults (like
1406
'0000-00-00' for DATE columns) and ignore those.
1209
1408
- When using the BerkeleyDB module for object syncing or storage, the
1210
Berkeley DB code itself creates a number of temporary files. These
1211
will now be created in the same directory as the storage/syncing file
1409
Berkeley DB code itself creates a number of temporary files. These
1410
will now be created in the same directory as the storage/syncing
1214
1413
- Allow GROUP BY foo ASC/DESC for MySQL. The MySQL manual claims this
1215
works. In my testing, it accepts the syntax but doesn't actually
1216
respect the order requested. Of course, you can always add order by
1217
clause with your group by and that seems to work just fine.
1414
works. In my testing, it accepts the syntax but doesn't actually
1415
respect the order requested. Of course, you can always add order by
1416
clause with your group by and that seems to work just fine.
1219
1418
- Don't allow a GROUP BY clause to follow an ORDER BY clause. The
1220
reverse is still allowed.
1419
reverse is still allowed.
1222
1421
- MySQL: Allow fulltext indexes to include *text type columns without
1223
specifying a prefix.
1422
specifying a prefix.
1225
1424
- Dropping a column that had an index on it would cause an error in
1226
the generated SQL diff where Alzabo would drop the column and then try
1227
to drop (the now non-existent) index. The fix is simply to drop the
1425
the generated SQL diff where Alzabo would drop the column and then
1426
try to drop (the now non-existent) index. The fix is simply to drop
1230
1429
- Make caching code work under Perl 5.00503.
1249
1448
- Got rid of the post_select_hash hook and combined it with
1250
post_select, which now receives a hash reference. Suggested by Ilya
1449
post_select, which now receives a hash reference. Suggested by Ilya
1253
1452
- Run all hooks inside Alzabo::Schema->run_in_transaction method to
1254
ensure database integrity in cases where your hooks might
1255
update/delete/insert data. Suggested by Ilya Martynov.
1453
ensure database integrity in cases where your hooks might
1454
update/delete/insert data. Suggested by Ilya Martynov.
1257
1456
- Added new Alzabo::Runtime::Table->select method. This is just like
1258
the existing ->function method, but returns a cursor instead of the
1457
the existing ->function method, but returns a cursor instead of the
1261
1460
- Added a 'limit' parameter to the ->function method (also works for
1262
the ->select method).
1461
the ->select method).
1264
1463
- Added new Alzabo::Runtime::Schema->select method. This is like the
1265
method of the same name in the table class but it allows for joins.
1464
method of the same name in the table class but it allows for joins.
1267
1466
- Added new potential rows, which are objects with (largely) the same
1268
interface as regular rows, but which are not (yet) inserted into the
1269
database. They are created via the new
1270
Alzabo::Runtime::Table->potential_row method. Thanks to Ilya Martynov
1271
for suggestions and code for this feature.
1467
interface as regular rows, but which are not (yet) inserted into the
1468
database. They are created via the new
1469
Alzabo::Runtime::Table->potential_row method. Thanks to Ilya
1470
Martynov for suggestions and code for this feature.
1273
1472
- Added Alzabo::Runtime::Row->schema method. Suggested by Ilya
1276
1475
- Made it possible to use Storable to freeze and thaw any type of row
1277
object. Previously, this would have worked but would have serialized
1278
basically every single Alzabo object in memory (whee!). Patch by Ilya
1476
object. Previously, this would have worked but would have
1477
serialized basically every single Alzabo object in memory (whee!).
1478
Patch by Ilya Martynov.
1281
1480
- Make Alzabo::Schema->run_in_transaction preserve scalar/array
1282
context and return whatever was returned by the wrapped code.
1481
context and return whatever was returned by the wrapped code.
1286
1485
- Did some review and cleanup of the exception handling code. There
1287
were some places where exceptions were being handled in an unsafe
1288
manner as well as some spots where exception objects should have been
1289
thrown that were just using die.
1486
were some places where exceptions were being handled in an unsafe
1487
manner as well as some spots where exception objects should have
1488
been thrown that were just using die.
1291
1490
- Ignore failure to rollback for MySQL when not using transactional
1294
1493
- Alzabo was not handling the BETWEEN operator in where clauses
1295
properly. Patch by Eric Hillman.
1494
properly. Patch by Eric Hillman.
1297
1496
- Passing in something like this to rows_where:
1299
( where => [ $col_foo, '=', 1,
1300
$col_bar, '=', 2 ] )
1498
( where => [ $col_foo, '=', 1,
1499
$col_bar, '=', 2 ] )
1302
worked when it shouldn't.
1501
worked when it shouldn't.
1304
1503
- Trying to do a select that involved a group by and a limit was not
1307
1506
INCOMPATIBILITIES:
1309
1508
- Got rid of the post_select_hash hook and combined it with
1310
post_select, which now receives a hash reference.
1509
post_select, which now receives a hash reference.
1312
1511
---------------------------------------------------------------------------
1380
1579
- When MethodMaker creates 'row_column' methods, these are now get/set
1383
1582
- Added new lookup_columns option to MethodMaker (like lookup_tables
1384
but more flexible). This replaces the now deprecated lookup_tables
1385
option. See DEPRECATIONS and INCOMPATIBILITIES for more details.
1583
but more flexible). This replaces the now deprecated lookup_tables
1584
option. See DEPRECATIONS and INCOMPATIBILITIES for more details.
1387
1586
- Added the ability to make any storage cache module an LRU. Simply
1388
pass an lru_size parameter to Alzabo::ObjectCache when using it and
1389
the storage module will be an LRU cache.
1587
pass an lru_size parameter to Alzabo::ObjectCache when using it and
1588
the storage module will be an LRU cache.
1391
1590
- Documented Alzabo's referential integrity rules in Alzabo.pm
1394
1593
- Added section on optimizing memory usage to Alzabo::FAQ.
1396
1595
- Alzabo::Runtime::Schema->join now takes a parameter called
1397
'distinct'. This is useful in situations where you are joining
1398
between several tables but don't want rows back from all of them. In
1399
that case, it is possible that you could end up getting more
1400
duplicates than you need. This parameter can help you eliminate
1596
'distinct'. This is useful in situations where you are joining
1597
between several tables but don't want rows back from all of them.
1598
In that case, it is possible that you could end up getting more
1599
duplicates than you need. This parameter can help you eliminate
1403
- Add the following Alzabo::Schema methods: begin_work,
1404
rollback, commit, run_in_transaction.
1602
- Add the following Alzabo::Schema methods: begin_work, rollback,
1603
commit, run_in_transaction.
1406
1605
- If you have GraphViz installed the schema creator can now use it to
1407
show you a graph of your schema.
1606
show you a graph of your schema.
1411
1610
- Fix handling of binary attribute for MySQL columns. Generated SQL
1412
for creating/altering these columns may have been invalid previously.
1611
for creating/altering these columns may have been invalid
1414
1614
- The rules were not catching an attempt to create a CHAR/VARCHAR
1415
column with no length (MySQL).
1615
column with no length (MySQL).
1417
1617
- Fixed bug that caused limit to not work when there was a where
1418
clause or order_by clause. Reported by Ilya Martynov.
1618
clause or order_by clause. Reported by Ilya Martynov.
1420
1620
- Documented row_column option for MethodMaker.
1422
1622
- order_by was ignored when given to the Alzabo::Runtime::Schema->join
1423
method. Reported by Martin Ertl.
1623
method. Reported by Martin Ertl.
1425
1625
- When viewing an existing column in the schema creator, the three
1426
checkboxes at the bottom were always unchecked.
1626
checkboxes at the bottom were always unchecked.
1428
1628
- The test suite has been revamped to use Test::More. In the process
1429
some new tests were added and some (gulp) false positives were caught.
1629
some new tests were added and some (gulp) false positives were
1431
1632
- The default column value wasn't being escaped in the schema creator.
1435
1636
- The Alzabo::MethodMaker option 'lookup_tables' has been deprecated.
1436
Use the new 'lookup_columns' option instead.
1637
Use the new 'lookup_columns' option instead.
1438
1639
INCOMPATIBILITIES:
1440
1641
- Alzabo::ObjectCache::Store modules now expect an object id instead
1441
of an object for their delete_from_cache method.
1642
of an object for their delete_from_cache method.
1443
1644
- If you specify give the 'all' parameter to MethodMaker,
1444
'lookup_tables' is no longer included.
1645
'lookup_tables' is no longer included.
1446
1647
---------------------------------------------------------------------------
1704
1907
INCOMPATIBILITIES:
1706
1909
- The 'dbm_file' parameter given when loading a syncing module that
1707
used DBM files (such as Alzabo::ObjectCache::Sync::SDBM_File) has been
1708
changed to 'sync_dbm_file', because this release includes a new cache
1709
storage module that uses DBM files as well.
1910
used DBM files (such as Alzabo::ObjectCache::Sync::SDBM_File) has
1911
been changed to 'sync_dbm_file', because this release includes a new
1912
cache storage module that uses DBM files as well.
1711
1914
- The schema creator now requires HTTP::BrowserDetect.
1713
1916
- Fix what was arguably a bug in the caching/syncing code.
1714
Previously, one process could update a row and another process could
1715
then update that same row. Now the second process will throw an
1917
Previously, one process could update a row and another process could
1918
then update that same row. Now the second process will throw an
1720
1923
- Accidentally left debugging turned on in Alzabo::Exceptions.
1722
1925
- The schema creator did not allow you to remove a length or precision
1723
setting for a column once it had been made.
1926
setting for a column once it had been made.
1725
1928
- Require a length for CHAR and VARCHAR columns with MySQL.
1727
1930
- Add error on setting precision for any column that doesn't allow
1730
1933
- The interaction of caching rows and Alzabo::MethodMaker was not
1731
right. Basically, it was determined at compile time whether or not to
1732
use the cached row class but this needs to be determined at run time.
1733
This has been fixed.
1934
right. Basically, it was determined at compile time whether or not
1935
to use the cached row class but this needs to be determined at run
1936
time. This has been fixed.
1735
1938
- Using the Alzabo::Runtime::Row->rows_by_foreign_key method would
1736
fail when the column in one table did not have the same name as a
1737
column in the other table. Reported by Michael Graham (along with a
1738
correct diagnosis, thanks!).
1939
fail when the column in one table did not have the same name as a
1940
column in the other table. Reported by Michael Graham (along with a
1941
correct diagnosis, thanks!).
1740
1943
- Don't specify a database name when creating or dropping a database.
1741
Reported and patched by Dana Powers.
1944
Reported and patched by Dana Powers.
1745
1948
- Rules violations error messages (bad table name, for example) in the
1746
schema creator are now handled in a much friendlier manner. Instead
1747
of the big error dump exception page it returns you to the page you
1748
submitted from with an error message.
1949
schema creator are now handled in a much friendlier manner. Instead
1950
of the big error dump exception page it returns you to the page you
1951
submitted from with an error message.
1750
1953
- Add Alzabo::Create::Column->alter method which allows you to change
1751
the column type, length, and precision all at once. This is necessary
1752
because some of the column type validation code will insist that a
1753
column have a length setting. If you try to change them in two
1754
separate operations it will throw an exception.
1954
the column type, length, and precision all at once. This is
1955
necessary because some of the column type validation code will
1956
insist that a column have a length setting. If you try to change
1957
them in two separate operations it will throw an exception.
1756
1959
- Add Alzabo::ObjectCache::Store::Null - This allows you to use any
1757
multi-process syncing module without using up the memory that
1758
Alzabo::ObjectCache::Store::Memory uses.
1960
multi-process syncing module without using up the memory that
1961
Alzabo::ObjectCache::Store::Memory uses.
1760
1963
- Add Alzabo::ObjectCache::Store::BerkeleyDB - I'm not sure if storing
1761
in a db file is really a performance win (vs. null storage) because of
1762
the work needed to freeze & thaw the row objects. Benchmarks are
1964
in a db file is really a performance win (vs. null storage) because
1965
of the work needed to freeze & thaw the row objects. Benchmarks are
1765
1968
- Add support for fulltext indexes (MySQL).
1767
1970
- Don't show fulltext or column prefix options when creating indexes
1768
for databases that don't support these features.
1971
for databases that don't support these features.
1770
1973
- Use cardinality & dependency language for relations.
1772
1975
- Add some style to the schema creator (via stylesheets). It looks a
1775
1978
---------------------------------------------------------------------------
1870
2073
- Document limit clauses for joins and single table selects.
1872
2075
- Expand options for where clauses to allow 'OR' conditionals as well
1873
as subgroupings of conditional clauses.
2076
as subgroupings of conditional clauses.
1875
2078
- If you set prefetch columns for a table, these are now fetched along
1876
with other data for the table in a cursor, reducing the number of
1877
database SELECTs being done.
2079
with other data for the table in a cursor, reducing the number of
2080
database SELECTs being done.
1879
2082
- Added Alzabo::Create::Schema->clone method. This allows you to
1880
clone a schema object (except for the name, which must be changed as
1881
part of the cloning process).
2083
clone a schema object (except for the name, which must be changed as
2084
part of the cloning process).
1883
2086
- Using the profiler, I have improved some of the hot spots in the
1884
code. I am not sure how noticeable these improvements are but I plan
1885
to do a lot more of this type of work in the future.
2087
code. I am not sure how noticeable these improvements are but I
2088
plan to do a lot more of this type of work in the future.
1887
2090
- Added the Alzabo::ObjectCache::Sync::BerkeleyDB and
1888
Alzabo::ObjectCache::Sync::SDBM_File modules. These modules are much
1889
faster than the old DBMSync or IPCSync modules and actually appear to
1890
be faster than not syncing at all. The NullSync (now Sync::Null)
1891
module is still faster than all of them, however.
2091
Alzabo::ObjectCache::Sync::SDBM_File modules. These modules are
2092
much faster than the old DBMSync or IPCSync modules and actually
2093
appear to be faster than not syncing at all. The NullSync (now
2094
Sync::Null) module is still faster than all of them, however.
1895
2098
- Reversing engineering a MySQL schema with ENUM or SET columns may
1896
have caused an error if the values for the enum/set contained spaces.
2099
have caused an error if the values for the enum/set contained
1898
2102
- A bug in the schema creation interface made it impossible to create
1899
an index without a prefix. Reported by Sam Horrocks.
2103
an index without a prefix. Reported by Sam Horrocks.
1901
2105
- When dropping a table in Postgres, the sequences for its columns (if
1902
any), need to be dropped as well. Adapted from a patch submitted by
2106
any), need to be dropped as well. Adapted from a patch submitted by
1905
2109
- The modules needed by the schema creator and data browser are now
1906
used by the components. However, it is still better to load them at
1907
server startup in order to maximize shared memory.
2110
used by the components. However, it is still better to load them at
2111
server startup in order to maximize shared memory.
1909
2113
- Calling the object cache's clear method did not work when using the
1910
IPCSync or NullSync modules.
2114
IPCSync or NullSync modules.
1912
2116
- Reverse engineering a Postgres database was choking on char(n)
1913
columns, which are converted internally by Postgres into bpchar(n)
1914
columns. This is now fixed (by converting them back during reverse
2117
columns, which are converted internally by Postgres into bpchar(n)
2118
columns. This is now fixed (by converting them back during reverse
1917
2121
- Reject column prefixes > 255 with MySQL. I hesitate to call this a
1918
bug fix since this appears to be undocumented in the MySQL docs.
2122
bug fix since this appears to be undocumented in the MySQL docs.
1920
2124
- Using the DBMSync module in an environment which started as one user
1921
and then became another (like Apache) may have caused permiission
1922
problems with the dbm file. This has been fixed.
2125
and then became another (like Apache) may have caused permiission
2126
problems with the dbm file. This has been fixed.
1926
2130
- Require DBD::Pg 0.97 (the latest version as of this writing) as it
1927
fixes some bugs in earlier versions.
2131
fixes some bugs in earlier versions.
1931
2135
- Split up Row object into Alzabo::Runtime::Row (base class for
1932
standard uncached row) and Alzabo::Runtime::CachedRow (subclass for
1933
rows that have to interact with a cache). This simplifies the code,
1934
particulary in terms of how it interacts with the caching system.
2136
standard uncached row) and Alzabo::Runtime::CachedRow (subclass for
2137
rows that have to interact with a cache). This simplifies the code,
2138
particulary in terms of how it interacts with the caching system.
1936
2140
- Made Alzabo::Runtime::Row->get_data a private method. This served
1937
no purpose for end users anyway.
2141
no purpose for end users anyway.
1939
2143
---------------------------------------------------------------------------
1964
2168
0.35 Mar 18, 2001
1966
2170
- Add ability to specify port parameter when connecting to DB for
1967
reverse engineering/data browser.
2171
reverse engineering/data browser.
1969
2173
- Fix support for host param in data browser.
1971
2175
- Added a new Alzabo/FAQ.pod file. Its pretty skimpy but hopefully it
1972
will become more useful over time.
2176
will become more useful over time.
1974
2178
- If your Mason component root was under your document then the links
1975
to return to the top levels of the schema creator and data browser
1976
were broken. Note: if your component root is entirely outside your
1977
document root then things may not work at all.
2179
to return to the top levels of the schema creator and data browser
2180
were broken. Note: if your component root is entirely outside your
2181
document root then things may not work at all.
1979
2183
- Add support for extra MySQL connection params (like
1980
mysql_default_file). See the Alzabo::Driver::MySQL docs for more
2184
mysql_default_file). See the Alzabo::Driver::MySQL docs for more
1983
2187
- Add support for Postgres connect params 'options' and 'tty'.
1985
2189
- Alzabo::Create::Schema->reverse_engineer was not passing the 'port'
1986
parameter to the driver when attempting to make a driver.
2190
parameter to the driver when attempting to make a driver.
1988
2192
- Attempting to pass in the port parameter to a connection would have
1989
generated a bad DSN due to a type in the code.
2193
generated a bad DSN due to a type in the code.
1991
2195
- Started using Params::Validate so I can be even stricter about
1994
2198
- Fix bug introduced in 0.33. Changing a column's type always removed
1995
any length and precision setting for the column. Now it is only
1996
removed if the new column type does not allow a length or precision
2199
any length and precision setting for the column. Now it is only
2200
removed if the new column type does not allow a length or precision
1999
2203
- Fix some warnings in the Makefile.PL code. Also require Pod::Man >=
2000
1.14 to handle =head3 and =head4 directives.
2204
1.14 to handle =head3 and =head4 directives.
2002
2206
- The Postgres code did not allow the ABSTIME, MACADDR, or RELTIME
2003
column types. These have been added. Thanks to Bob Gustafson for
2004
helping me find this problem.
2207
column types. These have been added. Thanks to Bob Gustafson for
2208
helping me find this problem.
2006
2210
- The Alzabo::Create::Schema->reverse_engineer method was not doing
2007
anything with a host parameter. Reported by Aaron Johnson.
2211
anything with a host parameter. Reported by Aaron Johnson.
2009
2213
- Fix bug in Alzabo::ObjectCache docs. Reported by Robin Berjon.
2011
2215
- Include a first version of the quick method reference suggested by
2012
Robin Berjon. This Alzabo::QuickRef. The HTML version is table-ized
2013
and spiffed up a bit from the POD version.
2216
Robin Berjon. This Alzabo::QuickRef. The HTML version is
2217
table-ized and spiffed up a bit from the POD version.
2015
2219
---------------------------------------------------------------------------
2017
2221
0.34 Feb 26, 2001
2019
2223
- If you were trying to run the tests on a system without MySQL
2020
installed, or without the DB_File or IPC::Shareable modules, you saw
2021
lots of test failures, even if you said you did not plan to use the
2022
parts of Alzabo that required these. This has been fixed. I can now
2023
run the tests successfully using a Perl with only DBD::Pg and DBI
2024
installed and it will skip any tests that it can't run.
2224
installed, or without the DB_File or IPC::Shareable modules, you saw
2225
lots of test failures, even if you said you did not plan to use the
2226
parts of Alzabo that required these. This has been fixed. I can
2227
now run the tests successfully using a Perl with only DBD::Pg and
2228
DBI installed and it will skip any tests that it can't run.
2026
2230
- Fixed another caching bug related to objects that were deleted and
2027
then another row was inserted with the same primary key. Note to
2028
self: premature optimization is the root of all evil.
2231
then another row was inserted with the same primary key. Note to
2232
self: premature optimization is the root of all evil.
2030
2234
---------------------------------------------------------------------------
2032
2236
0.33 Feb 21, 2001
2034
2238
- The linking table methods generated by Alzabo::MethodMaker were
2037
2241
- Changed how order by clauses can be passed to select operations.
2038
Also changed the docs, which were way out of sync with the changes in
2242
Also changed the docs, which were way out of sync with the changes
2041
2245
- Attempting to update more than one value at once was broken. Fixed
2044
2248
- Added Alzabo::Runtime::Table->func method to allow arbitrary column
2045
aggregate functions like MAX, MIN, AVG, etc.
2249
aggregate functions like MAX, MIN, AVG, etc.
2047
2251
- Fixed schema creator bug. It was not possible to change a column's
2048
NULLability after it was created.
2252
NULLability after it was created.
2050
2254
- When changing a column's type, Alzabo now removes any column
2051
attributes that are not valid for that column. In addition, if the
2052
existing length and precision parameters are not valid, they will be
2255
attributes that are not valid for that column. In addition, if the
2256
existing length and precision parameters are not valid, they will be
2055
2259
- Fixed the code to get rid of weird error messages that came from DBI
2056
with Perl 5.6.0+ when the Alzabo::Create::Schema->create or
2057
Alzabo::Create::Schema->reverse_engineer methods were called. For the
2058
curious, this has to do with the DBI object passing through
2260
with Perl 5.6.0+ when the Alzabo::Create::Schema->create or
2261
Alzabo::Create::Schema->reverse_engineer methods were called. For
2262
the curious, this has to do with the DBI object passing through
2061
2265
---------------------------------------------------------------------------
2063
2267
0.32 Feb 7, 2001
2065
2269
- Forgot to include data browser files in MANIFEST. Caused weirdness
2066
if you said you wanted it when asked during install. Reported by Remi
2270
if you said you wanted it when asked during install. Reported by
2069
2273
---------------------------------------------------------------------------
2075
2279
- Fix bugs in Alzabo::MethodMaker. The insert, update, lookup_table,
2076
and self_relation (parent portion only) were broken.
2280
and self_relation (parent portion only) were broken.
2078
2282
- A bug in the SQL making code was causing some queries to appear as
2079
if they failed when they didn't.
2283
if they failed when they didn't.
2081
2285
---------------------------------------------------------------------------
2083
2287
0.30 Feb 4, 2001
2085
2289
- The convert.pl script in eg/ has been updated to handle the new
2086
release. IMPORTANT: I forgot to include a mention of this in the last
2087
release but you need to run the script _before_ installing a new
2290
release. IMPORTANT: I forgot to include a mention of this in the
2291
last release but you need to run the script _before_ installing a
2292
new version of Alzabo.
2090
2294
- Many improvements and updates to Alzabo::MethodMaker. Highlights
2091
include fixing a bug that prevented the insert and update methods from
2092
being created, a new callback system that allows you to specify all
2093
the method names to be generated, and a new 'self_relations' option
2094
for tables that have parent/child relationships with themself.
2295
include fixing a bug that prevented the insert and update methods
2296
from being created, a new callback system that allows you to specify
2297
all the method names to be generated, and a new 'self_relations'
2298
option for tables that have parent/child relationships with
2096
2301
- Fix handling of NULL columns for inserts and updates. Now, Alzabo
2097
only throws an exception if the column is not nullable and has no
2098
default. If it has a default and is specified as NULL then it will
2099
not be included in the INSERT clause (in which case the RDBMS should
2100
insert the default value itself).
2302
only throws an exception if the column is not nullable and has no
2303
default. If it has a default and is specified as NULL then it will
2304
not be included in the INSERT clause (in which case the RDBMS should
2305
insert the default value itself).
2102
2307
- Fix bugs in Postgres reverse engineering. Defaults were not handled
2103
properly, nor were numeric column type length and precision.
2308
properly, nor were numeric column type length and precision.
2105
2310
- The schema creator and data browser now allow you to enter the host
2106
for database connections where needed.
2311
for database connections where needed.
2108
2313
- Foreign keys can now span multiple columns. This means you can have
2109
a relation from foo.foo_id and foo.index_id to bar.foo_id and
2110
bar.index_id. This required some changes to the interface for the
2111
foreign key objects. Notably, the Alzabo::ForeignKey->column_from and
2112
Alzabo::ForeignKey->column_to methods are now
2113
Alzabo::ForeignKey->columns_from and Alzabo::ForeignKey->columns_to.
2114
In addition, the parameters given to the
2115
Alzabo::Create::Schema->add_relation have changed.
2314
a relation from foo.foo_id and foo.index_id to bar.foo_id and
2315
bar.index_id. This required some changes to the interface for the
2316
foreign key objects. Notably, the Alzabo::ForeignKey->column_from
2317
and Alzabo::ForeignKey->column_to methods are now
2318
Alzabo::ForeignKey->columns_from and Alzabo::ForeignKey->columns_to.
2319
In addition, the parameters given to the
2320
Alzabo::Create::Schema->add_relation have changed.
2117
2322
- Major changes to caching architecture. The caching code has been
2118
split up. There is now a 'storing' class, which holds onto the
2119
objects (the cache). Then there is a 'sync' class. This class
2120
handles expiration and deletion tracking. These two classes can be
2121
mixed and matched. Right now there is only one storage class (which
2122
stores the objects in memory). There are 3 syncing classes. One,
2123
NullSync, doesn't actually sync objects. It does track deletions, but
2124
not expirations. The others, IPCSync and DBMSync, use IPC or DBM
2125
files to track expiration and deletion of objects.
2323
split up. There is now a 'storing' class, which holds onto the
2324
objects (the cache). Then there is a 'sync' class. This class
2325
handles expiration and deletion tracking. These two classes can be
2326
mixed and matched. Right now there is only one storage class (which
2327
stores the objects in memory). There are 3 syncing classes. One,
2328
NullSync, doesn't actually sync objects. It does track deletions,
2329
but not expirations. The others, IPCSync and DBMSync, use IPC or
2330
DBM files to track expiration and deletion of objects.
2127
2332
- Doing this work highlighted some bugs in the caching/syncing code.
2128
One oversight was that if you deleted an object and then inserted
2129
another row with the exact same primary key, the cache continued to
2130
think the object was deleted. Other bugs also surfaced. These have
2131
been fixed and the test suite has been updated so caching should be
2132
stable (if not, I'll have to cry).
2333
One oversight was that if you deleted an object and then inserted
2334
another row with the exact same primary key, the cache continued to
2335
think the object was deleted. Other bugs also surfaced. These have
2336
been fixed and the test suite has been updated so caching should be
2337
stable (if not, I'll have to cry).
2134
2339
- When viewing an existing column in the schema creator, defaults,
2135
lengths, and precision of 0 were not being shown.
2340
lengths, and precision of 0 were not being shown.
2137
2342
- Alzabo::Runtime::Table->row_count can now take a where clause.
2139
2344
- Fix bugs in Alzabo::Create::Table. This was causing problems with
2140
indexes when the table name was changed.
2345
indexes when the table name was changed.
2142
2347
- Fixed a bug in Alzabo::Util that caused the test cases to fail if
2143
Alzabo hadn't been previously installed. Reported by Robert Goff.
2348
Alzabo hadn't been previously installed. Reported by Robert Goff.
2145
2350
- The SQLMaker class is now smarter about not letting you make bad
2146
SQL. For example, if you try to make a WHERE clause with tables not
2147
mentioned in the FROM clause, it will throw an exception. This will
2148
hopefully help catch logic errors in your code a bit sooner.
2351
SQL. For example, if you try to make a WHERE clause with tables not
2352
mentioned in the FROM clause, it will throw an exception. This will
2353
hopefully help catch logic errors in your code a bit sooner.
2150
2355
- Removed use of prepare_cached in Alzabo::Driver. This has the
2151
potential to cause some strange errors under Alzabo. Because of the
2152
way Alzabo works, it is possible to have a Cursor object holding onto
2153
a statement handle that needs to be used elsewhere (by a row object,
2154
for example). It is safer to let a new statement handle be created in
2356
potential to cause some strange errors under Alzabo. Because of the
2357
way Alzabo works, it is possible to have a Cursor object holding
2358
onto a statement handle that needs to be used elsewhere (by a row
2359
object, for example). It is safer to let a new statement handle be
2360
created in this case.
2157
2362
INCOMPATIBILITIES
2159
2364
- See the note above about the changes required to support
2160
multi-column foreign keys.
2365
multi-column foreign keys.
2162
2367
- Because of the aforementioned changes to the caching architecture,
2163
caching just does not work the way it used to.
2165
1. By default, there is no caching at all.
2167
2. To get the old behavior, which defaulted to an in-process memory
2168
cache with no inter-process syncing (meaning deletes are tracked but
2169
there is no such thing as expiration), you can do this in your code:
2171
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2172
sync => 'Alzabo::ObjectCache::NullSync' );
2176
use Alzabo::ObjectCache; # the above modules are the defaults
2178
3. To get the behavior of the old Alzabo::ObjectCacheIPC module, do:
2180
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2181
sync => 'Alzabo::ObjectCache::IPCSync' );
2183
However, the new DBMSync module will probably scale better, and
2184
performance should be about the same for smaller applications. To use
2187
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2188
sync => 'Alzabo::ObjectCache::DBMSync' );
2190
4. If you run without any caching at all then the Alzabo::Runtime::Row
2191
class's behavior has changed somewhat. In particular, selects or
2192
updates against a deleted object will always throw an
2193
Alzabo::Exception::NoSuchRow exception. Before, the behavior wasn't
2196
Please read the section on clearing the cache in the
2197
Alzabo::ObjectCache module, as this is an important concept. By
2198
default, the caching and syncing modules will just grow unchecked.
2199
You need to clear at the appropriate points (usually your
2200
application's entry points) in order to keep them under control.
2368
caching just does not work the way it used to.
2370
1. By default, there is no caching at all.
2372
2. To get the old behavior, which defaulted to an in-process memory
2373
cache with no inter-process syncing (meaning deletes are tracked but
2374
there is no such thing as expiration), you can do this in your code:
2376
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2377
sync => 'Alzabo::ObjectCache::NullSync' );
2381
use Alzabo::ObjectCache; # the above modules are the defaults
2383
3. To get the behavior of the old Alzabo::ObjectCacheIPC module, do:
2385
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2386
sync => 'Alzabo::ObjectCache::IPCSync' );
2388
However, the new DBMSync module will probably scale better, and
2389
performance should be about the same for smaller applications. To
2392
use Alzabo::ObjectCache( store => 'Alzabo::ObjectCache::MemoryStore',
2393
sync => 'Alzabo::ObjectCache::DBMSync' );
2395
4. If you run without any caching at all then the
2396
Alzabo::Runtime::Row class's behavior has changed somewhat. In
2397
particular, selects or updates against a deleted object will always
2398
throw an Alzabo::Exception::NoSuchRow exception. Before, the
2399
behavior wasn't very well defined.
2401
Please read the section on clearing the cache in the
2402
Alzabo::ObjectCache module, as this is an important concept. By
2403
default, the caching and syncing modules will just grow unchecked.
2404
You need to clear at the appropriate points (usually your
2405
application's entry points) in order to keep them under control.
2202
2407
---------------------------------------------------------------------------
2204
2409
0.20 Jan 9, 2001
2206
2411
- Preliminary Postgres support. There is no support yet for
2207
constraints or foreign keys when reverse engineering or making SQL.
2208
There is also no support for large objects (I'm hoping that 7.1 will
2209
be released soon so I won't have to think about this). Otherwise, the
2210
support is about at the same level as MySQL support, though less
2412
constraints or foreign keys when reverse engineering or making SQL.
2413
There is also no support for large objects (I'm hoping that 7.1 will
2414
be released soon so I won't have to think about this). Otherwise,
2415
the support is about at the same level as MySQL support, though less
2213
2418
- Added Alzabo::MethodMaker module. This can be used to auto-generate
2214
useful methods for your schema/table/row objects based on the
2215
properties of your objects themselves.
2419
useful methods for your schema/table/row objects based on the
2420
properties of your objects themselves.
2217
2422
- Reworking/expanding/clarifying/editing of the docs.
2219
2424
- Add order_by and limit options whenever creating a cursor.
2221
2426
- Method documentation POD from the Alzabo::* modules is merged into
2222
the relevant Alzabo::Create::* and Alzabo::Runtime::* modules during
2223
install. This should make it easier to find what you need since the
2224
average user will only need to look at a few modules in
2427
the relevant Alzabo::Create::* and Alzabo::Runtime::* modules during
2428
install. This should make it easier to find what you need since the
2429
average user will only need to look at a few modules in
2227
- Reworked exceptions so they are all now Alzabo::Exception::Something.
2432
- Reworked exceptions so they are all now
2433
Alzabo::Exception::Something.
2229
2435
- Added default as a column attribute (thus there are now
2230
Alzabo::Column->default and Alzabo::Create::Column->set_default
2436
Alzabo::Column->default and Alzabo::Create::Column->set_default
2233
2439
- Added length & precision attributes for columns. Both are set
2234
through the Alzabo::Create::Column->set_length method.
2440
through the Alzabo::Create::Column->set_length method.
2236
2442
- This release includes a script in eg/ called convert.pl to convert
2239
2445
- Alzabo::Schema->tables & Alzabo::Table->columns now take an optional
2240
list of tables/columns as an argument and return a list of matching
2446
list of tables/columns as an argument and return a list of matching
2243
2449
- Added Alzabo::Column->has_attribute method.
2245
2451
- The data browser has actually lost some functionality (the
2246
filtering). Making this more powerful is a fairly low priority at the
2452
filtering). Making this more powerful is a fairly low priority at
2249
2455
- Fix bugs where extra params passed to Alzabo::Runtime::Table->insert
2250
were not making it to the Alzabo::Runtime::Row->new method.
2456
were not making it to the Alzabo::Runtime::Row->new method.
2252
2458
- Fix for Alzabo::Runtime::Table->set_prefetch method.
2254
2460
- Fixed bug in handling of deleted object in Alzabo::ObjectCacheIPC
2255
(they were never reported as deleted).
2461
(they were never reported as deleted).
2257
2463
- Fix bug that caused schema to get bigger every time it was saved.
2259
2465
- Finally switched to regular hashes for objects.
2261
- Added Alzabo::SQLMaker classes to handle generating SQL
2262
in a cross-platform compatible way.
2467
- Added Alzabo::SQLMaker classes to handle generating SQL in a
2468
cross-platform compatible way.
2266
2472
- Parameters for Alzabo::Create::Column->new: 'null' parameter is now
2267
'nullable'. The use of the parameter 'null' is deprecated.
2473
'nullable'. The use of the parameter 'null' is deprecated.
2269
2475
- Alzabo::Column->null & Alzabo::Column->set_null methods are now
2270
Alzabo::Column->nullable & Alzabo::Column->set_nullable. The old
2271
methods are deprecated.
2476
Alzabo::Column->nullable & Alzabo::Column->set_nullable. The old
2477
methods are deprecated.
2273
2479
- Alzabo::Create::ForeignKey->new no longer requires table_from &
2274
table_to params (it took me this long to realize I can get that from
2275
the column passed in. doh!)
2480
table_to params (it took me this long to realize I can get that from
2481
the column passed in. doh!)
2277
2483
INCOMPATIBILITIES:
2279
2485
- Alzabo::Runtime::Table->rows_where parameters have changed. The
2280
from parameter has been removed (use the Alzabo::Runtime::Schema->join
2281
method instead). The where parameter expects something different now.
2486
from parameter has been removed (use the
2487
Alzabo::Runtime::Schema->join method instead). The where parameter
2488
expects something different now.
2283
2490
- Alzabo::Runtime::Table->rows_by_where_clause method has been
2286
2493
- Alzabo::Runtime::Schema->join method's where parameter expects
2287
something different.
2494
something different.
2289
2496
---------------------------------------------------------------------------
2291
2498
0.10_5 Oct 10, 2000
2293
2500
- You can now specify a database name to be used for testing. The
2294
default is 'test_alzabo'. This a good default for MySQL, at least.
2295
Thanks to Randal Schwartz for the help.
2501
default is 'test_alzabo'. This a good default for MySQL, at least.
2502
Thanks to Randal Schwartz for the help.
2297
2504
- Make sure test file cleanup is done _before_ attempting tests so
2298
that files from a test previously aborted are cleaned up (and no
2299
errors are generated. Thanks to Randal Schwartz for the bug report.
2505
that files from a test previously aborted are cleaned up (and no
2506
errors are generated. Thanks to Randal Schwartz for the bug report.
2301
2508
- Doesn't fail on install for Mason components if no Mason component
2302
extension was given. Thanks _again_ to Randal for working with me on
2303
this in IRC late at night.
2509
extension was given. Thanks _again_ to Randal for working with me
2510
on this in IRC late at night.
2305
2512
---------------------------------------------------------------------------
2379
2586
- Began conversion of all classes from pseudohash to hash.
2381
2588
- Both schema creator and data browser now respect user choice of
2382
component extension.
2589
component extension.
2384
2591
---------------------------------------------------------------------------
2388
2595
- MAJOR CHANGE: All the Alzabo::Runtime::Row methods that used to
2389
return lists of rows now return the new Alzabo::Runtime::RowCursor
2390
object. This change is a major speed and memory optimization. It
2391
does, however, break the old interface. But its worth it.
2596
return lists of rows now return the new Alzabo::Runtime::RowCursor
2597
object. This change is a major speed and memory optimization. It
2598
does, however, break the old interface. But its worth it.
2393
2600
- Set autohandlers for schema maker and data browser so that they
2394
won't inherit from other autohandlers higher up the directory tree.
2601
won't inherit from other autohandlers higher up the directory tree.
2396
2603
- Fix bug in Alzabo::Driver which made it so that the one_row_hash
2397
method always returned a hash with keys. This caused spurious row
2398
object to be created in the Alzabo::Runtime::Row class.
2604
method always returned a hash with keys. This caused spurious row
2605
object to be created in the Alzabo::Runtime::Row class.
2400
2607
- Fix bug in Alzabo::Table::rows_where method where it wasn't handling
2401
the construct $table->rows_where( where => { foo => undef } )
2608
the construct $table->rows_where( where => { foo => undef } )
2404
2611
---------------------------------------------------------------------------
2408
2615
- Lazy column evaluation had made it possible to create an
2409
Alzabo::Runtime::Row object that did not correspond to any data in the
2410
database if its table object did specify any rows to prefetch. This
2411
would have only been discovered later by calling the select method on
2412
a non-primary key column. This hole was plugged.
2616
Alzabo::Runtime::Row object that did not correspond to any data in
2617
the database if its table object did specify any rows to prefetch.
2618
This would have only been discovered later by calling the select
2619
method on a non-primary key column. This hole was plugged.
2414
2621
- As a corollary to the above change methods in Alzabo::Runtime::Table
2415
that produce rows now always return an empty list or undef when the
2416
rows cannot be made because the specified primary key doesn't exist.
2417
Previously, the rows_by_where_clause method did this while others
2418
would cause an exception either during the object creation or later,
2419
depending upon the situation described above.
2622
that produce rows now always return an empty list or undef when the
2623
rows cannot be made because the specified primary key doesn't exist.
2624
Previously, the rows_by_where_clause method did this while others
2625
would cause an exception either during the object creation or later,
2626
depending upon the situation described above.
2421
2628
- GENERAL NOTE: I probably used exceptions too much, as in the above
2422
case. I will probably be making a few more changes like this in the
2629
case. I will probably be making a few more changes like this in the
2425
2632
- Bug fix in Alzabo::RDBMSRules when making SQL diffs. Forgot to
2426
account for new foreign key method names.
2633
account for new foreign key method names.
2428
2635
- Bug fix related to MySQL auto_increment column and
2429
Alzabo::Runtime::Table insert method. Basically, you couldn't insert
2430
into a table and use its auto_increment feature.
2636
Alzabo::Runtime::Table insert method. Basically, you couldn't
2637
insert into a table and use its auto_increment feature.
2432
2639
- Alzabo::Table::set_prefetch now makes sure that primary key columns
2433
are not included. It simply ignores them but they will not be
2434
returned by the prefetch method.
2640
are not included. It simply ignores them but they will not be
2641
returned by the prefetch method.
2436
2643
- fix bug where some row retrieval methods would fail if not given a
2439
2646
- Doc bug fix. Docs for Alzabo::Runtime::Table listed group_by_column
2440
as simply group. Of course, this probably only needs to be used by
2441
Alzabo::Runtime::Row anyway.
2647
as simply group. Of course, this probably only needs to be used by
2648
Alzabo::Runtime::Row anyway.
2443
2650
- Added Alzabo::Runtime::Table rows_where method.
2445
2652
- Added Alzabo::Runtime::Table all_rows method.
2447
2654
- Documented 'bind' parameter for Alzabo::Runtime::Table
2448
rows_by_where_clause method.
2655
rows_by_where_clause method.
2450
2657
---------------------------------------------------------------------------