summaryrefslogtreecommitdiff
path: root/lib/gitlab/database.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database.rb')
-rw-r--r--lib/gitlab/database.rb35
1 files changed, 32 insertions, 3 deletions
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index aa419d75df2..a269b8d0366 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -2,15 +2,15 @@
module Gitlab
module Database
+ CI_DATABASE_NAME = 'ci'
+
# This constant is used when renaming tables concurrently.
# If you plan to rename a table using the `rename_table_safely` method, add your table here one milestone before the rename.
# Example:
# TABLES_TO_BE_RENAMED = {
# 'old_name' => 'new_name'
# }.freeze
- TABLES_TO_BE_RENAMED = {
- 'services' => 'integrations'
- }.freeze
+ TABLES_TO_BE_RENAMED = {}.freeze
# Minimum PostgreSQL version requirement per documentation:
# https://docs.gitlab.com/ee/install/requirements.html#postgresql-requirements
@@ -68,6 +68,25 @@ module Gitlab
end
end
+ def self.has_config?(database_name)
+ Gitlab::Application.config.database_configuration[Rails.env].include?(database_name.to_s)
+ end
+
+ def self.main_database?(name)
+ # The database is `main` if it is a first entry in `database.yml`
+ # Rails internally names them `primary` to avoid confusion
+ # with broad `primary` usage we use `main` instead
+ #
+ # TODO: The explicit `== 'main'` is needed in a transition period till
+ # the `database.yml` is not migrated into `main:` syntax
+ # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/65243
+ ActiveRecord::Base.configurations.primary?(name.to_s) || name.to_s == 'main'
+ end
+
+ def self.ci_database?(name)
+ name.to_s == CI_DATABASE_NAME
+ end
+
def self.username
config['username'] || ENV['USER']
end
@@ -333,6 +352,16 @@ module Gitlab
end
end
+ def self.dbname(ar_connection)
+ if ar_connection.respond_to?(:pool) &&
+ ar_connection.pool.respond_to?(:db_config) &&
+ ar_connection.pool.db_config.respond_to?(:database)
+ return ar_connection.pool.db_config.database
+ end
+
+ 'unknown'
+ end
+
# inside_transaction? will return true if the caller is running within a transaction. Handles special cases
# when running inside a test environment, where tests may be wrapped in transactions
def self.inside_transaction?