mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Ticket 2256 - Recognize PostgreSQL NOW() default as equivalent to CURRENT_TIMESTAMP/CURRENT_DATE
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2378 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
e1024e50cf
commit
0bd11857ef
4 changed files with 26 additions and 17 deletions
|
@ -1,5 +1,7 @@
|
||||||
*SVN*
|
*SVN*
|
||||||
|
|
||||||
|
* Recognize PostgreSQL NOW() default as equivalent to CURRENT_TIMESTAMP or CURRENT_DATE, depending on the column's type. #2256 [mat <mat@absolight.fr>]
|
||||||
|
|
||||||
* Extensive documentation for the abstract database adapter. #2250 [François Beausoleil <fbeausoleil@ftml.net>]
|
* Extensive documentation for the abstract database adapter. #2250 [François Beausoleil <fbeausoleil@ftml.net>]
|
||||||
|
|
||||||
* Clean up Fixtures.reset_sequences for PostgreSQL. Handle tables with no rows and models with custom primary keys. #2174, #2183 [jay@jay.fm, Blair Zajac <blair@orcaware.com>]
|
* Clean up Fixtures.reset_sequences for PostgreSQL. Handle tables with no rows and models with custom primary keys. #2174, #2183 [jay@jay.fm, Blair Zajac <blair@orcaware.com>]
|
||||||
|
|
|
@ -369,7 +369,7 @@ module ActiveRecord
|
||||||
return value if value =~ /^[0-9]+(\.[0-9]*)?/
|
return value if value =~ /^[0-9]+(\.[0-9]*)?/
|
||||||
|
|
||||||
# Date / Time magic values
|
# Date / Time magic values
|
||||||
return Time.now.to_s if value =~ /^\('now'::text\)::(date|timestamp)/
|
return Time.now.to_s if value =~ /^now\(\)|^\('now'::text\)::(date|timestamp)/i
|
||||||
|
|
||||||
# Fixed dates / times
|
# Fixed dates / times
|
||||||
return $1 if value =~ /^'(.+)'::(date|timestamp)/
|
return $1 if value =~ /^'(.+)'::(date|timestamp)/
|
||||||
|
|
|
@ -438,18 +438,16 @@ class BasicsTest < Test::Unit::TestCase
|
||||||
assert_nil topic.last_read
|
assert_nil topic.last_read
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_utc_as_time_zone
|
# Oracle does not have a TIME datatype.
|
||||||
# Oracle does not have a TIME datatype.
|
unless 'OCI' == ActiveRecord::Base.connection.adapter_name
|
||||||
if ActiveRecord::ConnectionAdapters.const_defined? :OracleAdapter
|
def test_utc_as_time_zone
|
||||||
return true if ActiveRecord::Base.connection.instance_of?(ActiveRecord::ConnectionAdapters::OracleAdapter)
|
Topic.default_timezone = :utc
|
||||||
|
attributes = { "bonus_time" => "5:42:00AM" }
|
||||||
|
topic = Topic.find(1)
|
||||||
|
topic.attributes = attributes
|
||||||
|
assert_equal Time.utc(2000, 1, 1, 5, 42, 0), topic.bonus_time
|
||||||
|
Topic.default_timezone = :local
|
||||||
end
|
end
|
||||||
|
|
||||||
Topic.default_timezone = :utc
|
|
||||||
attributes = { "bonus_time" => "5:42:00AM" }
|
|
||||||
topic = Topic.find(1)
|
|
||||||
topic.attributes = attributes
|
|
||||||
assert_equal Time.utc(2000, 1, 1, 5, 42, 0), topic.bonus_time
|
|
||||||
Topic.default_timezone = :local
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_default_values_on_empty_strings
|
def test_default_values_on_empty_strings
|
||||||
|
@ -682,14 +680,21 @@ class BasicsTest < Test::Unit::TestCase
|
||||||
assert_equal 2147483647, company.rating
|
assert_equal 2147483647, company.rating
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_default
|
# TODO: extend defaults tests to other databases!
|
||||||
if Default.connection.class.name == 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter'
|
if 'PostgreSQL' == ActiveRecord::Base.connection.adapter_name
|
||||||
|
def test_default
|
||||||
default = Default.new
|
default = Default.new
|
||||||
|
|
||||||
# dates / timestamps
|
# CURRENT_TIMESTAMP and NOW() timestamps
|
||||||
time_format = "%m/%d/%Y %H:%M"
|
time_format = "%m/%d/%Y %H:%M"
|
||||||
assert_equal Time.now.strftime(time_format), default.modified_time.strftime(time_format)
|
now = Time.now.strftime(time_format)
|
||||||
assert_equal Date.today, default.modified_date
|
assert_equal now, default.modified_time.strftime(time_format)
|
||||||
|
assert_equal now, default.modified_time_function.strftime(time_format)
|
||||||
|
|
||||||
|
# CURRENT_DATE and NOW() dates
|
||||||
|
today = Date.today
|
||||||
|
assert_equal today, default.modified_date
|
||||||
|
assert_equal today, default.modified_date_function
|
||||||
|
|
||||||
# fixed dates / times
|
# fixed dates / times
|
||||||
assert_equal Date.new(2004, 1, 1), default.fixed_date
|
assert_equal Date.new(2004, 1, 1), default.fixed_date
|
||||||
|
|
|
@ -102,8 +102,10 @@ CREATE TABLE booleantests (
|
||||||
CREATE TABLE defaults (
|
CREATE TABLE defaults (
|
||||||
id serial,
|
id serial,
|
||||||
modified_date date default CURRENT_DATE,
|
modified_date date default CURRENT_DATE,
|
||||||
|
modified_date_function date default now(),
|
||||||
fixed_date date default '2004-01-01',
|
fixed_date date default '2004-01-01',
|
||||||
modified_time timestamp default CURRENT_TIMESTAMP,
|
modified_time timestamp default CURRENT_TIMESTAMP,
|
||||||
|
modified_time_function timestamp default now(),
|
||||||
fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
|
fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
|
||||||
char1 char(1) default 'Y',
|
char1 char(1) default 'Y',
|
||||||
char2 character varying(50) default 'a varchar field',
|
char2 character varying(50) default 'a varchar field',
|
||||||
|
|
Loading…
Reference in a new issue