From 0a99fddc140d8aa54a8922e745624a250877658b Mon Sep 17 00:00:00 2001 From: Matthew Draper Date: Thu, 3 Apr 2014 01:41:34 +1030 Subject: Complete change of `sqlite3:///` path handling That which was now relative is now absolute. --- activerecord/CHANGELOG.md | 8 ++++++++ .../connection_adapters/connection_specification.rb | 16 +--------------- .../test/cases/connection_specification/resolver_test.rb | 4 ++-- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 38ac8bdfeb..5cb5fa56b3 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,11 @@ +* As promised, switch `sqlite3:///` URLs (which were temporarily + deprecated in 4.1) from relative to absolute. + + If you still want the previous interpretation, you should replace + `sqlite3:///my/path` with `sqlite3:my/path`. + + *Matthew Draper* + * (Temporarily) deprecate SQLite database URLs containing an authority. diff --git a/activerecord/lib/active_record/connection_adapters/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/connection_specification.rb index 5ede946836..56c533c401 100644 --- a/activerecord/lib/active_record/connection_adapters/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/connection_specification.rb @@ -41,7 +41,6 @@ module ActiveRecord else @query = @uri.query end - @authority = url =~ %r{\A[^:]*://} end # Converts the given URL to a full connection hash. @@ -91,21 +90,8 @@ module ActiveRecord end # Returns name of the database. - # Sqlite3's handling of a leading slash is in transition as of - # Rails 4.1. def database_from_path - if @authority && @adapter == 'sqlite3' - # 'sqlite3:///foo' is relative, for backwards compatibility. - - database_name = uri.path.sub(%r{^/}, "") - - msg = "Paths in SQLite3 database URLs of the form `sqlite3:///path` will be treated as absolute in Rails 4.2. " \ - "Please switch to `sqlite3:#{database_name}`." - ActiveSupport::Deprecation.warn(msg) - - database_name - - elsif @adapter == 'sqlite3' + if @adapter == 'sqlite3' # 'sqlite3:/foo' is absolute, because that makes sense. The # corresponding relative version, 'sqlite3:foo', is handled # elsewhere, as an "opaque". diff --git a/activerecord/test/cases/connection_specification/resolver_test.rb b/activerecord/test/cases/connection_specification/resolver_test.rb index a4fe87049a..3c2f5d4219 100644 --- a/activerecord/test/cases/connection_specification/resolver_test.rb +++ b/activerecord/test/cases/connection_specification/resolver_test.rb @@ -83,8 +83,8 @@ module ActiveRecord end def test_url_with_authority_for_sqlite3 - spec = assert_deprecated { resolve 'sqlite3:///foo_test' } - assert_equal('foo_test', spec["database"]) + spec = resolve 'sqlite3:///foo_test' + assert_equal('/foo_test', spec["database"]) end def test_url_absolute_path_for_sqlite3 -- cgit v1.2.3