Class: DatastaxRails::SchemaCache

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conn) ⇒ SchemaCache

Returns a new instance of SchemaCache.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/datastax_rails/schema_cache.rb', line 6

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.



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

def connection
  @connection
end

#primary_keysObject (readonly)

Returns the value of attribute primary_keys.



3
4
5
# File 'lib/datastax_rails/schema_cache.rb', line 3

def primary_keys
  @primary_keys
end

#tablesObject (readonly)

Returns the value of attribute tables.



3
4
5
# File 'lib/datastax_rails/schema_cache.rb', line 3

def tables
  @tables
end

Instance Method Details

#clear!Object

Clears out internal caches



50
51
52
53
54
55
# File 'lib/datastax_rails/schema_cache.rb', line 50

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.



58
59
60
61
62
63
# File 'lib/datastax_rails/schema_cache.rb', line 58

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



31
32
33
34
35
36
37
# File 'lib/datastax_rails/schema_cache.rb', line 31

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.



41
42
43
44
45
46
47
# File 'lib/datastax_rails/schema_cache.rb', line 41

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)


24
25
26
27
28
# File 'lib/datastax_rails/schema_cache.rb', line 24

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

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