<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>550a371218c9de50b2dfe1865dc99b878b514929</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/5e1668eadd6664e4d30fadab5333b7b0bc192b14</url>
    <id>5e1668eadd6664e4d30fadab5333b7b0bc192b14</id>
    <committed-date>2009-04-03T10:13:31-07:00</committed-date>
    <authored-date>2009-04-03T10:13:31-07:00</authored-date>
    <message>Bump version to 2.12.0, add 2.12.0 release notes</message>
    <tree>947c977f39be7f3e7c298e9cd1b8bce38ba510d5</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c879600684489e56ae8b37240cb21ad9d063e20e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/550a371218c9de50b2dfe1865dc99b878b514929</url>
    <id>550a371218c9de50b2dfe1865dc99b878b514929</id>
    <committed-date>2009-04-03T09:17:37-07:00</committed-date>
    <authored-date>2009-04-03T09:17:37-07:00</authored-date>
    <message>Add RDoc for the SEQUEL_NO_CORE_EXTENSIONS and SEQUEL_NO_ASSOCIATIONS options</message>
    <tree>945188ebfd6b65458d62ff512ee5b2c9b10198ed</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d2f3b9b5787ddad05cba9586206420f9f9614ac8</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c879600684489e56ae8b37240cb21ad9d063e20e</url>
    <id>c879600684489e56ae8b37240cb21ad9d063e20e</id>
    <committed-date>2009-04-02T14:47:02-07:00</committed-date>
    <authored-date>2009-04-02T14:47:02-07:00</authored-date>
    <message>Cleanup Rakefile and use new rdoc format for website

The website now will have 3 separate rdoc sections, one for
core/model, one for adapters, and one for extensions/plugins.
I think this will make the RDoc less cluttered and more approachable.

The Rakefile website and website_rdoc tasks are now able to generate
a fully functional local version of the site.  In order for this to
work, I changed all of the internal website links to relative links
instead of the absolute links used previously.

You can now use the Rakefile without rspec installed, though obviously
you can't use the spec tasks.  I refactored the Rakefile to use
lambdas to reduce the amount of work done just by parsing the
Rakefile, by only running code inside the tasks that need it.

I removed the install_no_docs task.  If anyone really wants it I can
add it back.

I made the .gitignore patterns absolute.  I don't think this will
cause any problems, and with normal usage of the sequel repository,
there should be no effect.

This commit changes the website task to only generate the base
website, and adds a website_rdoc task to generate the 3 rdoc
pages.  You now need to use the website_rf task to update the
sequel.rubyforge.org site.  As I'm the only person that does
that, I don't expect any complaints.  I'm also switching the
website upload to use rsync instead of scp, to improve the speed.</message>
    <tree>f2d26d3600b19601e28ca60db71928f82368b5d7</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c3e312359b6361dbb0e2b5f9cb81e9f94546fb71</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/d2f3b9b5787ddad05cba9586206420f9f9614ac8</url>
    <id>d2f3b9b5787ddad05cba9586206420f9f9614ac8</id>
    <committed-date>2009-04-02T12:51:12-07:00</committed-date>
    <authored-date>2009-04-02T12:51:12-07:00</authored-date>
    <message>Fix bug in Model.def_dataset_method where it checked for instance methods existence instead of class method existence</message>
    <tree>17850cba3b2c0d714e4fae25c82e9885b6f57ba7</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>76d7e74136cf5320837acd4b00e6b6218b41a7e5</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c3e312359b6361dbb0e2b5f9cb81e9f94546fb71</url>
    <id>c3e312359b6361dbb0e2b5f9cb81e9f94546fb71</id>
    <committed-date>2009-04-02T12:13:18-07:00</committed-date>
    <authored-date>2009-04-02T12:13:18-07:00</authored-date>
    <message>Fix rollback bug in Database#transaction in the PostgreSQL adapter

When I changed the transaction method to only use savepoints when
they were specifically requested, I broke the transaction method when
Sequel::Rollback was raised.  Scaringly, this wasn't caught be the
specs or the app tests I run on a regular basis.

I added an adapter spec for this, and also added an integration
test suite related to database transactions, mostly copied from the
PostgreSQL adapter spec.  Hopefully this will ensure that breakage is
caught earlier in the future (ideally before I commit).</message>
    <tree>abc296556467ad1d990b7da53232e224f6e9c48b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>cabdbf40489013a0c17e578d6bb63bf4c47ee831</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/76d7e74136cf5320837acd4b00e6b6218b41a7e5</url>
    <id>76d7e74136cf5320837acd4b00e6b6218b41a7e5</id>
    <committed-date>2009-04-02T11:03:40-07:00</committed-date>
    <authored-date>2009-04-02T11:03:40-07:00</authored-date>
    <message>Fix some bugs in the validation_helpers plugin when options are used</message>
    <tree>5b167b5b8bc46bc71f7327753e6b7309c1d3eec4</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d261b1efbca1351f7bde1cdca0370959d3cb1a27</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/cabdbf40489013a0c17e578d6bb63bf4c47ee831</url>
    <id>cabdbf40489013a0c17e578d6bb63bf4c47ee831</id>
    <committed-date>2009-04-02T09:00:04-07:00</committed-date>
    <authored-date>2009-04-02T09:00:04-07:00</authored-date>
    <message>Fix Database#blank_object for objects that don't respond to empty?</message>
    <tree>6ccdb7cb8ab9a4295278030f7355f76ae67f69e6</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>8364e2ea423b44811dbe5a63e589342686ef95ca</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/d261b1efbca1351f7bde1cdca0370959d3cb1a27</url>
    <id>d261b1efbca1351f7bde1cdca0370959d3cb1a27</id>
    <committed-date>2009-04-01T16:24:59-07:00</committed-date>
    <authored-date>2009-04-01T16:24:59-07:00</authored-date>
    <message>Update bullet points on front page, remove deprecated example, some other cleanup</message>
    <tree>0e04c00709c73fc2bce4d5514a5665c8bdbe8be4</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6b85f2ab43d8b15266936eb5e3f3651cf137193a</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/8364e2ea423b44811dbe5a63e589342686ef95ca</url>
    <id>8364e2ea423b44811dbe5a63e589342686ef95ca</id>
    <committed-date>2009-04-01T16:24:16-07:00</committed-date>
    <authored-date>2009-04-01T16:24:16-07:00</authored-date>
    <message>Remove sequel_versioned plugin link, since it is broken</message>
    <tree>2f9054ef95ff5287b8dd3065d1a3fef12a486670</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>c8328a9b102acabfafdb5e2deddf94100b7f4242</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6b85f2ab43d8b15266936eb5e3f3651cf137193a</url>
    <id>6b85f2ab43d8b15266936eb5e3f3651cf137193a</id>
    <committed-date>2009-04-01T13:21:53-07:00</committed-date>
    <authored-date>2009-04-01T13:19:00-07:00</authored-date>
    <message>Remove internal use of Symbol#like and Symbol#qualify</message>
    <tree>4811a535a6e2c4878c100df55e53d73897a0f666</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>32f8d292430173cfd9f687a404fa45428e779bf3</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/c8328a9b102acabfafdb5e2deddf94100b7f4242</url>
    <id>c8328a9b102acabfafdb5e2deddf94100b7f4242</id>
    <committed-date>2009-04-01T12:45:33-07:00</committed-date>
    <authored-date>2009-04-01T12:45:33-07:00</authored-date>
    <message>Fix RDoc for Sequel::Deprecation</message>
    <tree>a1ec2f76214dabdc0a3c03721eb2f39f393fd452</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>896dc72d8fd1463f26e1674998621fc3b83c5b7f</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/32f8d292430173cfd9f687a404fa45428e779bf3</url>
    <id>32f8d292430173cfd9f687a404fa45428e779bf3</id>
    <committed-date>2009-03-31T18:12:59-07:00</committed-date>
    <authored-date>2009-03-31T18:12:59-07:00</authored-date>
    <message>Deprecate Java::JavaSQL::Timestamp#usec

The JDBC adapter has returned Java::JavaSQL::Timestamp values as
Time or DateTime for a few versions now, so we don't need to add
a method to the Java class.</message>
    <tree>89b25d172967dea88179b679e14b69c8e4c8d7ec</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>2433bb38b84e1f8b5755896fc9fb651dfd2d117f</id>
      </parent>
      <parent>
        <id>0cf1951fe77af033acc617eb3e47c0acef594427</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/896dc72d8fd1463f26e1674998621fc3b83c5b7f</url>
    <id>896dc72d8fd1463f26e1674998621fc3b83c5b7f</id>
    <committed-date>2009-03-30T20:48:10-07:00</committed-date>
    <authored-date>2009-03-30T20:48:10-07:00</authored-date>
    <message>Merge dusty's method renaming patch with some updated documentation

Conflicts:
	lib/sequel/adapters/shared/mysql.rb</message>
    <tree>d8ca6b30844add70ab4872d4b8eaac99b57c5a65</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>72909390efe8d3bca5ee9b5f27749c50b085ff15</id>
      </parent>
    </parents>
    <author>
      <name>Dusty Doris</name>
      <email>git@dusty.name</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0cf1951fe77af033acc617eb3e47c0acef594427</url>
    <id>0cf1951fe77af033acc617eb3e47c0acef594427</id>
    <committed-date>2009-03-30T19:52:48-07:00</committed-date>
    <authored-date>2009-03-30T19:52:48-07:00</authored-date>
    <message>rename methods to be more descriptive of intent

renamed multi_insert_update to on_duplicate_key_update
renamed multi_insert_ignore to insert_ignore

SUPPORT for ON DUPLICATE KEY UPDATE and INSERT IGNORE for mysql datasets</message>
    <tree>d8ca6b30844add70ab4872d4b8eaac99b57c5a65</tree>
    <committer>
      <name>Dusty Doris</name>
      <email>git@dusty.name</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0ea83550c1b3186afd8cb3a493d24795dca0012e</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/2433bb38b84e1f8b5755896fc9fb651dfd2d117f</url>
    <id>2433bb38b84e1f8b5755896fc9fb651dfd2d117f</id>
    <committed-date>2009-03-30T13:46:51-07:00</committed-date>
    <authored-date>2009-03-30T13:46:51-07:00</authored-date>
    <message>Fix some RDoc for multi_insert_ignore and multi_insert_update in the shared MySQL adapter</message>
    <tree>d0fea49259fd2018eb6834469fe5a9a41e4c6866</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>72909390efe8d3bca5ee9b5f27749c50b085ff15</id>
      </parent>
      <parent>
        <id>e318b2d9b10ab1b3d979901d53034003a38100e4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0ea83550c1b3186afd8cb3a493d24795dca0012e</url>
    <id>0ea83550c1b3186afd8cb3a493d24795dca0012e</id>
    <committed-date>2009-03-30T13:44:05-07:00</committed-date>
    <authored-date>2009-03-30T13:44:05-07:00</authored-date>
    <message>Merge commit 'dusty/master'</message>
    <tree>a44a0746cc32c96fad689cf8a584bb500fb6793b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>930f2b705ac548efde2ce042cf263553b948d815</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/72909390efe8d3bca5ee9b5f27749c50b085ff15</url>
    <id>72909390efe8d3bca5ee9b5f27749c50b085ff15</id>
    <committed-date>2009-03-30T13:32:57-07:00</committed-date>
    <authored-date>2009-03-30T13:32:57-07:00</authored-date>
    <message>Fix deprecated use of Dataset#uniq in the oracle specs, thanks jacaetevha</message>
    <tree>7b68316f323dbc9a7c65ef997a7a0b68a058c3a0</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>242bd8e257816bd16a73d832eaeea4371aa61ee7</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/930f2b705ac548efde2ce042cf263553b948d815</url>
    <id>930f2b705ac548efde2ce042cf263553b948d815</id>
    <committed-date>2009-03-30T12:47:25-07:00</committed-date>
    <authored-date>2009-03-30T12:47:25-07:00</authored-date>
    <message>Fix Model.[] optimization introduced in 2.11.0 for databases that don't use LIMIT, thanks jacaetevha</message>
    <tree>ffc9bfe15f1c588b17b1ed0589db3b5dfd2a7dff</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>3066d5d1750b4861bad1df246edc207fe9786936</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/242bd8e257816bd16a73d832eaeea4371aa61ee7</url>
    <id>242bd8e257816bd16a73d832eaeea4371aa61ee7</id>
    <committed-date>2009-03-30T12:10:36-07:00</committed-date>
    <authored-date>2009-03-30T12:10:36-07:00</authored-date>
    <message>Use Model::Errors#add in the validation plugins</message>
    <tree>c8a2e96c1c94ba9e16817d6447f174410eb74ed3</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4f5aebf41b62aee42e30a35b50f2f40e87b851f9</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/3066d5d1750b4861bad1df246edc207fe9786936</url>
    <id>3066d5d1750b4861bad1df246edc207fe9786936</id>
    <committed-date>2009-03-30T12:05:19-07:00</committed-date>
    <authored-date>2009-03-30T12:05:19-07:00</authored-date>
    <message>RDoc updates in remaining model files, small fixes to reduce memory use

The majority of the lines changed are due to using constants instead of
creating new string and regexp objects in every call (which need to be
garbage collected).

This also fixes Model::Errors#count to not create full_messages, so
it should be faster.

This should be the last of the RDoc related commits.</message>
    <tree>819b86c37891b782b40f9555e7754b5a605ef905</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>fd618bab41035c5f8575f73e3ad253912fb19245</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/4f5aebf41b62aee42e30a35b50f2f40e87b851f9</url>
    <id>4f5aebf41b62aee42e30a35b50f2f40e87b851f9</id>
    <committed-date>2009-03-30T11:19:45-07:00</committed-date>
    <authored-date>2009-03-30T11:19:45-07:00</authored-date>
    <message>RDoc updates in associations.rb</message>
    <tree>a5b0f4837697a870b809e56d0b024585b2df3c9d</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>a24f8d14e49c8a3e5e35aa212285f3e28b454d58</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/fd618bab41035c5f8575f73e3ad253912fb19245</url>
    <id>fd618bab41035c5f8575f73e3ad253912fb19245</id>
    <committed-date>2009-03-30T08:08:27-07:00</committed-date>
    <authored-date>2009-03-30T08:08:27-07:00</authored-date>
    <message>Fix some deprecated use of multi_insert in the mysql specs to import</message>
    <tree>aebab8219c6166cd98642a021a08162d3b4148fc</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6749f16490fc57e4fb3344f0b1c5376b76a70689</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/a24f8d14e49c8a3e5e35aa212285f3e28b454d58</url>
    <id>a24f8d14e49c8a3e5e35aa212285f3e28b454d58</id>
    <committed-date>2009-03-29T17:48:33-07:00</committed-date>
    <authored-date>2009-03-29T17:48:33-07:00</authored-date>
    <message>Minor code changes in and major RDoc updates to model.rb, model/base.rb, model/plugins.rb

Change the @models cache under Sequel to use a
Model::ANONYMOUS_MODEL_CLASSES constant instead.

Rename DATASET_METHOD_RE to NORMAL_METHOD_NAME_REGEXP, better
reflecting current usage and purpose.

Add SETTER_METHOD_REGEXP instead of creating a new Regexp
every time setter_methods is used, should save memory.

Simplify create to just call new with the args and block and then
call save.

Allow def_dataset_method with a block to work without a dataset,
since it stores the information to apply to a future dataset
given to set_dataset anyway.

Use the ternary operator instead of if/else inside save to save a
few lines.

Make destroy for model datasets faster by not incrementing a counter.</message>
    <tree>536b2bbb4f5a272f913a5324b49dbcfe6810ff94</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6e4043d992b4fdf0b0d3b046bcaf414431dfa9a6</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6749f16490fc57e4fb3344f0b1c5376b76a70689</url>
    <id>6749f16490fc57e4fb3344f0b1c5376b76a70689</id>
    <committed-date>2009-03-29T11:59:59-07:00</committed-date>
    <authored-date>2009-03-29T11:59:59-07:00</authored-date>
    <message>Don't use the model association plugin if SEQUEL_NO_ASSOCIATIONS constant or environment variable is defined

If you don't need associations for your application, Sequel won't
force them on you any more.  This should cut down on memory usage
when associations are not needed.

This commit removes the little remaining coupling between the base
model plugin and the caching, validation class methods, and
association plugins.

This commit moves the association_reflection.rb file into
associations.rb.  Associations could be just like any other plugin
if I wanted to change the namespace hierarchy, but I don't think it
is worth it.  Almost everyone using models is going to want
associations of some kind, this is for the rare soul that doesn't
want it.

This commit allows you to have associations for only certain
classes by doing:

  require 'sequel/model/associations'
  MyModel.plugin Sequel::Model::Associations

This commit probably causes some ruby -w issues because of the
removal of the code that sets @transform to nil.  Transforms are
going away soon, so I'm willing to make this change now, so I
don't forget to make it later.

In order to fix a ruby -w issue in validation class methods
plugin, the skip_superclass_validations? was added to the
plugin's class methods.</message>
    <tree>59782adfa6382bbae1ebf133cab7d8e727eac6ca</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>f91d716f69f78b5aba129e8af1c3c9521dee55f4</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/6e4043d992b4fdf0b0d3b046bcaf414431dfa9a6</url>
    <id>6e4043d992b4fdf0b0d3b046bcaf414431dfa9a6</id>
    <committed-date>2009-03-26T21:54:48-07:00</committed-date>
    <authored-date>2009-03-26T21:54:48-07:00</authored-date>
    <message>Don't require core_sql if SEQUEL_NO_CORE_EXTENSIONS constant or environment variable is defined

This commit enables the user to have Sequel not add any extensions
to the core classes.  Sequel should still work correctly without the
core extensions, otherwise there is a bug.  All the core extensions
give you is a nice DSL, they are not required.</message>
    <tree>4cba1abfcb29325f17f0069beb581c145710e85e</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ac1e97f1bc0454eb3fa1fcd8d7a393d809807427</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/f91d716f69f78b5aba129e8af1c3c9521dee55f4</url>
    <id>f91d716f69f78b5aba129e8af1c3c9521dee55f4</id>
    <committed-date>2009-03-26T21:30:47-07:00</committed-date>
    <authored-date>2009-03-26T21:30:47-07:00</authored-date>
    <message>Break Database#typecast_value into separate functions for each type</message>
    <tree>d905a52c6c5acf0374ccac4de50e6a824e4c1928</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>8feee320f33e2798963237771465ea1f035e9a39</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/ac1e97f1bc0454eb3fa1fcd8d7a393d809807427</url>
    <id>ac1e97f1bc0454eb3fa1fcd8d7a393d809807427</id>
    <committed-date>2009-03-26T21:12:42-07:00</committed-date>
    <authored-date>2009-03-26T21:12:42-07:00</authored-date>
    <message>Change the deprecation messages to specify that removal/changes will happen in 3.0</message>
    <tree>6cc2e62c8ffc7eb77f2f022b64866ddfb5c70bd1</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>9b429ccc50502ddf1933e5d6871afed1c79837e6</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/8feee320f33e2798963237771465ea1f035e9a39</url>
    <id>8feee320f33e2798963237771465ea1f035e9a39</id>
    <committed-date>2009-03-26T21:07:22-07:00</committed-date>
    <authored-date>2009-03-26T21:07:22-07:00</authored-date>
    <message>Move Model.extract_options! from base to the validation_class_method plugin, since that is the only user</message>
    <tree>d916f3d7692152a658365cc3a6e14e83f5cd382a</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0c9fa7c5411b69587b2a2261e081081754342212</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/9b429ccc50502ddf1933e5d6871afed1c79837e6</url>
    <id>9b429ccc50502ddf1933e5d6871afed1c79837e6</id>
    <committed-date>2009-03-26T21:01:07-07:00</committed-date>
    <authored-date>2009-03-26T21:01:07-07:00</authored-date>
    <message>Add validation_helpers model plugin, which adds instance level validation support similar to previously standard validations, with a different API

This plugin should satisfy most validation needs.  All previously
standard validations were ported except for acceptance_of and
confirmation_of, both of which are anti-patterns, as they encourage
error checking in the model that should be done in the controller.
Model validations should deal with the errors in the model's data,
not whether a user checked a box or put an identical value in a
confirmation field.

validates_each was not ported as it is much easier to just write your
own validation code if a standard validation doesn't handle it:

  # Old class level validation
  validates_each(:date) do |o,a,v|
    o.errors[a] &lt;&lt; '...' unless v &gt; Date.today
  end

  # New instance level validation
  def validate
    errors[:date] &lt;&lt; '...' unless date &gt; Date.today
  end

The other validations were mostly renamed:

  # Old class level validations
  validates_format_of :col, :with=&gt;/.../
  validates_length_of :col, :maximum=&gt;5
  validates_length_of :col, :minimum=&gt;3
  validates_length_of :col, :is=&gt;4
  validates_length_of :col, :within=&gt;3..5
  validates_not_string :col
  validates_numericality_of :col
  validates_numericality_of :col, :only_integer=&gt;true
  validates_presence_of :col
  validates_inclusion_of :col, :in=&gt;[3, 4, 5]
  validates_uniqueness_of :col, :col2
  validates_uniqueness_of([:col, :col2])

  # New instance level validations
  def validate
    validates_format /.../, :col
    validates_max_length 5, :col
    validates_min_length 3, :col
    validates_exact_length 4, :col
    validates_length_range 3..5, :col
    validates_not_string :col
    validates_numeric :col
    validates_integer :col
    validates_presence :col
    validates_includes([3,4,5], :col)
    validates_unique :col, :col2
    validates_unique([:col, :col2])
  end

Another change made is to specify the same type of validation on
multiple attributes, you must use an array:

  # Old
  validates_length_of :name, :password, :within=&gt;3..5

  # New
  def validate
    validates_length_range 3..5, [:name, :password]
  end

The :message, :allow_blank, :allow_missing, and :allow_nil options
are still respected.  The :tag option is not needed as instance level
validations work with code reloading without workarounds. The :if
option is also not needed for instance level validations:

  # Old
  validates_presence_of :name, :if=&gt;:new?
  validates_presence_of :pass, :if=&gt;{flag &gt; 3}

  # New
  def validate
    validates_presence(:name) if new?
    validates_presence(:pass) if flag &gt; 3
  end

validates_unique is a little different than the other new
validations.  It doesn't accept the :allow_* options, and you can
specify multiple attributes instead of using an array.  If you
use an array, it is intepreted that you want the combination of
values unique, instead of each value unique, which is how it
operated previously.  The new uniqueness logic is also much
simpler and hopefully more robust, though you should still have
a unique database index for integrity purposes.

The validation_helpers plugin is half the size of the
validation_class_methods plugin, and has better specs, IMO.

This commit also removes some duplicative code from the
validation_class_methods specs.</message>
    <tree>ec4babeb747e0d9b56f5b5781f6ea214a0300d04</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4faa6f50c3a853e020b0b62eaf6a43c73bcbb31d</id>
      </parent>
    </parents>
    <author>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </author>
    <url>http://github.com/jeremyevans/sequel/commit/0c9fa7c5411b69587b2a2261e081081754342212</url>
    <id>0c9fa7c5411b69587b2a2261e081081754342212</id>
    <committed-date>2009-03-26T14:40:04-07:00</committed-date>
    <authored-date>2009-03-26T14:40:04-07:00</authored-date>
    <message>Split multi_insert into 2 methods with separate APIs, keep (deprecated) backwards compatibility

The API for multi_insert has always bothered me.  It's too complex,
and the method should have been split from the beginning.  import
was an alias to multi_insert, so I've split the method and used
import as the underlying method that takes an array columns and
an array or arrays of values or a dataset, and had multi_insert
call import.  Backwards compatibility was kept, but it's deprecated
and will be removed before 3.0.

While here, fix a very misleading RDoc example for multi_insert,
probably added by me about a year ago because I didn't understand
the method's API (using *args when you don't actually accept an
arbitrary number of arguments is a bad idea).</message>
    <tree>bea8ba6b4867a2eff7a081031128488c2987931b</tree>
    <committer>
      <name>Jeremy Evans</name>
      <email>code@jeremyevans.net</email>
    </committer>
  </commit>
</commits>
