Changeset 3000
- Timestamp:
- 11/13/05 08:23:07 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/CHANGELOG
r2996 r3000 1 1 *SVN* 2 3 * When AbstractAdapter#log rescues an exception, attempt to detect and reconnect to an inactive database connection. Connection adapter must respond to the active? and reconnect! instance methods. Initial support for PostgreSQL. [Jeremy Kemper] 2 4 3 5 * Much faster Oracle column reflection. #2848 [Michael Schoen <schoenm@earthlink.net>] trunk/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
r2761 r3000 48 48 protected 49 49 def log(sql, name) 50 begin 51 if block_given? 52 if @logger and @logger.level <= Logger::INFO 53 result = nil 54 seconds = Benchmark.realtime { result = yield } 55 @runtime += seconds 56 log_info(sql, name, seconds) 57 result 58 else 59 yield 60 end 50 if block_given? 51 if @logger and @logger.level <= Logger::INFO 52 result = nil 53 seconds = Benchmark.realtime { result = yield } 54 @runtime += seconds 55 log_info(sql, name, seconds) 56 result 61 57 else 62 log_info(sql, name, 0) 63 nil 58 yield 64 59 end 65 rescue Exception =>e66 log_info( "#{e.message}: #{sql}", name, 0)67 raise ActiveRecord::StatementInvalid, "#{e.message}: #{sql}"60 else 61 log_info(sql, name, 0) 62 nil 68 63 end 64 rescue Exception => e 65 log_info("#{e.message}: #{sql}", name, 0) 66 reconnect_if_inactive! 67 raise ActiveRecord::StatementInvalid, "#{e.message}: #{sql}" 69 68 end 70 69 … … 97 96 end 98 97 end 98 99 private 100 def reconnect_if_inactive! 101 if respond_to?(:active?) and respond_to?(:reconnect!) 102 reconnect! unless active? 103 raise ActiveRecord::ConnectionFailed unless active? 104 else 105 @logger.warn "#{adapter_name} does not yet support automatic reconnection." if @logger 106 end 107 end 99 108 end 100 109 end trunk/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
r2998 r3000 51 51 def adapter_name 52 52 'PostgreSQL' 53 end 54 55 # Is this connection alive and ready for queries? 56 def active? 57 # TODO: postgres-pr doesn't have PGconn#status. 58 if @connection.respond_to?(:status) 59 @connection.status != PGconn::CONNECTION_BAD 60 else 61 true 62 end 63 end 64 65 # Close then reopen the connection. 66 def reconnect! 67 # TODO: postgres-pr doesn't have PGconn#reset. 68 if @connection.respond_to?(:reset) 69 @connection.reset 70 end 53 71 end 54 72