diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-03-15 20:20:35 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-03-22 16:22:00 -0700 |
commit | 14d7dc0811fc946ffb63ceed7e0389ed14b50800 (patch) | |
tree | f277b7a01cdfe01d3448a648fc3e21393668e559 /activerecord/lib | |
parent | a80bcc395cd691f5a1ad11af8ad9cff1ab79163f (diff) | |
download | rails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.tar.gz rails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.tar.bz2 rails-14d7dc0811fc946ffb63ceed7e0389ed14b50800.zip |
push SQL generation inside the schema creation object
Diffstat (limited to 'activerecord/lib')
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) |