Changeset 5938
- Timestamp:
- 01/15/07 02:26:06 (2 years ago)
- Files:
-
- branches/1-2-pre-release/activerecord/CHANGELOG (modified) (1 diff)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb (modified) (2 diffs)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb (modified) (2 diffs)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb (modified) (1 diff)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/frontbase_adapter.rb (modified) (2 diffs)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb (modified) (1 diff)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb (modified) (2 diffs)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb (modified) (1 diff)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb (modified) (1 diff)
- branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sybase_adapter.rb (modified) (1 diff)
- branches/1-2-pre-release/activerecord/test/migration_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1-2-pre-release/activerecord/CHANGELOG
r5936 r5938 1 1 *SVN* 2 3 * change_column accepts :default => nil. #6956 [dcmanges, Jeremy Kemper] 2 4 3 5 * MySQL, PostgreSQL: change_column_default quotes the default value and doesn't lose column type information. #3987, #6664 [Jonathan Viney, manfred, altano@bigfoot.com] branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
r4600 r5938 254 254 # <tt>:binary</tt> or <tt>:integer</tt> columns only) 255 255 # * <tt>:default</tt>: 256 # The column's default value. You cannot explicitely set the default 257 # value to +NULL+. Simply leave off this option if you want a +NULL+ 258 # default value. 256 # The column's default value. Use nil for NULL. 259 257 # * <tt>:null</tt>: 260 258 # Allows or disallows +NULL+ values in the column. This option could … … 272 270 # * MySQL: <tt>:precision</tt> [1..63], <tt>:scale</tt> [0..30]. 273 271 # Default is (10,0). 274 # * Post Gres?: <tt>:precision</tt> [1..infinity],272 # * PostgreSQL: <tt>:precision</tt> [1..infinity], 275 273 # <tt>:scale</tt> [0..infinity]. No default. 276 # * S qlite2: Any <tt>:precision</tt> and <tt>:scale</tt> may be used.274 # * SQLite2: Any <tt>:precision</tt> and <tt>:scale</tt> may be used. 277 275 # Internal storage as strings. No default. 278 # * S qlite3: No restrictions on <tt>:precision</tt> and <tt>:scale</tt>,276 # * SQLite3: No restrictions on <tt>:precision</tt> and <tt>:scale</tt>, 279 277 # but the maximum supported <tt>:precision</tt> is 16. No default. 280 278 # * Oracle: <tt>:precision</tt> [1..38], <tt>:scale</tt> [-84..127]. branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
r5934 r5938 274 274 column_type_sql 275 275 end 276 end 277 276 end 277 278 278 def add_column_options!(sql, options) #:nodoc: 279 sql << " DEFAULT #{quote(options[:default], options[:column])}" unless options[:default].nil?279 sql << " DEFAULT #{quote(options[:default], options[:column])}" if options_include_default?(options) 280 280 sql << " NOT NULL" if options[:null] == false 281 281 end … … 294 294 sql << "ORDER BY #{options[:order]}" 295 295 end 296 297 protected 298 def options_include_default?(options) 299 options.include?(:default) && !(options[:null] == false && options[:default].nil?) 300 end 296 301 end 297 302 end branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb
r5460 r5938 506 506 def change_column(table_name, column_name, type, options = {}) # :nodoc: 507 507 change_column_type(table_name, column_name, type, options) 508 change_column_position(table_name, column_name, options[:position]) if options [:position]509 change_column_default(table_name, column_name, options[:default]) if options .has_key?(:default)508 change_column_position(table_name, column_name, options[:position]) if options.include?(:position) 509 change_column_default(table_name, column_name, options[:default]) if options_include_default?(options) 510 510 end 511 511 branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/frontbase_adapter.rb
r5934 r5938 796 796 def add_column_options!(sql, options) #:nodoc: 797 797 default_value = quote(options[:default], options[:column]) 798 if options [:default]798 if options_include_default?(options) 799 799 if options[:type] == :boolean 800 800 default_value = options[:default] == 0 ? quoted_false : quoted_true 801 801 end 802 end803 sql << " DEFAULT #{default_value}" unless options[:default].nil?802 sql << " DEFAULT #{default_value}" 803 end 804 804 sql << " NOT NULL" if options[:null] == false 805 805 end … … 829 829 change_column_sql = %( ALTER TABLE "#{table_name}" ALTER COLUMN "#{column_name}" ) 830 830 831 default_value = quote(options[:default], options[:column])832 if options[:default]831 if options_include_default?(options) 832 default_value = quote(options[:default], options[:column]) 833 833 if type == :boolean 834 834 default_value = options[:default] == 0 ? quoted_false : quoted_true 835 835 end 836 end837 838 if default_value != "NULL"839 836 change_column_sql << " SET DEFAULT #{default_value}" 840 execute(change_column_sql) 841 end 837 end 838 839 execute(change_column_sql) 842 840 843 841 # change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit])}" branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
r5936 r5938 365 365 366 366 def change_column(table_name, column_name, type, options = {}) #:nodoc: 367 if options[:default].nil?367 unless options_include_default?(options) 368 368 options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"] 369 369 end 370 370 371 371 change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}" 372 372 add_column_options!(change_column_sql, options) branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
r5936 r5938 322 322 323 323 # Set optional default. If not null, update nulls to the new default. 324 unless default.nil?324 if options_include_default?(options) 325 325 change_column_default(table_name, column_name, default) 326 326 if notnull 327 execute("UPDATE #{table_name} SET #{column_name}= '#{default}'WHERE #{column_name} IS NULL")327 execute("UPDATE #{table_name} SET #{column_name}=#{quote(default, options[:column])} WHERE #{column_name} IS NULL") 328 328 end 329 329 end … … 346 346 commit_db_transaction 347 347 end 348 change_column_default(table_name, column_name, options[:default]) unless options[:default].nil? 348 349 if options_include_default?(options) 350 change_column_default(table_name, column_name, options[:default]) 351 end 349 352 end 350 353 branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
r5658 r5938 255 255 def change_column(table_name, column_name, type, options = {}) #:nodoc: 256 256 alter_table(table_name) do |definition| 257 include_default = options_include_default?(options) 257 258 definition[column_name].instance_eval do 258 259 self.type = type 259 self.limit = options[:limit] if options [:limit]260 self.default = options[:default] unless options[:default].nil?260 self.limit = options[:limit] if options.include?(:limit) 261 self.default = options[:default] if include_default 261 262 end 262 263 end branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
r5892 r5938 460 460 def change_column(table_name, column_name, type, options = {}) #:nodoc: 461 461 sql_commands = ["ALTER TABLE #{table_name} ALTER COLUMN #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"] 462 unless options[:default].nil?462 if options_include_default?(options) 463 463 remove_default_constraint(table_name, column_name) 464 sql_commands << "ALTER TABLE #{table_name} ADD CONSTRAINT DF_#{table_name}_#{column_name} DEFAULT #{quote(options[:default] )} FOR #{column_name}"464 sql_commands << "ALTER TABLE #{table_name} ADD CONSTRAINT DF_#{table_name}_#{column_name} DEFAULT #{quote(options[:default], options[:column])} FOR #{column_name}" 465 465 end 466 466 sql_commands.each {|c| branches/1-2-pre-release/activerecord/lib/active_record/connection_adapters/sybase_adapter.rb
r5840 r5938 382 382 383 383 def add_column_options!(sql, options) #:nodoc: 384 sql << " DEFAULT #{quote(options[:default], options[:column])}" unless options[:default].nil?384 sql << " DEFAULT #{quote(options[:default], options[:column])}" if options_include_default?(options) 385 385 386 386 if check_null_for_column?(options[:column], sql) branches/1-2-pre-release/activerecord/test/migration_test.rb
r5936 r5938 95 95 96 96 def test_create_table_with_not_null_column 97 Person.connection.create_table :testings do |t| 98 t.column :foo, :string, :null => false 97 assert_nothing_raised do 98 Person.connection.create_table :testings do |t| 99 t.column :foo, :string, :null => false 100 end 99 101 end 100 102 … … 424 426 assert new_columns.find { |c| c.name == 'approved' and c.type == :boolean and c.default == false } 425 427 assert_nothing_raised { Topic.connection.change_column :topics, :approved, :boolean, :default => true } 428 end 429 430 def test_change_column_with_nil_default 431 Person.connection.add_column "people", "contributor", :boolean, :default => true 432 Person.reset_column_information 433 assert Person.new.contributor? 434 435 assert_nothing_raised { Person.connection.change_column "people", "contributor", :boolean, :default => nil } 436 Person.reset_column_information 437 assert !Person.new.contributor? 438 assert_nil Person.new.contributor 426 439 end 427 440