From 9991f0f15a80025188182b6f73267b7dfb1f96c2 Mon Sep 17 00:00:00 2001 From: Daniel Schierbeck Date: Fri, 8 Jul 2011 15:59:46 +0200 Subject: Refactor PostgreSQLAdapter a bit Move the private method #extract_schema_and_table into a separate Utils module so that it can be tested without resorting to #send. --- .../connection_adapters/postgresql_adapter.rb | 34 ++++++++++++---------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 29dd0a9ea3..a84f73c73f 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -670,7 +670,7 @@ module ActiveRecord # If the schema is not specified as part of +name+ then it will only find tables within # the current schema search path (regardless of permissions to access tables in other schemas) def table_exists?(name) - schema, table = extract_schema_and_table(name.to_s) + schema, table = Utils.extract_schema_and_table(name.to_s) return false unless table binds = [[nil, table]] @@ -947,6 +947,23 @@ module ActiveRecord "DISTINCT #{columns}, #{order_columns * ', '}" end + module Utils + # Returns an array of [schema_name, table_name] 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: + # + # * table_name + # * "table.name" + # * schema_name.table_name + # * schema_name."table.name" + # * "schema.name"."table name" + def self.extract_schema_and_table(name) + table, schema = name.scan(/[^".\s]+|"[^"]*"/)[0..1].collect{|m| m.gsub(/(^"|"$)/,'') }.reverse + [schema, table] + end + end + protected # Returns the version of the connected PostgreSQL server. def postgresql_version @@ -1085,21 +1102,6 @@ module ActiveRecord end end - # Returns an array of [schema_name, table_name] 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: - # - # * table_name - # * "table.name" - # * schema_name.table_name - # * schema_name."table.name" - # * "schema.name"."table name" - 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 -- cgit v1.2.3