From 19c99acfbc26c5fad02d968f37a958b1cbfa617b Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 20 Nov 2006 08:54:42 +0000 Subject: MySQL: detect when a NOT NULL column without a default value is misreported as default ''. Can't detect for string, text, and binary columns since '' is a legitimate default. Closes #6156. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5586 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/test/defaults_test.rb | 20 ++++++++++++++++++-- .../test/fixtures/db_definitions/postgresql.sql | 4 ++-- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'activerecord/test') diff --git a/activerecord/test/defaults_test.rb b/activerecord/test/defaults_test.rb index aba3c66de4..f15f422dc7 100644 --- a/activerecord/test/defaults_test.rb +++ b/activerecord/test/defaults_test.rb @@ -1,8 +1,24 @@ require 'abstract_unit' require 'fixtures/default' +require 'fixtures/entrant' -if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter) - class DefaultsTest < Test::Unit::TestCase +class DefaultTest < Test::Unit::TestCase + def test_nil_defaults_for_not_null_columns + column_defaults = + if current_adapter?(:MysqlAdapter) + { 'id' => nil, 'name' => '', 'course_id' => 0 } + else + { 'id' => nil, 'name' => nil, 'course_id' => nil } + end + + column_defaults.each do |name, default| + column = Entrant.columns_hash[name] + assert !column.null, "#{name} column should be NOT NULL" + assert_equal default, column.default, "#{name} column should be DEFAULT #{default.inspect}" + end + end + + if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter, :FirebirdAdapter, :OpenBaseAdapter) def test_default_integers default = Default.new assert_instance_of Fixnum, default.positive_integer diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql index ce2c775aba..b5412c7400 100644 --- a/activerecord/test/fixtures/db_definitions/postgresql.sql +++ b/activerecord/test/fixtures/db_definitions/postgresql.sql @@ -130,8 +130,8 @@ CREATE TABLE auto_id_tests ( CREATE TABLE entrants ( id serial, - name text, - course_id integer + name text not null, + course_id integer not null ); CREATE TABLE colnametests ( -- cgit v1.2.3