mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #37185 from seejohnrun/config-symbols
Use symbols everywhere for database configurations
This commit is contained in:
commit
42dea6b0f6
36 changed files with 426 additions and 392 deletions
|
@ -1,3 +1,7 @@
|
|||
* Add `DatabaseConfig#configuration_hash` to return database configuration hashes with symbol keys, and use all symbol-key configuration hashes internally. Deprecate `DatabaseConfig#config` which returns a String-keyed `Hash` with the same values.
|
||||
|
||||
*John Crepezzi*, *Eileen Uchitelle*
|
||||
|
||||
* Allow column names to be passed to `remove_index` positionally along with other options.
|
||||
|
||||
Passing other options can be necessary to make `remove_index` correctly reversible.
|
||||
|
|
|
@ -385,14 +385,14 @@ module ActiveRecord
|
|||
|
||||
@spec = spec
|
||||
|
||||
@checkout_timeout = (spec.config[:checkout_timeout] && spec.config[:checkout_timeout].to_f) || 5
|
||||
if @idle_timeout = spec.config.fetch(:idle_timeout, 300)
|
||||
@checkout_timeout = (spec.underlying_configuration_hash[:checkout_timeout] && spec.underlying_configuration_hash[:checkout_timeout].to_f) || 5
|
||||
if @idle_timeout = spec.underlying_configuration_hash.fetch(:idle_timeout, 300)
|
||||
@idle_timeout = @idle_timeout.to_f
|
||||
@idle_timeout = nil if @idle_timeout <= 0
|
||||
end
|
||||
|
||||
# default max pool size to 5
|
||||
@size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
|
||||
@size = (spec.underlying_configuration_hash[:pool] && spec.underlying_configuration_hash[:pool].to_i) || 5
|
||||
|
||||
# This variable tracks the cache of threads mapped to reserved connections, with the
|
||||
# sole purpose of speeding up the +connection+ method. It is not the authoritative
|
||||
|
@ -422,7 +422,7 @@ module ActiveRecord
|
|||
|
||||
# +reaping_frequency+ is configurable mostly for historical reasons, but it could
|
||||
# also be useful if someone wants a very low +idle_timeout+.
|
||||
reaping_frequency = spec.config.fetch(:reaping_frequency, 60)
|
||||
reaping_frequency = spec.underlying_configuration_hash.fetch(:reaping_frequency, 60)
|
||||
@reaper = Reaper.new(self, reaping_frequency && reaping_frequency.to_f)
|
||||
@reaper.run
|
||||
end
|
||||
|
@ -505,7 +505,7 @@ module ActiveRecord
|
|||
# Raises:
|
||||
# - ActiveRecord::ExclusiveConnectionTimeoutError if unable to gain ownership of all
|
||||
# connections in the pool within a timeout interval (default duration is
|
||||
# <tt>spec.config[:checkout_timeout] * 2</tt> seconds).
|
||||
# <tt>spec.underlying_configuration_hash[:checkout_timeout] * 2</tt> seconds).
|
||||
def disconnect(raise_on_acquisition_timeout = true)
|
||||
with_exclusively_acquired_all_connections(raise_on_acquisition_timeout) do
|
||||
synchronize do
|
||||
|
@ -526,7 +526,7 @@ module ActiveRecord
|
|||
#
|
||||
# The pool first tries to gain ownership of all connections. If unable to
|
||||
# do so within a timeout interval (default duration is
|
||||
# <tt>spec.config[:checkout_timeout] * 2</tt> seconds), then the pool is forcefully
|
||||
# <tt>spec.underlying_configuration_hash[:checkout_timeout] * 2</tt> seconds), then the pool is forcefully
|
||||
# disconnected without any regard for other connection owning threads.
|
||||
def disconnect!
|
||||
disconnect(false)
|
||||
|
@ -557,7 +557,7 @@ module ActiveRecord
|
|||
# Raises:
|
||||
# - ActiveRecord::ExclusiveConnectionTimeoutError if unable to gain ownership of all
|
||||
# connections in the pool within a timeout interval (default duration is
|
||||
# <tt>spec.config[:checkout_timeout] * 2</tt> seconds).
|
||||
# <tt>spec.underlying_configuration_hash[:checkout_timeout] * 2</tt> seconds).
|
||||
def clear_reloadable_connections(raise_on_acquisition_timeout = true)
|
||||
with_exclusively_acquired_all_connections(raise_on_acquisition_timeout) do
|
||||
synchronize do
|
||||
|
@ -579,7 +579,7 @@ module ActiveRecord
|
|||
#
|
||||
# The pool first tries to gain ownership of all connections. If unable to
|
||||
# do so within a timeout interval (default duration is
|
||||
# <tt>spec.config[:checkout_timeout] * 2</tt> seconds), then the pool forcefully
|
||||
# <tt>spec.underlying_configuration_hash[:checkout_timeout] * 2</tt> seconds), then the pool forcefully
|
||||
# clears the cache and reloads connections without any regard for other
|
||||
# connection owning threads.
|
||||
def clear_reloadable_connections!
|
||||
|
@ -899,7 +899,7 @@ module ActiveRecord
|
|||
alias_method :release, :remove_connection_from_thread_cache
|
||||
|
||||
def new_connection
|
||||
Base.send(spec.adapter_method, spec.config).tap do |conn|
|
||||
Base.send(spec.adapter_method, spec.underlying_configuration_hash).tap do |conn|
|
||||
conn.check_version
|
||||
end
|
||||
end
|
||||
|
@ -1074,7 +1074,7 @@ module ActiveRecord
|
|||
}
|
||||
if spec
|
||||
payload[:spec_name] = spec.name
|
||||
payload[:config] = spec.config
|
||||
payload[:config] = spec.underlying_configuration_hash
|
||||
end
|
||||
|
||||
message_bus.instrument("!connection.active_record", payload) do
|
||||
|
@ -1149,7 +1149,7 @@ module ActiveRecord
|
|||
if pool = owner_to_pool.delete(spec_name)
|
||||
pool.automatic_reconnect = false
|
||||
pool.disconnect!
|
||||
pool.spec.config
|
||||
pool.spec.underlying_configuration_hash
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -5,14 +5,18 @@ require "uri"
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class ConnectionSpecification #:nodoc:
|
||||
attr_reader :name, :config, :adapter_method
|
||||
attr_reader :name, :adapter_method
|
||||
|
||||
def initialize(name, config, adapter_method)
|
||||
@name, @config, @adapter_method = name, config, adapter_method
|
||||
end
|
||||
|
||||
def underlying_configuration_hash
|
||||
@config
|
||||
end
|
||||
|
||||
def initialize_dup(original)
|
||||
@config = original.config.dup
|
||||
@config = original.underlying_configuration_hash.dup
|
||||
end
|
||||
|
||||
def to_hash
|
||||
|
@ -26,14 +30,14 @@ module ActiveRecord
|
|||
# url = "postgresql://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000"
|
||||
# ConnectionUrlResolver.new(url).to_hash
|
||||
# # => {
|
||||
# "adapter" => "postgresql",
|
||||
# "host" => "localhost",
|
||||
# "port" => 9000,
|
||||
# "database" => "foo_test",
|
||||
# "username" => "foo",
|
||||
# "password" => "bar",
|
||||
# "pool" => "5",
|
||||
# "timeout" => "3000"
|
||||
# adapter: "postgresql",
|
||||
# host: "localhost",
|
||||
# port: 9000,
|
||||
# database: "foo_test",
|
||||
# username: "foo",
|
||||
# password: "bar",
|
||||
# pool: "5",
|
||||
# timeout: "3000"
|
||||
# }
|
||||
def initialize(url)
|
||||
raise "Database URL cannot be empty" if url.blank?
|
||||
|
@ -65,29 +69,31 @@ module ActiveRecord
|
|||
# Converts the query parameters of the URI into a hash.
|
||||
#
|
||||
# "localhost?pool=5&reaping_frequency=2"
|
||||
# # => { "pool" => "5", "reaping_frequency" => "2" }
|
||||
# # => { pool: "5", reaping_frequency: "2" }
|
||||
#
|
||||
# returns empty hash if no query present.
|
||||
#
|
||||
# "localhost"
|
||||
# # => {}
|
||||
def query_hash
|
||||
Hash[(@query || "").split("&").map { |pair| pair.split("=") }]
|
||||
Hash[(@query || "").split("&").map { |pair| pair.split("=") }].symbolize_keys
|
||||
end
|
||||
|
||||
def raw_config
|
||||
if uri.opaque
|
||||
query_hash.merge(
|
||||
"adapter" => @adapter,
|
||||
"database" => uri.opaque)
|
||||
adapter: @adapter,
|
||||
database: uri.opaque
|
||||
)
|
||||
else
|
||||
query_hash.merge(
|
||||
"adapter" => @adapter,
|
||||
"username" => uri.user,
|
||||
"password" => uri.password,
|
||||
"port" => uri.port,
|
||||
"database" => database_from_path,
|
||||
"host" => uri.hostname)
|
||||
adapter: @adapter,
|
||||
username: uri.user,
|
||||
password: uri.password,
|
||||
port: uri.port,
|
||||
database: database_from_path,
|
||||
host: uri.hostname
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -126,13 +132,13 @@ module ActiveRecord
|
|||
#
|
||||
# configurations = { "production" => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" } }
|
||||
# Resolver.new(configurations).resolve(:production)
|
||||
# # => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3"}
|
||||
# # => { host: "localhost", database: "foo", adapter: "sqlite3"}
|
||||
#
|
||||
# Initialized with URL configuration strings.
|
||||
#
|
||||
# configurations = { "production" => "postgresql://localhost/foo" }
|
||||
# Resolver.new(configurations).resolve(:production)
|
||||
# # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
|
||||
# # => { host: "localhost", database: "foo", adapter: "postgresql" }
|
||||
#
|
||||
def resolve(config_or_env, pool_name = nil)
|
||||
if config_or_env
|
||||
|
@ -151,8 +157,8 @@ module ActiveRecord
|
|||
# spec = Resolver.new(config).spec(:production)
|
||||
# spec.adapter_method
|
||||
# # => "sqlite3_connection"
|
||||
# spec.config
|
||||
# # => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" }
|
||||
# spec.underlying_configuration_hash
|
||||
# # => { host: "localhost", database: "foo", adapter: "sqlite3" }
|
||||
#
|
||||
def spec(config)
|
||||
pool_name = config if config.is_a?(Symbol)
|
||||
|
@ -205,12 +211,12 @@ module ActiveRecord
|
|||
# One layer deep hash of connection values.
|
||||
#
|
||||
# Resolver.new({}).resolve_connection("adapter" => "sqlite3")
|
||||
# # => { "adapter" => "sqlite3" }
|
||||
# # => { adapter: "sqlite3" }
|
||||
#
|
||||
# Connection URL.
|
||||
#
|
||||
# Resolver.new({}).resolve_connection("postgresql://localhost/foo")
|
||||
# # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
|
||||
# # => { host: "localhost", database: "foo", adapter: "postgresql" }
|
||||
#
|
||||
def resolve_connection(config_or_env, pool_name = nil)
|
||||
case config_or_env
|
||||
|
@ -236,16 +242,16 @@ module ActiveRecord
|
|||
# configurations = #<ActiveRecord::DatabaseConfigurations:0x00007fd9fdace3e0
|
||||
# @configurations=[
|
||||
# #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd9fdace250
|
||||
# @env_name="production", @spec_name="primary", @config={"database"=>"my_db"}>
|
||||
# @env_name="production", @spec_name="primary", @config={database: "my_db"}>
|
||||
# ]>
|
||||
#
|
||||
# Resolver.new(configurations).resolve_symbol_connection(:production, "primary")
|
||||
# # => { "database" => "my_db" }
|
||||
# # => { database: "my_db" }
|
||||
def resolve_symbol_connection(env_name, pool_name)
|
||||
db_config = configurations.find_db_config(env_name)
|
||||
|
||||
if db_config
|
||||
resolve_connection(db_config.config).merge("name" => pool_name.to_s)
|
||||
resolve_connection(db_config.configuration_hash).merge(name: pool_name.to_s)
|
||||
else
|
||||
raise AdapterNotSpecified, <<~MSG
|
||||
The `#{env_name}` database is not configured for the `#{ActiveRecord::ConnectionHandling::DEFAULT_ENV.call}` environment.
|
||||
|
@ -275,8 +281,8 @@ module ActiveRecord
|
|||
# hash and merges with the rest of the hash.
|
||||
# Connection details inside of the "url" key win any merge conflicts
|
||||
def resolve_hash_connection(spec)
|
||||
if spec["url"] && !spec["url"].match?(/^jdbc:/)
|
||||
connection_hash = resolve_url_connection(spec.delete("url"))
|
||||
if spec[:url] && !spec[:url].match?(/^jdbc:/)
|
||||
connection_hash = resolve_url_connection(spec.delete(:url))
|
||||
spec.merge!(connection_hash)
|
||||
end
|
||||
spec
|
||||
|
@ -285,7 +291,7 @@ module ActiveRecord
|
|||
# Takes a connection URL.
|
||||
#
|
||||
# Resolver.new({}).resolve_url_connection("postgresql://localhost/foo")
|
||||
# # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
|
||||
# # => { host: "localhost", database: "foo", adapter: "postgresql" }
|
||||
#
|
||||
def resolve_url_connection(url)
|
||||
ConnectionUrlResolver.new(url).to_hash
|
||||
|
|
|
@ -227,7 +227,7 @@ module ActiveRecord
|
|||
#
|
||||
# Please use only for reading.
|
||||
def connection_config
|
||||
connection_pool.spec.config
|
||||
connection_pool.spec.underlying_configuration_hash
|
||||
end
|
||||
|
||||
def connection_pool
|
||||
|
|
|
@ -43,9 +43,9 @@ module ActiveRecord
|
|||
#
|
||||
# #<ActiveRecord::DatabaseConfigurations:0x00007fd1acbdf800 @configurations=[
|
||||
# #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10 @env_name="development",
|
||||
# @spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>,
|
||||
# @spec_name="primary", @config={adapter: "sqlite3", database: "db/development.sqlite3"}>,
|
||||
# #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbdea90 @env_name="production",
|
||||
# @spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/production.sqlite3"}>
|
||||
# @spec_name="primary", @config={adapter: "sqlite3", database: "db/production.sqlite3"}>
|
||||
# ]>
|
||||
def self.configurations=(config)
|
||||
@@configurations = ActiveRecord::DatabaseConfigurations.new(config)
|
||||
|
|
|
@ -61,7 +61,7 @@ module ActiveRecord
|
|||
# { database: "my_db", adapter: "mysql2" }
|
||||
def default_hash(env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s)
|
||||
default = find_db_config(env)
|
||||
default.config if default
|
||||
default.configuration_hash if default
|
||||
end
|
||||
alias :[] :default_hash
|
||||
|
||||
|
@ -96,14 +96,14 @@ module ActiveRecord
|
|||
def each
|
||||
throw_getter_deprecation(:each)
|
||||
configurations.each { |config|
|
||||
yield [config.env_name, config.config]
|
||||
yield [config.env_name, config.configuration_hash]
|
||||
}
|
||||
end
|
||||
|
||||
def first
|
||||
throw_getter_deprecation(:first)
|
||||
config = configurations.first
|
||||
[config.env_name, config.config]
|
||||
[config.env_name, config.configuration_hash]
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -147,7 +147,7 @@ module ActiveRecord
|
|||
when String
|
||||
build_db_config_from_string(env_name, spec_name, config)
|
||||
when Hash
|
||||
build_db_config_from_hash(env_name, spec_name, config.stringify_keys)
|
||||
build_db_config_from_hash(env_name, spec_name, config.symbolize_keys)
|
||||
else
|
||||
raise InvalidConfigurationError, "'{ #{env_name} => #{config} }' is not a valid configuration. Expected '#{config}' to be a URL string or a Hash."
|
||||
end
|
||||
|
@ -164,10 +164,10 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def build_db_config_from_hash(env_name, spec_name, config)
|
||||
if config.has_key?("url")
|
||||
url = config["url"]
|
||||
if config.has_key?(:url)
|
||||
url = config[:url]
|
||||
config_without_url = config.dup
|
||||
config_without_url.delete "url"
|
||||
config_without_url.delete :url
|
||||
|
||||
ActiveRecord::DatabaseConfigurations::UrlConfig.new(env_name, spec_name, url, config_without_url)
|
||||
else
|
||||
|
@ -179,7 +179,7 @@ module ActiveRecord
|
|||
configs.map do |config|
|
||||
next config if config.url_config? || config.env_name != current_env
|
||||
|
||||
url_config = environment_url_config(current_env, config.spec_name, config.config)
|
||||
url_config = environment_url_config(current_env, config.spec_name, config.configuration_hash)
|
||||
url_config || config
|
||||
end
|
||||
end
|
||||
|
@ -205,7 +205,7 @@ module ActiveRecord
|
|||
configs_for(env_name: args.first)
|
||||
when :values
|
||||
throw_getter_deprecation(method)
|
||||
configurations.map(&:config)
|
||||
configurations.map(&:configuration_hash)
|
||||
when :[]=
|
||||
throw_setter_deprecation(method)
|
||||
|
||||
|
|
|
@ -13,6 +13,11 @@ module ActiveRecord
|
|||
@spec_name = spec_name
|
||||
end
|
||||
|
||||
def config
|
||||
ActiveSupport::Deprecation.warn("DatabaseConfig#config will be removed in 6.2.0 in favor of DatabaseConfigurations#configuration_hash which returns a hash with symbol keys")
|
||||
configuration_hash.stringify_keys
|
||||
end
|
||||
|
||||
def replica?
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
@ -26,7 +31,7 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def to_legacy_hash
|
||||
{ env_name => config }
|
||||
{ env_name => configuration_hash.stringify_keys }
|
||||
end
|
||||
|
||||
def for_current_env?
|
||||
|
|
|
@ -12,7 +12,7 @@ module ActiveRecord
|
|||
# Becomes:
|
||||
#
|
||||
# #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10
|
||||
# @env_name="development", @spec_name="primary", @config={"database"=>"db_name"}>
|
||||
# @env_name="development", @spec_name="primary", @config={database: "db_name"}>
|
||||
#
|
||||
# ==== Options
|
||||
#
|
||||
|
@ -25,25 +25,27 @@ module ActiveRecord
|
|||
# database adapter, name, and other important information for database
|
||||
# connections.
|
||||
class HashConfig < DatabaseConfig
|
||||
attr_reader :config
|
||||
|
||||
def initialize(env_name, spec_name, config)
|
||||
super(env_name, spec_name)
|
||||
@config = config
|
||||
@config = config.symbolize_keys
|
||||
end
|
||||
|
||||
def configuration_hash
|
||||
@config
|
||||
end
|
||||
|
||||
# Determines whether a database configuration is for a replica / readonly
|
||||
# connection. If the +replica+ key is present in the config, +replica?+ will
|
||||
# return +true+.
|
||||
def replica?
|
||||
config["replica"]
|
||||
configuration_hash[:replica]
|
||||
end
|
||||
|
||||
# The migrations paths for a database configuration. If the
|
||||
# +migrations_paths+ key is present in the config, +migrations_paths+
|
||||
# will return its value.
|
||||
def migrations_paths
|
||||
config["migrations_paths"]
|
||||
configuration_hash[:migrations_paths]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,7 +14,7 @@ module ActiveRecord
|
|||
#
|
||||
# #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fdc3238f340
|
||||
# @env_name="default_env", @spec_name="primary",
|
||||
# @config={"adapter"=>"postgresql", "database"=>"foo", "host"=>"localhost"},
|
||||
# @config={adapter: "postgresql", database: "foo", host: "localhost"},
|
||||
# @url="postgres://localhost/foo">
|
||||
#
|
||||
# ==== Options
|
||||
|
@ -29,14 +29,18 @@ module ActiveRecord
|
|||
# database adapter, name, and other important information for database
|
||||
# connections.
|
||||
class UrlConfig < DatabaseConfig
|
||||
attr_reader :url, :config
|
||||
attr_reader :url
|
||||
|
||||
def initialize(env_name, spec_name, url, config = {})
|
||||
super(env_name, spec_name)
|
||||
@config = build_config(config, url)
|
||||
@config = build_config(config, url).symbolize_keys
|
||||
@url = url
|
||||
end
|
||||
|
||||
def configuration_hash
|
||||
@config
|
||||
end
|
||||
|
||||
def url_config? # :nodoc:
|
||||
true
|
||||
end
|
||||
|
@ -45,20 +49,20 @@ module ActiveRecord
|
|||
# connection. If the +replica+ key is present in the config, +replica?+ will
|
||||
# return +true+.
|
||||
def replica?
|
||||
config["replica"]
|
||||
configuration_hash[:replica]
|
||||
end
|
||||
|
||||
# The migrations paths for a database configuration. If the
|
||||
# +migrations_paths+ key is present in the config, +migrations_paths+
|
||||
# will return its value.
|
||||
def migrations_paths
|
||||
config["migrations_paths"]
|
||||
configuration_hash[:migrations_paths]
|
||||
end
|
||||
|
||||
private
|
||||
def build_url_hash(url)
|
||||
if url.nil? || /^jdbc:/.match?(url)
|
||||
{ "url" => url }
|
||||
{ url: url }
|
||||
else
|
||||
ActiveRecord::ConnectionAdapters::ConnectionSpecification::ConnectionUrlResolver.new(url).to_hash
|
||||
end
|
||||
|
|
|
@ -591,7 +591,7 @@ module ActiveRecord
|
|||
all_configs = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env)
|
||||
|
||||
needs_update = !all_configs.all? do |db_config|
|
||||
Tasks::DatabaseTasks.schema_up_to_date?(db_config.config, ActiveRecord::Base.schema_format, nil, Rails.env, db_config.spec_name)
|
||||
Tasks::DatabaseTasks.schema_up_to_date?(db_config.configuration_hash, ActiveRecord::Base.schema_format, nil, Rails.env, db_config.spec_name)
|
||||
end
|
||||
|
||||
if needs_update
|
||||
|
|
|
@ -29,7 +29,7 @@ db_namespace = namespace :db do
|
|||
desc "Create #{spec_name} database for current environment"
|
||||
task spec_name => :load_config do
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
ActiveRecord::Tasks::DatabaseTasks.create(db_config.config)
|
||||
ActiveRecord::Tasks::DatabaseTasks.create(db_config.configuration_hash)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -48,7 +48,7 @@ db_namespace = namespace :db do
|
|||
desc "Drop #{spec_name} database for current environment"
|
||||
task spec_name => [:load_config, :check_protected_environments] do
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop(db_config.config)
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop(db_config.configuration_hash)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -81,7 +81,7 @@ db_namespace = namespace :db do
|
|||
desc "Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)."
|
||||
task migrate: :load_config do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate
|
||||
end
|
||||
db_namespace["_dump"].invoke
|
||||
|
@ -107,7 +107,7 @@ db_namespace = namespace :db do
|
|||
desc "Migrate #{spec_name} database for current environment"
|
||||
task spec_name => :load_config do
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate
|
||||
end
|
||||
end
|
||||
|
@ -150,7 +150,7 @@ db_namespace = namespace :db do
|
|||
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
||||
ActiveRecord::Base.connection.migration_context.run(
|
||||
:up,
|
||||
|
@ -184,7 +184,7 @@ db_namespace = namespace :db do
|
|||
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
||||
ActiveRecord::Base.connection.migration_context.run(
|
||||
:down,
|
||||
|
@ -199,7 +199,7 @@ db_namespace = namespace :db do
|
|||
desc "Display status of migrations"
|
||||
task status: :load_config do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
||||
end
|
||||
end
|
||||
|
@ -209,7 +209,7 @@ db_namespace = namespace :db do
|
|||
desc "Display status of migrations for #{spec_name} database"
|
||||
task spec_name => :load_config do
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
||||
end
|
||||
end
|
||||
|
@ -253,7 +253,7 @@ db_namespace = namespace :db do
|
|||
# desc "Raises an error if there are pending migrations"
|
||||
task abort_if_pending_migrations: :load_config do
|
||||
pending_migrations = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).flat_map do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
|
||||
ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
||||
end
|
||||
|
@ -274,7 +274,7 @@ db_namespace = namespace :db do
|
|||
# desc "Raises an error if there are pending migrations for #{spec_name} database"
|
||||
task spec_name => :load_config do
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
|
||||
pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
||||
|
||||
|
@ -297,18 +297,18 @@ db_namespace = namespace :db do
|
|||
seed = false
|
||||
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
|
||||
# Skipped when no database
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate
|
||||
if ActiveRecord::Base.dump_schema_after_migration
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, ActiveRecord::Base.schema_format, db_config.spec_name)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.configuration_hash, ActiveRecord::Base.schema_format, db_config.spec_name)
|
||||
end
|
||||
|
||||
rescue ActiveRecord::NoDatabaseError
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(db_config.env_name, db_config.spec_name)
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(
|
||||
db_config.config,
|
||||
db_config.configuration_hash,
|
||||
ActiveRecord::Base.schema_format,
|
||||
nil,
|
||||
db_config.env_name,
|
||||
|
@ -385,8 +385,8 @@ db_namespace = namespace :db do
|
|||
desc "Creates a db/schema.rb file that is portable against any DB supported by Active Record"
|
||||
task dump: :load_config do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, :ruby, db_config.spec_name)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.configuration_hash, :ruby, db_config.spec_name)
|
||||
end
|
||||
|
||||
db_namespace["schema:dump"].reenable
|
||||
|
@ -405,7 +405,7 @@ db_namespace = namespace :db do
|
|||
desc "Creates a db/schema_cache.yml file."
|
||||
task dump: :load_config do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(db_config.spec_name)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(
|
||||
ActiveRecord::Base.connection,
|
||||
|
@ -428,8 +428,8 @@ db_namespace = namespace :db do
|
|||
desc "Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
||||
task dump: :load_config do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
||||
ActiveRecord::Base.establish_connection(db_config.config)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, :sql, db_config.spec_name)
|
||||
ActiveRecord::Base.establish_connection(db_config.configuration_hash)
|
||||
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.configuration_hash, :sql, db_config.spec_name)
|
||||
end
|
||||
|
||||
db_namespace["structure:dump"].reenable
|
||||
|
@ -462,7 +462,7 @@ db_namespace = namespace :db do
|
|||
ActiveRecord::Schema.verbose = false
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
||||
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.spec_name, :ruby)
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, :ruby, filename, "test")
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.configuration_hash, :ruby, filename, "test")
|
||||
end
|
||||
ensure
|
||||
if should_reconnect
|
||||
|
@ -474,14 +474,14 @@ db_namespace = namespace :db do
|
|||
task load_structure: %w(db:test:purge) do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
||||
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.spec_name, :sql)
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, :sql, filename, "test")
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.configuration_hash, :sql, filename, "test")
|
||||
end
|
||||
end
|
||||
|
||||
# desc "Empty the test database"
|
||||
task purge: %w(load_config check_protected_environments) do
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge(db_config.config)
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge(db_config.configuration_hash)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -116,19 +116,19 @@ module ActiveRecord
|
|||
if options.has_key?(:config)
|
||||
@current_config = options[:config]
|
||||
else
|
||||
@current_config ||= ActiveRecord::Base.configurations.configs_for(env_name: options[:env], spec_name: options[:spec]).config
|
||||
@current_config ||= ActiveRecord::Base.configurations.configs_for(env_name: options[:env], spec_name: options[:spec]).underlying_configuration_hash
|
||||
end
|
||||
end
|
||||
|
||||
def create(*arguments)
|
||||
configuration = arguments.first
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).create
|
||||
$stdout.puts "Created database '#{configuration['database']}'" if verbose?
|
||||
configuration = arguments.first.symbolize_keys
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).create
|
||||
$stdout.puts "Created database '#{configuration[:database]}'" if verbose?
|
||||
rescue DatabaseAlreadyExists
|
||||
$stderr.puts "Database '#{configuration['database']}' already exists" if verbose?
|
||||
$stderr.puts "Database '#{configuration[:database]}' already exists" if verbose?
|
||||
rescue Exception => error
|
||||
$stderr.puts error
|
||||
$stderr.puts "Couldn't create '#{configuration['database']}' database. Please check your configuration."
|
||||
$stderr.puts "Couldn't create '#{configuration[:database]}' database. Please check your configuration."
|
||||
raise
|
||||
end
|
||||
|
||||
|
@ -187,14 +187,14 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def drop(*arguments)
|
||||
configuration = arguments.first
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).drop
|
||||
$stdout.puts "Dropped database '#{configuration['database']}'" if verbose?
|
||||
configuration = arguments.first.symbolize_keys
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).drop
|
||||
$stdout.puts "Dropped database '#{configuration[:database]}'" if verbose?
|
||||
rescue ActiveRecord::NoDatabaseError
|
||||
$stderr.puts "Database '#{configuration['database']}' does not exist"
|
||||
$stderr.puts "Database '#{configuration[:database]}' does not exist"
|
||||
rescue Exception => error
|
||||
$stderr.puts error
|
||||
$stderr.puts "Couldn't drop database '#{configuration['database']}'"
|
||||
$stderr.puts "Couldn't drop database '#{configuration[:database]}'"
|
||||
raise
|
||||
end
|
||||
|
||||
|
@ -224,7 +224,7 @@ module ActiveRecord
|
|||
|
||||
def truncate_all(environment = env)
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: environment).each do |db_config|
|
||||
truncate_tables db_config.config
|
||||
truncate_tables db_config.configuration_hash
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -269,25 +269,26 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def charset_current(environment = env, specification_name = spec)
|
||||
charset ActiveRecord::Base.configurations.configs_for(env_name: environment, spec_name: specification_name).config
|
||||
charset ActiveRecord::Base.configurations.configs_for(env_name: environment, spec_name: specification_name).configuration_hash
|
||||
end
|
||||
|
||||
def charset(*arguments)
|
||||
configuration = arguments.first
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).charset
|
||||
configuration = arguments.first.symbolize_keys
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).charset
|
||||
end
|
||||
|
||||
def collation_current(environment = env, specification_name = spec)
|
||||
collation ActiveRecord::Base.configurations.configs_for(env_name: environment, spec_name: specification_name).config
|
||||
collation ActiveRecord::Base.configurations.configs_for(env_name: environment, spec_name: specification_name).configuration_hash
|
||||
end
|
||||
|
||||
def collation(*arguments)
|
||||
configuration = arguments.first
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).collation
|
||||
configuration = arguments.first.symbolize_keys
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).collation
|
||||
end
|
||||
|
||||
def purge(configuration)
|
||||
class_for_adapter(configuration["adapter"]).new(configuration).purge
|
||||
configuration = configuration.symbolize_keys
|
||||
class_for_adapter(configuration[:adapter]).new(configuration).purge
|
||||
end
|
||||
|
||||
def purge_all
|
||||
|
@ -304,15 +305,15 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def structure_dump(*arguments)
|
||||
configuration = arguments.first
|
||||
configuration = arguments.first.symbolize_keys
|
||||
filename = arguments.delete_at 1
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).structure_dump(filename, structure_dump_flags)
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).structure_dump(filename, structure_dump_flags)
|
||||
end
|
||||
|
||||
def structure_load(*arguments)
|
||||
configuration = arguments.first
|
||||
configuration = arguments.first.symbolize_keys
|
||||
filename = arguments.delete_at 1
|
||||
class_for_adapter(configuration["adapter"]).new(*arguments).structure_load(filename, structure_load_flags)
|
||||
class_for_adapter(configuration[:adapter]).new(*arguments).structure_load(filename, structure_load_flags)
|
||||
end
|
||||
|
||||
def load_schema(configuration, format = ActiveRecord::Base.schema_format, file = nil, environment = env, spec_name = "primary") # :nodoc:
|
||||
|
@ -475,26 +476,26 @@ module ActiveRecord
|
|||
ActiveRecord::Base.configurations.configs_for(env_name: env).each do |db_config|
|
||||
next if spec_name && spec_name != db_config.spec_name
|
||||
|
||||
yield db_config.config, db_config.spec_name, env
|
||||
yield db_config.configuration_hash, db_config.spec_name, env
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def each_local_configuration
|
||||
ActiveRecord::Base.configurations.configs_for.each do |db_config|
|
||||
configuration = db_config.config
|
||||
next unless configuration["database"]
|
||||
configuration = db_config.configuration_hash
|
||||
next unless configuration[:database]
|
||||
|
||||
if local_database?(configuration)
|
||||
yield configuration
|
||||
else
|
||||
$stderr.puts "This task only modifies local databases. #{configuration['database']} is on a remote host."
|
||||
$stderr.puts "This task only modifies local databases. #{configuration[:database]} is on a remote host."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def local_database?(configuration)
|
||||
configuration["host"].blank? || LOCAL_HOSTS.include?(configuration["host"])
|
||||
configuration[:host].blank? || LOCAL_HOSTS.include?(configuration[:host])
|
||||
end
|
||||
|
||||
def schema_sha1(file)
|
||||
|
|
|
@ -8,23 +8,23 @@ module ActiveRecord
|
|||
delegate :connection, :establish_connection, to: ActiveRecord::Base
|
||||
|
||||
def initialize(configuration)
|
||||
@configuration = configuration
|
||||
@configuration = configuration.symbolize_keys
|
||||
end
|
||||
|
||||
def create
|
||||
establish_connection configuration_without_database
|
||||
connection.create_database configuration["database"], creation_options
|
||||
connection.create_database configuration[:database], creation_options
|
||||
establish_connection configuration
|
||||
end
|
||||
|
||||
def drop
|
||||
establish_connection configuration
|
||||
connection.drop_database configuration["database"]
|
||||
connection.drop_database configuration[:database]
|
||||
end
|
||||
|
||||
def purge
|
||||
establish_connection configuration
|
||||
connection.recreate_database configuration["database"], creation_options
|
||||
connection.recreate_database configuration[:database], creation_options
|
||||
end
|
||||
|
||||
def charset
|
||||
|
@ -44,10 +44,10 @@ module ActiveRecord
|
|||
|
||||
ignore_tables = ActiveRecord::SchemaDumper.ignore_tables
|
||||
if ignore_tables.any?
|
||||
args += ignore_tables.map { |table| "--ignore-table=#{configuration['database']}.#{table}" }
|
||||
args += ignore_tables.map { |table| "--ignore-table=#{configuration[:database]}.#{table}" }
|
||||
end
|
||||
|
||||
args.concat(["#{configuration['database']}"])
|
||||
args.concat(["#{configuration[:database]}"])
|
||||
args.unshift(*extra_flags) if extra_flags
|
||||
|
||||
run_cmd("mysqldump", args, "dumping")
|
||||
|
@ -56,7 +56,7 @@ module ActiveRecord
|
|||
def structure_load(filename, extra_flags)
|
||||
args = prepare_command_options
|
||||
args.concat(["--execute", %{SET FOREIGN_KEY_CHECKS = 0; SOURCE #{filename}; SET FOREIGN_KEY_CHECKS = 1}])
|
||||
args.concat(["--database", "#{configuration['database']}"])
|
||||
args.concat(["--database", "#{configuration[:database]}"])
|
||||
args.unshift(*extra_flags) if extra_flags
|
||||
|
||||
run_cmd("mysql", args, "loading")
|
||||
|
@ -66,29 +66,29 @@ module ActiveRecord
|
|||
attr_reader :configuration
|
||||
|
||||
def configuration_without_database
|
||||
configuration.merge("database" => nil)
|
||||
configuration.merge(database: nil)
|
||||
end
|
||||
|
||||
def creation_options
|
||||
Hash.new.tap do |options|
|
||||
options[:charset] = configuration["encoding"] if configuration.include? "encoding"
|
||||
options[:collation] = configuration["collation"] if configuration.include? "collation"
|
||||
options[:charset] = configuration[:encoding] if configuration.include? :encoding
|
||||
options[:collation] = configuration[:collation] if configuration.include? :collation
|
||||
end
|
||||
end
|
||||
|
||||
def prepare_command_options
|
||||
args = {
|
||||
"host" => "--host",
|
||||
"port" => "--port",
|
||||
"socket" => "--socket",
|
||||
"username" => "--user",
|
||||
"password" => "--password",
|
||||
"encoding" => "--default-character-set",
|
||||
"sslca" => "--ssl-ca",
|
||||
"sslcert" => "--ssl-cert",
|
||||
"sslcapath" => "--ssl-capath",
|
||||
"sslcipher" => "--ssl-cipher",
|
||||
"sslkey" => "--ssl-key"
|
||||
host: "--host",
|
||||
port: "--port",
|
||||
socket: "--socket",
|
||||
username: "--user",
|
||||
password: "--password",
|
||||
encoding: "--default-character-set",
|
||||
sslca: "--ssl-ca",
|
||||
sslcert: "--ssl-cert",
|
||||
sslcapath: "--ssl-capath",
|
||||
sslcipher: "--ssl-cipher",
|
||||
sslkey: "--ssl-key"
|
||||
}.map { |opt, arg| "#{arg}=#{configuration[opt]}" if configuration[opt] }.compact
|
||||
|
||||
args
|
||||
|
|
|
@ -13,19 +13,19 @@ module ActiveRecord
|
|||
to: ActiveRecord::Base
|
||||
|
||||
def initialize(configuration)
|
||||
@configuration = configuration
|
||||
@configuration = configuration.symbolize_keys
|
||||
end
|
||||
|
||||
def create(master_established = false)
|
||||
establish_master_connection unless master_established
|
||||
connection.create_database configuration["database"],
|
||||
configuration.merge("encoding" => encoding)
|
||||
connection.create_database configuration[:database],
|
||||
configuration.merge(encoding: encoding)
|
||||
establish_connection configuration
|
||||
end
|
||||
|
||||
def drop
|
||||
establish_master_connection
|
||||
connection.drop_database configuration["database"]
|
||||
connection.drop_database configuration[:database]
|
||||
end
|
||||
|
||||
def charset
|
||||
|
@ -48,7 +48,7 @@ module ActiveRecord
|
|||
search_path = \
|
||||
case ActiveRecord::Base.dump_schemas
|
||||
when :schema_search_path
|
||||
configuration["schema_search_path"]
|
||||
configuration[:schema_search_path]
|
||||
when :all
|
||||
nil
|
||||
when String
|
||||
|
@ -68,7 +68,7 @@ module ActiveRecord
|
|||
args += ignore_tables.flat_map { |table| ["-T", table] }
|
||||
end
|
||||
|
||||
args << configuration["database"]
|
||||
args << configuration[:database]
|
||||
run_cmd("pg_dump", args, "dumping")
|
||||
remove_sql_header_comments(filename)
|
||||
File.open(filename, "a") { |f| f << "SET search_path TO #{connection.schema_search_path};\n\n" }
|
||||
|
@ -78,7 +78,7 @@ module ActiveRecord
|
|||
set_psql_env
|
||||
args = ["-v", ON_ERROR_STOP_1, "-q", "-X", "-f", filename]
|
||||
args.concat(Array(extra_flags)) if extra_flags
|
||||
args << configuration["database"]
|
||||
args << configuration[:database]
|
||||
run_cmd("psql", args, "loading")
|
||||
end
|
||||
|
||||
|
@ -86,21 +86,21 @@ module ActiveRecord
|
|||
attr_reader :configuration
|
||||
|
||||
def encoding
|
||||
configuration["encoding"] || DEFAULT_ENCODING
|
||||
configuration[:encoding] || DEFAULT_ENCODING
|
||||
end
|
||||
|
||||
def establish_master_connection
|
||||
establish_connection configuration.merge(
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
)
|
||||
end
|
||||
|
||||
def set_psql_env
|
||||
ENV["PGHOST"] = configuration["host"] if configuration["host"]
|
||||
ENV["PGPORT"] = configuration["port"].to_s if configuration["port"]
|
||||
ENV["PGPASSWORD"] = configuration["password"].to_s if configuration["password"]
|
||||
ENV["PGUSER"] = configuration["username"].to_s if configuration["username"]
|
||||
ENV["PGHOST"] = configuration[:host] if configuration[:host]
|
||||
ENV["PGPORT"] = configuration[:port].to_s if configuration[:port]
|
||||
ENV["PGPASSWORD"] = configuration[:password].to_s if configuration[:password]
|
||||
ENV["PGUSER"] = configuration[:username].to_s if configuration[:username]
|
||||
end
|
||||
|
||||
def run_cmd(cmd, args, action)
|
||||
|
|
|
@ -6,11 +6,11 @@ module ActiveRecord
|
|||
delegate :connection, :establish_connection, to: ActiveRecord::Base
|
||||
|
||||
def initialize(configuration, root = ActiveRecord::Tasks::DatabaseTasks.root)
|
||||
@configuration, @root = configuration, root
|
||||
@configuration, @root = configuration.symbolize_keys, root
|
||||
end
|
||||
|
||||
def create
|
||||
raise DatabaseAlreadyExists if File.exist?(configuration["database"])
|
||||
raise DatabaseAlreadyExists if File.exist?(configuration[:database])
|
||||
|
||||
establish_connection configuration
|
||||
connection
|
||||
|
@ -18,7 +18,7 @@ module ActiveRecord
|
|||
|
||||
def drop
|
||||
require "pathname"
|
||||
path = Pathname.new configuration["database"]
|
||||
path = Pathname.new configuration[:database]
|
||||
file = path.absolute? ? path.to_s : File.join(root, path)
|
||||
|
||||
FileUtils.rm(file)
|
||||
|
@ -40,7 +40,7 @@ module ActiveRecord
|
|||
def structure_dump(filename, extra_flags)
|
||||
args = []
|
||||
args.concat(Array(extra_flags)) if extra_flags
|
||||
args << configuration["database"]
|
||||
args << configuration[:database]
|
||||
|
||||
ignore_tables = ActiveRecord::SchemaDumper.ignore_tables
|
||||
if ignore_tables.any?
|
||||
|
@ -53,7 +53,7 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def structure_load(filename, extra_flags)
|
||||
dbfile = configuration["database"]
|
||||
dbfile = configuration[:database]
|
||||
flags = extra_flags.join(" ") if extra_flags
|
||||
`sqlite3 #{flags} #{dbfile} < "#{filename}"`
|
||||
end
|
||||
|
|
|
@ -12,8 +12,8 @@ module ActiveRecord
|
|||
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"
|
||||
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
|
||||
db_config.config["database"] += "-#{i}"
|
||||
ActiveRecord::Tasks::DatabaseTasks.reconstruct_from_schema(db_config.config, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
|
||||
db_config.configuration_hash[:database] += "-#{i}"
|
||||
ActiveRecord::Tasks::DatabaseTasks.reconstruct_from_schema(db_config.configuration_hash, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
|
||||
end
|
||||
ensure
|
||||
ActiveRecord::Base.establish_connection(Rails.env.to_sym)
|
||||
|
|
|
@ -11,7 +11,7 @@ module ActiveRecord
|
|||
|
||||
def setup
|
||||
@connection = ActiveRecord::Base.connection
|
||||
db = Post.connection_pool.spec.config[:database]
|
||||
db = Post.connection_pool.spec.underlying_configuration_hash[:database]
|
||||
table = Post.table_name
|
||||
@db_name = db
|
||||
|
||||
|
|
|
@ -537,8 +537,7 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def test_statement_closed
|
||||
db = ::SQLite3::Database.new(ActiveRecord::Base.
|
||||
configurations["arunit"]["database"])
|
||||
db = ::SQLite3::Database.new(ActiveRecord::Base.configurations["arunit"][:database])
|
||||
statement = ::SQLite3::Statement.new(db,
|
||||
"CREATE TABLE statement_test (number integer not null)")
|
||||
statement.stub(:step, -> { raise ::SQLite3::BusyException.new("busy") }) do
|
||||
|
|
|
@ -62,13 +62,13 @@ module ActiveRecord
|
|||
@handler.establish_connection(:readonly)
|
||||
|
||||
assert_not_nil pool = @handler.retrieve_connection_pool("readonly")
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
|
||||
assert_not_nil pool = @handler.retrieve_connection_pool("primary")
|
||||
assert_equal "db/primary.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/primary.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
|
||||
assert_not_nil pool = @handler.retrieve_connection_pool("common")
|
||||
assert_equal "db/common.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/common.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ENV["RAILS_ENV"] = previous_env
|
||||
|
@ -92,7 +92,7 @@ module ActiveRecord
|
|||
|
||||
ActiveRecord::Base.establish_connection
|
||||
|
||||
assert_match "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.config[:database]
|
||||
assert_match "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ENV["RAILS_ENV"] = previous_env
|
||||
|
@ -115,7 +115,7 @@ module ActiveRecord
|
|||
|
||||
ActiveRecord::Base.establish_connection
|
||||
|
||||
assert_match "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.config[:database]
|
||||
assert_match "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ENV["RAILS_ENV"] = previous_env
|
||||
|
@ -131,7 +131,7 @@ module ActiveRecord
|
|||
@handler.establish_connection(:development)
|
||||
|
||||
assert_not_nil pool = @handler.retrieve_connection_pool("development")
|
||||
assert_equal "db/primary.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/primary.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
end
|
||||
|
@ -146,7 +146,7 @@ module ActiveRecord
|
|||
@handler.establish_connection(:development_readonly)
|
||||
|
||||
assert_not_nil pool = @handler.retrieve_connection_pool("development_readonly")
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
end
|
||||
|
@ -172,8 +172,9 @@ module ActiveRecord
|
|||
assert_instance_of ActiveRecord::DatabaseConfigurations::HashConfig, db_config
|
||||
assert_instance_of String, db_config.env_name
|
||||
assert_instance_of String, db_config.spec_name
|
||||
db_config.config.keys.each do |key|
|
||||
assert_instance_of String, key
|
||||
|
||||
db_config.configuration_hash.keys.each do |key|
|
||||
assert_instance_of Symbol, key
|
||||
end
|
||||
end
|
||||
ensure
|
||||
|
@ -209,7 +210,7 @@ module ActiveRecord
|
|||
|
||||
assert_same klass2.connection, ActiveRecord::Base.connection
|
||||
|
||||
pool = klass2.establish_connection(ActiveRecord::Base.connection_pool.spec.config)
|
||||
pool = klass2.establish_connection(ActiveRecord::Base.connection_pool.spec.underlying_configuration_hash)
|
||||
assert_same klass2.connection, pool.connection
|
||||
assert_not_same klass2.connection, ActiveRecord::Base.connection
|
||||
|
||||
|
|
|
@ -82,10 +82,10 @@ module ActiveRecord
|
|||
ActiveRecord::Base.connects_to(database: { writing: :primary, reading: :readonly })
|
||||
|
||||
assert_not_nil pool = ActiveRecord::Base.connection_handlers[:writing].retrieve_connection_pool("primary")
|
||||
assert_equal "db/primary.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/primary.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
|
||||
assert_not_nil pool = ActiveRecord::Base.connection_handlers[:reading].retrieve_connection_pool("primary")
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ActiveRecord::Base.establish_connection(:arunit)
|
||||
|
@ -140,10 +140,10 @@ module ActiveRecord
|
|||
ActiveRecord::Base.connects_to(database: { default: :primary, readonly: :readonly })
|
||||
|
||||
assert_not_nil pool = ActiveRecord::Base.connection_handlers[:default].retrieve_connection_pool("primary")
|
||||
assert_equal "db/primary.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/primary.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
|
||||
assert_not_nil pool = ActiveRecord::Base.connection_handlers[:readonly].retrieve_connection_pool("primary")
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ActiveRecord::Base.establish_connection(:arunit)
|
||||
|
@ -162,7 +162,7 @@ module ActiveRecord
|
|||
assert_equal handler, ActiveRecord::Base.connection_handlers[:writing]
|
||||
|
||||
assert_not_nil pool = handler.retrieve_connection_pool("primary")
|
||||
assert_equal({ adapter: "postgresql", database: "bar", host: "localhost" }, pool.spec.config)
|
||||
assert_equal({ adapter: "postgresql", database: "bar", host: "localhost" }, pool.spec.underlying_configuration_hash)
|
||||
end
|
||||
ensure
|
||||
ActiveRecord::Base.establish_connection(:arunit)
|
||||
|
@ -182,7 +182,7 @@ module ActiveRecord
|
|||
assert_equal handler, ActiveRecord::Base.connection_handlers[:writing]
|
||||
|
||||
assert_not_nil pool = handler.retrieve_connection_pool("primary")
|
||||
assert_equal(config, pool.spec.config)
|
||||
assert_equal(config, pool.spec.underlying_configuration_hash)
|
||||
end
|
||||
ensure
|
||||
ActiveRecord::Base.establish_connection(:arunit)
|
||||
|
@ -222,7 +222,7 @@ module ActiveRecord
|
|||
assert_equal handler, ActiveRecord::Base.connection_handlers[:writing]
|
||||
|
||||
assert_not_nil pool = handler.retrieve_connection_pool("primary")
|
||||
assert_equal(config["default_env"]["animals"], pool.spec.config)
|
||||
assert_equal(config["default_env"]["animals"], pool.spec.underlying_configuration_hash)
|
||||
end
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
|
@ -249,7 +249,7 @@ module ActiveRecord
|
|||
assert_equal handler, ActiveRecord::Base.connection_handlers[:writing]
|
||||
|
||||
assert_not_nil pool = handler.retrieve_connection_pool("primary")
|
||||
assert_equal(config["default_env"]["primary"], pool.spec.config)
|
||||
assert_equal(config["default_env"]["primary"], pool.spec.underlying_configuration_hash)
|
||||
end
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
|
@ -284,7 +284,7 @@ module ActiveRecord
|
|||
ActiveRecord::Base.connects_to database: { writing: :development, reading: :development_readonly }
|
||||
|
||||
assert_not_nil pool = ActiveRecord::Base.connection_handlers[:reading].retrieve_connection_pool("primary")
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.config[:database]
|
||||
assert_equal "db/readonly.sqlite3", pool.spec.underlying_configuration_hash[:database]
|
||||
ensure
|
||||
ActiveRecord::Base.configurations = @prev_configs
|
||||
ActiveRecord::Base.establish_connection(:arunit)
|
||||
|
|
|
@ -7,7 +7,7 @@ module ActiveRecord
|
|||
class ConnectionSpecificationTest < ActiveRecord::TestCase
|
||||
def test_dup_deep_copy_config
|
||||
spec = ConnectionSpecification.new("primary", { a: :b }, "bar")
|
||||
assert_not_equal(spec.config.object_id, spec.dup.config.object_id)
|
||||
assert_not_equal(spec.underlying_configuration_hash.object_id, spec.dup.underlying_configuration_hash.object_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -48,7 +48,7 @@ module ActiveRecord
|
|||
ENV["DATABASE_URL"] = "postgres://localhost/foo"
|
||||
config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
|
||||
actual = resolve_spec(:default_env, config)
|
||||
expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost", "name" => "default_env" }
|
||||
expected = { adapter: "postgresql", database: "foo", host: "localhost", name: "default_env" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -58,7 +58,7 @@ module ActiveRecord
|
|||
|
||||
config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
|
||||
actual = resolve_spec(:foo, config)
|
||||
expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost", "name" => "foo" }
|
||||
expected = { adapter: "postgresql", database: "foo", host: "localhost", name: "foo" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -66,7 +66,7 @@ module ActiveRecord
|
|||
ENV["RAILS_ENV"] = "foo"
|
||||
config = { "foo" => { "adapter" => "postgres", "url" => ENV["DATABASE_URL"] } }
|
||||
actual = resolve_spec(:foo, config)
|
||||
expected = { "adapter" => "postgres", "url" => nil, "name" => "foo" }
|
||||
expected = { adapter: "postgres", url: nil, name: "foo" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -76,7 +76,7 @@ module ActiveRecord
|
|||
|
||||
config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
|
||||
actual = resolve_spec(:foo, config)
|
||||
expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost", "name" => "foo" }
|
||||
expected = { adapter: "postgresql", database: "foo", host: "localhost", name: "foo" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ module ActiveRecord
|
|||
ENV["DATABASE_URL"] = "postgres://localhost/foo"
|
||||
config = { "production" => { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost" } }
|
||||
actual = resolve_spec(:production, config)
|
||||
expected = { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost", "name" => "production" }
|
||||
expected = { adapter: "not_postgres", database: "not_foo", host: "localhost", name: "production" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -94,7 +94,7 @@ module ActiveRecord
|
|||
|
||||
config = { "production" => { "adapter" => "postgresql", "database" => "foo_prod" }, "test" => { "adapter" => "postgresql", "database" => "foo_test" } }
|
||||
actual = resolve_spec(:test, config)
|
||||
expected = { "adapter" => "postgresql", "database" => "foo_test", "host" => "localhost", "name" => "test" }
|
||||
expected = { adapter: "postgresql", database: "foo_test", host: "localhost", name: "test" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -110,7 +110,7 @@ module ActiveRecord
|
|||
ENV["DATABASE_URL"] = "not-postgres://not-localhost/not_foo"
|
||||
config = { "production" => { "adapter" => "also_not_postgres", "database" => "also_not_foo" } }
|
||||
actual = resolve_spec("postgres://localhost/foo", config)
|
||||
expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost" }
|
||||
expected = { adapter: "postgresql", database: "foo", host: "localhost" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -132,7 +132,7 @@ module ActiveRecord
|
|||
ENV["DATABASE_URL"] = "ibm-db://localhost/foo"
|
||||
config = { "default_env" => { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost" } }
|
||||
actual = resolve_spec(:default_env, config)
|
||||
expected = { "adapter" => "ibm_db", "database" => "foo", "host" => "localhost", "name" => "default_env" }
|
||||
expected = { adapter: "ibm_db", database: "foo", host: "localhost", name: "default_env" }
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
|
@ -351,19 +351,19 @@ module ActiveRecord
|
|||
}
|
||||
|
||||
configs = ActiveRecord::DatabaseConfigurations.new(config)
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "primary").config
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "primary").configuration_hash
|
||||
expected = {
|
||||
"adapter" => "postgresql",
|
||||
"database" => "foo",
|
||||
"host" => "localhost",
|
||||
"pool" => 5
|
||||
adapter: "postgresql",
|
||||
database: "foo",
|
||||
host: "localhost",
|
||||
pool: 5
|
||||
}
|
||||
|
||||
assert_equal expected, actual
|
||||
|
||||
configs = ActiveRecord::DatabaseConfigurations.new(config)
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "animals").config
|
||||
expected = { "pool" => 5 }
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "animals").configuration_hash
|
||||
expected = { pool: 5 }
|
||||
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
@ -381,12 +381,12 @@ module ActiveRecord
|
|||
}
|
||||
|
||||
configs = ActiveRecord::DatabaseConfigurations.new(config)
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "primary").config
|
||||
assert_equal "primary", actual["database"]
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "primary").configuration_hash
|
||||
assert_equal "primary", actual[:database]
|
||||
|
||||
configs = ActiveRecord::DatabaseConfigurations.new(config)
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "animals").config
|
||||
assert_equal "animals", actual["database"]
|
||||
actual = configs.configs_for(env_name: "default_env", spec_name: "animals").configuration_hash
|
||||
assert_equal "animals", actual[:database]
|
||||
ensure
|
||||
ENV.delete("PRIMARY_DATABASE_URL")
|
||||
ENV.delete("ANIMALS_DATABASE_URL")
|
||||
|
@ -397,14 +397,14 @@ module ActiveRecord
|
|||
config = { "production" => { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost" }, "default_env" => {} }
|
||||
|
||||
actual = resolve_spec(:production, config)
|
||||
assert_equal config["production"].merge("name" => "production"), actual
|
||||
assert_equal config["production"].symbolize_keys.merge(name: "production"), actual
|
||||
|
||||
actual = resolve_spec(:default_env, config)
|
||||
assert_equal({
|
||||
"host" => "localhost",
|
||||
"database" => "foo",
|
||||
"adapter" => "postgresql",
|
||||
"name" => "default_env"
|
||||
host: "localhost",
|
||||
database: "foo",
|
||||
adapter: "postgresql",
|
||||
name: "default_env"
|
||||
}, actual)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -199,7 +199,7 @@ module ActiveRecord
|
|||
def test_idle_timeout_configuration
|
||||
@pool.disconnect!
|
||||
spec = ActiveRecord::Base.connection_pool.spec
|
||||
spec.config.merge!(idle_timeout: "0.02")
|
||||
spec.underlying_configuration_hash.merge!(idle_timeout: "0.02")
|
||||
@pool = ConnectionPool.new(spec)
|
||||
idle_conn = @pool.checkout
|
||||
@pool.checkin(idle_conn)
|
||||
|
@ -224,7 +224,7 @@ module ActiveRecord
|
|||
def test_disable_flush
|
||||
@pool.disconnect!
|
||||
spec = ActiveRecord::Base.connection_pool.spec
|
||||
spec.config.merge!(idle_timeout: -5)
|
||||
spec.underlying_configuration_hash.merge!(idle_timeout: -5)
|
||||
@pool = ConnectionPool.new(spec)
|
||||
idle_conn = @pool.checkout
|
||||
@pool.checkin(idle_conn)
|
||||
|
@ -719,7 +719,7 @@ module ActiveRecord
|
|||
private
|
||||
def with_single_connection_pool
|
||||
one_conn_spec = ActiveRecord::Base.connection_pool.spec.dup
|
||||
one_conn_spec.config[:pool] = 1 # this is safe to do, because .dupped ConnectionSpecification also auto-dups its config
|
||||
one_conn_spec.underlying_configuration_hash[:pool] = 1 # this is safe to do, because .dupped ConnectionSpecification also auto-dups its config
|
||||
yield(pool = ConnectionPool.new(one_conn_spec))
|
||||
ensure
|
||||
pool.disconnect! if pool
|
||||
|
|
|
@ -40,98 +40,104 @@ module ActiveRecord
|
|||
def test_url_from_environment
|
||||
spec = resolve :production, "production" => "abstract://foo?encoding=utf8"
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8",
|
||||
"name" => "production" }, spec)
|
||||
adapter: "abstract",
|
||||
host: "foo",
|
||||
encoding: "utf8",
|
||||
name: "production"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_url_sub_key
|
||||
spec = resolve :production, "production" => { "url" => "abstract://foo?encoding=utf8" }
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8",
|
||||
"name" => "production" }, spec)
|
||||
adapter: "abstract",
|
||||
host: "foo",
|
||||
encoding: "utf8",
|
||||
name: "production"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_url_sub_key_merges_correctly
|
||||
hash = { "url" => "abstract://foo?encoding=utf8&", "adapter" => "sqlite3", "host" => "bar", "pool" => "3" }
|
||||
spec = resolve :production, "production" => hash
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8",
|
||||
"pool" => "3",
|
||||
"name" => "production" }, spec)
|
||||
adapter: "abstract",
|
||||
host: "foo",
|
||||
encoding: "utf8",
|
||||
pool: "3",
|
||||
name: "production"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_url_host_no_db
|
||||
spec = resolve "abstract://foo?encoding=utf8"
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8" }, spec)
|
||||
adapter: "abstract",
|
||||
host: "foo",
|
||||
encoding: "utf8"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_url_missing_scheme
|
||||
spec = resolve "foo"
|
||||
assert_equal({
|
||||
"database" => "foo" }, spec)
|
||||
assert_equal({ database: "foo" }, spec)
|
||||
end
|
||||
|
||||
def test_url_host_db
|
||||
spec = resolve "abstract://foo/bar?encoding=utf8"
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"database" => "bar",
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8" }, spec)
|
||||
adapter: "abstract",
|
||||
database: "bar",
|
||||
host: "foo",
|
||||
encoding: "utf8"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_url_port
|
||||
spec = resolve "abstract://foo:123?encoding=utf8"
|
||||
assert_equal({
|
||||
"adapter" => "abstract",
|
||||
"port" => 123,
|
||||
"host" => "foo",
|
||||
"encoding" => "utf8" }, spec)
|
||||
adapter: "abstract",
|
||||
port: 123,
|
||||
host: "foo",
|
||||
encoding: "utf8"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_encoded_password
|
||||
password = "am@z1ng_p@ssw0rd#!"
|
||||
encoded_password = URI.encode_www_form_component(password)
|
||||
spec = resolve "abstract://foo:#{encoded_password}@localhost/bar"
|
||||
assert_equal password, spec["password"]
|
||||
assert_equal password, spec[:password]
|
||||
end
|
||||
|
||||
def test_url_with_authority_for_sqlite3
|
||||
spec = resolve "sqlite3:///foo_test"
|
||||
assert_equal("/foo_test", spec["database"])
|
||||
assert_equal("/foo_test", spec[:database])
|
||||
end
|
||||
|
||||
def test_url_absolute_path_for_sqlite3
|
||||
spec = resolve "sqlite3:/foo_test"
|
||||
assert_equal("/foo_test", spec["database"])
|
||||
assert_equal("/foo_test", spec[:database])
|
||||
end
|
||||
|
||||
def test_url_relative_path_for_sqlite3
|
||||
spec = resolve "sqlite3:foo_test"
|
||||
assert_equal("foo_test", spec["database"])
|
||||
assert_equal("foo_test", spec[:database])
|
||||
end
|
||||
|
||||
def test_url_memory_db_for_sqlite3
|
||||
spec = resolve "sqlite3::memory:"
|
||||
assert_equal(":memory:", spec["database"])
|
||||
assert_equal(":memory:", spec[:database])
|
||||
end
|
||||
|
||||
def test_url_sub_key_for_sqlite3
|
||||
spec = resolve :production, "production" => { "url" => "sqlite3:foo?encoding=utf8" }
|
||||
assert_equal({
|
||||
"adapter" => "sqlite3",
|
||||
"database" => "foo",
|
||||
"encoding" => "utf8",
|
||||
"name" => "production" }, spec)
|
||||
adapter: "sqlite3",
|
||||
database: "foo",
|
||||
encoding: "utf8",
|
||||
name: "production"
|
||||
}, spec)
|
||||
end
|
||||
|
||||
def test_spec_name_on_key_lookup
|
||||
|
|
|
@ -36,7 +36,7 @@ class DatabaseConfigurationsTest < ActiveRecord::TestCase
|
|||
original_rails_env = ENV["RAILS_ENV"]
|
||||
ENV["RAILS_ENV"] = "arunit"
|
||||
|
||||
assert_equal ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary").config, ActiveRecord::Base.configurations.default_hash
|
||||
assert_equal ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary").configuration_hash, ActiveRecord::Base.configurations.default_hash
|
||||
ensure
|
||||
ENV["RAILS_ENV"] = original_rails_env
|
||||
end
|
||||
|
@ -89,7 +89,7 @@ class LegacyDatabaseConfigurationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_first_is_deprecated
|
||||
first_config = ActiveRecord::Base.configurations.configurations.map(&:config).first
|
||||
first_config = ActiveRecord::Base.configurations.configurations.map(&:configuration_hash).first
|
||||
assert_deprecated do
|
||||
env_name, config = ActiveRecord::Base.configurations.first
|
||||
assert_equal "arunit", env_name
|
||||
|
@ -106,12 +106,18 @@ class LegacyDatabaseConfigurationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_values_are_deprecated
|
||||
config_hashes = ActiveRecord::Base.configurations.configurations.map(&:config)
|
||||
config_hashes = ActiveRecord::Base.configurations.configurations.map(&:configuration_hash)
|
||||
assert_deprecated do
|
||||
assert_equal config_hashes, ActiveRecord::Base.configurations.values
|
||||
end
|
||||
end
|
||||
|
||||
def test_deprecated_config_method
|
||||
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary")
|
||||
|
||||
assert_equal db_config.configuration_hash.stringify_keys, assert_deprecated { db_config.config }
|
||||
end
|
||||
|
||||
def test_unsupported_method_raises
|
||||
assert_raises NotImplementedError do
|
||||
ActiveRecord::Base.configurations.select { |a| a == "foo" }
|
||||
|
|
|
@ -37,7 +37,7 @@ end
|
|||
|
||||
def in_memory_db?
|
||||
current_adapter?(:SQLite3Adapter) &&
|
||||
ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
|
||||
ActiveRecord::Base.connection_pool.spec.underlying_configuration_hash[:database] == ":memory:"
|
||||
end
|
||||
|
||||
def subsecond_precision_supported?
|
||||
|
|
|
@ -68,7 +68,7 @@ module ActiveRecord
|
|||
|
||||
def test_reaping_frequency_configuration
|
||||
spec = ActiveRecord::Base.connection_pool.spec.dup
|
||||
spec.config[:reaping_frequency] = "10.01"
|
||||
spec.underlying_configuration_hash[:reaping_frequency] = "10.01"
|
||||
pool = ConnectionPool.new spec
|
||||
assert_equal 10.01, pool.reaper.frequency
|
||||
ensure
|
||||
|
@ -77,7 +77,7 @@ module ActiveRecord
|
|||
|
||||
def test_connection_pool_starts_reaper
|
||||
spec = ActiveRecord::Base.connection_pool.spec.dup
|
||||
spec.config[:reaping_frequency] = "0.0001"
|
||||
spec.underlying_configuration_hash[:reaping_frequency] = "0.0001"
|
||||
|
||||
pool = ConnectionPool.new spec
|
||||
|
||||
|
@ -95,7 +95,7 @@ module ActiveRecord
|
|||
|
||||
def test_reaper_works_after_pool_discard
|
||||
spec = ActiveRecord::Base.connection_pool.spec.dup
|
||||
spec.config[:reaping_frequency] = "0.0001"
|
||||
spec.underlying_configuration_hash[:reaping_frequency] = "0.0001"
|
||||
|
||||
2.times do
|
||||
pool = ConnectionPool.new spec
|
||||
|
@ -126,7 +126,7 @@ module ActiveRecord
|
|||
|
||||
def test_connection_pool_starts_reaper_in_fork
|
||||
spec = ActiveRecord::Base.connection_pool.spec.dup
|
||||
spec.config[:reaping_frequency] = "0.0001"
|
||||
spec.underlying_configuration_hash[:reaping_frequency] = "0.0001"
|
||||
|
||||
pool = ConnectionPool.new spec
|
||||
pool.checkout
|
||||
|
|
|
@ -262,7 +262,7 @@ module ActiveRecord
|
|||
assert_called_with(
|
||||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
["database" => "test-db"],
|
||||
[database: "test-db"],
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
ActiveSupport::StringInquirer.new("test")
|
||||
|
@ -276,7 +276,7 @@ module ActiveRecord
|
|||
assert_called_with(
|
||||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
|
||||
[adapter: "abstract", database: "prod-db", host: "prod-db-host"],
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
ActiveSupport::StringInquirer.new("production")
|
||||
|
@ -291,8 +291,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "test-db"]
|
||||
],
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -311,8 +311,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "test-db"]
|
||||
],
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -362,8 +362,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -379,8 +379,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
|
||||
["adapter" => "abstract", "database" => "secondary-prod-db", "host" => "secondary-prod-db-host"]
|
||||
[adapter: "abstract", database: "prod-db", host: "prod-db-host"],
|
||||
[adapter: "abstract", database: "secondary-prod-db", host: "secondary-prod-db-host"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -396,10 +396,10 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"],
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"],
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -418,10 +418,10 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:create,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"],
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"],
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create_current(
|
||||
|
@ -570,7 +570,7 @@ module ActiveRecord
|
|||
def test_drops_current_environment_database
|
||||
with_stubbed_configurations do
|
||||
assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
|
||||
["database" => "test-db"]) do
|
||||
[database: "test-db"]) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
ActiveSupport::StringInquirer.new("test")
|
||||
)
|
||||
|
@ -581,7 +581,7 @@ module ActiveRecord
|
|||
def test_drops_current_environment_database_with_url
|
||||
with_stubbed_configurations do
|
||||
assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
|
||||
["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"]) do
|
||||
[adapter: "abstract", database: "prod-db", host: "prod-db-host"]) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
ActiveSupport::StringInquirer.new("production")
|
||||
)
|
||||
|
@ -595,8 +595,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -615,8 +615,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -654,8 +654,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -671,8 +671,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
|
||||
["adapter" => "abstract", "database" => "secondary-prod-db", "host" => "secondary-prod-db-host"]
|
||||
[adapter: "abstract", database: "prod-db", host: "prod-db-host"],
|
||||
[adapter: "abstract", database: "secondary-prod-db", host: "secondary-prod-db-host"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -688,10 +688,10 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"],
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"],
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -710,10 +710,10 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:drop,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"],
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"],
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop_current(
|
||||
|
@ -922,7 +922,7 @@ module ActiveRecord
|
|||
assert_called_with(
|
||||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:purge,
|
||||
["database" => "prod-db"]
|
||||
[database: "prod-db"]
|
||||
) do
|
||||
assert_called_with(ActiveRecord::Base, :establish_connection, [:production]) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge_current("production")
|
||||
|
@ -942,7 +942,7 @@ module ActiveRecord
|
|||
assert_called_with(
|
||||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:purge,
|
||||
["database" => "my-db"]
|
||||
[database: "my-db"]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge_all
|
||||
end
|
||||
|
@ -1043,8 +1043,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:truncate_tables,
|
||||
[
|
||||
["database" => "test-db"],
|
||||
["database" => "secondary-test-db"]
|
||||
[database: "test-db"],
|
||||
[database: "secondary-test-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.truncate_all(
|
||||
|
@ -1060,8 +1060,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:truncate_tables,
|
||||
[
|
||||
["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
|
||||
["adapter" => "abstract", "database" => "secondary-prod-db", "host" => "secondary-prod-db-host"]
|
||||
[adapter: "abstract", database: "prod-db", host: "prod-db-host"],
|
||||
[adapter: "abstract", database: "secondary-prod-db", host: "secondary-prod-db-host"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.truncate_all(
|
||||
|
@ -1077,8 +1077,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:truncate_tables,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.truncate_all(
|
||||
|
@ -1097,8 +1097,8 @@ module ActiveRecord
|
|||
ActiveRecord::Tasks::DatabaseTasks,
|
||||
:truncate_tables,
|
||||
[
|
||||
["database" => "dev-db"],
|
||||
["database" => "secondary-dev-db"]
|
||||
[database: "dev-db"],
|
||||
[database: "secondary-dev-db"]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.truncate_all(
|
||||
|
|
|
@ -29,8 +29,8 @@ if current_adapter?(:Mysql2Adapter)
|
|||
ActiveRecord::Base,
|
||||
:establish_connection,
|
||||
[
|
||||
[ "adapter" => "mysql2", "database" => nil ],
|
||||
[ "adapter" => "mysql2", "database" => "my-app-db" ],
|
||||
[ adapter: "mysql2", database: nil ],
|
||||
[ adapter: "mysql2", database: "my-app-db" ],
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration
|
||||
|
@ -72,8 +72,8 @@ if current_adapter?(:Mysql2Adapter)
|
|||
ActiveRecord::Base,
|
||||
:establish_connection,
|
||||
[
|
||||
["adapter" => "mysql2", "database" => nil],
|
||||
[@configuration]
|
||||
[adapter: "mysql2", database: nil],
|
||||
[@configuration.symbolize_keys]
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration
|
||||
|
@ -158,7 +158,7 @@ if current_adapter?(:Mysql2Adapter)
|
|||
assert_called_with(
|
||||
ActiveRecord::Base,
|
||||
:establish_connection,
|
||||
[@configuration]
|
||||
[@configuration.symbolize_keys]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop @configuration
|
||||
end
|
||||
|
@ -205,7 +205,7 @@ if current_adapter?(:Mysql2Adapter)
|
|||
assert_called_with(
|
||||
ActiveRecord::Base,
|
||||
:establish_connection,
|
||||
[@configuration]
|
||||
[@configuration.symbolize_keys]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge @configuration
|
||||
end
|
||||
|
|
|
@ -27,13 +27,13 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
:establish_connection,
|
||||
[
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
adapter: "postgresql",
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
],
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "my-app-db"
|
||||
adapter: "postgresql",
|
||||
database: "my-app-db"
|
||||
]
|
||||
]
|
||||
) do
|
||||
|
@ -47,7 +47,7 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
assert_called_with(
|
||||
@connection,
|
||||
:create_database,
|
||||
["my-app-db", @configuration.merge("encoding" => "utf8")]
|
||||
["my-app-db", @configuration.symbolize_keys.merge(encoding: "utf8")]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration
|
||||
end
|
||||
|
@ -59,7 +59,7 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
assert_called_with(
|
||||
@connection,
|
||||
:create_database,
|
||||
["my-app-db", @configuration.merge("encoding" => "latin")]
|
||||
["my-app-db", @configuration.symbolize_keys.merge(encoding: "latin")]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration.
|
||||
merge("encoding" => "latin")
|
||||
|
@ -74,10 +74,10 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
:create_database,
|
||||
[
|
||||
"my-app-db",
|
||||
@configuration.merge(
|
||||
"encoding" => "utf8",
|
||||
"collation" => "ja_JP.UTF8",
|
||||
"ctype" => "ja_JP.UTF8"
|
||||
@configuration.symbolize_keys.merge(
|
||||
encoding: "utf8",
|
||||
collation: "ja_JP.UTF8",
|
||||
ctype: "ja_JP.UTF8"
|
||||
)
|
||||
]
|
||||
) do
|
||||
|
@ -94,12 +94,12 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
:establish_connection,
|
||||
[
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
adapter: "postgresql",
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
],
|
||||
[
|
||||
@configuration
|
||||
@configuration.symbolize_keys
|
||||
]
|
||||
]
|
||||
) do
|
||||
|
@ -169,9 +169,9 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
ActiveRecord::Base,
|
||||
:establish_connection,
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
adapter: "postgresql",
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.drop @configuration
|
||||
|
@ -238,13 +238,13 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
:establish_connection,
|
||||
[
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
adapter: "postgresql",
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
],
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "my-app-db"
|
||||
adapter: "postgresql",
|
||||
database: "my-app-db"
|
||||
]
|
||||
]
|
||||
) do
|
||||
|
@ -269,7 +269,7 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
assert_called_with(
|
||||
@connection,
|
||||
:create_database,
|
||||
["my-app-db", @configuration.merge("encoding" => "utf8")]
|
||||
["my-app-db", @configuration.symbolize_keys.merge(encoding: "utf8")]
|
||||
) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.purge @configuration
|
||||
end
|
||||
|
@ -284,12 +284,12 @@ if current_adapter?(:PostgreSQLAdapter)
|
|||
:establish_connection,
|
||||
[
|
||||
[
|
||||
"adapter" => "postgresql",
|
||||
"database" => "postgres",
|
||||
"schema_search_path" => "public"
|
||||
adapter: "postgresql",
|
||||
database: "postgres",
|
||||
schema_search_path: "public"
|
||||
],
|
||||
[
|
||||
@configuration
|
||||
@configuration.symbolize_keys
|
||||
]
|
||||
]
|
||||
) do
|
||||
|
|
|
@ -54,7 +54,7 @@ if current_adapter?(:SQLite3Adapter)
|
|||
end
|
||||
|
||||
def test_db_create_establishes_a_connection
|
||||
assert_called_with(ActiveRecord::Base, :establish_connection, [@configuration]) do
|
||||
assert_called_with(ActiveRecord::Base, :establish_connection, [@configuration.symbolize_keys]) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration, "/rails/root"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,54 +17,54 @@ module Rails
|
|||
def start
|
||||
ENV["RAILS_ENV"] ||= @options[:environment] || environment
|
||||
|
||||
case config["adapter"]
|
||||
case config[:adapter]
|
||||
when /^(jdbc)?mysql/
|
||||
args = {
|
||||
"host" => "--host",
|
||||
"port" => "--port",
|
||||
"socket" => "--socket",
|
||||
"username" => "--user",
|
||||
"encoding" => "--default-character-set",
|
||||
"sslca" => "--ssl-ca",
|
||||
"sslcert" => "--ssl-cert",
|
||||
"sslcapath" => "--ssl-capath",
|
||||
"sslcipher" => "--ssl-cipher",
|
||||
"sslkey" => "--ssl-key"
|
||||
host: "--host",
|
||||
port: "--port",
|
||||
socket: "--socket",
|
||||
username: "--user",
|
||||
encoding: "--default-character-set",
|
||||
sslca: "--ssl-ca",
|
||||
sslcert: "--ssl-cert",
|
||||
sslcapath: "--ssl-capath",
|
||||
sslcipher: "--ssl-cipher",
|
||||
sslkey: "--ssl-key"
|
||||
}.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact
|
||||
|
||||
if config["password"] && @options["include_password"]
|
||||
args << "--password=#{config['password']}"
|
||||
elsif config["password"] && !config["password"].to_s.empty?
|
||||
if config[:password] && @options[:include_password]
|
||||
args << "--password=#{config[:password]}"
|
||||
elsif config[:password] && !config[:password].to_s.empty?
|
||||
args << "-p"
|
||||
end
|
||||
|
||||
args << config["database"]
|
||||
args << config[:database]
|
||||
|
||||
find_cmd_and_exec(["mysql", "mysql5"], *args)
|
||||
|
||||
when /^postgres|^postgis/
|
||||
ENV["PGUSER"] = config["username"] if config["username"]
|
||||
ENV["PGHOST"] = config["host"] if config["host"]
|
||||
ENV["PGPORT"] = config["port"].to_s if config["port"]
|
||||
ENV["PGPASSWORD"] = config["password"].to_s if config["password"] && @options["include_password"]
|
||||
find_cmd_and_exec("psql", config["database"])
|
||||
ENV["PGUSER"] = config[:username] if config[:username]
|
||||
ENV["PGHOST"] = config[:host] if config[:host]
|
||||
ENV["PGPORT"] = config[:port].to_s if config[:port]
|
||||
ENV["PGPASSWORD"] = config[:password].to_s if config[:password] && @options[:include_password]
|
||||
find_cmd_and_exec("psql", config[:database])
|
||||
|
||||
when "sqlite3"
|
||||
args = []
|
||||
|
||||
args << "-#{@options['mode']}" if @options["mode"]
|
||||
args << "-header" if @options["header"]
|
||||
args << File.expand_path(config["database"], Rails.respond_to?(:root) ? Rails.root : nil)
|
||||
args << "-#{@options[:mode]}" if @options[:mode]
|
||||
args << "-header" if @options[:header]
|
||||
args << File.expand_path(config[:database], Rails.respond_to?(:root) ? Rails.root : nil)
|
||||
|
||||
find_cmd_and_exec("sqlite3", *args)
|
||||
|
||||
when "oracle", "oracle_enhanced"
|
||||
logon = ""
|
||||
|
||||
if config["username"]
|
||||
logon = config["username"].dup
|
||||
logon << "/#{config['password']}" if config["password"] && @options["include_password"]
|
||||
logon << "@#{config['database']}" if config["database"]
|
||||
if config[:username]
|
||||
logon = config[:username].dup
|
||||
logon << "/#{config[:password]}" if config[:password] && @options[:include_password]
|
||||
logon << "@#{config[:database]}" if config[:database]
|
||||
end
|
||||
|
||||
find_cmd_and_exec("sqlplus", logon)
|
||||
|
@ -72,20 +72,20 @@ module Rails
|
|||
when "sqlserver"
|
||||
args = []
|
||||
|
||||
args += ["-D", "#{config['database']}"] if config["database"]
|
||||
args += ["-U", "#{config['username']}"] if config["username"]
|
||||
args += ["-P", "#{config['password']}"] if config["password"]
|
||||
args += ["-D", "#{config[:database]}"] if config[:database]
|
||||
args += ["-U", "#{config[:username]}"] if config[:username]
|
||||
args += ["-P", "#{config[:password]}"] if config[:password]
|
||||
|
||||
if config["host"]
|
||||
host_arg = +"#{config['host']}"
|
||||
host_arg << ":#{config['port']}" if config["port"]
|
||||
if config[:host]
|
||||
host_arg = +"#{config[:host]}"
|
||||
host_arg << ":#{config[:port]}" if config[:port]
|
||||
args += ["-S", host_arg]
|
||||
end
|
||||
|
||||
find_cmd_and_exec("sqsh", *args)
|
||||
|
||||
else
|
||||
abort "Unknown command-line client for #{config['database']}."
|
||||
abort "Unknown command-line client for #{config[:database]}."
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -94,12 +94,12 @@ module Rails
|
|||
# We need to check whether the user passed the database the
|
||||
# first time around to show a consistent error message to people
|
||||
# relying on 2-level database configuration.
|
||||
if @options["database"] && configurations[database].blank?
|
||||
if @options[:database] && configurations[database].blank?
|
||||
raise ActiveRecord::AdapterNotSpecified, "'#{database}' database is not configured. Available configuration: #{configurations.inspect}"
|
||||
elsif configurations[environment].blank? && configurations[database].blank?
|
||||
raise ActiveRecord::AdapterNotSpecified, "'#{environment}' database is not configured. Available configuration: #{configurations.inspect}"
|
||||
else
|
||||
configurations[database] || configurations[environment].presence
|
||||
(configurations[database] || configurations[environment].presence).symbolize_keys
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -51,7 +51,7 @@ module ApplicationTests
|
|||
|
||||
test "db:create and db:drop without database URL" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_create_and_drop ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
db_create_and_drop ActiveRecord::Base.configurations[Rails.env][:database]
|
||||
end
|
||||
|
||||
test "db:create and db:drop with database URL" do
|
||||
|
@ -310,7 +310,7 @@ module ApplicationTests
|
|||
|
||||
test "db:migrate and db:migrate:status without database_url" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_migrate_and_status ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
db_migrate_and_status ActiveRecord::Base.configurations[Rails.env][:database]
|
||||
end
|
||||
|
||||
test "db:migrate and db:migrate:status with database_url" do
|
||||
|
@ -350,7 +350,7 @@ module ApplicationTests
|
|||
|
||||
test "db:fixtures:load without database_url" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_fixtures_load ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
db_fixtures_load ActiveRecord::Base.configurations[Rails.env][:database]
|
||||
end
|
||||
|
||||
test "db:fixtures:load with database_url" do
|
||||
|
@ -385,7 +385,7 @@ module ApplicationTests
|
|||
|
||||
test "db:structure:dump and db:structure:load without database_url" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_structure_dump_and_load ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
db_structure_dump_and_load ActiveRecord::Base.configurations[Rails.env][:database]
|
||||
end
|
||||
|
||||
test "db:structure:dump and db:structure:load with database_url" do
|
||||
|
@ -396,7 +396,7 @@ module ApplicationTests
|
|||
|
||||
test "db:structure:dump and db:structure:load set ar_internal_metadata" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_structure_dump_and_load ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
db_structure_dump_and_load ActiveRecord::Base.configurations[Rails.env][:database]
|
||||
|
||||
assert_equal "test", rails("runner", "-e", "test", "puts ActiveRecord::InternalMetadata[:environment]").strip
|
||||
assert_equal "development", rails("runner", "puts ActiveRecord::InternalMetadata[:environment]").strip
|
||||
|
@ -475,7 +475,7 @@ module ApplicationTests
|
|||
require "#{app_path}/app/models/book"
|
||||
# if structure is not loaded correctly, exception would be raised
|
||||
assert_equal 0, Book.count
|
||||
assert_match ActiveRecord::Base.configurations["test"]["database"],
|
||||
assert_match ActiveRecord::Base.configurations["test"][:database],
|
||||
ActiveRecord::Base.connection_config[:database]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -220,14 +220,14 @@ module ApplicationTests
|
|||
test "db:create and db:drop works on all databases for env" do
|
||||
require "#{app_path}/config/environment"
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
|
||||
db_create_and_drop db_config.spec_name, db_config.config["database"]
|
||||
db_create_and_drop db_config.spec_name, db_config.configuration_hash[:database]
|
||||
end
|
||||
end
|
||||
|
||||
test "db:create:namespace and db:drop:namespace works on specified databases" do
|
||||
require "#{app_path}/config/environment"
|
||||
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config|
|
||||
db_create_and_drop_namespace db_config.spec_name, db_config.config["database"]
|
||||
db_create_and_drop_namespace db_config.spec_name, db_config.configuration_hash[:database]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -359,7 +359,7 @@ module ApplicationTests
|
|||
db_migrate_and_schema_dump_and_load "schema"
|
||||
|
||||
app_file "db/seeds.rb", <<-RUBY
|
||||
print Book.connection.pool.spec.config[:database]
|
||||
print Book.connection.pool.spec.underlying_configuration_hash[:database]
|
||||
RUBY
|
||||
|
||||
output = rails("db:seed")
|
||||
|
|
|
@ -966,7 +966,7 @@ module ApplicationTests
|
|||
|
||||
class EnvironmentTest < ActiveSupport::TestCase
|
||||
def test_environment
|
||||
test_db = ActiveRecord::Base.configurations[#{env.dump}]["database"]
|
||||
test_db = ActiveRecord::Base.configurations[#{env.dump}][:database]
|
||||
db_file = ActiveRecord::Base.connection_config[:database]
|
||||
assert_match(test_db, db_file)
|
||||
assert_equal #{env.dump}, ENV["RAILS_ENV"]
|
||||
|
|
|
@ -29,7 +29,7 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
}
|
||||
}
|
||||
app_db_config(config_sample) do
|
||||
assert_equal config_sample["test"], Rails::DBConsole.new.config
|
||||
assert_equal config_sample["test"].symbolize_keys, Rails::DBConsole.new.config
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -44,14 +44,14 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
def test_config_with_database_url_only
|
||||
ENV["DATABASE_URL"] = "postgresql://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000"
|
||||
expected = {
|
||||
"adapter" => "postgresql",
|
||||
"host" => "localhost",
|
||||
"port" => 9000,
|
||||
"database" => "foo_test",
|
||||
"username" => "foo",
|
||||
"password" => "bar",
|
||||
"pool" => "5",
|
||||
"timeout" => "3000"
|
||||
adapter: "postgresql",
|
||||
host: "localhost",
|
||||
port: 9000,
|
||||
database: "foo_test",
|
||||
username: "foo",
|
||||
password: "bar",
|
||||
pool: "5",
|
||||
timeout: "3000"
|
||||
}.sort
|
||||
|
||||
app_db_config(nil) do
|
||||
|
@ -75,7 +75,7 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
}
|
||||
}
|
||||
app_db_config(sample_config) do
|
||||
assert_equal host, Rails::DBConsole.new.config["host"]
|
||||
assert_equal host, Rails::DBConsole.new.config[:host]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -212,7 +212,7 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
}
|
||||
|
||||
app_db_config(sample_config) do
|
||||
assert_equal "postgresql", Rails::DBConsole.new.config["adapter"]
|
||||
assert_equal "postgresql", Rails::DBConsole.new.config[:adapter]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -295,7 +295,7 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
|
||||
def start(config = {}, argv = [])
|
||||
@dbconsole = make_dbconsole.new(parse_arguments(argv))
|
||||
@dbconsole.stub(:config, config.stringify_keys) do
|
||||
@dbconsole.stub(:config, config) do
|
||||
capture_abort { @dbconsole.start }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue