aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
diff options
context:
space:
mode:
authorGuilherme Mansur <guilherme.mansur@shopify.com>2019-06-10 16:22:29 -0400
committerGuilherme Mansur <guilherme.mansur@shopify.com>2019-06-17 14:00:53 -0400
commitfe30211574648fa21bff958a3cf952fd0c20c3b1 (patch)
treed0f4c8b65fadf52ea0b0474c7b646b216e5b4a9f /activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
parentc65acad0df6b332324c24e725c7d581bd76f9760 (diff)
downloadrails-fe30211574648fa21bff958a3cf952fd0c20c3b1.tar.gz
rails-fe30211574648fa21bff958a3cf952fd0c20c3b1.tar.bz2
rails-fe30211574648fa21bff958a3cf952fd0c20c3b1.zip
Add database_exists? method to connection adapters
When SQLite connects it will silently create a database if the database does not exist. This behaviour causes different issues because of inconsistent behaviour between adapters: #36383, #32914. This commit adds a `database_exists?` method as a way to check the database without creating it. This is a stepping stone to fully resolving the above issues.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
index e6302112de..3a1edfc855 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -98,6 +98,16 @@ module ActiveRecord
configure_connection
end
+ def self.database_exists?(config)
+ config = config.symbolize_keys
+ if config[:database] == ":memory:"
+ return true
+ else
+ database_file = defined?(Rails.root) ? File.expand_path(config[:database], Rails.root) : config[:database]
+ File.exist?(database_file)
+ end
+ end
+
def supports_ddl_transactions?
true
end