aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-03-15 20:20:35 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-03-22 16:22:00 -0700
commit14d7dc0811fc946ffb63ceed7e0389ed14b50800 (patch)
treef277b7a01cdfe01d3448a648fc3e21393668e559 /activerecord/lib
parenta80bcc395cd691f5a1ad11af8ad9cff1ab79163f (diff)
downloadrails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.tar.gz
rails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.tar.bz2
rails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.zip
push SQL generation inside the schema creation object
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb12
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_adapter.rb10
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb4
4 files changed, 20 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
index d6d33e9d17..8f79cc17fe 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
@@ -49,12 +49,16 @@ module ActiveRecord
# An array of ColumnDefinition objects, representing the column changes
# that have been defined.
attr_accessor :columns, :indexes
+ attr_reader :name, :temporary, :options
- def initialize(types)
+ def initialize(types, name, temporary, options)
@columns = []
@columns_hash = {}
@indexes = {}
@native = types
+ @temporary = temporary
+ @options = options
+ @name = name
end
# Appends a primary key definition to the table definition.
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
index b291c47742..08e8d3ca20 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -171,7 +171,7 @@ module ActiveRecord
#
# See also TableDefinition#column for details on how to create columns.
def create_table(table_name, options = {})
- td = create_table_definition
+ td = create_table_definition table_name, options[:temporary], options[:options]
unless options[:id] == false
pk = options.fetch(:primary_key) {
@@ -187,11 +187,7 @@ module ActiveRecord
drop_table(table_name, options)
end
- create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
- create_sql << "#{quote_table_name(table_name)} ("
- create_sql << schema_creation.accept(td)
- create_sql << ") #{options[:options]}"
- execute create_sql
+ execute schema_creation.accept td
td.indexes.each_pair { |c,o| add_index table_name, c, o }
end
@@ -829,8 +825,8 @@ module ActiveRecord
end
private
- def create_table_definition
- TableDefinition.new native_database_types
+ def create_table_definition(name, temporary, options)
+ TableDefinition.new native_database_types, name, temporary, options
end
def update_table_definition(table_name, base)
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
index 781ba6a733..b3c55dfbbb 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -125,13 +125,21 @@ module ActiveRecord
end
def visit_TableDefinition(o)
- o.columns.map { |c| accept c }.join ', '
+ create_sql = "CREATE#{' TEMPORARY' if o.temporary} TABLE "
+ create_sql << "#{quote_table_name(o.name)} ("
+ create_sql << o.columns.map { |c| accept c }.join(', ')
+ create_sql << ") #{o.options}"
+ create_sql
end
def quote_column_name(name)
@conn.quote_column_name name
end
+ def quote_table_name(name)
+ @conn.quote_table_name name
+ end
+
def type_to_sql(type, limit, precision, scale)
@conn.type_to_sql type.to_sym, limit, precision, scale
end
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index ef1bbed04b..2a19f4ab0b 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -900,8 +900,8 @@ module ActiveRecord
$1.strip if $1
end
- def create_table_definition
- TableDefinition.new native_database_types
+ def create_table_definition(name, temporary, options)
+ TableDefinition.new native_database_types, name, temporary, options
end
def update_table_definition(table_name, base)