/usr/lib/ruby/vendor_ruby/active_record/connection_adapters/schema_cache.rb is in ruby-activerecord-3.2 3.2.16-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | module ActiveRecord
module ConnectionAdapters
class SchemaCache
attr_reader :primary_keys, :tables
attr_reader :connection
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
# A cached lookup for table existence.
def table_exists?(name)
return @tables[name] if @tables.key? name
@tables[name] = connection.table_exists?(name)
end
# Get the columns for a table
def columns(table = nil)
if table
@columns[table]
else
@columns
end
end
# Get the columns for a table as a hash, key is the column name
# value is the column object.
def columns_hash(table = nil)
if table
@columns_hash[table]
else
@columns_hash
end
end
# Clears out internal caches
def clear!
@columns.clear
@columns_hash.clear
@primary_keys.clear
@tables.clear
end
# Clear out internal caches for table with +table_name+.
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
end
end
end
|