From 3d0e3c92900ff3dd1ddef7c94c201698e71ca9d5 Mon Sep 17 00:00:00 2001
From: Jeremy Kemper <jeremy@bitsweat.net>
Date: Fri, 2 Dec 2005 01:19:18 +0000
Subject: Firebird: active? and reconnect! methods for handling stale
 connections.  References #428.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3205 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 activerecord/CHANGELOG                             |  2 ++
 .../connection_adapters/firebird_adapter.rb        | 25 ++++++++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

(limited to 'activerecord')

diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 3bb82b58c5..ce96b64ed5 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,7 @@
 *SVN*
 
+* Firebird: active? and reconnect! methods for handling stale connections.  #428 [Ken Kunz <kennethkunz@gmail.com>]
+
 * Firebird: updated for FireRuby 0.4.0.  #3009 [Ken Kunz <kennethkunz@gmail.com>]
 
 * MySQL and PostgreSQL: active? compatibility with the pure-Ruby driver.  #428 [Jeremy Kemper]
diff --git a/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb b/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb
index 110e774b5e..9bf047f0b8 100644
--- a/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb
@@ -31,9 +31,10 @@ module ActiveRecord
         raise ArgumentError, "No database specified. Missing argument: database."
       end
       options = config[:charset] ? { CHARACTER_SET => config[:charset] } : {}
+      connection_params = [config[:username], config[:password], options]
       db = FireRuby::Database.new_from_params(*config.values_at(:database, :host, :port, :service))
-      connection = db.connect(config[:username], config[:password], options)
-      ConnectionAdapters::FirebirdAdapter.new(connection, logger)
+      connection = db.connect(*connection_params)
+      ConnectionAdapters::FirebirdAdapter.new(connection, logger, connection_params)
     end
   end
 
@@ -240,6 +241,11 @@ module ActiveRecord
       @@boolean_domain = { :true => 1, :false => 0 }
       cattr_accessor :boolean_domain
 
+      def initialize(connection, logger, connection_params=nil)
+        super(connection, logger)
+        @connection_params = connection_params
+      end
+
       def adapter_name # :nodoc:
         'Firebird'
       end
@@ -254,6 +260,7 @@ module ActiveRecord
         "#{table_name}_seq"
       end
 
+
       # QUOTING ==================================================
 
       def quote(value, column = nil) # :nodoc:
@@ -280,6 +287,19 @@ module ActiveRecord
         quote(boolean_domain[:false])
       end
 
+
+      # CONNECTION MANAGEMENT ====================================
+
+      def active?
+        not @connection.closed?
+      end
+
+      def reconnect!
+        @connection.close
+        @connection = @connection.database.connect(*@connection_params)
+      end
+
+
       # DATABASE STATEMENTS ======================================
 
       def select_all(sql, name = nil) # :nodoc:
@@ -340,6 +360,7 @@ module ActiveRecord
         FireRuby::Generator.new(sequence_name, @connection).next(1)
       end
 
+
       # SCHEMA STATEMENTS ========================================
 
       def columns(table_name, name = nil) # :nodoc:
-- 
cgit v1.2.3