New Features
------------

* Compound SQL statement (i.e. UNION, EXCEPT, and INTERSECT) support
  is much improved.  Chaining compound statement calls now longer
  wipes out previous compound statements calls of the same type.
  Also, the ordering of the compound statements is no longer fixed
  per adapter, it now reflects the order they were called on the
  object.  For example, the following now work as expected:

    ds1.union(ds2).union(ds3)
    ds1.except(ds2).except(ds3)
    ds1.intersect(ds2).intersect(ds3)
    ds1.union(ds2).except(ds3)
    ds1.except(ds2).intersect(ds3)
    ds1.intersect(ds2).union(ds3)

* Exception classes ValidationFailure and BeforeHookFailure were
  added so it is eaiser to catch a failed validation.  These are
  both subclasses of Sequel::Error, so there shouldn't be any
  backwards compatibility issues.  Error messages are also improved,
  as the ValidationFailure message is a string containing all
  validation failures and the BeforeHookFailure message contains
  which hook type caused the failure (i.e. before_save,
  before_create, or before_validate).

* The sequel command line tool now has a -L option to load
  all files in the given directory.  This is mainly useful for
  loading a directory of model files. The files are loaded
  after the database connection is set up.

* Methods to create and drop database functions, triggers, and
  procedural languages were added to the PostgreSQL adapter.

Other Improvements
------------------

* Database#schema now raises an error if you pass a table that
  doesn't exist.  Before, some adapters would return an empty schema.
  The bigger problem with this is that it made table_exists? return
  the wrong value, since it looks at the Database's schema.
  Generally, this bug would show up in the following code:

    class Blah < Sequel::Model
    end
    Blah.table_exists? # True even if blahs is not a table

* AlterTableGenerator#add_foreign_key now works for MySQL.

* Error messages in model association methods that add/remove an
  associated object are now more descriptive.

* Dataset#destroy for model datasets now works with databases that
  can't handle nested queries.  However, it now loads all model
  objects being destroyed before attempting to destroy any of them.

* Dataset#count now works correctly for compound SQL statements
  (i.e. UNION, EXCEPT, and INTERSECT).

* BigDecimal NaN and (+/-)Infinity values are now literalized
  correctly.  Database support for this is hit or miss.  Sqlite will
  work correctly, PostgreSQL raises an error if you try to store an
  infinite value in a numeric column (though it works for float
  columns), and MySQL converts all three to 0.

* The SQLite adapter no longer loses primary key information when
  dropping columns.

* The SQLite adapter now supports dropping indicies.

* A bug in the MSSQL adapter's literalization of LiteralStrings has
  been fixed.

* The literalization of blobs on PostgreSQL (bytea columns) has been
  fixed.

* Sequel now raises an error if you attempt to subclass Sequel::Model
  before setting up a database connection.

* The native postgresql adapter has been changed to only log client
  messages of level WARNING by default.  You can modify this via:

    Sequel::Postgres.client_min_messages = nil # Use Server Default
    Sequel::Postgres.client_min_messages = :notice # Use NOTICE level

* Model#inspect now calls Model#inspect_values for easier
  overloading.

Backwards Compatibilty
----------------------

* The API to Model#save_failure (a private method) was changed to
  remove the second argument.

* SQLite columns with type numeric, decimal, or money are now
  returned as BigDecimal values.  Before, they were probably returned
  as strings.
