Skip to content

Commit fd94a12

Browse files
maniSHarma7575byroot
authored andcommitted
[FIX] Sqlite3 Should create db for missing parent directories as well
1 parent 0a3a578 commit fd94a12

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,9 @@ def initialize(...)
112112
dirname = File.dirname(@config[:database])
113113
unless File.directory?(dirname)
114114
begin
115-
Dir.mkdir(dirname)
116-
rescue Errno::ENOENT => error
117-
if error.message.include?("No such file or directory")
118-
raise ActiveRecord::NoDatabaseError.new(connection_pool: @pool)
119-
else
120-
raise
121-
end
115+
FileUtils.mkdir_p(dirname)
116+
rescue SystemCallError
117+
raise ActiveRecord::NoDatabaseError.new(connection_pool: @pool)
122118
end
123119
end
124120
end

activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ def setup
2323
)
2424
end
2525

26-
def test_bad_connection
27-
error = assert_raise ActiveRecord::NoDatabaseError do
28-
connection = SQLite3Adapter.new(adapter: "sqlite3", database: "/tmp/should/_not/_exist/-cinco-dog.db")
26+
def test_database_should_get_created_when_missing_parent_directories_for_database_path
27+
dir = Dir.mktmpdir
28+
db_path = File.join(dir, "_not_exist/-cinco-dog.sqlite3")
29+
assert_nothing_raised do
30+
connection = SQLite3Adapter.new(adapter: "sqlite3", database: db_path)
2931
connection.drop_table "ex", if_exists: true
3032
end
31-
assert_kind_of ActiveRecord::ConnectionAdapters::NullPool, error.connection_pool
33+
assert SQLite3Adapter.database_exists?(adapter: "sqlite3", database: db_path)
3234
end
3335

3436
def test_database_exists_returns_false_when_the_database_does_not_exist

0 commit comments

Comments
 (0)