aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gallagher <gallagher.paul@gmail.com>2011-06-11 18:34:09 +0800
committerPaul Gallagher <gallagher.paul@gmail.com>2011-06-11 18:34:09 +0800
commitf8c4b374c831d6f37efb7b7685fe1d8fe101e096 (patch)
tree5d4bc7c060952bc64dee459090b6f7fcfb8407ae
parent1d7c751bf703c729887e2d8a9ae104a8e6aef010 (diff)
downloadrails-f8c4b374c831d6f37efb7b7685fe1d8fe101e096.tar.gz
rails-f8c4b374c831d6f37efb7b7685fe1d8fe101e096.tar.bz2
rails-f8c4b374c831d6f37efb7b7685fe1d8fe101e096.zip
make extract_schema_and_table a private method
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb37
-rw-r--r--activerecord/test/cases/adapters/postgresql/schema_test.rb14
2 files changed, 24 insertions, 27 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 03a9624357..b6e7ddfc5b 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -673,8 +673,8 @@ module ActiveRecord
schema, table = extract_schema_and_table(name.to_s)
return false unless table
- binds = [[nil, table.gsub(/(^"|"$)/,'')]]
- binds << [nil, schema.gsub(/(^"|"$)/,'')] if schema
+ binds = [[nil, table]]
+ binds << [nil, schema] if schema
exec_query(<<-SQL, 'SCHEMA', binds).rows.first[0].to_i > 0
SELECT COUNT(*)
@@ -693,24 +693,6 @@ module ActiveRecord
SQL
end
- # Returns an array of [schema_name, table_name] extracted from +name+.
- # The schema_name will be nil if not provided in +name+.
- # Quotes are preserved in the schema and table name components if provided.
- # Valid combinations for quoting the schema and table names:
- #
- # - table_name
- # - "table.name"
- # - schema_name.table_name
- # - schema_name."table.name"
- # - "schema.name".table_name
- # - "schema.name"."table_name"
- # - "schema.name"."table.name"
- def extract_schema_and_table(name)
- name[/([^"\.\s]+|"[^"]+")(?:\.([^"\.\s]+|"[^"]*"))?/]
- table, schema = [$1,$2].compact.reverse
- [schema, table]
- end
-
# Returns an array of indexes for the given table.
def indexes(table_name, name = nil)
schemas = schema_search_path.split(/,/).map { |p| quote(p) }.join(',')
@@ -1101,6 +1083,21 @@ module ActiveRecord
end
end
+ # Returns an array of <tt>[schema_name, table_name]</tt> extracted from +name+.
+ # +schema_name+ is nil if not specified in +name+.
+ # +schema_name+ and +table_name+ exclude surrounding quotes (regardless of whether provided in +name+)
+ # +name+ supports the range of schema/table references understood by PostgreSQL, for example:
+ #
+ # * <tt>table_name</tt>
+ # * <tt>"table.name"</tt>
+ # * <tt>schema_name.table_name</tt>
+ # * <tt>schema_name."table.name"</tt>
+ # * <tt>"schema.name"."table name"</tt>
+ def extract_schema_and_table(name)
+ table, schema = name.scan(/[^".\s]+|"[^"]*"/)[0..1].collect{|m| m.gsub(/(^"|"$)/,'') }.reverse
+ [schema, table]
+ end
+
def extract_table_ref_from_insert_sql(sql)
sql[/into\s+([^\(]*).*values\s*\(/i]
$1.strip if $1
diff --git a/activerecord/test/cases/adapters/postgresql/schema_test.rb b/activerecord/test/cases/adapters/postgresql/schema_test.rb
index 6d98bd4a39..8668957d5a 100644
--- a/activerecord/test/cases/adapters/postgresql/schema_test.rb
+++ b/activerecord/test/cases/adapters/postgresql/schema_test.rb
@@ -223,15 +223,15 @@ class SchemaTest < ActiveRecord::TestCase
def test_extract_schema_and_table
{
%(table_name) => [nil,'table_name'],
- %("table.name") => [nil,'"table.name"'],
+ %("table.name") => [nil,'table.name'],
%(schema.table_name) => %w{schema table_name},
- %("schema".table_name) => %w{"schema" table_name},
- %(schema."table_name") => %w{schema "table_name"},
- %("schema"."table_name") => %w{"schema" "table_name"},
- %("even spaces".table) => ['"even spaces"','table'],
- %(schema."table.name") => %w{schema "table.name"}
+ %("schema".table_name) => %w{schema table_name},
+ %(schema."table_name") => %w{schema table_name},
+ %("schema"."table_name") => %w{schema table_name},
+ %("even spaces".table) => ['even spaces','table'],
+ %(schema."table.name") => ['schema', 'table.name']
}.each do |given,expect|
- assert_equal expect, @connection.extract_schema_and_table(given)
+ assert_equal expect, @connection.send(:extract_schema_and_table, given)
end
end