Class: Sequel::SchemaSharding::ConnectionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/sequel/schema-sharding/connection_manager.rb

Overview

Used to manage database connections separately from database shards

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConnectionManager



11
12
13
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 11

def initialize
  @connections = {}
end

Instance Attribute Details

#connectionsObject (readonly)

Returns the value of attribute connections.



9
10
11
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 9

def connections
  @connections
end

Instance Method Details

#[](name) ⇒ Object



15
16
17
18
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 15

def [](name)
  config = db_config_for(name)
  @connections[name.to_s] ||= Sequel.postgres(sequel_connection_config_for(config).merge!(replica_hash_for(config)))
end

#default_dataset_for(table_name) ⇒ Object

Given table_name, return a functional dataset. This is used when models are loaded to read table columns and allow for data typecasting. In most cases it should not be used directly in application code.



53
54
55
56
57
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 53

def default_dataset_for(table_name)
  shard_number = config.logical_shard_configs(table_name).keys.first
  shard_name = config.logical_shard_configs(table_name)[shard_number]
  self[shard_name][:"#{schema_for(table_name, shard_number)}__#{table_name}"]
end

#disconnectObject



28
29
30
31
32
33
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 28

def disconnect
  @connections.each_value do |conn|
    conn.disconnect
  end
  @connections = {}
end

#master(name) ⇒ Object

Used by rake tasks that need to deterministically work against a master database even when read/write splitting is configured.



24
25
26
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 24

def master(name)
  @connections["master_#{name}"] ||= Sequel.postgres(sequel_connection_config_for(db_config_for(name)))
end

#schema_for(table_name, shard_number) ⇒ Object

Given table_name and shard_number, returns the name of the PostgreSQL schema based on a schema_name pattern defined in sharding.yml. shard_number is interpolated into schema_name via sprintf, so schema_name should include a format specifier with which to interpolate it (ex. %s, %02d).



42
43
44
45
46
# File 'lib/sequel/schema-sharding/connection_manager.rb', line 42

def schema_for(table_name, shard_number)
  number_of_shards = config.number_of_shards(table_name)
  pattern = config.schema_name(table_name)
  sprintf pattern, shard_number
end