1
23.0.17 Oct 4, 2007
3  - Fix t/11 to cope with Class::Trigger no longer supporting multiple
4    triggers in one shot
5
63.0.16 Nov 05, 2006
7  - Better error reporting from has_a setup failure
8
93.0.15 Aug 19 2006
10  - Fix ignorage with mutator_name and accessor_name (Ask Bj�rn Hansen)
11
123.0.14 Jan 03 2006
13  - Fix breakage with mutator_name (Ask Bj�rn Hansen)
14
153.0.13 Dec 15 2005
16  - Use DBI's last_insert_id() where available (David Steinbrunner)
17  - Cope better with deleting through a might_have (Rob Brown)
18  - Allow setting a false value or NULL in a might_have (Brad Bowman)
19
203.0.12 Nov 04 2005
21  - Use Clone instead of dclone for cloning meta info to reduce required
22    perl version (Juan Camacho) and allow for closures (RT#15498)
23  - Remove lots of old deprecations
24
253.0.11 Oct 23 2005
26
27  - search through a has_many can now take hash_ref
28  - Fix documentation for SQL wildcards (RT#15145)
29
303.0.10 Oct 7 2005
31
32  - Set Storable::Deparse so that has_a subrefs can be cloned (Will Ross)
33  - Use shorter version of mk_classdata
34  - Include t/24 which was accidentally left out of MANIFEST in 3.0.9
35
363.0.9 Sep 23 2005
37
38  - Fixed bug with shared meta_info (Will Ross)
39
40  - create() has been renamed to insert() to make it much clearer that
41    it corresponds to an SQL INSERT rather than lots of different ideas
42    as to what create() might mean. create() still (silently) works. It
43    will give 'deprecated' warnings from 3.2.0 and will be removed no
44    earlier than 3.4.0.
45
46    The before/after create triggers have NOT been renamed yet as I'm
47    rethinking some of that. We'll probably end up with more trigger
48    points. Comments and suggestions welcome.
49
503.0.8 Sep 20 2005
51
52  - constraint exceptions now set their 'data' (Dan Collis Puro)
53  - method created by has_many can now override method in parent class
54     (reported by Christopher H. Laco)
55  - factored out transform_sql for easier modification
56
573.0.7 Sep 17 2005
58
59  - Make Column responsible for accessor() and mutator() so they can be
60    set up declaratively as well as programmatically (this means the
61    second argument to accessor_name and mutator_name is now a Column
62    object rather than its name, so you may need to check your case
63    sensitivity)
64  - Rename accessor/mutator_name to accessor/mutator_name_for
65  - Document that order_by clauses in sort() are passed through
66  - Make one-shot 'Essential' set up slightly more explicit in docs
67    (Adam Kennedy)
68  - Fix HasMany warning typo (argumemt) (Dan Friedman)
69  - Remove obsolete SearchGenerator code which had leaked out
70
713.0.6 Sep 16 2005
72
73  - constrain_column can now take subref constraint
74  - Document DBD::AnyData and FreeTDS issues (Matt Trout)
75  - Factor out database error handling to _db_error()
76  - Switch to Class::Accessor::Fast in Column and Relationship 
77
783.0.5 Sep 14 2005
79
80  - has_many can take compile time constraints (Cees Hek)
81  - has_many can take a cascading delete strategy (deprecating the old,
82    undocumented, 'no_cascade_delete' option)
83  - columns() can take Class::DBI::Column objects directly
84    which can now in turn take options, thus allowing things like:
85      __PACKAGE__->columns(dates => Class::DBI::Column->new(
86        tdate => { placeholder => 'IF(1, CURDATE(), ?)' }
87      )
88
893.0.4 Sep 13 2005
90
91  Pre-Reqs
92    - Note requirement for Scalar::Util 1.08+ (for refaddr)
93
94  Refactorings
95    - Move to pluggable Search interface 
96       (includes reworking of search approach per Tim Bunce)
97
983.0.3 Sep 11 2005
99
100  Bug Fixes
101    - Ensure object is removed from index when delete()d (Tim Bunce)
102    - clear_object_index when new relationship set up (Tim Bunce)
103    - Fixed bug where PK values got auto-vivified 
104       (Tatsuhiko Miyagawa, Christopher L. Everett, Tim Bunce)
105    - Removed 'AS' when aliasing tables; some databases don't like that
106    - Properly return -1 from unchanged object updates (Kingsley Kerce)
107    - Fixed problems with overloaded stringification of related classes
108       (Tim Bunce)
109    - Fixed bug where Essential might contain the PK twice 
110
111  Refactorings
112    - Split live_object_key for easy subclassing (Tim Bunce)
113    - Split out _as_hash() to return underlying data hash
114    - Optimised _mk_column_accessors (Maurice Aubrey)
115    - Don't hard-code relationship names (Peter Speltz)
116
117  Internals
118    - Changed error message when setting up has_a with incorrect column
119       (Drew Taylor)
120
121  Documentation
122    - Fixed docs for after_update trigger and update (Kingsley Kerce)
123
1243.0.2 Sep 11 2005
125
126  Code
127    - No changes
128
129  Pre-Reqs
130    - Fixed code to explicitly need 5.6 (rather than just Makefile)
131    - Require 'version' for new 3 part versions
132
133  Tests
134    - Fixed t/01 to check mutator_name better
135    - Added NOT NULL to Primary in t/Blurb to avoid 0.95 regression
136    - Added new Test base class Class::DBI::Test::SQLite
137    - Changed all remaining uses of eq_set() to is_deeply()
138
139  Documentation
140    - Documented $obj->id() in list context (William McKee)
141    - Documented cascading delete for might_have (Tom Hukins)
142    - Documented MCFK better (plus fixed lots of typos etc) (Tom Hukins)
143    - Documented DBIx::ContextualFetch better
144    - select_val better (Dave Howorth)
145    - Fixed misspelling of Perrin Harkins
146    - Fixed documentation for the year constraint (Andy Lester)
147    - Fixed set_sql documentation to explain when it creates a method
148    - Fixed new_music documentation (Carl Johnstone)
149    - Fixed docs for CD columns to show 'reldate' (Mark Thomas)
150    - Fixed lots of other tiny doc issues
151    - Fixed docs for Essential (defaults to Primary, rather than All)
152    - Fixed docs for what gets passed to triggers (Ryan Tate)
153
1543.0.1 Sep 11 2005
155
156    - Code is identical to 0.96
157    - New section added to documentation on Release Philosophy
158    - Replace eq_set with is_deeply in t/04 to work around Test::More bug
159
1603.0.0 UNRELEASED
161
162    - IDENTICAL to 0.96. Only difference is version renumbering.
163
1640.96 30 April 2004
165
166  New Functionality
167    - Maintain live object index so subsequent requests for same row return 
168      the same object (Perrin Harkins)
169    - connection() is now preferred over set_db()
170    - New relationship architecture (see Class::DBI::Relationship)
171    - meta_info now returns more information about relationships 
172    - search($column => undef) now does an ISNULL search (Bart Lateur,
173      Drew Wilson, William McKee)
174    - A slice of an iterator in scalar context now gives another
175      iterator (Thomas Klausner)
176    - Attribute methods can now take slices (Charles Bailey)
177    - pass $self to inflation/deflation methods, allowing (amongst other
178      things, cross-column processing in a custom method) (Charles Bailey)
179    - deflation now happens at distinct trigger points that happen after
180      normal before_create/update triggers (Dave Cash)
181    - Columns may now set their placeholders:
182        Foo->find_column('tdate')->placeholder("IF(1, CURDATE(), ?)");
183    - Columns know if they have been constrained
184
185  Documentation
186    - add note about needing a RootClass (and fix tests for this)
187    - Explain interaction of is_changed and auto-update (William McKee)
188    - Better examples for select_val and sql_single (Paul Makepeace)
189    - Add note about sprintf interpolation and wildcard searches in
190      home-grown queries (Christopher L. Everett)
191    - Mention the wiki
192
193  Bug Fixes
194    - Better error reporting from failed inflations [Tatsuhiko Miyagawa]
195    - You can now have a column named 'first' [Tatsuhiko Miyagawa]
196    - inflation and deflation handle edge cases better [Charles Bailey]
197    - search_ methods are only generated for SELECT calls
198    - add_constructor is now propery subclassable (Thomas Klausner)
199
200  Deprecations
201    - Class::DBI::Query is now deprecated. The SQL substitutions are a
202      much better approach.
203    - sort argument to has_many is now order_by to match search
204    - __hasa_rels and __hasa_list are deprecated in favour of meta_info
205
206  Other
207    - construct() is no longer a protected method. 
208    - skip t/17 on error. There's a bug here I can't find, or fix, yet.
209
2100.95 Fri Jan  9 2004
211
212  Pre-Requisites
213    - Now requires Perl 5.6 or greater
214
215  New Functionality
216    - constrain_column() adds simple per-column constraints
217    - has_many now attempts to work out the reference column by
218      examining the foreign class's has_a() declarations, making the 3rd
219      argument to has_many mostly obsolete.
220    - __TABLE(Other::Class)__ now interpolates the table from the other
221      class, allowing avoidance of hard-coding other table names.
222    - __ESSENTIAL(alias)__ now prepends the table alias supplied to the
223      start of each column name, for avoiding column name clashes.
224    - __JOIN(alias alias)__ now inserts the SQL to join the two tables.
225    - might_have now allows creating the remote object through a simple
226      set of the accessor. [David Jack Olrik]
227    - Iterators can now be reset() [Tatsuhiko Miyagawa]
228
229  Documentation
230    - count_all, maximum_value_of and minimum_value_of are now
231      documented (along with how to implement similar methods)
232
233  Bug Fixes
234    - Allow retrieve() to take unnormalised columns, as with search [Connie]
235    - Handle stringification before Primary Key(s) are filled 
236    - search() can take an overridden accessor name as a key
237    - MultiColumn primary keys working better with ColumnGrouper [Perrin
238      Harkins, Paul Makepeace, and Charles Bailey]
239
240  Deprecations
241    - _single_value_select and _single_row_select deprecated in favour
242      of new select_val and select_row methods in Ima::DBI
243
244  Other
245    - Class::Accessor can no longer be used directly to add other attributes.
246      TEMP columns should be used for this.
247    - Ensure all croaks internally go through _croak() [Richard Piacentini]
248    - deleted objects now blessed into Class::DBI::Object::Has::Been::Deleted
249    - Lots of doc patches [Jesse Sheidlower, Paul Makepeace]
250    - All internal attribute accesses now go through helper methods,
251      as first step to changing how all this works.
252    - set_sql now passes all arguments up to Ima::DBI (so you can turn
253      off caching if required) [gfalck]
254    - We now warn about column names clashing with any inherited methods,
255      not just ones defined in Class::DBI itself [Dan Thill]
256    - Silence some test warnings reported by Paul Makepeace
257
2580.94  Wed Aug 27 2003
259
260  New Functionality
261    - allow has_a() columns to hold NULL values (Dominic Mitchell)
262    - cascading deletions can be turned off by passing argument to
263      has_many setup: no_cascade_delete => 1 (undocumented/untested)
264      [now implemented as a trigger]
265    - classes and objects can be marked as read_only (experimental and
266      undocumented, although tested)
267
268  Documentation
269    - no longer refer to Class::DBI::Join, which is dead
270    - warn about inflating a primary key using has_a
271    - rewrite of docs on transactions
272    - numerous small tweaks from Jay Strauss, Alexander Karelas and Brad
273      Bowman
274    - redocument dbi_commit and dbi_rollback that have vanished...
275
276  Bug Fixes
277    - make sequences work again (Dominic Mitchell) [now with tests!]
278    - interpolation of __TABLE__ etc now happens globally, rather than
279      only once [Corion]
280    - might_have now properly does a cascading delete
281    - Fixed problem where we can't update an object which might_have a
282      relationship, but doesn't.
283    - might_have's tentative, but broken, support for MCPK has been
284      removed.
285    - Increase Class::Accessor pre-requisite to 0.18 to fix strange bug
286      reported by Casey West.
287    - Make sure we don't alter the hashref being passed to create()
288    - The after_create() trigger is now called after the object is
289      emptied, and will thus be able to see objects in has_a columns
290      (by reloading from the DB) [If you were using this
291      trigger to alter the columns to be cleaned out this
292      can (for now) be done using the 'create' trigger,
293      although that's deprecated. Let me know if you really
294      need this ability.
295
296  Deprecations
297    - move() is deprecated. The concept is broken and will be removed
298      unless someone convinces me to keep it.
299    - normalize* are no longer necessary, due to the new Column objects,
300      which store their normalized and unnormalize form. (Calling these
301      will have no effect, other than a warning).
302    - has_column deprecated in favour of find_column
303
304  Other
305    - init() now takes hash to instantiate with (Tim Bunce)
306    - Rewrite of _require_class, with better short-circuiting and error
307      message reporting (Tim Bunce)
308    - new Class::DBI::Column to represent a column. Some functionality
309      moved from ColumnGrouper to here.
310    - mutator and accessor name overrides now stored in column, and not
311      looked up every time.
312    - attempt to trap and propogate all DBI failures 
313
3140.93  Wed Jul 2 2003
315
316  New Functionality
317    - Multi-column primary keys are now supported. [with huge thanks to Tim
318      Bunce]
319    - New syntax for inbuilt SQL
320    - classes can control stringification via as_string() and
321      stringify_column().
322    - set_sql automatically translates __TABLE__, __ESSENTIAL__, and
323      __IDENTIFIER__
324
325  Performance Improvements
326    - use Storable's dclone() rather than Data::Dumper's deepcopy
327
328  Documentation
329    - document the order_by option to search() [Drew Taylor]
330    - fix the documentation of the DBI connect string [Phil Crow]
331    - document working with pre_create triggers
332    - add a note on dynamically generating a database connection
333    - avoid using (shift => $val) due to quoting issues! [Simon Wilcox]
334    - refer to Class::DBI::Oracle for sequences [Jay Strauss]
335    - give better explanation for construct() [Jay Strauss]
336    - document get/set with multiple arguments [Jay Strauss]
337    - more detailed description of arguments to has_a()
338
339  Bug Fixes
340    - Bug with setting driver defaults [Jay Strauss + Schwern]
341    - Bug where selecting a column that was only in 'All' group also
342      attempted to fetch any TEMP columns. [Dominic Mitchell]
343
344  Removal of Functionality
345    - Undocumented ordered_search method has been removed in favour of
346      order_by option to search.
347    - Undocumented make_filter method removed in favour of add_constructor
348    - add_constructor no longer does (undocumented) %s substitutions
349    - (undocumented) single_value_select() method no longer takes raw
350      SQL fragments.
351
3520.92 Sat Apr 12 2003
353
354  New Functionality
355    - classes named after reserved SQL words can now supply a
356      table_alias either directly, or as a second argument to table().
357
358  Deprecations
359    - hasa() now calls has_a() with a warning. It will disappear
360      completely in a forthcoming release.
361    - issue warning on use of old hasa_list
362
363  Bug Fixes
364    - class data properly propagates (i.e. two classes can once again
365      have has_a relationships of the same name) [Miyagawa + Marty]
366    - only deflate columns that are changing on update.
367
368  Other
369    - croak if update() does not change exactly one row [Tim Bunce].
370      (Not yet live)
371    - The Essential column group now defaults to Primary rather than
372      All. 
373
3740.91 Sat Mar  8 2003
375
376  New Functionality
377    - has_many can now take an extra set of search parameters at execution
378    - has_many mapping method can now be a list
379    - Class->delete(@search_args) deletes all results matching search
380      criteria.  
381    - search can take a final hash of arguments. Currently the only one
382      honoured is 'order_by'
383    - searches deflate objects passed as search values as with has_a()
384    - iterators can be slice()d
385    - classes can provide their own iterators 
386    - columns in the TEMP column group will be non-persistent
387    - set_sql automatically sets up a search_ method for that SQL
388    - constraints can cross-check using new syntax, and per_column
389      trigger points.
390    - the after_update trigger can modify the list of changed columns
391      to change refresh behaviour 
392    - Can delete via the iterator: $cd->artists->delete_all
393    - New Class::DBI::Query module for dynamically constructing queries
394    - Standardised exception handling (thanks to Tim Bunce)
395      - on_failed_create no longer needed
396    - overloading of objects
397    - autoincrements work with SQLite
398
399  Deprecations
400    - commit() and autocommit() are now update() and autoupdate()
401    - rollback() is now discard_changes()
402    - hasa() now warns if used
403    - trigger points create() and delete() warn when called
404    - trigger point on_setting no longer exists
405
406  Optimisation
407    - has_a lazy inflates other Class::DBI instances 
408    - roll our own require rather than depending on UNIVERSAL::require
409     (thanks to Tim Bunce)
410    - Don't add __Changed = {} to every object on creation,
411      just autovivify it on demand. (Tim)
412    - Avoid calling $self->primary_column in a loop in create() (Tim)
413    - Use fetchrow_arrayref instead of fetchrow_array. (Tim)
414    - Return from _deflated_column earlier if value is not a ref. (Tim)
415    - Use $sth->{NAME_lc} instead of $sth->{NAME}. (Tim)
416    - Optmize _normalized and normalize. (Tim)
417    - optimise various calls to columns() (Tim)
418    - don't reflesh after an update - defer for lazy loading
419    - Iterator no longer inherits from Class::DBI itself.
420
421  Bug Fixes
422    - has_many maps now work as iterators
423    - columns only report as being in group 'All' if they're in no
424      other columns (so lazy loading works in those cases!)
425    - calling create with a primary key of zero no longer attempts to 
426      use auto_increment (Tim Bunce)
427
428  Other
429    - reference Class::DBI::AbstractSearch
430    - retrieve_from_sql removes any leading 'WHERE' 
431    - inflate handles overloading better (thanks to Tim Bunce)
432    - Avoid boolean test on object, use defined instead.
433    - Tweak create() to prepare for possible caching of colmap info.
434    - better documentation on transactions
435    - test suite now uses DBD::SQLite instead of DBD::CSV
436    - consolidated some test scripts
437
4380.90 Wed Nov 27 GMT 2002
439    - hasa and associated_class merged (and deprecated) into has_a
440      - has_many therefore no longer sets up reciprocal hasa
441    - allow search() and search_like() to take multiple columns
442    - added find_or_create()
443    - add_constructor() is now preferred to make_filter()
444    - added retrieve_from_sql() for inline SQL
445    - documented running arbitrary SQL and using sth_to_objects to 
446      convert these to objects. (Making sth_to_objects public too)
447    - has_many can now call a mapping method on the results
448      (for simpler many-to-many joins, for example)
449    - has_many adds an 'add_to_<whatevers>' method 
450      e.g.  CD->has_many(tracks => Track);
451      now adds not just 'tracks' method, but also 'add_to_tracks'.
452      (thanks to Michael Styer)
453    - try to guess table name if none given
454    - speed up iterators (thanks to Tom Renfro)
455    - added (undocumented) data_type method
456      (thanks to Tatsuhiko Miyagawa)
457    - renamed column_type() to associated_class()
458    - added references to Class::DBI::SQLite, Class::DBI::Pg,
459      and Class::Join
460    - before_create trigger can now modify object itself
461    - uses UNIVERSAL::require instead of rolling our own
462    - marked primary_key(), is_column(), add_hook() as deprecated
463    - changed _ids_to_objects to receieve listref, rather than list
464      to cope with weird bug in 5.005_03 (thanks to Tatsuhiko Miyagawa)
465    - warn if column name clashes with built-in method
466    - third argument to has_many is now optional, defaulting to our
467      'class-name' (undocumented)
468    - provide normalised method names if appropriate (i.e. a Film column
469      will give us methods $obj->Film and $obj->film). This previously
470      happened inconsistently.
471    - split most of the column related code to Class::DBI::Columns
472    - remove dependency on Class::Fields
473    - reference the new Class::DBI mailing lists
474    - Give better errors if no database connection set up 
475      (thanks to Simon Cozens)
476    - A failed create now calls $class->on_failed_create, which by
477      default dies, but can be made to do whatever you like. 
478
4790.89 Mon Jun 24 2002
480    - allow has_many to not have a relationship 
481      (Thanks to Brian Parker)
482    - renamed (undocumented) min() and max() to 
483      minimum_value_of() and maximum_value_of()
484    - croak() and carp() deprecated in favour of _croak() and _carp()
485    - primary() and essential() deprecated in favour of 
486      primary_key() and _essential()/columns(essential);
487    - normalize_one() deprecated in favour of _normalize_one
488    - If a 'might-have' link points to nothing, don't give a 'Can't call
489      method' error
490    - better reporting on errors from create etc.
491    - better reporting when you incorrectly set through hasa()
492    - handle primary/foreign key value of zero better
493      (reported by Jim O'Brien)
494    - added (undocumented) 'column_type' based on ideas from
495      Matthew Simon Cavalletto and Tatsuhiko Miyagawa.
496    - brought delete triggers in line with documentation
497      (reported by Barry Hoggard, fixed by Tatsuhiko Miyagawa)
498
4990.88 Beltane 2000
500    - fix for hasa() and create() with modified accessor/mutator names
501      (Thanks to Schwern)
502
5030.87 Fri Mar 29 2002
504    * added might_have method
505    - better MySQL autoincrement code (fixes occassional problems
506       under mod_perl) [Thanks to Tatsuhiko Miyagawa]
507    - fixed a test that was failing on 5.005 (but not 5.6.1) due to weird 
508      interaction between overloaded iterator and Test::More's ok() 
509      prototype  [Thanks to Tatsuhiko Miyagawa]
510
5110.86 Fri Mar  8 GMT 2002
512    * removed support for pseudo-hashes
513    * hasa_list is now has_many 
514      (although has_many still exists for backwards compatability)
515    + has_many auto-generates reciprocal hasa decalaration
516       (unless called as hasa_list, or with { nohasa => 1 })
517    * searches now return iterators when used in scalar context
518    - hooks are now called 'triggers' (using Class::Trigger)
519    * new trigger for SELECT
520    * added basic constraints
521    + added support for filters on the same column
522      (%s >= ? OR %s <= ?) 
523    + added 'between' filter which provides this
524    - deal better with the case where the only column group is 'All'
525    - much internal twiddly stuff
526
5270.36  Wed Nov 28 2001
528    + tests no loner die horribly if you don't have MySQL installed
529    - minor tweaks to some error messages
530    - bugfixes for problems with auto-deleting objects
531    - bugfix for mis-normalized accessor warning
532       (thanks to Schwern)
533
5340.35  Sun Oct  7 2001
535    + added hooks for create, update and delete
536    - split commit() for easier subclassing
537
5380.34  Sat Oct  6 2001
539    - Don't die if a value is a reference. (Ima::DBI does this for us,
540       and better in case of overloaded objects)
541    - fix minor problem with mutual hasa / hasa_list referencing
542    - better diagnostics if hasa_list is miscalled
543
5440.33  Sat Sep 15 2001
545    + Added create_filter(), and with it retrieve_all()
546    + added docs on how to set-up many-to-many relationships
547    + _cascade delete now split out to allow overriding
548    + copy() and move() can now take multiple arguments to change
549       (thanks to Jonathan Swartz)
550
5510.32  Sun Sep  9 2001
552    + delete() now removes any foreign elements, to avoid orphans
553
5540.31  Sun Sep  9 2001
555    + split out _column_placeholder (thanks to Jonathan Swartz)
556    + added hasa() checks for orphaned rows
557
5580.29  Wed Sep  5 10:24:54 BST 2001
559    + split docs into Class::DBI::Tutorial
560    + renamed is_column to has_column (is_column still provided as alias)
561    + added accessor_name and mutator_name form template methods
562    - _load_class didn't work. Now fixed.
563    - _next_in_sequence was broken, and would warn even if it wasn't.
564    - better diagnostics when you call retrieve incorrectly
565
5660.28  Wed Aug 29 20:02:28 BST 2001
567    + Tony Bowden took over maintenance
568    * Added hasa_list
569    - Fixed bug with inherited columns (reported by Boris Mouzykantskii)
570    - move() and copy() were broken with auto_increments. Now fixed.
571    - set() did bad things if you'd set up new fields with
572      mk_accessors (reported by Boris Mouzykantskii). Now fixed.
573    - Better errors when calling create() incorrectly
574    - Split tests into distinct files (DBD::CSV now required)
575    - General internal tidying
576
5770.27  Mon Apr 23 09:04:51 BST 2001
578    * Class::DBI->new() deprecated in favor of create()
579    - Fixed the 'Primary before All' bug reported by Tony Bowden
580
5810.26  Mon Apr  9 14:32:17 BST 2001
582    - Class->columns('All', @cols) now assumes the first column to be
583      your primary.
584    - Class->columns('Essential', @cols) now automatically includes
585      the primary column.
586    * move() was broken.  Works and tested.
587    - Updated our base requirement to get at its bugfix
588    - Updated our Ima::DBI requirement to get at commit() and rollback()
589    * Documented construct()
590    * Added docs about transactions
591    * Added dbi_commit() and dbi_rollback()
592    - Added docs about Class::DBI and mod_perl
593
5940.25  Wed Jan 10 01:54:27 EST 2001
595    - The new ID is now optional for copy()
596    * Added move() to move objects between classes/databases.
597    - Updated PG's default attributes.
598    - Made the way classes are loaded with hasa() safer
599
6000.24  Thu Oct  5 19:07:21 EDT 2000      *UNRELEASED*
601    - Fixed some $@ naughtiness.  Errors should propigate properly.
602    * Added default database attributes for Pg, MySQL, Oracle, DBD::CSV and
603      DBD::RAM.  Class::DBI should work out of the box with them now.
604
6050.23  Tue Sep 12 00:33:38 EDT 2000
606    - rollback() needed to normalize its data (thanks to Greg Bartlett)
607
6080.22  Sun Sep 10 05:36:51 GMT 2000      *UNRELEASED*
609    - Added a warning if the primary column is not in the essential group
610
6110.21  Sun Sep 10 01:03:01 EDT 2000      *UNRELEASED*
612    - Now requiring Ima::DBI 0.24
613    - sequence() fixed, tested and working
614    - Now working with DBD::Pg and PostgreSQL 7.0
615
6160.20  Sun Sep 10 00:29:15 EDT 2000      *UNRELEASED*
617    - *bug_fix* is_column() died if false.
618
6190.19  Fri Sep  8 15:07:49 EDT 2000
620    - Forgot to update the Changes file.
621
6220.18  Fri Sep  9 18:51:45 GMT 2000
623    * new() now accepts Class::DBI objects as values
624    - hasa() is now inherited properly
625    - normalize() will now take an empty array
626
6270.17  Mon Sep  4 02:46:25 GMT 2000      *UNRELEASED*
628    - Docs forgot to turn AutoCommit on in MySQL examples
629    - Documented the behavior of new() and AUTO_INCREMENT
630    - Added support for sequences.  *Untested*
631    - *bug fix* columns() can now be added after the class has been used
632    - *bug fix* Columns added by hasa() had a chance of overwriting each 
633      other.
634
6350.16  Sun Sep  3 17:49:08 GMT 2000      *UNRELEASED*
636    * hasa() will now attempt to require the foreign class for you
637    * hasa() will setup the necessary columns for you.
638
6390.15  Sun Jul 16 23:14:20 PDT 2000
640    - Fixed minor bug in DESTROY message.
641    * Added hasa() object relationships.
642
6430.14  Sun Jul  9 05:25:53 EDT 2000
644    - Pseudohashes as objects now work and basicly tested
645    - The rollback() mechanism changed to use less memory.
646    - Expanded the TODO list
647
6480.13  Wed May 24 02:45:43 EDT 2000
649    - Accessors were not being generated properly in certain cases.
650
6510.12  Tue May 23 ish...                 * Unreleased*
6520.11
653    - Aborted attempts to fix accessor misgeneration.
654
6550.10  Thu May 18 00:59:34 EDT 2000
656    - new() was not working with objects which autogenerated primary keys
657
6580.09  Tue May  2 00:42:06 EDT 2000
659    - README, INSTALL and Makefile.PL have been updated
660
6610.08  Mon May  1 20:27:13 EDT 2000
662    - Documented lazy column population.
663
6640.07  Mon May  1 02:18:20 EDT 2000      * Unreleased *
665    * Added lazy population of columns.
666    - columns('All') can now be autogenerated.
667
6680.06  Mon May  1 00:56:52 EDT 2000      * Unreleased *
669    * **API CHANGE** make_sql() is gone in favor of set_sql()
670    * normalization has been added in all the right places.
671    - retreive now handles autoincremented primary keys.
672    - columns() internally normalizes column names.
673
6740.05  Sat Apr 15 01:48:25 EDT 2000
675    * MAJOR BUG - simple subclasses of subclasses of Class::DBI would not 
676      work.  This has been fixed.
677    * Autoloader eliminated.
678    * API CHANGE - columns must now be explictly declared, the class's
679      public data members are not used.  That was silly.
680    * rollback() now works.
681    - is_changed() now returns a list of changed columns
682
6830.03  Mon Dec 20 10:04:23 EST 1999
684    * MAJOR BUG - commit() was not committing!!!
685    * added is_changed()
686    - columns('Essential') now autogenerated from columns('All') if not 
687      already present.
688    - columns('Essential') is now prefered for most SELECT statements 
689      instead of just columns().
690
6910.02
692    * First working version
693    * First version sent to CPAN
694