aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-04-11 14:08:27 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-04-11 14:08:27 -0700
commitf6c0c8ff6101fed24dd176fb0cce0383807c502d (patch)
treeda6efd845f5bd29b0be05802d62eca0f59425934 /activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
parenta9e8554b46a29573094eec139b16778e29e5c37a (diff)
downloadrails-f6c0c8ff6101fed24dd176fb0cce0383807c502d.tar.gz
rails-f6c0c8ff6101fed24dd176fb0cce0383807c502d.tar.bz2
rails-f6c0c8ff6101fed24dd176fb0cce0383807c502d.zip
only use the primary_key method, refactor schema and table name parsing
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb28
1 files changed, 15 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 468f8d75d7..d76b03e80a 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -433,12 +433,9 @@ module ActiveRecord
# Executes an INSERT query and returns the new record's ID
def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
# Extract the table from the insert sql. Yuck.
- table = sql.split(" ", 4)[2].gsub('"', '')
+ _, table = extract_schema_and_table(sql.split(" ", 4)[2])
- # If neither pk nor sequence name is given, look them up.
- unless pk || sequence_name
- pk, sequence_name = *pk_and_sequence_for(table)
- end
+ pk ||= primary_key(table)
if pk
select_value("#{sql} RETURNING #{quote_column_name(pk)}")
@@ -638,7 +635,18 @@ module ActiveRecord
end
def table_exists?(name)
- name = name.to_s
+ schema, table = extract_schema_and_table(name.to_s)
+
+ query(<<-SQL, 'SCHEMA').first[0].to_i > 0
+ SELECT COUNT(*)
+ FROM pg_tables
+ WHERE tablename = '#{table.gsub(/(^"|"$)/,'')}'
+ #{schema ? "AND schemaname = '#{schema}'" : ''}
+ SQL
+ end
+
+ # Extracts the table and schema name from +name+
+ def extract_schema_and_table(name)
schema, table = name.split('.', 2)
unless table # A table was provided without a schema
@@ -650,13 +658,7 @@ module ActiveRecord
table = name
schema = nil
end
-
- query(<<-SQL, 'SCHEMA').first[0].to_i > 0
- SELECT COUNT(*)
- FROM pg_tables
- WHERE tablename = '#{table.gsub(/(^"|"$)/,'')}'
- #{schema ? "AND schemaname = '#{schema}'" : ''}
- SQL
+ [schema, table]
end
# Returns the list of all indexes for a table.