Unset association when existing record is destroyed.

To avoid foreign key errors (and invalid data) in the database, when a belongs_to association is destroyed, it should also be nil'd out on the parent object.
use template0 option for creating activerecord test databases in postgres build_database task
Raise generic ParseError exception when ActionDispatch::ParamsParser fails parsing request params.
Fix ActionDispatch::ParamsParser::ParseError message for XML and JSON parsers.
Make ActionDispatch::ParamsParser::ParseError#original_exception return the original exception.
fix punctuation in Getting Started prologue [ci skip]
More concise flash output
Merge pull request #113 from lifo/gr-flash-output

Ran the generators and had no further changes. Merging.
Nice and easy delegation to the class
Fix typo [ci skip]
Update action_controller_overview.textile to ruby 1.9 syntax [ci skip]
update some AS code examples to 1.9 hash syntax [ci skip]
update AS/core_ext docs [ci skip]
fix AS/core_ext examples [ci skip]
Remove redundant 'the'.
Freeze columns before using them as hash keys

This reduces the number of allocated strings from columns * (rows + 1) to just columns.
Moves column dump specific code to a module included in AbstractAdapter

Having column related schema dumper code in the AbstractAdapter. The
code remains the same, but by placing it in the AbstractAdapter, we can
then overwrite it with Adapter specific methods that will help with
Adapter specific data types.

The goal of moving this code here is to create a new migration key for
PostgreSQL's array type. Since any datatype can be an array, the goal is
to have ':array => true' as a migration option, turning the datatype
into an array. I've implemented this in postgres_ext, the syntax is
shown here: https://github.com/dockyard/postgres_ext#arrays

Adds array migration support

Adds array_test.rb outlining the test cases for array data type
Adds pg_array_parser to Gemfile for testing
Adds pg_array_parser to postgresql_adapter (unused in this commit)

Adds schema dump support for arrays

Adds postgres array type casting support

Updates changelog, adds note for inet and cidr support, which I forgot to add before

Removing debugger, Adds pg_array_parser to JRuby platform

Removes pg_array_parser requirement, creates ArrayParser module used by
PostgreSQLAdapter
Move queue classes to ActiveSupport
Revert "create a transaction object and point AR objects at that object during a"

This reverts commit c24c885209ac2334dc6f798c394a821ee270bec6.

Here's the explanation I just sent to @tenderlove:

Hey,

I've been thinking about about the transaction memory leak thing that we
were discussing.

Example code:

post = nil
Post.transaction do
  N.times { post = Post.create }
end

Post.transaction is going to create a real transaction and there will
also be a (savepoint) transaction inside each Post.create.

In an idea world, we'd like all but the last Post instance to be GC'd,
and for the last Post instance to receive its after_commit callback when
Post.transaction returns.

I can't see how this can work using your solution where the Post itself
holds a reference to the transaction it is in; when Post.transaction
returns, control does not switch to any of Post's instance methods, so
it can't trigger the callbacks itself.

What we really want is for the transaction itself to hold weak
references to the objects within the transaction. So those objects can
be GC'd, but if they are not GC'd then the transaction can iterate them
and execute their callbacks.

I've looked into WeakRef implementations that are available. On 1.9.3,
the stdlib weakref library is broken and we shouldn't use it.

There is a better implementation here:

https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb

We could use that, either by pulling in the gem or just copying the code
in, but it still suffers from the limitation that it uses ObjectSpace
finalizers.

In my testing, this finalizers make GC quite expensive:
https://gist.github.com/3722432

Ruby 2.0 will have a native WeakRef implementation (via
ObjectSpace::WeakMap), hence won't be reliant on finalizers:
http://bugs.ruby-lang.org/issues/4168

So the ultimate solution will be for everyone to use Ruby 2.0, and for
us to just use ObjectSpace::WeakMap.

In the meantime, we have basically 3 options:

The first is to leave it as it is.

The second is to use a finalizer-based weakref implementation and take
the GC perf hit.

The final option is to store object ids rather than the actual objects.
Then use ObjectSpace._id2ref to deference the objects at the end of the
transaction, if they exist. This won't stop memory use growing within
the transaction, but it'll grow more slowly.

I benchmarked the performance of _id2ref this if the object does or does
not exist: https://gist.github.com/3722550

If it does exist it seems decent, but it's hugely more expensive if it
doesn't, probably because we have to do the rescue nil.

Probably most of the time the objects will exist. However the point of
doing this optimisation is to allow people to create a large number of
objects inside a transaction and have them be GC'd. So for that use
case, we'd be replacing one problem with another. I'm not sure which of
the two problems is worse.

My feeling is that we should just leave this for now and come back to it
when Ruby 2.0 is out.

I'm going to revert your commit because I can't see how it solves this.
Hope you don't mind... if I've misunderstood then let me know!

Jon
Start to tease out transaction handling into a state machine