Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 4239

Show
Ignore:
Timestamp:
04/20/06 02:41:05 (2 years ago)
Author:
rick
Message:

Properly quote index names in migrations (closes #4764) [John Long]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activerecord/CHANGELOG

    r4238 r4239  
    11*SVN* 
     2 
     3* Properly quote index names in migrations (closes #4764) [John Long] 
    24 
    35* Fix the HasManyAssociation#count method so it uses the new ActiveRecord::Base#count syntax, while maintaining backwards compatibility.  [Rick] 
  • trunk/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb

    r4039 r4239  
    120120      # See TableDefinition#column for details of the options you can use. 
    121121      def add_column(table_name, column_name, type, options = {}) 
    122         add_column_sql = "ALTER TABLE #{table_name} ADD #{column_name} #{type_to_sql(type, options[:limit])}" 
     122        add_column_sql = "ALTER TABLE #{table_name} ADD #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit])}" 
    123123        add_column_options!(add_column_sql, options) 
    124124        execute(add_column_sql) 
     
    129129      #  remove_column(:suppliers, :qualification) 
    130130      def remove_column(table_name, column_name) 
    131         execute "ALTER TABLE #{table_name} DROP #{column_name}" 
     131        execute "ALTER TABLE #{table_name} DROP #{quote_column_name(column_name)}" 
    132132      end 
    133133 
     
    185185      #  CREATE UNIQUE INDEX by_branch_party ON accounts(branch_id, party_id) 
    186186      def add_index(table_name, column_name, options = {}) 
    187         index_name = "#{table_name}_#{Array(column_name).first}_index" 
     187        column_names = Array(column_name) 
     188        index_name   = index_name(table_name, :column => column_names.first) 
    188189 
    189190        if Hash === options # legacy support, since this param was a string 
     
    193194          index_type = options 
    194195        end 
    195  
    196         execute "CREATE #{index_type} INDEX #{index_name} ON #{table_name} (#{Array(column_name).join(", ")})" 
     196        quoted_column_names = column_names.map { |e| quote_column_name(e) }.join(", ") 
     197        execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{table_name} (#{quoted_column_names})" 
    197198      end 
    198199 
     
    210211      #   remove_index :accounts, :username 
    211212      def remove_index(table_name, options = {}) 
    212         execute "DROP INDEX #{index_name(table_name, options)} ON #{table_name}" 
     213        execute "DROP INDEX #{quote_column_name(index_name(table_name, options))} ON #{table_name}" 
    213214      end 
    214215 
  • trunk/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb

    r4040 r4239  
    1818        end 
    1919      end 
    20  
    2120 
    2221      config = config.symbolize_keys 
  • trunk/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb

    r4156 r4239  
    338338      def remove_index(table_name, options) #:nodoc: 
    339339        execute "DROP INDEX #{index_name(table_name, options)}" 
    340       end       
    341  
     340      end 
    342341 
    343342      private 
  • trunk/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb

    r4032 r4239  
    214214 
    215215      def remove_index(table_name, options={}) #:nodoc: 
    216         if Hash === options 
    217           index_name = options[:name] 
    218         else 
    219           index_name = "#{table_name}_#{options}_index" 
    220         end 
    221  
    222         execute "DROP INDEX #{index_name}" 
     216        execute "DROP INDEX #{quote_column_name(index_name(table_name, options))}" 
    223217      end 
    224218       
  • trunk/activerecord/test/migration_test.rb

    r4152 r4239  
    3535 
    3636      Person.connection.remove_column("people", "last_name") rescue nil 
     37      Person.connection.remove_column("people", "key") rescue nil 
    3738      Person.connection.remove_column("people", "bio") rescue nil 
    3839      Person.connection.remove_column("people", "age") rescue nil 
     
    4849      Person.connection.add_column "people", "last_name", :string         
    4950      Person.connection.add_column "people", "administrator", :boolean 
     51      Person.connection.add_column "people", "key", :string 
    5052       
    5153      assert_nothing_raised { Person.connection.add_index("people", "last_name") } 
     
    5456      assert_nothing_raised { Person.connection.add_index("people", ["last_name", "first_name"]) } 
    5557      assert_nothing_raised { Person.connection.remove_index("people", "last_name") } 
     58       
     59      # quoting 
     60      assert_nothing_raised { Person.connection.add_index("people", ["key"], :name => "key", :unique => true) } 
     61      assert_nothing_raised { Person.connection.remove_index("people", :name => "key") } 
    5662 
    5763      # Sybase adapter does not support indexes on :boolean columns