aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2006-02-09 18:06:29 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2006-02-09 18:06:29 +0000
commit5991e5c789da5adc260ceb9ba77da31d65991fbc (patch)
treea6613a2a8e3806af0b72da42a5e4d2c598eb7f5f
parentd49a5fcb4cfe90824337dc3756bae7161cea768b (diff)
downloadrails-5991e5c789da5adc260ceb9ba77da31d65991fbc.tar.gz
rails-5991e5c789da5adc260ceb9ba77da31d65991fbc.tar.bz2
rails-5991e5c789da5adc260ceb9ba77da31d65991fbc.zip
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
-rw-r--r--activerecord/CHANGELOG2
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb2
-rw-r--r--activerecord/test/defaults_test.rb14
-rw-r--r--activerecord/test/fixtures/db_definitions/postgresql.sql4
4 files changed, 20 insertions, 2 deletions
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 (