Skip to content

Instantly share code, notes, and snippets.

@chrisandreae
Last active November 6, 2019 10:08
Show Gist options
  • Save chrisandreae/cfac1fe1e2e2b2b987e3aa826f803c86 to your computer and use it in GitHub Desktop.
Save chrisandreae/cfac1fe1e2e2b2b987e3aa826f803c86 to your computer and use it in GitHub Desktop.
ActiveRecord fails to parse BCE dates in PostgreSQL ranges
# frozen_string_literal: true
begin
require 'bundler/inline'
rescue LoadError => e
warn 'Bundler version 1.10 or later is required. Please update your Bundler'
raise e
end
gemfile(true) do
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem 'rails', github: 'rails/rails'
gem 'pg'
end
require 'active_record'
require 'minitest/autorun'
require 'logger'
# Create the database with
# $ createuser test -P
# $ createdb test -o test
ActiveRecord::Base.establish_connection(
adapter: 'postgresql', database: 'test', host: '127.0.0.1', username: 'test', password: 'test')
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :date_tests, force: true do |t|
t.timestamp :time
t.tsrange :timerange
end
end
class DateTest < ActiveRecord::Base
end
class BugTest < Minitest::Test
BCE_TIME = ::DateTime.new(-1000, 1, 1, 0, 0)
def teardown
DateTest.delete_all
end
def test_bce_time
record = DateTest.create(time: BCE_TIME)
record.reload
# This test currently passes
assert_equal(BCE_TIME, record.time)
end
def test_bce_tsrange
record = DateTest.create(timerange: (BCE_TIME .. Time.now.utc))
record.reload
# This test currently fails
assert_equal(BCE_TIME, record.timerange.begin)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment