<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>c2198d0d296285caca2730cea990484c1a8436b2</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/9a8b5cfe4baa0bf8ba7cccbda4de44fe3c43903c</url>
    <id>9a8b5cfe4baa0bf8ba7cccbda4de44fe3c43903c</id>
    <committed-date>2009-12-01T08:14:41-08:00</committed-date>
    <authored-date>2009-12-01T08:14:41-08:00</authored-date>
    <message>Bump version to 3.7.0</message>
    <tree>32308be47a7f622bb52f2063151d8697a7d9d52d</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>bf06ca4d33a7a166a3d140f67414256ce8515be7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c2198d0d296285caca2730cea990484c1a8436b2</url>
    <id>c2198d0d296285caca2730cea990484c1a8436b2</id>
    <committed-date>2009-11-30T11:26:05-08:00</committed-date>
    <authored-date>2009-11-30T11:26:05-08:00</authored-date>
    <message>Add Dataset#sequence to the shared Oracle Adapter, for returning autogenerated primary key values on insert (Fixes #280)

Oracle is like PostgreSQL in that autogenerated primary key values
are handled by sequences.  Unlike Sequel's shared PostgreSQL adapter,
Sequel's shared Oracle adapter doesn't handle automatically
determining the primary key value based on the table.  That may be
possible to fix, but without access to an Oracle database it would
be difficult.

Dataset#sequence provides a workaround for the problem, allowing the
manual specification of the sequence. Dataset#insert is then
overridden to check for an associated sequence, and return the most
recently inserted value upon insert.</message>
    <tree>fb16739148458da1cb9fab960a53a12644cd7b5b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>883aebd03e965c65e56b73320c33d5a340ca482f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/bf06ca4d33a7a166a3d140f67414256ce8515be7</url>
    <id>bf06ca4d33a7a166a3d140f67414256ce8515be7</id>
    <committed-date>2009-11-30T11:12:54-08:00</committed-date>
    <authored-date>2009-11-30T11:12:54-08:00</authored-date>
    <message>Fix code example in Sequel::MySQL module RDoc</message>
    <tree>674fc897972422ad70efa67b77a34304cc191d1b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>77c04837744a9b06e4261dc5bfd3971357020ca8</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/883aebd03e965c65e56b73320c33d5a340ca482f</url>
    <id>883aebd03e965c65e56b73320c33d5a340ca482f</id>
    <committed-date>2009-11-23T08:05:47-08:00</committed-date>
    <authored-date>2009-11-23T08:05:47-08:00</authored-date>
    <message>Fix deleting from joined datasets on MySQL

While here, no longer include joins in delete_from_sql by default.
Since all of the adapters that support modifying joins override it,
there's no reason to include it.

Also, remove the order on the joined dataset in the integration
test so that updating works on MySQL (which allows order clauses
in update statements, but not when multiple tables are used).

Note that MySQL allows deleting from multiple tables at once, but
Sequel doesn't support this.  Sequel assumes the first table in
FROM is the one being deleted from, and the rest are just for
selecting rows.  This is for consistency with how Sequel works on
PostgreSQL and MSSQL.</message>
    <tree>8a1634df79b5599c28c940e6900a3f364eb9b7e8</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>571e8e812c703a4d95891ecadaff7d8419aa3b0c</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/77c04837744a9b06e4261dc5bfd3971357020ca8</url>
    <id>77c04837744a9b06e4261dc5bfd3971357020ca8</id>
    <committed-date>2009-11-21T20:29:56-08:00</committed-date>
    <authored-date>2009-11-21T20:29:56-08:00</authored-date>
    <message>Switch release task to use gemcutter instead of rubyforge</message>
    <tree>050276b3ba2536938ff17543e894bebf266f9eb2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>a71d39d91b743870a317083d7b0c6a49bb72f3da</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/571e8e812c703a4d95891ecadaff7d8419aa3b0c</url>
    <id>571e8e812c703a4d95891ecadaff7d8419aa3b0c</id>
    <committed-date>2009-11-21T11:02:03-08:00</committed-date>
    <authored-date>2009-11-21T11:02:03-08:00</authored-date>
    <message>Improve spec for modifying joined datasets</message>
    <tree>44c69e9b4d5b540341a9d2eca2dff9cfc4257166</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>edbfbb78018f62a14400f562024ef03c389a2cd4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/a71d39d91b743870a317083d7b0c6a49bb72f3da</url>
    <id>a71d39d91b743870a317083d7b0c6a49bb72f3da</id>
    <committed-date>2009-11-20T21:16:17-08:00</committed-date>
    <authored-date>2009-11-20T21:16:17-08:00</authored-date>
    <message>Bring support for modifying joined datasets into Sequel proper, supported on MySQL and PostgreSQL

Previously, the MSSQL adapter had specific support for deleting and
updating joined datasets.  This commit brings support into standard
Sequel, and supports it on MySQL and PostgreSQL. Note that support
and semantics for updating joined datasets varies by database.

This also contains changes to the MSSQL support as well, which should
work better for datasets with multiple FROM tables.

To ease implementation, add a Dataset#joined_dataset? private method.</message>
    <tree>f14196cc5e8f70c9fd328fc2ba93d178f3a99a2b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>1670de32266726e9ef22629e97599788ffcb5388</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/edbfbb78018f62a14400f562024ef03c389a2cd4</url>
    <id>edbfbb78018f62a14400f562024ef03c389a2cd4</id>
    <committed-date>2009-11-20T19:20:35-08:00</committed-date>
    <authored-date>2009-11-20T19:20:35-08:00</authored-date>
    <message>No longer use native autoreconnection in the mysql adapter

Native autoreconnection has problems with prepared statements, where
a new native connection is used behind Sequel's back, so Sequel
thinks the prepared statement has already been defined on the
connection, when it fact it hasn't.  Any other changes that affect
the state of the connection will be lost when native autoreconnection
is used as well.

Sequel's connection pool already handles reconnection if it detects a
disconnection.  This commit also adds an additional exception message
to recognize as a disconnect.</message>
    <tree>7aceba43d54219e440ddfd71335800e05b5b40e2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ee3445294f5a83fdc02d5f03129eac839fdc74d2</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/1670de32266726e9ef22629e97599788ffcb5388</url>
    <id>1670de32266726e9ef22629e97599788ffcb5388</id>
    <committed-date>2009-11-20T16:48:48-08:00</committed-date>
    <authored-date>2009-11-20T16:48:48-08:00</authored-date>
    <message>Add NULL, NOTNULL, TRUE, SQLTRUE, FALSE, and SQLFALSE constants

The main advantage here for most people is NOTNULL.  This allows the
following to work:

  include Sequel::SQL::Constants
  DB[:table].where(:a=&gt;'1', :b=&gt;NOTNULL)

Before, the shortest way to do this was:

  DB[:table].where(:a=&gt;'1').exclude(:b=&gt;nil)

It may make the code more descriptive:

  DB[:table].where(:b=&gt;NULL)
  # compared to
  DB[:table].where(:b=&gt;nil)

This gives the option to use SQL terminology instead of ruby
terminology.

The other advantage of using the constants it that they handle
operators and methods like other Sequel::SQL objects:

  NULL &amp; SQLFALSE # BooleanExpression =&gt; &quot;(NULL AND FALSE)&quot;
  nil &amp; false     # false

  NULL + :a       # NumericExpression =&gt; &quot;(NULL + a)&quot;
  nil + :a        # raises NoMethodError
  NULL.sql_string + :a  # StringExpression =&gt; &quot;(NULL || a)&quot;
  NULL.as(:b)     # AliasedExpression =&gt; &quot;NULL AS b&quot;

For complex systems that want to represent SQL boolean objects
in ruby (where you don't know exactly how they'll be used), using
the constants is recommended.

In order not to be too verbose, including Sequel::SQL::Constants
is recommended.  It's not done by default, but you can still
reference the constants under the main Sequel module by default
(e.g. Sequel::NULL).</message>
    <tree>4b51284a6d42d7e7b958bdd993198b5f50a74777</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>917dc3cde17df89cf8efb132751a293d334c4459</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ee3445294f5a83fdc02d5f03129eac839fdc74d2</url>
    <id>ee3445294f5a83fdc02d5f03129eac839fdc74d2</id>
    <committed-date>2009-11-20T15:14:42-08:00</committed-date>
    <authored-date>2009-11-20T15:14:42-08:00</authored-date>
    <message>Add Dataset #select_map, #select_order_map, and #select_hash

select_map and select_order_map both return arrays of values for the
column specified.  The column can be specified either via an argument
or a block, similar to Dataset#get.  Both accept any valid objects as
arguments.

select_hash returns a hash.  It requires two symbol arguments, but
can handle implicit qualifiers or aliases in the symbols.

Neither of these methods offer any new functionality, they just cut
down on the number of required key strokes:

  select_map(:column)       # select(:column).map(:column)
  select_order_map(:column) # select(:column).order(:column).
                            #  map(:column)
  select_hash(:key_column, :value_column)
  # select(:key_column, :value_column).
  #  to_hash(:key_column, :value_column)

This makes it easier to get simple ruby arrays and hashes out of
datasets.

To implement select_hash, add private method Dataset#hash_key_symbol,
which attempts to guess the hash key symbol that will be used for
the given column symbol.

While here, remove Dataset::GET_ERROR_MSG and Dataset::MAP_ERROR_MSG
constants, replacing both with Dataset::ARG_BLOCK_ERROR_MSG.</message>
    <tree>86d4c64e6ff6d2ad9d869dfac3cbb9fab5201919</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f439fc1e6609836dff7191d4938f21968ef5f649</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/917dc3cde17df89cf8efb132751a293d334c4459</url>
    <id>917dc3cde17df89cf8efb132751a293d334c4459</id>
    <committed-date>2009-11-20T15:05:31-08:00</committed-date>
    <authored-date>2009-11-20T15:05:31-08:00</authored-date>
    <message>Add spec coverage of SQL::Expression#sql_literal</message>
    <tree>6d39e4d505e4d403a20be4f7c4989705de07236c</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>a52365582a3eeb679fc96336b42421d0c165554e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f439fc1e6609836dff7191d4938f21968ef5f649</url>
    <id>f439fc1e6609836dff7191d4938f21968ef5f649</id>
    <committed-date>2009-11-20T14:08:57-08:00</committed-date>
    <authored-date>2009-11-20T14:08:57-08:00</authored-date>
    <message>Make Dataset#group_and_count handle arguments other than Symbols

I think with a past change to handle implicit aliases in Symbol
arguments, it no longer worked with other objects, as it assumed
all arguments were Symbols.  That is not a valid assumption.

Introduce Dataset#unaliased_identifier private method that
handles both implicit aliases in symbols and AliasedExpression
objects, returning the unaliased argument, and have group_and_count
use it.</message>
    <tree>4eb1b791ac7f5e24671bf3e3c12f81e995d3d4a5</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ae8ed72eb03aa221565d2bd687f1213a8587b5bc</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/a52365582a3eeb679fc96336b42421d0c165554e</url>
    <id>a52365582a3eeb679fc96336b42421d0c165554e</id>
    <committed-date>2009-11-20T13:42:12-08:00</committed-date>
    <authored-date>2009-11-20T13:42:12-08:00</authored-date>
    <message>Add :only_if_modified option to validates_unique method in validation_helpers plugin

Using this option should speed up the common case where the unique
attribute is not modified for an existing record.  It is not on by
default, since the following is possible:

  album = Album[1]
  album.name # 'YJM'
  # Database is modified outside application:
  #   UPDATE albums SET name ='BB' WHERE id = 1
  #   UPDATE albums SET name = 'YJM' WHERE id = 2

  # Would violate uniqueness constraint by setting album 1's
  # name back to 'YJM'
  album.save</message>
    <tree>2830fc5711bb8bb5bf1fd988e04c8cb14329f10e</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>13d2a4a2a6a6bbc920d2b6289f60d8dd07311ef9</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ae8ed72eb03aa221565d2bd687f1213a8587b5bc</url>
    <id>ae8ed72eb03aa221565d2bd687f1213a8587b5bc</id>
    <committed-date>2009-11-19T10:40:31-08:00</committed-date>
    <authored-date>2009-11-19T10:40:31-08:00</authored-date>
    <message>Allow specifying dataset alias via :alias option when using union/intersect/except</message>
    <tree>200475b96e0f055b30af321f45637614a86c4f20</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f333791c675ff3ce5b5f7c251193bb82ad6d6dd2</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/13d2a4a2a6a6bbc920d2b6289f60d8dd07311ef9</url>
    <id>13d2a4a2a6a6bbc920d2b6289f60d8dd07311ef9</id>
    <committed-date>2009-11-17T18:10:18-08:00</committed-date>
    <authored-date>2009-11-17T18:02:00-08:00</authored-date>
    <message>In Model#save and destroy, don't rollback transactions you didn't initiate

This fixes the issue where an outer transaction is present, and
use_transactions is set for the model instance, and one of the
before hooks returns false.  With the recent commits, that would
rollback the outer transaction.

This required refactoring so that save_failure now always raises,
it doesn't check raise_on_save_failure.  Model#save and destroy
now use checked_save_failure, which ignore the error raised by
save_failure if raise_on_save_failure is true.

While refactoring, I decided it was no longer worth using
save_failure to handle validation failures, so the validation
failures don't call it.  before_validation hook callers only call
it if raise_on_save_failure is true, since they aren't wrapped
by check_save_failure.

This breaks backwards compatibility for callers of save_failure,
which is a private method.

While here, add checked_transaction private method that uses
transactions if necessary.</message>
    <tree>3c14d2c1a5a162c1da1b7421290d7debc62f04dc</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>b6323102a5d3b7424ae095f9311ac334438e18e3</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f333791c675ff3ce5b5f7c251193bb82ad6d6dd2</url>
    <id>f333791c675ff3ce5b5f7c251193bb82ad6d6dd2</id>
    <committed-date>2009-11-17T16:16:54-08:00</committed-date>
    <authored-date>2009-11-17T16:16:54-08:00</authored-date>
    <message>Fix and add some RDoc for the Sequel::MySQL module</message>
    <tree>8951666f7f924c7b0065c0c5cd98f8aeeca2c3cc</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c89a4e47a22d7741745b625d2f0488c9d3d8755e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/b6323102a5d3b7424ae095f9311ac334438e18e3</url>
    <id>b6323102a5d3b7424ae095f9311ac334438e18e3</id>
    <committed-date>2009-11-17T11:21:48-08:00</committed-date>
    <authored-date>2009-11-17T11:21:48-08:00</authored-date>
    <message>Some minor cleanup to previous commit

Instead of making use_transactions a special instance method, keep
it as previously defined and add a use_transaction? private method
that takes an option hash.  I think this is a bit cleaner.

Also, make a few minor changes to the specs and update the
CHANGELOG.</message>
    <tree>f3cff6a5b7cf33d3dccbaf9fbee271711cee3922</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>3d364a6b9186ca2fbac3b74e139679bb24e8eeb0</id>
      </parent>
    </parents>
    <author>
      <name>John Firebaugh</name>
      <email>john_firebaugh@bigfix.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c89a4e47a22d7741745b625d2f0488c9d3d8755e</url>
    <id>c89a4e47a22d7741745b625d2f0488c9d3d8755e</id>
    <committed-date>2009-11-17T10:41:30-08:00</committed-date>
    <authored-date>2009-11-17T09:28:11-08:00</authored-date>
    <message>Ensure transactions around save and destroy are rolled back when a before hook returns false

Three cases:

1) raise_on_save_failure true: Existing behavior was correct;
save_failure raises an exception that rolls back the transaction
and is reraised.
2) raise_on_save_failure false and use_transaction true: save_failure
raises Rollback, which the transaction code will take care of.
3) raise_on_save_failure false and use_transaction false: should just
return false, as raising Rollback and catching it makes it impossible
to differentiate between the a before hook returning false and a user
raising Rollback in a before hook (which they expect to bubble up to
their own transaction code).

While here, support the :transaction option in destroy</message>
    <tree>04fd6678457564dab50941ff207eb1a4fc9136a2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f917300a56f7cf592fbf0aaa5b2eb1b781550ab5</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/3d364a6b9186ca2fbac3b74e139679bb24e8eeb0</url>
    <id>3d364a6b9186ca2fbac3b74e139679bb24e8eeb0</id>
    <committed-date>2009-11-16T14:34:16-08:00</committed-date>
    <authored-date>2009-11-16T14:34:16-08:00</authored-date>
    <message>Remove use of spec.opts file, allowing Rake to run specs with rspec 1.2.9</message>
    <tree>df1fee2440ef340de8af06dc979d4754056c44e9</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5643d01adc71d519aff798b99173217c1f1d5c21</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f917300a56f7cf592fbf0aaa5b2eb1b781550ab5</url>
    <id>f917300a56f7cf592fbf0aaa5b2eb1b781550ab5</id>
    <committed-date>2009-11-16T09:13:52-08:00</committed-date>
    <authored-date>2009-11-16T09:13:52-08:00</authored-date>
    <message>On postgres, use bigserial type if :type=&gt;Bignum is given as an option to primary_key

This makes Sequel's shared postgres adapter act more similarly to the
other adapters (e.g. mysql), which allow you to specify :type=&gt;Bignum
as a primary_key option to create an autoincrementing 64 bit integer
primary key field.

This also changes the schema dumper to specify the :type option to
primary key if it isn't Integer.</message>
    <tree>37702dd577e2b15905f65eda36db34e366d8b311</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0a0567b8947d80a0a2c7d0dbd2a3089f1ffebfc2</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5643d01adc71d519aff798b99173217c1f1d5c21</url>
    <id>5643d01adc71d519aff798b99173217c1f1d5c21</id>
    <committed-date>2009-11-12T10:46:47-08:00</committed-date>
    <authored-date>2009-11-12T10:46:47-08:00</authored-date>
    <message>Small updates to virtual row doc file, based on patch from mwlang</message>
    <tree>b5efd1b42b85aca94754d54aa1f59d63b5728391</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>065b4b4c30b7ce6731fbf0f5197d435ca9d8c502</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0a0567b8947d80a0a2c7d0dbd2a3089f1ffebfc2</url>
    <id>0a0567b8947d80a0a2c7d0dbd2a3089f1ffebfc2</id>
    <committed-date>2009-11-10T07:14:59-08:00</committed-date>
    <authored-date>2009-11-10T07:14:59-08:00</authored-date>
    <message>Update CHANGELOG</message>
    <tree>9cf782ba09ad37a933b436357c92e2f4d209c547</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>8411e15c1445a5f310bf9c887ba7cd7b3ef47600</id>
      </parent>
    </parents>
    <author>
      <name>Cyril Rohr</name>
      <email>cyril.rohr@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/065b4b4c30b7ce6731fbf0f5197d435ca9d8c502</url>
    <id>065b4b4c30b7ce6731fbf0f5197d435ca9d8c502</id>
    <committed-date>2009-11-10T03:03:33-08:00</committed-date>
    <authored-date>2009-11-10T03:03:33-08:00</authored-date>
    <message>fix for correctly reading options defined under the [client] tag in the mysql configuration file</message>
    <tree>5ffeac0e730ececc51f0b03ffbc2eb1c488aa6d3</tree>
    <committer>
      <name>Cyril Rohr</name>
      <email>cyril.rohr@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2a5bc3eeceff421860367056674c86708587c0a8</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/8411e15c1445a5f310bf9c887ba7cd7b3ef47600</url>
    <id>8411e15c1445a5f310bf9c887ba7cd7b3ef47600</id>
    <committed-date>2009-11-02T10:19:10-08:00</committed-date>
    <authored-date>2009-11-02T10:19:10-08:00</authored-date>
    <message>Bump version to 3.6.0</message>
    <tree>6a396c94422ff7baa962556ede5f24aed8d31a5b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>fec5c0ad569f092a1e88c079cdab882eba679c84</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2a5bc3eeceff421860367056674c86708587c0a8</url>
    <id>2a5bc3eeceff421860367056674c86708587c0a8</id>
    <committed-date>2009-10-29T12:20:15-07:00</committed-date>
    <authored-date>2009-10-29T12:20:15-07:00</authored-date>
    <message>Make the MSSQL shared adapter correctly parse the column schema information for tables in the non-default database schema</message>
    <tree>05ea19910bf2d04bf7d19f49b201229bfa15730a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>9738b08e97d930a871f5c221039eb5ab12b01e0f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/fec5c0ad569f092a1e88c079cdab882eba679c84</url>
    <id>fec5c0ad569f092a1e88c079cdab882eba679c84</id>
    <committed-date>2009-10-29T09:23:13-07:00</committed-date>
    <authored-date>2009-10-29T09:23:13-07:00</authored-date>
    <message>Use save_changes instead of save when updating existing associated objects in the nested_attributes plugin

This should be significantly faster for the case where you are
displaying a complex form to the user, and they make no changes to
the existing associated records when they submit it.

This shouldn't have a negative effect on production code, unless
save_changes doesn't work correctly for the associated objects.
It may break test code that checks for specific SQL or columns in
the update statement.</message>
    <tree>1e7f26152fdb21e4e820109942f176ce103cfc06</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6f5e48ba33e2a8b9adec2158c6eb51f4fb4ec03e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/9738b08e97d930a871f5c221039eb5ab12b01e0f</url>
    <id>9738b08e97d930a871f5c221039eb5ab12b01e0f</id>
    <committed-date>2009-10-29T09:20:14-07:00</committed-date>
    <authored-date>2009-10-29T09:20:14-07:00</authored-date>
    <message>Allow Model#save_changes to accept an option hash that is passed to save, so you can save changes without validating</message>
    <tree>7b36f4d27f7ad6caf24a94d1eea9ea83b85cc6fa</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>14e8fd245d965e325294aaf985f57ff1bd088b86</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6f5e48ba33e2a8b9adec2158c6eb51f4fb4ec03e</url>
    <id>6f5e48ba33e2a8b9adec2158c6eb51f4fb4ec03e</id>
    <committed-date>2009-10-28T16:40:49-07:00</committed-date>
    <authored-date>2009-10-28T16:40:49-07:00</authored-date>
    <message>Add sequel_validation_helpers_block plugin to plugins page</message>
    <tree>bbd8d253a492f24f2b790a89a140b72398423442</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>b77fdab31d088d20d2885065915532013ff28ba6</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/14e8fd245d965e325294aaf985f57ff1bd088b86</url>
    <id>14e8fd245d965e325294aaf985f57ff1bd088b86</id>
    <committed-date>2009-10-28T15:36:59-07:00</committed-date>
    <authored-date>2009-10-28T15:36:59-07:00</authored-date>
    <message>Make nested_attributes plugin add newly created objects to cached association array immediately

The reasoning behind this is that if this isn't done, the current
object has no way to access the nested attribute records until
after the save.

The general use case for nested_attributes is a web form that
handles dependent records.  Without any access to the nested
records, it is very difficult to handle validation failures
and display nice error messages to the user if dependent records
are not valid.

This approach adds the newly created records to the cached array,
so if validation fails, you can just iterate over the cached array,
and it will have both previously existing and new records in it.

This change does not affect many_to_one associations, since they
don't have a cached association array, and setting the object
in the cached association would probably cause issues.

This also doesn't affect updating existing records, since those
are already in the array.</message>
    <tree>a8a749b3bd34b204427909207a8a94f2e99e5de9</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>28480f9d03773b6ee8f49c69753ee4584b53598b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/b77fdab31d088d20d2885065915532013ff28ba6</url>
    <id>b77fdab31d088d20d2885065915532013ff28ba6</id>
    <committed-date>2009-10-28T15:04:23-07:00</committed-date>
    <authored-date>2009-10-28T14:24:31-07:00</authored-date>
    <message>Allow easier overriding of default options used in the validation_helpers plugin

This breaks backwards compatibility if you were relying on the
change made on October 20 to set the default validation error
messages.  This generalizes support for overriding any of the
default options.  As before, you can override it on a global level:

  Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:format].
    merge!(:message=&gt;&quot;incorrect format&quot;, :allow_missing=&gt;true)

You can also override it on a per class basis via:

  class Album &lt; Sequel::Model
    plugin :validation_helpers
    DEFAULT_VALIDATION_OPTIONS = {
      :format=&gt;{:message=&gt;&quot;incorrect format&quot;, :allow_missing=&gt;true}}

    private

    def default_validation_helpers_options(type)
      super.merge(DEFAULT_VALIDATION_OPTIONS[type] || {})
    end
  end

This removes the MESSAGE_PROCS constant from the ValidationHelpers
module, and removes the private instance method
default_validation_error_message_proc.  It changes the API for
validation_error_message and adds the
default_validation_helpers_options and
validatable_attributes_for_type private instance methods.

I chose not to change the validatable_attributes API, even though
it could be simplified now, because while the method is private,
I expect there may be consumers other than the default validations.</message>
    <tree>a1fd1ad236ab53f00e0bee8e2dd98ae52bf43877</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
</commits>
