aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-03-14 22:27:59 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-03-14 22:45:46 -0700
commita0dfd84440f28d2862b7eb7ea340ca28d98fb23f (patch)
tree05fa6728016f0559abdd6185ca382e193147b354 /activerecord/lib
parent258f1e5980641767dd4f0a80bdade39beabbfe6c (diff)
downloadrails-a0dfd84440f28d2862b7eb7ea340ca28d98fb23f.tar.gz
rails-a0dfd84440f28d2862b7eb7ea340ca28d98fb23f.tar.bz2
rails-a0dfd84440f28d2862b7eb7ea340ca28d98fb23f.zip
safely publish columns and columns hash info
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/attribute_methods/primary_key.rb2
-rw-r--r--activerecord/lib/active_record/connection_adapters/schema_cache.rb16
-rw-r--r--activerecord/lib/active_record/model_schema.rb2
3 files changed, 14 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb
index 3e454b713a..931209b07b 100644
--- a/activerecord/lib/active_record/attribute_methods/primary_key.rb
+++ b/activerecord/lib/active_record/attribute_methods/primary_key.rb
@@ -90,7 +90,7 @@ module ActiveRecord
base_name.foreign_key
else
if ActiveRecord::Base != self && table_exists?
- connection.schema_cache.primary_keys[table_name]
+ connection.schema_cache.primary_keys(table_name)
else
'id'
end
diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb
index dd6363cd2a..b516518126 100644
--- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb
+++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb
@@ -1,7 +1,7 @@
module ActiveRecord
module ConnectionAdapters
class SchemaCache
- attr_reader :primary_keys, :tables, :version
+ attr_reader :tables, :version
attr_accessor :connection
def initialize(conn)
@@ -14,6 +14,14 @@ module ActiveRecord
prepare_default_proc
end
+ def primary_keys(table_name = nil)
+ if table_name
+ @primary_keys[table_name]
+ else
+ @primary_keys.dup
+ end
+ end
+
# A cached lookup for table existence.
def table_exists?(name)
return @tables[name] if @tables.key? name
@@ -35,7 +43,7 @@ module ActiveRecord
if table
@columns[table]
else
- @columns
+ @columns.dup
end
end
@@ -45,7 +53,7 @@ module ActiveRecord
if table
@columns_hash[table]
else
- @columns_hash
+ @columns_hash.dup
end
end
@@ -89,7 +97,7 @@ module ActiveRecord
end
@columns_hash.default_proc = Proc.new do |h, table_name|
- h[table_name] = Hash[columns[table_name].map { |col|
+ h[table_name] = Hash[columns(table_name).map { |col|
[col.name, col]
}]
end
diff --git a/activerecord/lib/active_record/model_schema.rb b/activerecord/lib/active_record/model_schema.rb
index 85fb4be992..ac2d2f2712 100644
--- a/activerecord/lib/active_record/model_schema.rb
+++ b/activerecord/lib/active_record/model_schema.rb
@@ -205,7 +205,7 @@ module ActiveRecord
# Returns an array of column objects for the table associated with this class.
def columns
- @columns ||= connection.schema_cache.columns[table_name].map do |col|
+ @columns ||= connection.schema_cache.columns(table_name).map do |col|
col = col.dup
col.primary = (col.name == primary_key)
col