From 3d0e3c92900ff3dd1ddef7c94c201698e71ca9d5 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Fri, 2 Dec 2005 01:19:18 +0000 Subject: [PATCH] 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(-) 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 ] + * Firebird: updated for FireRuby 0.4.0. #3009 [Ken Kunz ] * 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: