<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>febdedf3906ac74245cc50d0f87f0f6d57ab13ea</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2afd7d856ff2ed63fa74ba595dec0fe1f67027b4</url>
    <id>2afd7d856ff2ed63fa74ba595dec0fe1f67027b4</id>
    <committed-date>2008-12-05T16:52:07-08:00</committed-date>
    <authored-date>2008-12-05T16:52:07-08:00</authored-date>
    <message>Bump version to 2.8.0</message>
    <tree>d0a448dc2f292b5b927daf5d889254e59efd800b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>722ce5b18aee64de2a7e0f09480702b414ff8e27</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/febdedf3906ac74245cc50d0f87f0f6d57ab13ea</url>
    <id>febdedf3906ac74245cc50d0f87f0f6d57ab13ea</id>
    <committed-date>2008-12-04T10:30:18-08:00</committed-date>
    <authored-date>2008-12-04T10:30:18-08:00</authored-date>
    <message>Back to 100% code coverage</message>
    <tree>66531f68313f47288cc9621cc28a43ee428b5a35</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>9c52f6218e88533756c4aea2da1b057e0dfba70d</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/722ce5b18aee64de2a7e0f09480702b414ff8e27</url>
    <id>722ce5b18aee64de2a7e0f09480702b414ff8e27</id>
    <committed-date>2008-12-04T10:23:18-08:00</committed-date>
    <authored-date>2008-12-04T10:23:18-08:00</authored-date>
    <message>Fix the SingleThreadedPool's handling of disconnected connections

This shows that while 100% code coverage may not fix all bugs, it
certainly helps find some.</message>
    <tree>53b994d613b71df927764a405780a3808859b615</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2e8753b66849c8519771814c19e25514d91233d3</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/9c52f6218e88533756c4aea2da1b057e0dfba70d</url>
    <id>9c52f6218e88533756c4aea2da1b057e0dfba70d</id>
    <committed-date>2008-12-04T09:50:37-08:00</committed-date>
    <authored-date>2008-12-04T09:50:37-08:00</authored-date>
    <message>Fix Database#upcase_identifiers? if Sequel.upcase_identifiers = true

Note to self that using ||= with a boolean variable is a recipe for
problems.</message>
    <tree>4f6e0c70e10efaca6de77d3f4740c7534d720130</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>35bd9acd9087c6b7791e576e20836e941710405b</id>
      </parent>
    </parents>
    <author>
      <name>Jacob Dunphy</name>
      <email>jacob.dunphy@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2e8753b66849c8519771814c19e25514d91233d3</url>
    <id>2e8753b66849c8519771814c19e25514d91233d3</id>
    <committed-date>2008-12-03T16:05:20-08:00</committed-date>
    <authored-date>2008-12-03T15:46:27-08:00</authored-date>
    <message>Oracle adapter change to catch connection errors and reraise a Sequel::DatabaseDisconnectError.</message>
    <tree>ac2479dc31a94346a2dac159f22918aad61408d1</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2d4084ebee3293fe799ed125cb5f46fa4ddf94d4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/35bd9acd9087c6b7791e576e20836e941710405b</url>
    <id>35bd9acd9087c6b7791e576e20836e941710405b</id>
    <committed-date>2008-12-03T14:15:44-08:00</committed-date>
    <authored-date>2008-12-03T14:15:44-08:00</authored-date>
    <message>Have prepared statements work correctly with datasets with static sql and placeholders</message>
    <tree>0e09a4db3fc04fe136ae8347201cfac2d8fd04d3</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>92394164d5fa473d9753cdc60f4ca52bc5288e63</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2d4084ebee3293fe799ed125cb5f46fa4ddf94d4</url>
    <id>2d4084ebee3293fe799ed125cb5f46fa4ddf94d4</id>
    <committed-date>2008-12-03T13:30:50-08:00</committed-date>
    <authored-date>2008-12-03T13:30:50-08:00</authored-date>
    <message>Support drop column operations inside a transaction on sqlite</message>
    <tree>f4a3f2defd6193a37671f9702536a535a2c3faf6</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>7c0583f2a5d7b11adceb8eb129e1301404141ee8</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/92394164d5fa473d9753cdc60f4ca52bc5288e63</url>
    <id>92394164d5fa473d9753cdc60f4ca52bc5288e63</id>
    <committed-date>2008-12-03T13:19:53-08:00</committed-date>
    <authored-date>2008-12-03T11:51:13-08:00</authored-date>
    <message>Support literal strings with placeholders and subselects in prepared statements

Before, the following two types of prepared statements did not work:

  DB[:items].filter(&quot;id = ?&quot;, :$i).call(:select, :i=&gt;1)
  DB[:items].filter(:id=&gt;DB[:items].select(:id).filter(:id=&gt;:$i)).call(:select, :i=&gt;1)

The first issue is because a placeholder string was literalized
immediately, before the dataset was extended with the prepared
statement code.  The second issue is because the arguments given in
the main prepared statements weren't passed into any subselects.

This commit fixes both of those issues.  It also makes the name
argument to Dataset#prepare optional.

Fixing the first issue is done by adding an
SQL::PlaceholderLiteralString class that holds the string with
placeholders as well as the arguments, and not literalizing them
until the SQL string is needed.

Fixing the second issue was a lot more work, It is done by adding a
Dataset#subselect_sql private method that literal calls, and
overriding it in the PreparedStatement module that extends the
dataset, which takes the subselect dataset, turns it into a prepared
statement, and does the magic necessary pass the args in
(if the default emulated support is used).  It required changes to
the argument mappers so they didn't rely on instance variables.
Instead of using a hash, they now use an array that is shared with
any subselects.  The mapping code is simpler and the code in
general is more generic.  This does away with prepared_args_hash,
as it is no longer necessary.</message>
    <tree>92399d009c9a2b830d33234e85c853c0a87dff46</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f29cfffde1efc5a9a1bace7e6f274dce10d52fa7</id>
      </parent>
    </parents>
    <author>
      <name>Jack Dempsey</name>
      <email>jack.dempsey@gmail.com</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/7c0583f2a5d7b11adceb8eb129e1301404141ee8</url>
    <id>7c0583f2a5d7b11adceb8eb129e1301404141ee8</id>
    <committed-date>2008-12-02T14:42:16-08:00</committed-date>
    <authored-date>2008-12-02T14:39:04-08:00</authored-date>
    <message>add in demonstration of primary_key method</message>
    <tree>3ac930e6ac9f0401db651966255833149b0d8c6b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2a58c45193ced0c2cf0f6a8da322db0a6b3ae98d</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f29cfffde1efc5a9a1bace7e6f274dce10d52fa7</url>
    <id>f29cfffde1efc5a9a1bace7e6f274dce10d52fa7</id>
    <committed-date>2008-12-02T14:06:53-08:00</committed-date>
    <authored-date>2008-12-02T14:06:53-08:00</authored-date>
    <message>Fix using postgres adapter with postgres-pr after last commit</message>
    <tree>1fed126081420c61ed879552e5acce579565ea94</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c075608be547ae60d0e70a3f76768ac9d7984164</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2a58c45193ced0c2cf0f6a8da322db0a6b3ae98d</url>
    <id>2a58c45193ced0c2cf0f6a8da322db0a6b3ae98d</id>
    <committed-date>2008-12-02T13:52:26-08:00</committed-date>
    <authored-date>2008-12-02T13:51:20-08:00</authored-date>
    <message>Have the connection pool remove disconnected connections when the adapter supports it

This adds a Sequel::DatabaseDisconnectError (subclass of
Sequel::DatabaseError), for signaling to the connection pool that the
connection was lost.  It changes the connection pool code to rescue
that exception and remove the offending connection from the
connection pool.

In order to implement this, a disconnection_proc had to be added to
the connection pool.  Sequel uses a generic one that calls
Database#disconnect_connection.  disconnection_proc is called both
when connections are removed because the connection was lost and
when Database#disconnect is called.  Database#disconnect now calls
@pool.disconnect, which now uses the disconnection_proc if no
block is provided.  All adapters have been modified to remove
Database#disconnect and define Database#disconnect_connection, which
was fairly easy since all defined #disconnect methods just called
@pool.disconnect with a block that disconnected each connection.

The only adapter that currently supports this is PostgreSQL.  The
PostgreSQL adapter used to silently attempt to reconnect, which
might have caused the same SQL to be used twice. I'm not sure it
could have happened, but I'm not sure it couldn't have happened
either.  Now, if the database connection is lost, it raises
DatabaseDisconnectError, the connection pool removes the connection
from the pool, and raises the error to the application.  If the
application wants to continue, it can always retry.

While mucking in the connection pool, I found a bug where the
wrong key could be used when new connections were created.  This
wasn't a huge issue in most cases, but it could have caused as
many as twice the number of max_connections connections to be
created.</message>
    <tree>7704a1ae635ec8c13411792b0d0d453ca9b0f855</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ca1161686df3c4fbd3c802b03cf592cd73e98a6f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c075608be547ae60d0e70a3f76768ac9d7984164</url>
    <id>c075608be547ae60d0e70a3f76768ac9d7984164</id>
    <committed-date>2008-12-02T11:03:16-08:00</committed-date>
    <authored-date>2008-12-02T11:03:16-08:00</authored-date>
    <message>Make Dataset#exists return a LiteralString</message>
    <tree>b5585a9e1c24ab775bbef9e693f4a89c3981881a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>fc6e8e116312d40c00461dfea78dda945160ddd9</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ca1161686df3c4fbd3c802b03cf592cd73e98a6f</url>
    <id>ca1161686df3c4fbd3c802b03cf592cd73e98a6f</id>
    <committed-date>2008-12-02T10:17:46-08:00</committed-date>
    <authored-date>2008-12-02T10:17:46-08:00</authored-date>
    <message>Add stored procedure support for the MySQL and JDBC adapters (Fixes #252)

This commit adds support for database stored procedures, with an API
similar to Sequel's prepared statement support, and implemented
internally in a similar way.  While it is directly callable on the
Database object (via #call_sproc), that use is discouraged.  Instead
it should be used at the dataset level with the following API:

  DB[:table].call_sproc(:select, :mysp, 'first param', 'second param')
  # or
  sp = DB[:table].prepare_sproc(:select, :mysp)
  sp.call('first param', 'second param')
  sp.call('third param', 'fourth param')

The only adapters with support for this are MySQL and JDBC (if using
a database that supports it).  Other databases don't even expose this
API.  Adding support to other databases should be fairly easy, though
I have no plans to at present.

The stored procedure implementation is similar to the prepared
statement implementation at the Dataset level.  #call_sproc and
and returning a clone of the dataset,and overriding Dataset#execute
and related functions to add options that are used by
Database#execute to send the request to the Dataset#call_sproc
method.

While working on stored procedure support, it became necessary to fix
the MySQL adapter to make it handle multiple results, since MySQL
stored procedures require that.  This also fixed issues with using
multiple statements at once in the MySQL adapter.  Before, this would
cause a &quot;commands out of sync&quot; error message that wasn't easily
recoverable from.  The MySQL adapter now supports this, though the
JDBC adapter connecting to MySQL still barfs when you attempt this.

Additionally, fix the socket tests in the MySQL adapter to use the same
user, password, and database.</message>
    <tree>1ae3c9f077e01181961866530ea3124300806f03</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4bbbedc717adf020e0e025bd0e0e967015cbcfef</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/fc6e8e116312d40c00461dfea78dda945160ddd9</url>
    <id>fc6e8e116312d40c00461dfea78dda945160ddd9</id>
    <committed-date>2008-12-01T14:03:55-08:00</committed-date>
    <authored-date>2008-12-01T14:03:55-08:00</authored-date>
    <message>Support options when altering a column's type</message>
    <tree>6e2aa081ced675140d0d2a8e6ba32d00e307729a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>24d790142526446e46a369d5d9107b393be6bc66</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/4bbbedc717adf020e0e025bd0e0e967015cbcfef</url>
    <id>4bbbedc717adf020e0e025bd0e0e967015cbcfef</id>
    <committed-date>2008-12-01T12:18:55-08:00</committed-date>
    <authored-date>2008-12-01T12:18:55-08:00</authored-date>
    <message>Support AliasedExpressions in tables when using implicitly qualified arguments in joins

This allows you to do:

  DB.from(:i.as(:j)).join(:k.as(:l), :a=&gt;:b)
  #=&gt; ... FROM i AS j INNER JOIN k AS l ON (l.a = j.b)</message>
    <tree>127ca1b108255b6a2eab462a29608279c337510a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>bde004dceff6f74f903300138e0a77f1258e9cbf</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/24d790142526446e46a369d5d9107b393be6bc66</url>
    <id>24d790142526446e46a369d5d9107b393be6bc66</id>
    <committed-date>2008-12-01T12:06:45-08:00</committed-date>
    <authored-date>2008-12-01T12:06:45-08:00</authored-date>
    <message>Fix MySQL adapter after UnsupportedIntersectExcept addition</message>
    <tree>26968e4d04425f369da2c5e891ec647f390e93b2</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>3a1a628eabb987998482670101c4cbce27cd54ec</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/bde004dceff6f74f903300138e0a77f1258e9cbf</url>
    <id>bde004dceff6f74f903300138e0a77f1258e9cbf</id>
    <committed-date>2008-12-01T11:59:43-08:00</committed-date>
    <authored-date>2008-12-01T11:59:43-08:00</authored-date>
    <message>Support Dataset#except on Oracle

This commit changes the Oracle adapter to use MINUS instead of
EXCEPT, since that's the syntax that Oracle supports.</message>
    <tree>0cb8ee9afab5bd8b1213b04e0cde501da2d95ab8</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c790367020280e1495e31c5a53fe380f48980b19</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/3a1a628eabb987998482670101c4cbce27cd54ec</url>
    <id>3a1a628eabb987998482670101c4cbce27cd54ec</id>
    <committed-date>2008-12-01T11:58:54-08:00</committed-date>
    <authored-date>2008-12-01T11:58:54-08:00</authored-date>
    <message>Raise Errors if EXCEPT/INTERSECT is used when not supported

This adds a couple of modules to Sequel::Dataset that can be included
in adapters that don't support EXCEPT/INTERSECT.
UnsupportedIntersectExcept raises an error if EXCEPT/INTERSECT is
used, and UnsupportedIntersectExceptAll raises an error if
EXCEPT ALL/INTERSECT ALL is used (but EXCEPT/INTERSECT is allowed).
The Informix, MySQL, MSSQL, and Progress adapters use
UnsupportedIntersectExcept and the Oracle and SQLite adapters use
UnsupportedIntersectExceptAll.

Similar code was already in the MSSQL and Progress adapters, this
commit removes that code.  Also, it removes some commented out code
from the Informix adapter.</message>
    <tree>21cd0dd4f36602b15399ec6bbaee7a0abc472838</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>cde6c93d3dd1c29b7fb1229b513c0e060d5f334f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c790367020280e1495e31c5a53fe380f48980b19</url>
    <id>c790367020280e1495e31c5a53fe380f48980b19</id>
    <committed-date>2008-12-01T11:56:39-08:00</committed-date>
    <authored-date>2008-12-01T11:56:39-08:00</authored-date>
    <message>Fix ordering of UNION, INTERSECT, and EXCEPT statements (Fixes #253)

Before, the UNION, INTERESECT, and EXCEPT statements came after
ORDER BY by default, this commit moves them before ORDER BY.  Some
of the adapters were changed, but not all.  If you use UNION,
INTERSECT, or EXCEPT, please test with your database to make sure it
still works.</message>
    <tree>82252d7fa74d6ec95269c925995e995246da83d1</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0c7c893c5093337008f59de6885bd682cf8d327b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/cde6c93d3dd1c29b7fb1229b513c0e060d5f334f</url>
    <id>cde6c93d3dd1c29b7fb1229b513c0e060d5f334f</id>
    <committed-date>2008-11-25T16:34:17-08:00</committed-date>
    <authored-date>2008-11-25T16:34:17-08:00</authored-date>
    <message>Fix the oracle adapter spec</message>
    <tree>121b0aff2ec0dadd7862dba1ea0f169f5cb9679a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>8b395139f67ddcf7f24443cb6c1d7460e409f639</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0c7c893c5093337008f59de6885bd682cf8d327b</url>
    <id>0c7c893c5093337008f59de6885bd682cf8d327b</id>
    <committed-date>2008-11-25T09:53:56-08:00</committed-date>
    <authored-date>2008-11-25T09:53:56-08:00</authored-date>
    <message>Support aliasing subselects in the Oracle adapter</message>
    <tree>018f826540d50c39f837d4dfccab98988481e9ba</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>70aa14e303693ce54b0c110c5dcee6ccfec9947b</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/8b395139f67ddcf7f24443cb6c1d7460e409f639</url>
    <id>8b395139f67ddcf7f24443cb6c1d7460e409f639</id>
    <committed-date>2008-11-20T15:24:52-08:00</committed-date>
    <authored-date>2008-11-20T15:24:52-08:00</authored-date>
    <message>Make Dataset#join_table work with symbols with implicit schemas

Before, in order to handle implicit aliases, it would split the
symbol (and throw away the schema part).</message>
    <tree>2ffb9776690abd77f5425d43e929c23c30af8d50</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4a23245d3126e5830c8c1c1ecacc4150ad42d011</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/70aa14e303693ce54b0c110c5dcee6ccfec9947b</url>
    <id>70aa14e303693ce54b0c110c5dcee6ccfec9947b</id>
    <committed-date>2008-11-20T14:09:29-08:00</committed-date>
    <authored-date>2008-11-20T14:09:29-08:00</authored-date>
    <message>Add a subadapter for the Progress RDBMS to the ODBC adapter, from groveriffic (Fixes #251)</message>
    <tree>1352a8a3dc7119de2683ba491b095dee197f5dbc</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c30e8e40f520aabe1d03800ddcb25a63c717dec7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/4a23245d3126e5830c8c1c1ecacc4150ad42d011</url>
    <id>4a23245d3126e5830c8c1c1ecacc4150ad42d011</id>
    <committed-date>2008-11-20T13:33:39-08:00</committed-date>
    <authored-date>2008-11-20T13:33:39-08:00</authored-date>
    <message>Make :schema__table.* work correctly

This shouldn't have been as difficult as it was, but the refactoring
done was for the best:

Move quote_schema_table and schema_and_table from Database to
Dataset, putting proxy methods in Database.

Make Database#default_schema a real attribute that can be used by
any database (but should remain nil for most).

Allow Database.new to take a :default_schema option, and document
it and other options that can be used.</message>
    <tree>b6e6d5a32e58306de765d7cd20b87ed22f15949d</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>a0f0dec1b2ce7c4304f186d3a9d1796166480403</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c30e8e40f520aabe1d03800ddcb25a63c717dec7</url>
    <id>c30e8e40f520aabe1d03800ddcb25a63c717dec7</id>
    <committed-date>2008-11-19T12:08:50-08:00</committed-date>
    <authored-date>2008-11-19T12:08:50-08:00</authored-date>
    <message>Fix typo in mssql.rb</message>
    <tree>0e45d357e6150c44c848f04bba4caede6619e524</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d407190e95e48f5de778d7b6e8ef99410b259796</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/a0f0dec1b2ce7c4304f186d3a9d1796166480403</url>
    <id>a0f0dec1b2ce7c4304f186d3a9d1796166480403</id>
    <committed-date>2008-11-19T11:41:14-08:00</committed-date>
    <authored-date>2008-11-19T11:41:14-08:00</authored-date>
    <message>Refactor and modularize Dataset#sql_select, and refactor database adapters that override it

This is a long overdue change to Sequel that makes select_sql more
modular and makes database adapters to only override the parts they
need to override instead of overriding the entire method (which
requires a lot of code duplication).

Unfortunately, I can't test the changes I made to most of the
adapters, as I don't have access to the underlying databases.  If you
use one of the following adapters, please test this commit and
make sure it works:

* Informix
* MSSQL
* Oracle

This also makes some changes to existing code.  Attempting to do a
SELECT DISTINCT ON will now raise an error with the MySQL or Oracle
adapters, as they support DISTINCT but not DISTINCT ON.  Previously,
the MySQL adapter would raise a DatabaseError when you ran the query,
and the Oracle adapter would silently change the DISTINCT ON to a
plain DISTINCT, which potentially changes the intended meaning.

The refactoring is done by splitting the public select_sql method
into a bunch of private select_*_sql methods.  The
select_clause_order private method is the list of methods to call
in order.  So if it was [:columns, :from], it would call
select_columns_sql and then select_from_sql to build the string.
All of the private select_*_sql methods take 2 arguments, the current
SQL string and the option hash to use.  The SQL string passed should
be modified in place.  Database adapters have been changed to
override just the select_*_sql methods they need, as well as
select_clause_order if they need the clauses in a different order
than the default.

Another small change made is that the Dataset#column_list private
method now treats a nil argument the same as an [] argument.  This
makes other internal code that uses the method nicer.</message>
    <tree>c5c03db691b46779c5b59d323e9efec02d1efbb7</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ace69a0cb4fa916adbf7f8a7400a4ce0d0329d1f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/d407190e95e48f5de778d7b6e8ef99410b259796</url>
    <id>d407190e95e48f5de778d7b6e8ef99410b259796</id>
    <committed-date>2008-11-17T07:56:31-08:00</committed-date>
    <authored-date>2008-11-17T07:56:31-08:00</authored-date>
    <message>Some small fixes for MySQL and for upcasing identifiers on JDBC

This changes Dataset#upcase_identifiers? to lazily load the setting.
Previously, it was handled in Database#initialize, but on JDBC (and
other adapters that have subadapters), the method that provides the
default hasn't been included in the class when Database#initialize
tried to use it, so this would end up with identifiers being upcased
when using MySQL, PostgreSQL, or SQLite on JDBC.

This fixes Database#alter_table for MySQL, for the drop_index case,
and fixes the MySQL schema parser to handle the fact that the table
name provided to schema_parse_table is now a string instead of a
symbol.</message>
    <tree>b7be4792394d1cff83155bafc4373c4c1c8bb510</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c3c2a4f9ff09f622dc10d66b6a9fe3f29c78a5bd</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ace69a0cb4fa916adbf7f8a7400a4ce0d0329d1f</url>
    <id>ace69a0cb4fa916adbf7f8a7400a4ce0d0329d1f</id>
    <committed-date>2008-11-16T14:28:35-08:00</committed-date>
    <authored-date>2008-11-16T14:28:35-08:00</authored-date>
    <message>Set standard_conforming_strings = ON by default when using PostgreSQL, turn off with Sequel::Postgres.force_standard_strings = false

PostgreSQL has two string modes, escaped (E'...') and unescaped
('...').  By default, you can use string escapes in an unescaped
string, but that will change in a future version.  It is recommended
that you set standard_conforming_strings = ON when using PostgreSQL,
though that will not be the default till a future version.

Sequel expects the use of standard conforming strings, so it always
uses unescaped strings.  This brings up PostgreSQL warnings if the
standard_conforming_strings setting was not set to ON in the
PostgreSQL server configuration.  With this commit, Sequel will
changes the setting (since it can be specified per connection),
unless you set Sequel::Postgres.force_standard_strings = false.

The standard_conforming_strings is only available in PostgreSQL 8.2
and greater, but checking the server version at the point we want to
change the setting would be quite complex considering all the
underlying drivers that we support, so just send it unconditionally
with a rescue so there shouldn't be an effect if the setting isn't
available.

For SQL:Blob values, use the extended string format when literalizing
the value, since escape_bytea seems to require it.  Without the
extended string format, it appears to give the wrong value.</message>
    <tree>a256f51cf976071ef6531925c57d371b951fb3fa</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>b7e009273c3d7242f7ce5fd749121a25e72d216e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c3c2a4f9ff09f622dc10d66b6a9fe3f29c78a5bd</url>
    <id>c3c2a4f9ff09f622dc10d66b6a9fe3f29c78a5bd</id>
    <committed-date>2008-11-16T13:41:19-08:00</committed-date>
    <authored-date>2008-11-16T13:41:19-08:00</authored-date>
    <message>Fix Database#rename_table when using PostgreSQL (Fixes #248)</message>
    <tree>0f158d6f2f4b4a6e30b348e70c95e056998f2ada</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d6d45a37e4ae29a4d1fc87c3e6046c3ece1213d5</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/b7e009273c3d7242f7ce5fd749121a25e72d216e</url>
    <id>b7e009273c3d7242f7ce5fd749121a25e72d216e</id>
    <committed-date>2008-11-16T13:31:43-08:00</committed-date>
    <authored-date>2008-11-16T13:31:43-08:00</authored-date>
    <message>Whether to upcase or quote identifiers can now be set separately

This changes Sequel by allowing the user to specify whether to upcase
identifiers.  Previously, upcasing was forced when quoting by default
(but not when using MySQL, PostgreSQL, or SQLite), and not used when
not quoting. This separates the quoting and upcasing functionality
and allows the user to choose one or the other, or both, or even turn
it on upcasing identifiers for database that didn't do so before.

Backwards compatibility is mostly taken care of.  The Sequel default
is still to upcase, but not when using the MySQL, PostgreSQL, or
SQLite adapters.  If you use a custom adapter and do not want to
upcase by default, add a private instance method to your database
subclass named upcase_identifiers_default and have it return false.

I also removed some useless RDoc for the Sequel.single_threaded
method, which hasn't really been valid for a long time.</message>
    <tree>24a05dc1c9a4140fe7cd6e445083481f3d7dec74</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
</commits>
