class ActiveRecord::ConnectionAdapters::SchemaCache - activerecord-4.2.4 Documentation

# class ActiveRecord::ConnectionAdapters::SchemaCache

### Attributes

connection[RW]
version[R]

### Public Class Methods

new(conn) click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 7
    def initialize(conn)
      @connection = conn

      @columns      = {}
      @columns_hash = {}
      @primary_keys = {}
      @tables       = {}
    end

### Public Instance Methods

add(table_name) click to toggle source

Add internal cache for table with `table_name`.

    # File lib/active_record/connection_adapters/schema_cache.rb, line 29
    def add(table_name)
      if table_exists?(table_name)
        primary_keys(table_name)
        columns(table_name)
        columns_hash(table_name)
      end
    end

clear!() click to toggle source

Clears out internal caches

    # File lib/active_record/connection_adapters/schema_cache.rb, line 55
    def clear!
      @columns.clear
      @columns_hash.clear
      @primary_keys.clear
      @tables.clear
      @version = nil
    end

clear_table_cache!(table_name) click to toggle source

Clear out internal caches for table with `table_name`.

    # File lib/active_record/connection_adapters/schema_cache.rb, line 70
    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_name) click to toggle source

Get the columns for a table

    # File lib/active_record/connection_adapters/schema_cache.rb, line 42
    def columns(table_name)
      @columns[table_name] ||= connection.columns(table_name)
    end

columns_hash(table_name) click to toggle source

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

    # File lib/active_record/connection_adapters/schema_cache.rb, line 48
    def columns_hash(table_name)
      @columns_hash[table_name] ||= Hash[columns(table_name).map { |col|
        [col.name, col]
      }]
    end

marshal_dump() click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 77
    def marshal_dump
      # if we get current version during initialization, it happens stack over flow.
      @version = ActiveRecord::Migrator.current_version
      [@version, @columns, @columns_hash, @primary_keys, @tables]
    end

marshal_load(array) click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 83
    def marshal_load(array)
      @version, @columns, @columns_hash, @primary_keys, @tables = array
    end

primary_keys(table_name) click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 16
    def primary_keys(table_name)
      @primary_keys[table_name] ||= table_exists?(table_name) ? connection.primary_key(table_name) : nil
    end

size() click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 63
    def size
      [@columns, @columns_hash, @primary_keys, @tables].map { |x|
        x.size
      }.inject :+
    end

table_exists?(name) click to toggle source

A cached lookup for table existence.

    # File lib/active_record/connection_adapters/schema_cache.rb, line 21
    def table_exists?(name)
      prepare_tables if @tables.empty?
      return @tables[name] if @tables.key? name

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

tables(name) click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 37
    def tables(name)
      @tables[name]
    end

### Private Instance Methods

prepare_tables() click to toggle source

    # File lib/active_record/connection_adapters/schema_cache.rb, line 89
    def prepare_tables
      connection.tables.each { |table| @tables[table] = true }
    end