Class: ActiveRecord::ConnectionAdapters::SchemaCache

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/schema_cache.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conn) ⇒ SchemaCache

Returns a new instance of SchemaCache.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 7

def initialize(conn)
  @connection = conn
  @tables     = {}

  @columns = Hash.new do |h, table_name|
    h[table_name] = connection.columns(table_name, "#{table_name} Columns")
  end

  @columns_hash = Hash.new do |h, table_name|
    h[table_name] = Hash[columns[table_name].map { |col|
      [col.name, col]
    }]
  end

  @primary_keys = Hash.new do |h, table_name|
    h[table_name] = table_exists?(table_name) ? connection.primary_key(table_name) : nil
  end
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



5
6
7
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 5

def connection
  @connection
end

#primary_keysObject (readonly)

Returns the value of attribute primary_keys.



4
5
6
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 4

def primary_keys
  @primary_keys
end

#tablesObject (readonly)

Returns the value of attribute tables.



4
5
6
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 4

def tables
  @tables
end

Instance Method Details

#clear!Object

Clears out internal caches



53
54
55
56
57
58
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 53

def clear!
  @columns.clear
  @columns_hash.clear
  @primary_keys.clear
  @tables.clear
end

#clear_table_cache!(table_name) ⇒ Object

Clear out internal caches for table with table_name.



61
62
63
64
65
66
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 61

def clear_table_cache!(table_name)
  @columns.delete table_name
  @columns_hash.delete table_name
  @primary_keys.delete table_name
  @tables.delete table_name
end

#columns(table = nil) ⇒ Object

Get the columns for a table



34
35
36
37
38
39
40
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 34

def columns(table = nil)
  if table
    @columns[table]
  else
    @columns
  end
end

#columns_hash(table = nil) ⇒ Object

Get the columns for a table as a hash, key is the column name value is the column object.



44
45
46
47
48
49
50
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 44

def columns_hash(table = nil)
  if table
    @columns_hash[table]
  else
    @columns_hash
  end
end

#table_exists?(name) ⇒ Boolean

A cached lookup for table existence.

Returns:

  • (Boolean)


27
28
29
30
31
# File 'lib/active_record/connection_adapters/schema_cache.rb', line 27

def table_exists?(name)
  return @tables[name] if @tables.key? name

  @tables[name] = connection.table_exists?(name)
end