<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>1a8a1192e05570e7437896532dcfcca8f907fba4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/1f4aeb925ccb2661b1516bcfa70fee5200deb97b</url>
    <id>1f4aeb925ccb2661b1516bcfa70fee5200deb97b</id>
    <committed-date>2009-03-02T10:33:00-08:00</committed-date>
    <authored-date>2009-03-02T10:33:00-08:00</authored-date>
    <message>Bump version to 2.11.0, add 2.11.0 release notes</message>
    <tree>2f71b401698c840cb02545d03c2334f0d20d45cf</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>27082cf2a1e86cb1e511ad7e0e4b58ec3624b4b6</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/1a8a1192e05570e7437896532dcfcca8f907fba4</url>
    <id>1a8a1192e05570e7437896532dcfcca8f907fba4</id>
    <committed-date>2009-02-26T11:25:37-08:00</committed-date>
    <authored-date>2009-02-26T11:25:37-08:00</authored-date>
    <message>Update CHANGELOG for merged perf branch</message>
    <tree>47936f2ccd645eb6d586ffbb14dc025c12d6544d</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>da4e4f9a0b211ad3fe63b7554d45c2ddeb16693d</id>
      </parent>
      <parent>
        <id>e7ad7656c668bcf0ad78fbeed82329aedd1ac053</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/27082cf2a1e86cb1e511ad7e0e4b58ec3624b4b6</url>
    <id>27082cf2a1e86cb1e511ad7e0e4b58ec3624b4b6</id>
    <committed-date>2009-02-26T10:53:13-08:00</committed-date>
    <authored-date>2009-02-26T10:53:13-08:00</authored-date>
    <message>Merge branch 'perf'

Conflicts:
	lib/sequel_core/adapters/shared/mysql.rb</message>
    <tree>0be7387c956a250a6ab2cb14002b24362dd192d2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5fdeb88bac3a6b544f9073e686e171fc15bacd3d</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/da4e4f9a0b211ad3fe63b7554d45c2ddeb16693d</url>
    <id>da4e4f9a0b211ad3fe63b7554d45c2ddeb16693d</id>
    <committed-date>2009-02-26T10:52:07-08:00</committed-date>
    <authored-date>2009-02-26T10:52:07-08:00</authored-date>
    <message>Remove SQL::IrregularFunction, no longer used internally

The only user of this class left was from
ComplexExpressionMethods#extract, which was changed to use a
regular Function plus a PlaceholderLiteralString.
SQL::IrregularFunction was always a bad hack, and the function
plus placeholder string method is much neater and better all
around.

This also fixes another String#lit call in the shared SQLite adapter.</message>
    <tree>c9651db17d19951572183cf1ef81f98b323d29fa</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>54fc41894ed6c5a910e29928906a13fb40b2084c</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5fdeb88bac3a6b544f9073e686e171fc15bacd3d</url>
    <id>5fdeb88bac3a6b544f9073e686e171fc15bacd3d</id>
    <committed-date>2009-02-26T10:26:34-08:00</committed-date>
    <authored-date>2009-02-26T10:26:34-08:00</authored-date>
    <message>Allow String.lit to take arguments and return a SQL::PlaceholderLiteralString

This useful when you want an SQL fragment to be literalized, but also
want it to contain other values.  Before, this was hard to do without
calling Dataset#literal.  Now, it's much easier to deal with:

  column = :user
  pattern = params[:pattern]
  dataset.select{|o| o.substring('? from ?'.lit(column, pattern))}

This commit also changes the internals so that String#lit is never
called, so Sequel itself won't break if another library defines it.</message>
    <tree>57f677aeaa26a40c4c5b5deb5c22245536f290ae</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6f72682a264b01c794e0ae18bae1ebc48d7f8065</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/54fc41894ed6c5a910e29928906a13fb40b2084c</url>
    <id>54fc41894ed6c5a910e29928906a13fb40b2084c</id>
    <committed-date>2009-02-25T12:19:46-08:00</committed-date>
    <authored-date>2009-02-25T12:19:46-08:00</authored-date>
    <message>Make Dataset#order and Dataset#order_more yield a VirtualRow to a block

This is mostly useful if you want to call an SQL function in an order
clause on Ruby 1.9.</message>
    <tree>d08042a58dd39f34ff0299be7d52be56f1561bd6</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>be8e2a6ac1bd6d1bcc33c592b4505d1f552abb42</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6f72682a264b01c794e0ae18bae1ebc48d7f8065</url>
    <id>6f72682a264b01c794e0ae18bae1ebc48d7f8065</id>
    <committed-date>2009-02-25T11:38:06-08:00</committed-date>
    <authored-date>2009-02-25T11:38:06-08:00</authored-date>
    <message>Fix RDoc for Dataset#first_source</message>
    <tree>65a715fa458ce1560dfb2de4a9f855af09a4afc2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>455d5a60fcfabd8c00cedd41966d02a80208b36b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/be8e2a6ac1bd6d1bcc33c592b4505d1f552abb42</url>
    <id>be8e2a6ac1bd6d1bcc33c592b4505d1f552abb42</id>
    <committed-date>2009-02-25T09:15:12-08:00</committed-date>
    <authored-date>2009-02-25T09:15:12-08:00</authored-date>
    <message>Add Model#set_associated_object, used by the many_to_one setter method, for easier overriding

This is for consistency with the one_to_many and many_to_many
association methods (e.g. add_associated_object).  It allows you
to override behavior for all many_to_one setters by overriding a
single method.</message>
    <tree>5d37b434675879154b27b4eec97e0dd940be231a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5f5f5f816893d6a296a91716a3bdf28e3cff47bb</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/e7ad7656c668bcf0ad78fbeed82329aedd1ac053</url>
    <id>e7ad7656c668bcf0ad78fbeed82329aedd1ac053</id>
    <committed-date>2009-02-24T19:14:31-08:00</committed-date>
    <authored-date>2009-02-24T19:14:31-08:00</authored-date>
    <message>Remove Database#find_by_table_column_value, add Dataset#with_sql, for optimization in Model.[]

I shouldn't have added a database method for this, so back it out.
The dataset method makes more sense, and I've been wanting to add it
for a while.  Dataset#static_sql was already taken, so I chose
Dataset#with_sql.  Add the usual dataset mutation method and model
dataset methods, and switch Model.[] to use with_sql.

This new code allows the optimized version to work with models with
serialized columns, plus models that use datasets with nonstandard
row_procs.

While here, fix Model.set_dataset so that it removes the simple_table
if a dataset is given.</message>
    <tree>aa4fa962d117bc13cc21d6f271fca47e670892ac</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>02f5b9b7b1fb591afb4728355d5d9c2b33939340</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/455d5a60fcfabd8c00cedd41966d02a80208b36b</url>
    <id>455d5a60fcfabd8c00cedd41966d02a80208b36b</id>
    <committed-date>2009-02-24T15:46:39-08:00</committed-date>
    <authored-date>2009-02-24T15:21:36-08:00</authored-date>
    <message>Allow use of database independent types when casting

Previously, types were used as-is when casting.  Now, casting uses
the same type casting code as the schema methods, so you can specify
ruby classes and have them changed to database specific types.

This changes the object used for casts from SQL::IrregularFunction
SQL::Cast.  SQL::IrregularFunction is now just used for handling
the SQL EXTRACT function (though it may be used for other similar
functions in the future).

This adds an integration test for the feature (in addition to the
usual specs).  It fails on SQLite because of the way SQLite handles
casting (returning strings even when you are casting to integer).</message>
    <tree>8e9419d2de0ebe4dc22a73872049694040d6a196</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0a5ad72790e3f2759508d75b352786a7f58aaef0</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/02f5b9b7b1fb591afb4728355d5d9c2b33939340</url>
    <id>02f5b9b7b1fb591afb4728355d5d9c2b33939340</id>
    <committed-date>2009-02-24T14:13:19-08:00</committed-date>
    <authored-date>2009-02-24T14:13:19-08:00</authored-date>
    <message>Give association datasets knowledge of the model object that created them and the related association reflection

This should make association extensions much more powerful.  Before,
the :extend association option was near worthless, since association
datasets were treated just like any other dataset, and didn't have
the context needed to make decisions based on the values of the
object that created the association.  Now, you can use association
extensions such as:

   module FindOrCreate
     def find_or_create(vals)
      first(vals) || association_reflection.associated_class. \
        create(vals.merge(association_reflection[:key]=&gt;model_object.id))
     end
   end

The above should be a generic find_or_create association dataset
method that works for any standard one_to_many association:

  Artist.one_to_many :albums, :extend=&gt;FindOrCreate
  Artist.first.albums_dataset.find_or_create(:name=&gt;'Foo')

You could previously do something similar using an association block
that added methods to the dataset by using a closure, but that would
have to be modified per association, doing so generically was not
possible.</message>
    <tree>1b36732986b15bec7911390f4653da3f236fc851</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c39e8e014f9eb4bf0c118f1255c08cebb1953139</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0a5ad72790e3f2759508d75b352786a7f58aaef0</url>
    <id>0a5ad72790e3f2759508d75b352786a7f58aaef0</id>
    <committed-date>2009-02-24T08:03:00-08:00</committed-date>
    <authored-date>2009-02-24T08:03:00-08:00</authored-date>
    <message>Fix RDoc for validates_length_of, the option is :within, not :with</message>
    <tree>e12366b99b79609af2a6e957ae50613a44d338b8</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4f1330884e5fdbaebf025d44a603d41c7df37732</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c39e8e014f9eb4bf0c118f1255c08cebb1953139</url>
    <id>c39e8e014f9eb4bf0c118f1255c08cebb1953139</id>
    <committed-date>2009-02-24T07:57:05-08:00</committed-date>
    <authored-date>2009-02-24T07:57:05-08:00</authored-date>
    <message>Add links to specific RDoc pages and the release notes to the website documentation page</message>
    <tree>987743a425e4ab36bfe950c5b9ec79c3810849d6</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>bdac112f63e965ba951f18482615c0b1456c0523</id>
      </parent>
    </parents>
    <author>
      <name>John W Higgins</name>
      <email>wishdev@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/4f1330884e5fdbaebf025d44a603d41c7df37732</url>
    <id>4f1330884e5fdbaebf025d44a603d41c7df37732</id>
    <committed-date>2009-02-23T23:11:42-08:00</committed-date>
    <authored-date>2009-02-23T23:11:42-08:00</authored-date>
    <message>Update firebird spec to match upstream changes</message>
    <tree>4c64c9dd2b9c8860156b0400d01cc4fa1fefb756</tree>
    <committer>
      <name>John W Higgins</name>
      <email>wishdev@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c4ab71ea18190c45900819d70e35aad6153eb8a0</id>
      </parent>
    </parents>
    <author>
      <name>John W Higgins</name>
      <email>wishdev@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/bdac112f63e965ba951f18482615c0b1456c0523</url>
    <id>bdac112f63e965ba951f18482615c0b1456c0523</id>
    <committed-date>2009-02-23T22:59:21-08:00</committed-date>
    <authored-date>2009-02-23T22:58:04-08:00</authored-date>
    <message>Added spec for getting primary key</message>
    <tree>268542cf98d2d3f4e3068dc0c48ee07cc51515fc</tree>
    <committer>
      <name>John W Higgins</name>
      <email>wishdev@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>df2093900fcf3848dd42c9d28ee11a699940f350</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5f5f5f816893d6a296a91716a3bdf28e3cff47bb</url>
    <id>5f5f5f816893d6a296a91716a3bdf28e3cff47bb</id>
    <committed-date>2009-02-23T14:11:39-08:00</committed-date>
    <authored-date>2009-02-23T14:11:39-08:00</authored-date>
    <message>Fix typo in integration tests</message>
    <tree>4ee045b95a461518f3403f0eaaabe50613b739d9</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5578d9e3fe13d1399b6a5d054b57ff6a590c5a88</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/df2093900fcf3848dd42c9d28ee11a699940f350</url>
    <id>df2093900fcf3848dd42c9d28ee11a699940f350</id>
    <committed-date>2009-02-23T14:08:45-08:00</committed-date>
    <authored-date>2009-02-23T14:08:45-08:00</authored-date>
    <message>Fix MySQL adapter after optimization commits</message>
    <tree>3a2b831ebf874bbbc506efb59d227c1024d599d2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>23fee122fe24adbf3d736d963549745a621d91c7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5578d9e3fe13d1399b6a5d054b57ff6a590c5a88</url>
    <id>5578d9e3fe13d1399b6a5d054b57ff6a590c5a88</id>
    <committed-date>2009-02-21T20:05:15-08:00</committed-date>
    <authored-date>2009-02-21T20:05:15-08:00</authored-date>
    <message>Add an optimization to Model.[] for simple models, with a 30-40% performance increase

After some profiling I discovered that Model.[] can spend almost half
of it's time in producing the SQL to send to the database.  This is
because it goes through the entire SQL creation process, which is
very flexible, but not optimized for performance.  If it's possible
to use static SQL instead of going through the usual SQL generation
process, there would be a dramatic performance increase.

This adds a Database#find_by_table_column_value method that uses
a given literal table and column, and a value argument, and returns
the first matching row (with all columns) for that table.  The value
argument is literalized, but the table and column are used as is,
so you cannot use untrusted input for those arguments.

If a model is a optimizable (single primary key, single table),
find_by_table_column_value is used instead of the usual lookup using
primary_key_hash.  Unfortunately, it wasn't easy to determine which
models are optimizable.  Checking all of the dataset options for the
model dataset is too likely to break in future versions, even if I
did get it correct in this version.  I took the conservative approach
and made it so that the model is optimizable if a symbol is passed to
set_dataset. So the following models will use the optimization:

  class Foo &lt; Sequel::Model
    # Using the implicit table is optimized
  end
  class Foo &lt; Sequel::Model(:foos)
    # Since you provide a Symbol to Model(), it is optimized
  end
  class Foo &lt; Sequel::Model
   set_dataset :foos
   # Symbol provided to set_dataset is optimized
  end

But the following otherwise equivalent models are not optimized:

  class Foo &lt; Sequel::Model(Model.db[:foos])
  end
  class Foo &lt; Sequel::Model
   set_dataset db[:foos]
  end

To make this as fast as possible, two class instance variables are
added to model: @simple_pk and @simple_table.  They store the
already literalized table and primary key column names, which are
passed to find_by_table_column_value.

This commit also adds some specs for the previous optimization
commit, to bring code coverage back to 100%.</message>
    <tree>cf816d75bc4a120e56f6613c9a986b691de8783c</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c4ab71ea18190c45900819d70e35aad6153eb8a0</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/23fee122fe24adbf3d736d963549745a621d91c7</url>
    <id>23fee122fe24adbf3d736d963549745a621d91c7</id>
    <committed-date>2009-02-21T17:18:51-08:00</committed-date>
    <authored-date>2009-02-21T17:18:51-08:00</authored-date>
    <message>Make Dataset#literal call methods like #literal_string, override less in adapters, for a 20-25% performance increase

Profiling shows Dataset#literal can take around 10% total time, so
this is probably only a 2% performance increase in general.

Basically, this changes how the adapters override the default
literalization.  Instead of overriding literal and using a case
statement and super in the else clause, they override literal_*
methods, so the default Dataset#literal is always called.  In
addition to being faster the code is noticeably cleaner as well.

During this change I finally decided to change the Sequel default
date and timestamp formats from the SQL standard (e.g.
&quot;TIMESTAMP 'YYYY-MM-DD HH:MM:SS'&quot;) to the defacto ISO8601 standard used
by most of the adatpers.  I'm pretty sure this won't break existing
code, but testing on most adapters would be nice, especially on
the Firebird and ODBC adapters.

This commit also moves the unsupported.rb and stored_procedures.rb
from lib/sequel_core/dataset to lib/sequel_core/adapters/utils, since
they are only used by certain adapters.  One of the results of this
is that Sequel::Dataset::UnsupportedExceptIntersect(All)? is not
guaranteed to be defined.

From my profiling, it appears that another 10% increase to
Dataset#literal could be achieved by adding a #to_sequel_literal
method to all objects, and calling that instead of using a case
statement.  At this point, that's not a road I want to go down.</message>
    <tree>05880738835a6e7c64291858989618072ea492b3</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>01a68873f313bb030bbc38f92f25095d885a0226</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c4ab71ea18190c45900819d70e35aad6153eb8a0</url>
    <id>c4ab71ea18190c45900819d70e35aad6153eb8a0</id>
    <committed-date>2009-02-20T15:35:52-08:00</committed-date>
    <authored-date>2009-02-20T15:35:52-08:00</authored-date>
    <message>Another minor README fix</message>
    <tree>e1fe060ecc609d8f227b19b2f86c16e07244d917</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5df2e4046e5ed55187db18d7874c20de4012aa69</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/01a68873f313bb030bbc38f92f25095d885a0226</url>
    <id>01a68873f313bb030bbc38f92f25095d885a0226</id>
    <committed-date>2009-02-19T20:27:38-08:00</committed-date>
    <authored-date>2009-02-19T20:27:38-08:00</authored-date>
    <message>Fix typo in README, thanks mwlang</message>
    <tree>5537688c9dac8782311b6f0e8828a1113cc7d767</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f5d799ed50cebddb7647b9e3746deee69053de57</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5df2e4046e5ed55187db18d7874c20de4012aa69</url>
    <id>5df2e4046e5ed55187db18d7874c20de4012aa69</id>
    <committed-date>2009-02-19T15:37:06-08:00</committed-date>
    <authored-date>2009-02-19T15:37:06-08:00</authored-date>
    <message>Bring code coverage back to 100%</message>
    <tree>b7d938bf2c75be3992740ea1f11b547399849a8f</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4749f020d2acb4c8f91320f06f0569abf218db4b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f5d799ed50cebddb7647b9e3746deee69053de57</url>
    <id>f5d799ed50cebddb7647b9e3746deee69053de57</id>
    <committed-date>2009-02-19T15:36:24-08:00</committed-date>
    <authored-date>2009-02-19T15:36:24-08:00</authored-date>
    <message>Make PostgreSQL and Firebird adapters send inserts to the master server instead of the slave server by default

The PostgreSQL (if it is connecting to a 8.2 or greater database) and
Firebird adapters use INSERT RETURNING to return data directly from
the INSERT query.  Because of that, the INSERT query is treated as a
SELECT by Sequel.  Since it is treated as a select, the request went
to the slave servers instead of the master.  Fix this by setting the
server to use to the master (:default) server unless it is already
set to use a different server.

To easily implement this, add Dataset#default_server_opts private
method.

This comment also removes pointless execute_insert definitions some
adapters, since they just duplicated the now default definition.</message>
    <tree>b8661c100fc50c9ca30b3e371de6af492f594636</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>eaeb7ea243a08b3309f1d12bc13a2e9b84dc7415</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/4749f020d2acb4c8f91320f06f0569abf218db4b</url>
    <id>4749f020d2acb4c8f91320f06f0569abf218db4b</id>
    <committed-date>2009-02-19T10:39:19-08:00</committed-date>
    <authored-date>2009-02-19T10:39:19-08:00</authored-date>
    <message>Add release notes to repository, include in RDoc</message>
    <tree>370e7289450dee666bd4f11a3bf3579fcc59b1c4</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5b60d0aeabd2d87451aefce8a3ce0a1e7e42e70e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/eaeb7ea243a08b3309f1d12bc13a2e9b84dc7415</url>
    <id>eaeb7ea243a08b3309f1d12bc13a2e9b84dc7415</id>
    <committed-date>2009-02-19T10:01:37-08:00</committed-date>
    <authored-date>2009-02-19T10:01:37-08:00</authored-date>
    <message>Avoid the internal use of Symbol#*, refactor Database#locks in the PostgreSQL shared adapter</message>
    <tree>c875d601628de3a5df76541dfe442fd310128f70</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>e87ef59431372ccf5bed0e0c22dc1c940f86aa67</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5b60d0aeabd2d87451aefce8a3ce0a1e7e42e70e</url>
    <id>5b60d0aeabd2d87451aefce8a3ce0a1e7e42e70e</id>
    <committed-date>2009-02-19T09:48:55-08:00</committed-date>
    <authored-date>2009-02-19T09:48:55-08:00</authored-date>
    <message>Use before_update instead of before_save when caching and remove cache_delete_unless_new

This breaks backward compatibility slightly, but it's unlikely anyone
else was using cache_delete_unless_new.</message>
    <tree>7503de594f4b0fe4ba31047c678b05c98b365f96</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0dcdf7395827558baaed987fb3f6498ca0bf054b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/e87ef59431372ccf5bed0e0c22dc1c940f86aa67</url>
    <id>e87ef59431372ccf5bed0e0c22dc1c940f86aa67</id>
    <committed-date>2009-02-19T09:46:29-08:00</committed-date>
    <authored-date>2009-02-19T09:46:29-08:00</authored-date>
    <message>Make Dataset#select, #select_more, and #get take a block that yields a SQL::VirtualRow, similar to #filter

This is useful for select just like it is useful for filter, in that
it allows a nicer API in the case where you can't use the Symbol
shortcuts for methods (either because you are running on Ruby 1.9 or
because another library defines them).  So instead of:

  dataset.select(:prettify.sql_function(:name))

you can do:

  dataset.select{|o| o.prettify(:name)}

This commit also changes some of the dataset convenience methods to
use this new feature.</message>
    <tree>5cef735f211504ad5bab9c63c273e2c7ebe9ffc3</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>7300d2027133f125fc80fb349c85be234f84edf9</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0dcdf7395827558baaed987fb3f6498ca0bf054b</url>
    <id>0dcdf7395827558baaed987fb3f6498ca0bf054b</id>
    <committed-date>2009-02-17T13:15:35-08:00</committed-date>
    <authored-date>2009-02-17T13:15:35-08:00</authored-date>
    <message>Update CHANGELOG and fix minor style issue for MySQL stored procedure fix</message>
    <tree>06bd2529a9a183c93fda7b31d52ac35a171b50d5</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c2560b5cb068cbf85ead26f3aaf3cc2c04d25e7d</id>
      </parent>
    </parents>
    <author>
      <name>Clive Crous</name>
      <email>clive@crous.co.za</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/7300d2027133f125fc80fb349c85be234f84edf9</url>
    <id>7300d2027133f125fc80fb349c85be234f84edf9</id>
    <committed-date>2009-02-16T05:50:14-08:00</committed-date>
    <authored-date>2009-02-16T05:50:14-08:00</authored-date>
    <message>Correct mysql argument formatting for stored procedures</message>
    <tree>97606101438ec00f3c84906d063d1add86471e5f</tree>
    <committer>
      <name>Clive Crous</name>
      <email>clive@crous.co.za</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>aaccfeb2d9179c5a7c0c20de10e9665e76e745ee</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c2560b5cb068cbf85ead26f3aaf3cc2c04d25e7d</url>
    <id>c2560b5cb068cbf85ead26f3aaf3cc2c04d25e7d</id>
    <committed-date>2009-02-11T13:52:56-08:00</committed-date>
    <authored-date>2009-02-11T13:52:56-08:00</authored-date>
    <message>Add :conditions association option, for easier filtering of associated objects

This commit like the previous one doesn't allow anything that wasn't
possible before, but should make the API nicer.  Before, if you
wanted to filter associated records and cover all cases, you had to
specify a block and the :graph_conditions option.  Now, assuming
that your condition is expressible as a hash or array of two pairs,
you can just change :graph_conditions to :conditions and eliminate
the block.  You can change this:

  one_to_many :japanese_verses, :class=&gt;:Verse,
   :graph_conditions=&gt;{:languageid=&gt;3} do |ds|
    ds.filter(:languageid=&gt;3)
  end

to:

  one_to_many :japanese_verses, :class=&gt;:Verse,\
   :conditions=&gt;{:languageid=&gt;3}</message>
    <tree>5957100262a447bc7bfdaa98299f49b45633904a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
</commits>
