diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 33ba77bca2d2d9c96bea5613048b1e5455e9326f..943c2dec161c55ad28754bd122ab35bcdadfdc7e 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,12 @@ ## Rails 4.0.0 (unreleased) ## +* Promotes `change_column_null` to the migrations API. This macro sets/removes + `NOT NULL` constraints, and accepts an optional argument to replace existing + `NULL`s if needed. The adapters for SQLite, MySQL, PostgreSQL, and (at least) + Oracle, already implement this method. + + *Xavier Noria* + * Uniqueness validation allows you to pass `:conditions` to limit the constraint lookup. 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 0f35f852f5b9b07bae1fb5f4afc48ac0bf4811f3..4f670d46d9758fbec8ed02f1a495e567ce9ee388 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -402,6 +402,26 @@ def change_column_default(table_name, column_name, default) raise NotImplementedError, "change_column_default is not implemented" end + # Sets or removes a +NOT NULL+ constraint on a column. The +null+ flag + # indicates wheter the value can be +NULL+. For example + # + # change_column_null(:users, :nickname, false) + # + # says nicknames cannot be +NULL+ (adds the constraint), whereas + # + # change_column_null(:users, :nickname, true) + # + # allows them to be +NULL+ (drops the constraint). + # + # The method accepts an optional fourth argument to replace existing + # +NULL+s with some other value. Use that one when enabling the + # constraint if needed, since otherwise those rows would not be valid. + # + # Please note the fourth argument does not set a column's default. + def change_column_null(table_name, column_name, null, default = nil) + raise NotImplementedError, "change_column_null is not implemented" + end + # Renames a column. # # rename_column(:suppliers, :description, :name)