diff options
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/firebird_adapter.rb | 25 |
2 files changed, 25 insertions, 2 deletions
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: |