<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>360e602c5b6fc7f1fcfab73982323b4b6e9193d1</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/233af21b248e819265c8eb5e754d70c0954ec1ad</url>
    <id>233af21b248e819265c8eb5e754d70c0954ec1ad</id>
    <committed-date>2008-09-03T11:58:21-07:00</committed-date>
    <authored-date>2008-09-03T11:58:21-07:00</authored-date>
    <message>Bump version to 2.5.0</message>
    <tree>21bfe3cd2763c655a0bc4f417f85f68a77902bf2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ec6619ef704e0097a183e825e3c2ed2c04a1cdb1</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/360e602c5b6fc7f1fcfab73982323b4b6e9193d1</url>
    <id>360e602c5b6fc7f1fcfab73982323b4b6e9193d1</id>
    <committed-date>2008-09-02T12:24:39-07:00</committed-date>
    <authored-date>2008-09-02T12:24:39-07:00</authored-date>
    <message>Add set_defaults! and set_overrides! Dataset mutation methods</message>
    <tree>e18099a90cf781b2e1d2c6eda63bfaf7510e16df</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>7350715293092a04645376b2d9e82a382e5c5cb0</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ec6619ef704e0097a183e825e3c2ed2c04a1cdb1</url>
    <id>ec6619ef704e0097a183e825e3c2ed2c04a1cdb1</id>
    <committed-date>2008-08-28T14:03:23-07:00</committed-date>
    <authored-date>2008-08-28T14:03:23-07:00</authored-date>
    <message>Add Dataset #set_defaults and #set_overrides, used for scoping the values used in insert/update statements

Sequel has long been known for its chainable filters.  Before this
commit, it was not possible to chain the values used in insert or
update statements.  This commit adds two methods, with slightly
different features, to accomplish this.

set_defaults is used to set the default values used in insert or
update statements, which can be overriden by the values passed to
insert or update:

  DB[:t].set_defaults(:x=&gt;1).insert_sql
  # =&gt; INSERT INTO t (x) VALUES (1)
  DB[:t].set_defaults(:x=&gt;1).insert_sql(:x=&gt;2)
  # =&gt; INSERT INTO t (x) VALUES (2)
  DB[:t].set_defaults(:x=&gt;1).insert_sql(:y=&gt;2)
  # =&gt; INSERT INTO t (x, y) VALUES (1, 2)

set_overrides is used to set default values that override the values
given to insert or update statements:

  DB[:t].set_overrides(:x=&gt;1).insert_sql(:x=&gt;2)
  # =&gt; INSERT INTO t (x) VALUES (1)

In addition, chaining calls to set_default and set_overrides operate
slightly differently:

  DB[:t].set_defaults(:x=&gt;1).set_defaults(:x=&gt;2).insert_sql
  # =&gt; INSERT INTO t (x) VALUES (2)
  DB[:t].set_overrides(:x=&gt;1).set_overrides(:x=&gt;2).insert_sql
  # =&gt; INSERT INTO t (x) VALUES (1)

As show above, with set_default, the last call takes precedence,
whereas with set_overrides, the first call takes precedence.

Note that set_defaults and set_overrides only are used when insert or
update is called with a hash.

Dataset#insert had to go through some significant refactoring for this
to work.  All the specs still pass, so hopefully nothing broke because
of it.</message>
    <tree>0c788c300024a1b6845a8a5321c5d5be77743868</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6acb504cd1ae8842b7b65270cecb73cad2fb31c4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/7350715293092a04645376b2d9e82a382e5c5cb0</url>
    <id>7350715293092a04645376b2d9e82a382e5c5cb0</id>
    <committed-date>2008-08-28T11:42:24-07:00</committed-date>
    <authored-date>2008-08-28T11:42:24-07:00</authored-date>
    <message>Allow Models to use the RETURNING clause when inserting records on PostgreSQL

This commit makes model.save! check for an insert_select method on
the dataset.  If it exists, it calls that method and uses the result
as the values, instead of inserting and then reloading the values
from the database. This should be faster as well as less error prone.

It changes a recent commit to the PostgreSQL adapter so that
insert_sql does not use the RETURNING clause by default. You need to
call the insert_returning_sql method if you want the RETURNING
clause.  That is what Dataset#insert now does on PostgreSQL servers
8.2 and higher.  This caused some issues with prepared statements,
but this commit takes care of that as well.

This commit also contains a small speedup to Dataset#single_value,
as well as a missing spec for Database#raise_error.</message>
    <tree>047b64334656734b1f3fd7e2272096ada83d8474</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>80c2c9e537aaa98000867b393d4fe9eb326396c7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6acb504cd1ae8842b7b65270cecb73cad2fb31c4</url>
    <id>6acb504cd1ae8842b7b65270cecb73cad2fb31c4</id>
    <committed-date>2008-08-27T15:51:32-07:00</committed-date>
    <authored-date>2008-08-27T15:51:32-07:00</authored-date>
    <message>Raise Sequel::DatabaseError instead of generic Sequel::Error for database errors, don't swallow tracebacks

This commit adds a new exception class, Sequel::DatabaseError.  This
exception class should be used for all errors that come from the
database, such as invalid syntax in a query or database access rights
violation.

This commit adds a couple private Database methods, raise_error and
transaction_error.  raise_error converts the exception to a
DatabaseError, keeping the previous exception message (prepended
with the previous exception class) as well as the traceback.  If
an optional :classes option is passed, it only converts the exception
if it is one of those classes.  transaction_error calls raise_error
with the :classes options set to the array of passed classes, unless
the error is an Error::Rollback.  These DRY up some code in the
adapters.

This commit also removes the convert_pgerror method for the postgres
adapter, since it is no longer necessary.

This is a backwards incompatible change for SQLite users, since the
SQLite adapter previously raised Error::InvalidStatement instead of
just Error.</message>
    <tree>cffbef6325cd7d5eaa42e32f35b8865faef60b32</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5a2bd738ab9ced38fa91620768f9a0dae2c99134</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/80c2c9e537aaa98000867b393d4fe9eb326396c7</url>
    <id>80c2c9e537aaa98000867b393d4fe9eb326396c7</id>
    <committed-date>2008-08-27T13:39:13-07:00</committed-date>
    <authored-date>2008-08-27T13:05:12-07:00</authored-date>
    <message>Use INSERT ... RETURNING ... with PostgreSQL 8.2 and higher

This makes the PostgreSQL adapter use INSERT ... RETURNING ... if it
is connected to an 8.2.0 or later server.  This should provide a
performance boost, as it doesn't require extra queries being issued
to determine the value of the inserted primary key.

This also makes the Database object clear the cache for @primary_keys
and @primary_key_sequences when drop_table is called.  It adds a
Database#primary_key public method for determining the primary key
for a given table. If also adds a Dataset#server_version private
method to make things more testable.</message>
    <tree>fb14d1e43976d43943d2cde6124e8d8d5859df5e</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2cc47d290dbdf8f380e37252c9e651a3115de2d5</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5a2bd738ab9ced38fa91620768f9a0dae2c99134</url>
    <id>5a2bd738ab9ced38fa91620768f9a0dae2c99134</id>
    <committed-date>2008-08-27T11:51:31-07:00</committed-date>
    <authored-date>2008-08-27T11:51:31-07:00</authored-date>
    <message>Document general but adapter specific return values for fetch_rows, delete, insert, and update</message>
    <tree>349edf786f17d21706c419738d9ff1b9a98cbc1e</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>aa48478575089d3e3c2f31594ffa0b6bb282dac7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2cc47d290dbdf8f380e37252c9e651a3115de2d5</url>
    <id>2cc47d290dbdf8f380e37252c9e651a3115de2d5</id>
    <committed-date>2008-08-27T11:42:37-07:00</committed-date>
    <authored-date>2008-08-27T11:42:37-07:00</authored-date>
    <message>Make insert_sql, delete_sql, and update_sql respect the :sql option

Before this commit, all of the following would raise errors:

  DB[&quot;INSERT INTO blah (id) VALUES (1)&quot;].insert_sql
  DB[&quot;DELETE FROM blah&quot;].delete_sql
  DB[&quot;UPDATE blah SET num = 1&quot;].update_sql

Now, these just return the SQL given.  This implies:

  ds = DB[&quot;...&quot;]
  ds.update_sql.should == ds.delete_sql</message>
    <tree>426d125a1794613ccb6435c09deeefb8939c6edc</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>61ba0d19e9483f83ceae774f7d1e70fed8ab2a39</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/aa48478575089d3e3c2f31594ffa0b6bb282dac7</url>
    <id>aa48478575089d3e3c2f31594ffa0b6bb282dac7</id>
    <committed-date>2008-08-27T11:03:07-07:00</committed-date>
    <authored-date>2008-08-27T10:43:48-07:00</authored-date>
    <message>Default to converting 2 digit years

Before, Sequel would treat 06/07/08 as being in the year 0008 instead
of 2008, at least when using the Date and DateTime classes.  This
commit changes that so that 2 digit years are treated as year + 1900
if year &gt;= 69 or year + 2000 if year &lt; 69.  To get back the old
behavior:

  Sequel.convert_two_digit_years = false

If you are using ruby 1.9, you should watch out, as the date parsing
differs from ruby 1.8:

  Date.parse('01/02/08', true).to_s # ruby 1.8 =&gt; &quot;2008-01-02&quot;
  Date.parse('01/02/08', true).to_s # ruby 1.9 =&gt; &quot;2001-02-08&quot;</message>
    <tree>9499417fba4822ac605803c2d22c4ff765124483</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>cb2ab0e8d3f32446b16f17a6fb11904a558a27b0</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/61ba0d19e9483f83ceae774f7d1e70fed8ab2a39</url>
    <id>61ba0d19e9483f83ceae774f7d1e70fed8ab2a39</id>
    <committed-date>2008-08-26T16:08:40-07:00</committed-date>
    <authored-date>2008-08-26T16:08:40-07:00</authored-date>
    <message>Make the PostgreSQL adapter with the pg driver use async_exec, so it doesn't block the entire interpreter</message>
    <tree>566aee3bc7c3b2eddb29d113c0821d75ed87f7d4</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>140035bc9c8b11af61fd3a6bb8efebc70f09f72f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/cb2ab0e8d3f32446b16f17a6fb11904a558a27b0</url>
    <id>cb2ab0e8d3f32446b16f17a6fb11904a558a27b0</id>
    <committed-date>2008-08-26T16:03:54-07:00</committed-date>
    <authored-date>2008-08-26T16:03:54-07:00</authored-date>
    <message>Make jarredholman's composite key schema patch usable on Ruby 1.9</message>
    <tree>065bc3d0b213572c9e9325e4c975833cda65cf34</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5323c2bb642a705db74949300a227742b1f24ba6</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/140035bc9c8b11af61fd3a6bb8efebc70f09f72f</url>
    <id>140035bc9c8b11af61fd3a6bb8efebc70f09f72f</id>
    <committed-date>2008-08-25T17:00:43-07:00</committed-date>
    <authored-date>2008-08-25T17:00:43-07:00</authored-date>
    <message>Fix use of shared MSSQL adapter by the ODBC and ADO adapters</message>
    <tree>ee532fb53632863946b839b66375e253afaa05c9</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0330d82e3fc28b208d671b6a71bf8e86e373cac7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5323c2bb642a705db74949300a227742b1f24ba6</url>
    <id>5323c2bb642a705db74949300a227742b1f24ba6</id>
    <committed-date>2008-08-24T12:13:20-07:00</committed-date>
    <authored-date>2008-08-24T12:13:20-07:00</authored-date>
    <message>Better error messages for invalid String#to_{date,time,datetime} conversions</message>
    <tree>b7607b799aa9bb492368573321e8de12646aa436</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>32f6a46d5082e3b232fade5559e83ad351d536c0</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0330d82e3fc28b208d671b6a71bf8e86e373cac7</url>
    <id>0330d82e3fc28b208d671b6a71bf8e86e373cac7</id>
    <committed-date>2008-08-24T12:11:54-07:00</committed-date>
    <authored-date>2008-08-24T12:11:54-07:00</authored-date>
    <message>Update CHANGELOG for jarredholman's recently added schema generator features</message>
    <tree>f801ea34f312d600fa4c6b33493ccd81018128d1</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>919c47a6655517d9232c6c02b74ecd13d21fafb3</id>
      </parent>
    </parents>
    <author>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/32f6a46d5082e3b232fade5559e83ad351d536c0</url>
    <id>32f6a46d5082e3b232fade5559e83ad351d536c0</id>
    <committed-date>2008-08-22T15:06:39-07:00</committed-date>
    <authored-date>2008-08-22T15:06:39-07:00</authored-date>
    <message>Fixed validate_uniqueness_of to assign the error message to the correct field.</message>
    <tree>bac30424f096d33ae5d16129aa6026264852104f</tree>
    <committer>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>7ae2be4240df17b76991b3957cfe1ad66e828bcb</id>
      </parent>
    </parents>
    <author>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/919c47a6655517d9232c6c02b74ecd13d21fafb3</url>
    <id>919c47a6655517d9232c6c02b74ecd13d21fafb3</id>
    <committed-date>2008-08-22T13:46:50-07:00</committed-date>
    <authored-date>2008-08-22T13:46:50-07:00</authored-date>
    <message>Added support for composite primary key, composite foreign key and unique constraints to Schema::Generator and Schema::AlterTableGenerator</message>
    <tree>2f107e8717a510b579a7df435098ed93c3a97cd1</tree>
    <committer>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>35e692145144bd3d28c7d577317334dee24b98d3</id>
      </parent>
    </parents>
    <author>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/7ae2be4240df17b76991b3957cfe1ad66e828bcb</url>
    <id>7ae2be4240df17b76991b3957cfe1ad66e828bcb</id>
    <committed-date>2008-08-21T18:58:13-07:00</committed-date>
    <authored-date>2008-08-21T18:58:13-07:00</authored-date>
    <message>Allow creation of tables with composite primary keys</message>
    <tree>eb79b1ee68770c264984c081ecfadde4ebce9089</tree>
    <committer>
      <name>Jarred Holman</name>
      <email>jarred.holman@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>aa0e9e8ca23100d8fead81f9f2d6cde5afc4885a</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/35e692145144bd3d28c7d577317334dee24b98d3</url>
    <id>35e692145144bd3d28c7d577317334dee24b98d3</id>
    <committed-date>2008-08-20T08:03:18-07:00</committed-date>
    <authored-date>2008-08-20T08:03:18-07:00</authored-date>
    <message>Work with the 2008.08.17 version of the pg gem</message>
    <tree>239f82a3baf54ee5fe9725de40ea2b36e5674573</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c64dda9b6b7df1c932f0ab24b524b0b4f23d1903</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/aa0e9e8ca23100d8fead81f9f2d6cde5afc4885a</url>
    <id>aa0e9e8ca23100d8fead81f9f2d6cde5afc4885a</id>
    <committed-date>2008-08-19T13:04:54-07:00</committed-date>
    <authored-date>2008-08-19T13:04:54-07:00</authored-date>
    <message>Disallow abuse of SQL function syntax for types (use :type=&gt;:varchar, :size=&gt;255 instead of :type=&gt;:varchar[255])

This commit also refactors type_literal to return the entire literal
value for the type, instead of just the base type (so it includes
any length and/or UNSIGNED specifiers).  It also makes type_literal
private.

In addition, this fixes an issue with renaming or changing the type
of a varchar column on MySQL, if you wanted the size to be different
than 255.</message>
    <tree>6a9181e554042d1d0546def71daa4b39e51b396f</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2ec2acd4d685d6834b130802000b1f5dd58da7d9</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c64dda9b6b7df1c932f0ab24b524b0b4f23d1903</url>
    <id>c64dda9b6b7df1c932f0ab24b524b0b4f23d1903</id>
    <committed-date>2008-08-18T09:47:28-07:00</committed-date>
    <authored-date>2008-08-18T09:42:06-07:00</authored-date>
    <message>Quote index names when creating or dropping indexes

This also refactors some schema creation methods.  It quotes tables
and columns as well as indexes in the schema creation methods that
the MySQL adapter overrides.  It adds a couple new methods,
drop_index_sql and column_references_sql, which eliminates some
duplication in the MySQL adapter.</message>
    <tree>9d47db28dfee145b56eb4af25f476e1718e44120</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c7a70c0138be15a7d78b10cd94d37fd4f4fcd864</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2ec2acd4d685d6834b130802000b1f5dd58da7d9</url>
    <id>2ec2acd4d685d6834b130802000b1f5dd58da7d9</id>
    <committed-date>2008-08-16T14:06:39-07:00</committed-date>
    <authored-date>2008-08-16T14:06:39-07:00</authored-date>
    <message>Update some RDoc comments in sequel_model/schema.rb</message>
    <tree>ce5bbcc62280219daeb10069fde5235457094d45</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>04a0dff5e8db8123dad782d3c68e57e3c039167a</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c7a70c0138be15a7d78b10cd94d37fd4f4fcd864</url>
    <id>c7a70c0138be15a7d78b10cd94d37fd4f4fcd864</id>
    <committed-date>2008-08-13T12:23:38-07:00</committed-date>
    <authored-date>2008-08-13T12:23:38-07:00</authored-date>
    <message>Don't have column accessor methods override plugin instance methods

This commit changes where the column accessor methods are defined.
Instead of defining them directly in the class, this defines them in
an anonymous module that is included in the class.  Because columns
accessors are generally defined when the class is created (before
the plugin has been added), the plugin instance methods module will
be included after the column accessor module, so it will take
precedence.  Because the column accessor methods don't override
existing instance methods, if a plugin has already been added, using
set_dataset after a plugin has been added (e.g. in a subclass) won't
create column accessors that override the plugin's instance methods.

This commit should also have a minor speedup in the general case, by
recognizing when a dataset is inherited and omitting some redundent
code in that case.

While here, simplify the code for Sequel::Model().</message>
    <tree>01a8964d421e86f2f1bd9ca329389ee003250f32</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>1cb84f39cc418f9916cd6737895585960990348d</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/04a0dff5e8db8123dad782d3c68e57e3c039167a</url>
    <id>04a0dff5e8db8123dad782d3c68e57e3c039167a</id>
    <committed-date>2008-08-13T10:56:19-07:00</committed-date>
    <authored-date>2008-08-13T10:56:19-07:00</authored-date>
    <message>Allow validation of multiple attributes at once, with built in support for uniqueness checking of multiple columns

This commit allows you to support validating multiple attributes at
once:

  validates_each([:column1, :column2]) do |obj, attributes, values|
    # attributes = [:column1, :column2]
    # values = [obj.send(:column1), obj.send(:column2)]
  end

Support was added to validates_uniqueness_of to work on multiple
values at once:

  validates_uniqueness_of([:column1, :column2])

This is quite different from the following code:

  validates_uniqueness_of(:column1, :column2)

Which makes sure the each value is unique to its column, instead of
the combination of values being unique.

This will give a validation error message if an entry already exists
in the database that has the same value for column1 and column2.  It
works for any number of columns.

validates_uniqueness_of now supports an :allow_nil option that will
skip checking if the values of all columns are nil.  Previously, it
automatically skipped the validation if the value was blank.

There was also a slight memory reduction by reusing the default proc
if :if is not specified.</message>
    <tree>bb9c5ab3a422347c60fc8d321de65c45b8ddce46</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>40b75585ed513766b07cbb22264dd8b4fb81854f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/1cb84f39cc418f9916cd6737895585960990348d</url>
    <id>1cb84f39cc418f9916cd6737895585960990348d</id>
    <committed-date>2008-08-12T16:55:11-07:00</committed-date>
    <authored-date>2008-08-12T16:55:11-07:00</authored-date>
    <message>In PostgreSQL adapter, fix inserting a row with a primary key value inside a transaction

This bug took quite a while to find and fix.  It was compounded by
the fact that there were multiple bugs in the underlying
implementation:

1) Errors raised by PostgreSQL weren't getting reraised inside
   insert_result.

2) Determining the sequence names was not done correctly.

This caused weird errors, such as the code raising an error stating
there was already an error on the transaction, without showing
an error or even that a query was issued.  To fix this and similar
issues, have the connection log the SQL it issues to find primary
keys, sequences, and sequence values, just like the Database object
logs the SQL.

To make sure that inserting a row with a primary key value works
inside transactions, figure out the primary key first and see if
it contained in the values hash.  If not, figure out what the
sequence is for the table, and get the last sequence value used.

This is done because trying to get the last sequence value first
if the sequence wasn't yet used on the connection causes PostgreSQL
to abort the transaction.  It would return an invalid result
instead of aborting the transaction if the connection had previously
been used to insert a row into the same table, without an easy way
to detect things.

Fix the SQL used for finding primary keys and sequences so that
unnecessary columns aren't returned.

Keep track of sequences at the Database level instead of the
connection level.

Make insert_result, primary_key_for_table, and
primary_key_sequence_for_table private methods.

The :table option when inserting is now unquoted (generally a symbol),
instead of the quoted string used previously.</message>
    <tree>ef36244ae44d163d6484b2bd12187be7dadede48</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>725011da06b3cbdd091873757560c9db9ae8e0fa</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/40b75585ed513766b07cbb22264dd8b4fb81854f</url>
    <id>40b75585ed513766b07cbb22264dd8b4fb81854f</id>
    <committed-date>2008-08-12T16:53:26-07:00</committed-date>
    <authored-date>2008-08-12T16:53:26-07:00</authored-date>
    <message>Small ruby 1.9 spec compatibility fix</message>
    <tree>19fc99998eafc322a4244f8797e1975422624f7e</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>545e2e42a2443070ac0b617b1012fdf80b53f956</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/725011da06b3cbdd091873757560c9db9ae8e0fa</url>
    <id>725011da06b3cbdd091873757560c9db9ae8e0fa</id>
    <committed-date>2008-08-11T15:47:05-07:00</committed-date>
    <authored-date>2008-08-11T15:47:05-07:00</authored-date>
    <message>Allow :join_table association option to have a string value

Before, using a string value would result in very weird error
messages, because of the implementation of the many_to_many
add_/remove_/remove_all_ methods.  Have those methods use
database.dataset.from(join_table) instead of
database[join_table], which should work.  The documentation will
remain the same, and I don't guarantee that using a string will work
in future versions.  The main reason for this commit is so if you do
use a string, you won't get an error message that doesn't make sense.</message>
    <tree>07e80182b508d74cb5533c897a97b0464f3ecb17</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2ea38a89b10a0de41bc0e0aef68cd29bc4782751</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/545e2e42a2443070ac0b617b1012fdf80b53f956</url>
    <id>545e2e42a2443070ac0b617b1012fdf80b53f956</id>
    <committed-date>2008-08-07T13:20:42-07:00</committed-date>
    <authored-date>2008-08-07T13:20:42-07:00</authored-date>
    <message>Allow before_save and before_update to affect the columns saved by save_changes</message>
    <tree>c94c27a04347a202a6be564ad5a1f72f5f8385db</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>a815637364b680721c9f5156d786887d55e03c08</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2ea38a89b10a0de41bc0e0aef68cd29bc4782751</url>
    <id>2ea38a89b10a0de41bc0e0aef68cd29bc4782751</id>
    <committed-date>2008-08-06T16:03:35-07:00</committed-date>
    <authored-date>2008-08-06T16:03:35-07:00</authored-date>
    <message>Make Dataset#single_value work when graphing, which fixes count and paginate on graphed datasets</message>
    <tree>89248f52d5dda3b98a32e1d97b1a192e835e0362</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>8e4f911ab5380a0630423ff1198a10f960662fdd</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/a815637364b680721c9f5156d786887d55e03c08</url>
    <id>a815637364b680721c9f5156d786887d55e03c08</id>
    <committed-date>2008-08-06T09:52:41-07:00</committed-date>
    <authored-date>2008-08-06T09:52:41-07:00</authored-date>
    <message>Bump version to 2.4.0</message>
    <tree>edddca1d1f619f506adc8e8f8e2b742b102fc159</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2142f0a0f152f11b94944985ecb060ddc6cc0660</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/8e4f911ab5380a0630423ff1198a10f960662fdd</url>
    <id>8e4f911ab5380a0630423ff1198a10f960662fdd</id>
    <committed-date>2008-08-06T09:28:08-07:00</committed-date>
    <authored-date>2008-08-06T09:28:08-07:00</authored-date>
    <message>Remove the generated html files when cleaning</message>
    <tree>0a0d52163a29b2fbc1c613d7c40d2539c8093307</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
</commits>
