0.47     2015-07-12

- Changes in Fey broke has_many() relationships, causing many test failures.

0.46   2013-11-28

- Removed used of deprecated Class::MOP::load_class().

0.45   2013-02-22

- Fix test failure from hash randomization changes in 5.17.x Perl.

0.44   2012-05-18

- Work around breakage introduced in MooseX::Types 0.32.

0.43   2011-02-26

- This release provides forward compatibility with Moose 1.99+. It will still
  work with Moose 1.23 as well.

0.42   2011-02-26

- The most recent release of MooseX::StrictConstructor did not work with this
  module. This has been fixed, and Fey::ORM now requires the latest

0.41   2011-02-25

- A small internal refactoring on Fey::Object::Iterator::FromSelect to make it
  easier to override some of its behavior.

0.40   2011-01-25

- A stray extends statement left in from a refactoring in 0.39 caused test
  failures unless a previous version of Fey::ORM was already installed.

0.39   2011-01-25

- When you explicitly provide a Fey::FK object for a has_one or has_many
  relationship, Fey::ORM will now invert the direction of that relationship if
  needed to generate the proper SQL. In the past, this was done as needed if
  the Fey::FK _wasn't_ explicitly provided. Now it is done regardless.

0.38   2011-01-07

- Allow the use of SQL queries as insert & update values.

0.37   2010-11-30

- The caching added in 0.34 had some subtle heisenbugs because it used object
  refaddrs as cache keys. Now we use Object::ID, which is slower but will not
  cause false positive cache hits.

0.36   2010-10-22

- Some packaging tweaks so that the Fey::ORM::Manual::Intro docs show up on

0.35   2010-10-05

- Changes to work with Moose 1.15.

0.34   2010-09-09

- Added caching for commonly used stringified SQL queries. This speeds up
  common operations like selecting a single object.

0.33   2010-06-04

- When loading an object's data from the dbms, Fey::ORM now always reloads the
  key. This should impose a minimal cost, and is important in some corner
  cases, like Postgres's citext column, which does a case-insensitive
  match. In that case, simply using the user-provided data can cause the
  object to end up with the wrong value for the column in question.

0.32   2010-03-06

- Added a new sugar function to Fey::ORM::Table - query(). This allows you to
  declare a method based on a select. This is preferable to an attribute in
  many cases, where you don't want to cache the return value of the SELECT in
  the object.

0.31   2010-02-12

- Fey::ORM::Table tried to load a module that no longer exists with the newer
  versions of MooseX::ClassAttribute.

0.30   2009-10-25

- The Fey::Object::Iterator::FromSelect class used to expect that the number
  of elements in the select object's select clause matched the number of items
  actually returned by the select in each row. However, if you used a Term to
  do a "SELECT *" this assumption was broken. The assumption meant that even
  providing an explicit attribute map in this case did not work.

- As a corrolary, Fey::Object::Iterator::FromSelect used to attempt to merge
  an explicit attribute map with what was implied by any columns in the select
  object's select clause. This was never actually documented, and has been

  Now, providing an explicit map means you must provide a mapping for every
  select clause element you want to pass to an object.

- Added Fey::Object::Iterator::FromSelect->raw_row(). This method lets you get
  the raw data for a row after calling ->next(). This is handy if the select
  contained data that does not fit into a particular class.

0.29   2009-10-10

- Allow any classes to be passed to an Iterator's constructor. However, unless
  all the classes have a Table() method, you cannot get hashes back from the
  iterator (next_as_hash(), etc.).

0.28   2009-09-15

- When a Fey::ORM::Table using class's constructor does not return an object,
  the error message is no longer set in $@. Instead, you can call
  MyClass->ConstructorError() to get the error. The value of $@ is preserved
  in the constructor as whatever it was before the constructor was called.

- Added a $VERSION to every .pm file that matches Fey::ORM.

- Doc fixes - RT #48484 (Terrence Brannon) and #49595 (Guoying Qi)

0.27   2009-08-18

- Changed all code that checked for a Fey::SQL::Select object to instead check
  that the object does the Fey;:Role::SQL::ReturnsData role. This lets you
  pass a union to an object iterator, among other things.

0.26   2009-07-03

- Changes to work with the latest Moose (0.86).

0.25   2009-06-21

- Changes to work with the latest Moose (0.82).

0.24   2009-04-20

- Shut up a warning from the latest Moose that it will not inline a
  constructor for Fey::Object::Table.

0.23   2009-04-07

- Changes to work with the latest Moose (0.73_01+).

0.22   2009-03-23

- If a table consisted of _just_ its key, then trying to call new()
  for the associated class blew up, but they could be created via an
  iterator. Test case provided by Andrew Baumhauer.

0.21   2009-02-25

* This release contains several backwards incompatible changes.

* Fey::Object::Iterator has been renamed to
  Fey::Object::Iterator::FromSelect. Fey::Object::Iterator::Caching is
  now has Fey::Object::Iterator::FromSelect::Caching. This was done to
  allow for a new class, Fey::Object::Iterator::FromArray. There is
  now a Fey::ORM::Role::Iterator role which all of these classes
  do. Based on a patch from Bryan Deeney and Will Weaver.

* The iterator methods all and all_as_hashes now really return _all_
  of the data, which means they will reset the iterator if needed.

- Added remaining and remaining_as_hashes methods to iterators. These
  do what all and all_as_hashes did previously. Thanks 

- The transform feature now supports passing delegation for the
  inflated object. See Fey::ORM::Table for details.

0.20   2009-02-06

- Use MooseX::Params::Validate instead of the no-longer-in-Fey

0.19   2009-01-18

- Added attribute metaclasses for attributes created based on columns
  (Fey::Meta::Attribute::FromColumn), and attributes based on an
  inflated column value (Fey::Meta::Attribute::FromInflator).

- When a column attribute with an inflator was written, the inflated
  value would stay the same, rather than reflecting the new raw value.

- Added Fey::ORM::Policy, which lets you set policies for column
  transforms and foreign key method naming.

0.18   2008-12-24

- The handling of caching iterators in 0.17 was still broken. It
  attempted to share the cached results between multiple objects as an
  optimization, but that ended up causing some very weird bugs. For
  now, we have a less efficient but correct version.

0.17   2008-12-24

- In previous release, a has_many method returned the same iterator
  each time it was called, which could cause confusing bugs. Now each
  call returns a new iterator. However, if the has_many relationship
  is cached, the new iterator will share a cache with any previously
  made iterator, preventing unnecessary trips to the DBMS.

0.16   2008-12-23

- A caching object iterator could cause an exception if you tried to
  call ->next() or ->all() on it after exhausting the underlying
  statement handle. This only happens with some drivers (DBD::Pg is
  one, DBD::SQLite is not). Reported by Edward Long.

0.15   2008-12-22

- There was a serious bug in 0.14 where all objects of a class shared
  the same iterator object for a given has_many relationship. Reported
  by Edward Long.

0.14   2008-12-15

- The Fey::Meta::Attribute::FromSelect class now stores the select and
  bind_params parameters it receives, for more introspectability.

- There are new metaclasses for introspection of has-one and has-many
  relationships. See Fey::Meta::HasOne and Fey::Meta::HasMany for
  details, as well as Fey::Meta::Class::Table.

0.13   2008-12-08

- Updated to work with Moose 0.63.

0.12   2008-11-07

* WARNING: This release contains a few backwards
  incompatibilities. See below for details.

* Removed Fey::Object::Table->_pk_vals().

- Added Fey::Object::Table->pk_values_hash() and ->pk_values_list().

* The parameters for constructing a Fey::Object::Iterator object have
  been changed quite a bit. This fixes a problem where an iterator
  could be iterating over a set of results that contained a column
  which matched an attribute in two different classes, but was only
  valid for one classes.

  For example, if you had a Contact.note and ContactHistory.note
  columns and your iterator was returning objects for both tables,
  then _one_ of the note columns would get passed to the constructor
  for _both_ tables.

  With the changes, Fey::Object::Iterator figures out which item in
  the returned row belongs to which class positionally, so if two
  columns have the same name, they are passed to the correct classes.

  You can also provide explicit mappings from an item in the result
  rows to a class's attribute, which is handy if you want to map the
  results of an arbitrary query to a set of classes. See the
  Fey::Object::Iterator docs for more details.

- Fey::Object::Table->insert_many() Would modify the hash references
  it received when a table had auto-incremented columns.

0.11   2008-09-20

- Fixes to work with Moose 0.58.

0.10   2008-09-07

- Moose 0.57 broke Fey::ORM somehow. Fixed for Moose 0.57.

0.09   2008-09-01

- Changes to work with the latest Moose and Fey.

0.08   2008-06-27

- Changes to the immutable bits to work with the latest Moose (0.51).

0.07   2008-06-22

- Cached has_one and has_many attributes now have a private clearer.

- Various internals changes so that the meta classes now have more
  attributes, rather than creating lots of class attributes in the
  classes which use Fey::ORM::{Table,Schema}.

- Added Fey::Meta::Attribute::FromSelect. This allows you to easily
  define an attribute's default based on a SELECT query.

0.06   2008-05-25

- Factored part of Fey::ORM::Table->_get_column_values into a separate
  method, _set_column_values_from_hashref, since this piece is
  something that subclasses may want to reuse.

- Added a horrible hack to make Postgres BYTEA columns work. Needs
  some serious refactoring. This may well disappear in a future

- Fixed to work with the most recent versions of Moose, which are now

0.05   2008-04-18   

- Fey::Object::Table called a method on Fey::Meta::Class::Table
  without loading it, which could cause problems in some cases.

- Moved exceptions to Fey::ORM::Exceptions so you can use them in your
  classes, notably the NoSuchRow exception.

- Made Fey::Object::Table and Fey::Object::Schema extend
  MooseX::Object::StrictConstructor rather than Moose::Object.

0.04   2008-03-06

- Add a private writers for accessors created via has_one() and
  has_many() - this still needs docs.

- Make sure that the schema class's RunInTransaction() method returns
  values of the sub it runs, respecting the caller's context.

- has_one() can now accept a "handles" parameter which work just as
  it does for any Moose attribute.

- has_one() also accepts a new "undef" parameter to allow you to
  explicitly say that the attribute can have an undef as its value.

0.03    2008-02-24

- Fix tests so that they skip without blowing up when DBD::SQLite is
  not installed.

- Fey::Object::Table would always issue a SELECT immediately after an
  INSERT. Now this will be delayed until it is needed. In some cases
  it will never be needed.

0.02    2008-02-21

- Renamed Fey::Object to Fey::Object::Table and added Fey::Object::Schema.

- Also created a Fey::Object::Schema->RunInTransaction() 

- Fey::Object::Schema lets you control caching for all table classes
  in a schema at once.

- Added support for arbitrary select statements being used with
  has_one() and has_many(). See Fey::ORM::Manual::Intro for some

- Fixed various bits of code to work properly when multiple schema
  classes exist.

0.01    2008-02-09

- First version, released on an unsuspecting world.