Permalink
Browse files

Merge pull request #3258 from ileitch/3-1-stable

Postgres: Do not attempt to deallocate a statement if the connection is no longer active.
  • Loading branch information...
2 parents 960882f + fc55fa7 commit 88ac481b46cd4cb13ef1c52d7c93f2bff39538e3 @tenderlove tenderlove committed Oct 20, 2011
@@ -290,7 +290,13 @@ def cache
end
def dealloc(key)
- @connection.query "DEALLOCATE #{key}"
+ @connection.query "DEALLOCATE #{key}" if connection_active?
+ end
+
+ def connection_active?
+ @connection.status == PGconn::CONNECTION_OK
+ rescue PGError
+ false
end
end
@@ -2,6 +2,16 @@
module ActiveRecord::ConnectionAdapters
class PostgreSQLAdapter < AbstractAdapter
+ class InactivePGconn
+ def query(*args)
+ raise PGError
+ end
+
+ def status
+ PGconn::CONNECTION_BAD
+ end
+ end
+
class StatementPoolTest < ActiveRecord::TestCase
def test_cache_is_per_pid
return skip('must support fork') unless Process.respond_to?(:fork)
@@ -18,6 +28,12 @@ def test_cache_is_per_pid
Process.waitpid pid
assert $?.success?, 'process should exit successfully'
end
+
+ def test_dealloc_does_not_raise_on_inactive_connection
+ cache = StatementPool.new InactivePGconn.new, 10
+ cache['foo'] = 'bar'
+ assert_nothing_raised { cache.clear }
+ end
end
end
end

0 comments on commit 88ac481

Please sign in to comment.