From 5991e5c789da5adc260ceb9ba77da31d65991fbc Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Thu, 9 Feb 2006 18:06:29 +0000 Subject: PostgreSQL: correctly parse negative integer column defaults. References #3776. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3554 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ .../connection_adapters/postgresql_adapter.rb | 2 +- activerecord/test/defaults_test.rb | 14 ++++++++++++++ activerecord/test/fixtures/db_definitions/postgresql.sql | 4 +++- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 activerecord/test/defaults_test.rb diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 03a9f25325..1a287ec7d8 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* PostgreSQL: correctly parse negative integer column defaults. #3776 [bellis@deepthought.org] + * Fix problems with count when used with :include [Jeremy Hopple and Kevin Clark] * ActiveRecord::RecordInvalid now states which validations failed in its default error message [Tobias Luetke] diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 066a71fab6..a5bef4138d 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -468,7 +468,7 @@ module ActiveRecord return $1 if value =~ /^'(.*)'::(bpchar|text|character varying)$/ # Numeric values - return value if value =~ /^[0-9]+(\.[0-9]*)?/ + return value if value =~ /^-?[0-9]+(\.[0-9]*)?/ # Date / Time magic values return Time.now.to_s if value =~ /^now\(\)|^\('now'::text\)::(date|timestamp)/i diff --git a/activerecord/test/defaults_test.rb b/activerecord/test/defaults_test.rb new file mode 100644 index 0000000000..59bc3ae0bd --- /dev/null +++ b/activerecord/test/defaults_test.rb @@ -0,0 +1,14 @@ +require 'abstract_unit' +require 'fixtures/default' + +class DefaultsTest < Test::Unit::TestCase + if %w(PostgreSQL).include? ActiveRecord::Base.connection.adapter_name + def test_default_integers + default = Default.new + assert_instance_of(Fixnum, default.positive_integer) + assert_equal(default.positive_integer, 1) + assert_instance_of(Fixnum, default.negative_integer) + assert_equal(default.negative_integer, -1) + end + end +end diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql index 32f6f32fe0..c01afc206d 100644 --- a/activerecord/test/fixtures/db_definitions/postgresql.sql +++ b/activerecord/test/fixtures/db_definitions/postgresql.sql @@ -111,7 +111,9 @@ CREATE TABLE defaults ( fixed_time timestamp default '2004-01-01 00:00:00.000000-00', char1 char(1) default 'Y', char2 character varying(50) default 'a varchar field', - char3 text default 'a text field' + char3 text default 'a text field', + positive_integer integer default 1, + negative_integer integer default -1 ); CREATE TABLE auto_id_tests ( -- cgit v1.2.3