Class/Module Index [+]

Quicksearch

RR::ConnectionExtenders

Connection extenders provide additional database specific functionality not coming in the ActiveRecord library. This module itself only provides functionality to register and retrieve such connection extenders.

Public Class Methods

clear_db_connection_cache() click to toggle source

Free up all cached connections

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 161
def self.clear_db_connection_cache
  @@connection_cache = {}
end
connection_cache() click to toggle source

Returns the connection cache hash.

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 100
def self.connection_cache; @@connection_cache; end
connection_cache=(cache) click to toggle source

Sets a new connection cache

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 103
def self.connection_cache=(cache)
  @@connection_cache = cache
end
db_connect(config) click to toggle source

Creates database connections by calling db_connect_without_cache with the provided config configuration hash. A new database connection is created only if no according cached connection is available.

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 133
def self.db_connect(config)
  if not use_cache?
    db_connection = db_connect_without_cache config
  else
    config_dump = Marshal.dump config.reject {|key, | [:proxy_host, :proxy_port, :logger].include? key}
    config_checksum = Digest::SHA1.hexdigest(config_dump)
    @@connection_cache ||= {}

    db_connection = connection_cache[config_checksum]
    unless db_connection and db_connection.active?
      db_connection = db_connect_without_cache config
      connection_cache[config_checksum] = db_connection
    end
  end

  install_logger db_connection, config

  db_connection
end
db_connect_without_cache(config) click to toggle source

Creates an ActiveRecord database connection according to the provided config connection hash. Possible values of this parameter are described in ActiveRecord::Base#establish_connection. The database connection is extended with the correct ConnectionExtenders module.

ActiveRecord only allows one database connection per class. (It disconnects the existing database connection if a new connection is established.) To go around this, we delete ActiveRecord's memory of the existing database connection as soon as it is created.

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 54
def self.db_connect_without_cache(config)
  if RUBY_PLATFORM =~ /java/
    adapter = config[:adapter]
    
    # As recommended in the activerecord-jdbc-adapter use the jdbc versions
    # of the Adapters. E. g. instead of "postgresql", "jdbcpostgresql".
    adapter = 'jdbc' + adapter unless adapter =~ /^jdbc/

    DummyActiveRecord.establish_connection(config.merge(:adapter => adapter))
  else
    DummyActiveRecord.establish_connection(config)
  end
  connection = DummyActiveRecord.connection
  
  # Delete the database connection from ActiveRecords's 'memory'
  ActiveRecord::Base.connection_handler.connection_pools.delete DummyActiveRecord.name
  
  extender = ""
  if RUBY_PLATFORM =~ /java/
    extender = :jdbc
  elsif ConnectionExtenders.extenders.include? config[:adapter].to_sym
    extender = config[:adapter].to_sym
  else
    raise "No ConnectionExtender available for :#{config[:adapter]}"
  end
  connection.extend ConnectionExtenders.extenders[extender]
  
  # Hack to get Postgres schema support under JRuby to par with the standard
  # ruby version
  if RUBY_PLATFORM =~ /java/ and config[:adapter].to_sym == :postgresql
    connection.extend RR::ConnectionExtenders::PostgreSQLExtender
    connection.initialize_search_path
  end

  replication_module = ReplicationExtenders.extenders[config[:adapter].to_sym]
  connection.extend replication_module if replication_module
  
  connection
end
extenders() click to toggle source

Returns a Hash of currently registered connection extenders. (Empty Hash if no connection extenders were defined.)

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 28
def self.extenders
  @extenders ||= {}
  @extenders
end
install_logger(db_connection, config) click to toggle source

Installs the configured logger (if any) into the database connection.

  • db_connection: database connection (as produced by db_connect)

  • config: database configuration (as provided to db_connect)

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 110
def self.install_logger(db_connection, config)
  if config[:logger]
    if config[:logger].respond_to?(:debug)
      logger = config[:logger]
    else
      logger = ActiveSupport::BufferedLogger.new(config[:logger])
    end
    db_connection.instance_variable_set :@logger, logger
    if ActiveSupport.const_defined?(:Notifications)
      connection_object_id = db_connection.object_id
      db_connection.log_subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
        if payload[:connection_id] == connection_object_id and logger.debug?
          logger.debug payload[:sql].squeeze(" ")
        end
      end
    end
  end
end
register(extender) click to toggle source

Registers one or multiple connection extender. extender is a Hash with

key::   The adapter symbol as used by ActiveRecord::Connection Adapters, e. g. :postgresql
value:: Name of the module implementing the connection extender
# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 37
def self.register(extender)
  @extenders ||= {}
  @extenders.merge! extender
end
use_cache?() click to toggle source

Returns the current cache status (true if caching is used; false otherwise).

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 97
def self.use_cache?; @@use_cache; end
use_db_connection_cache(status) click to toggle source

If status == true: enable the cache. If status == false: don' use cache Returns the old connection caching status

# File lib/rubyrep/connection_extenders/connection_extenders.rb, line 155
def self.use_db_connection_cache(status)
  old_status, @@use_cache = @@use_cache, status
  old_status
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.