diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb index af0e6a4e7..9cf0a7959 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb @@ -10,7 +10,7 @@ module AttributeMethods private def attributes_for_update(attribute_names) - return super unless self.class.connection.adapter_name == "SQLServer" + return super unless self.class.lease_connection.adapter_name == "SQLServer" super.reject do |name| column = self.class.columns_hash[name] diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb index 34355ef53..b35a719e6 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb @@ -9,7 +9,7 @@ module SQLServer module CoreExt module Calculations def calculate(operation, column_name) - if klass.connection.sqlserver? + if klass.lease_connection.sqlserver? _calculate(operation, column_name) else super @@ -54,7 +54,7 @@ def _calculate(operation, column_name) end def build_count_subquery(relation, column_name, distinct) - return super unless klass.connection.adapter_name == "SQLServer" + return super unless klass.lease_connection.adapter_name == "SQLServer" super(relation.unscope(:order), column_name, distinct) end diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb index 4eea43e3d..6f17fa249 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb @@ -9,7 +9,7 @@ module Explain SQLSERVER_STATEMENT_REGEXP = /N'(.+)', N'(.+)', (.+)/ def exec_explain(queries, options = []) - return super unless connection.adapter_name == "SQLServer" + return super unless lease_connection.adapter_name == "SQLServer" unprepared_queries = queries.map do |(sql, binds)| [unprepare_sqlserver_statement(sql, binds), binds] diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb index fe9271508..86b866078 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb @@ -11,7 +11,7 @@ module FinderMethods private def construct_relation_for_exists(conditions) - if klass.connection.sqlserver? + if klass.lease_connection.sqlserver? _construct_relation_for_exists(conditions) else super diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb index 1e272d913..bffaad63a 100644 --- a/lib/active_record/connection_adapters/sqlserver_adapter.rb +++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb @@ -29,12 +29,13 @@ require "active_record/connection_adapters/sqlserver/table_definition" require "active_record/connection_adapters/sqlserver/quoting" require "active_record/connection_adapters/sqlserver/utils" -require "active_record/sqlserver_base" require "active_record/connection_adapters/sqlserver_column" require "active_record/tasks/sqlserver_database_tasks" module ActiveRecord module ConnectionAdapters + register "sqlserver", "ActiveRecord::ConnectionAdapters::SQLServerAdapter", "active_record/connection_adapters/sqlserver_adapter" + class SQLServerAdapter < AbstractAdapter include SQLServer::Version, SQLServer::Quoting, diff --git a/lib/active_record/sqlserver_base.rb b/lib/active_record/sqlserver_base.rb deleted file mode 100644 index 9dbcbc623..000000000 --- a/lib/active_record/sqlserver_base.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module ActiveRecord - module ConnectionHandling - def sqlserver_adapter_class - ConnectionAdapters::SQLServerAdapter - end - - def sqlserver_connection(config) #:nodoc: - sqlserver_adapter_class.new(config) - end - end -end diff --git a/test/cases/adapter_test_sqlserver.rb b/test/cases/adapter_test_sqlserver.rb index 34394732b..f02e9e706 100644 --- a/test/cases/adapter_test_sqlserver.rb +++ b/test/cases/adapter_test_sqlserver.rb @@ -508,7 +508,7 @@ class AdapterTestSQLServer < ActiveRecord::TestCase describe "block writes to a database" do def setup - @conn = ActiveRecord::Base.connection + @conn = ActiveRecord::Base.lease_connection end def test_errors_when_an_insert_query_is_called_while_preventing_writes diff --git a/test/cases/coerced_tests.rb b/test/cases/coerced_tests.rb index 315a2ac45..9445bb06b 100644 --- a/test/cases/coerced_tests.rb +++ b/test/cases/coerced_tests.rb @@ -197,7 +197,7 @@ class BasicsTest < ActiveRecord::TestCase # Use square brackets as SQL Server escaped character coerce_tests! :test_column_names_are_escaped def test_column_names_are_escaped_coerced - conn = ActiveRecord::Base.connection + conn = ActiveRecord::Base.lease_connection assert_equal "[t]]]", conn.quote_column_name("t]") end @@ -236,7 +236,7 @@ def test_update_date_time_attributes_with_default_timezone_local ActiveRecord::Base.while_preventing_writes do assert_queries(1, ignore_none: true) do Bird.transaction do - ActiveRecord::Base.connection.materialize_transactions + ActiveRecord::Base.lease_connection.materialize_transactions end end end @@ -1542,9 +1542,9 @@ def test_dump_schema_information_outputs_lexically_reverse_ordered_versions_rega @schema_migration.create_version(v) end - schema_info = ActiveRecord::Base.connection.dump_schema_information + schema_info = ActiveRecord::Base.lease_connection.dump_schema_information expected = <<~STR - INSERT INTO #{ActiveRecord::Base.connection.quote_table_name("schema_migrations")} (version) VALUES + INSERT INTO #{ActiveRecord::Base.lease_connection.quote_table_name("schema_migrations")} (version) VALUES (N'20100301010101'), (N'20100201010101'), (N'20100101010101'); @@ -1602,7 +1602,7 @@ class SchemaDumperDefaultsCoerceTest < ActiveRecord::TestCase include SchemaDumpingHelper setup do - @connection = ActiveRecord::Base.connection + @connection = ActiveRecord::Base.lease_connection @connection.create_table :dump_defaults, force: true do |t| t.string :string_with_default, default: "Hello!" t.date :date_with_default, default: "2014-06-05" @@ -2213,15 +2213,15 @@ def test_insert_all_coerced Task.cache { Task.insert({ starting: Time.now }) } end - assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do + assert_called(ActiveRecord::Base.lease_connection, :clear_query_cache, times: 2) do Task.cache { Task.insert_all!([{ starting: Time.now }]) } end - assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do + assert_called(ActiveRecord::Base.lease_connection, :clear_query_cache, times: 2) do Task.cache { Task.insert!({ starting: Time.now }) } end - assert_called(ActiveRecord::Base.connection, :clear_query_cache, times: 2) do + assert_called(ActiveRecord::Base.lease_connection, :clear_query_cache, times: 2) do Task.cache { Task.insert_all!([{ starting: Time.now }]) } end @@ -2287,7 +2287,7 @@ class MarshalSerializationTest < ActiveRecord::TestCase undef_method :marshal_fixture_path def marshal_fixture_path(file_name) File.expand_path( - "support/marshal_compatibility_fixtures/#{ActiveRecord::Base.connection.adapter_name}/#{file_name}.dump", + "support/marshal_compatibility_fixtures/#{ActiveRecord::Base.lease_connection.adapter_name}/#{file_name}.dump", ARTest::SQLServer.test_root_sqlserver ) end @@ -2379,7 +2379,7 @@ class BasePreventWritesTest < ActiveRecord::TestCase ActiveRecord::Base.while_preventing_writes do assert_queries(1, ignore_none: true) do Bird.transaction do - ActiveRecord::Base.connection.materialize_transactions + ActiveRecord::Base.lease_connection.materialize_transactions end end end @@ -2489,7 +2489,7 @@ def test_sqlcommenter_format_value_string_coercible_coerced def test_invalid_encoding_query_coerced ActiveRecord::QueryLogs.tags = [ :application ] assert_raises ActiveRecord::StatementInvalid do - ActiveRecord::Base.connection.execute "select 1 as '\xFF'" + ActiveRecord::Base.lease_connection.execute "select 1 as '\xFF'" end end end diff --git a/test/cases/disconnected_test_sqlserver.rb b/test/cases/disconnected_test_sqlserver.rb index 2936cf93f..382ca51b2 100644 --- a/test/cases/disconnected_test_sqlserver.rb +++ b/test/cases/disconnected_test_sqlserver.rb @@ -7,7 +7,7 @@ class TestDisconnectedAdapter < ActiveRecord::TestCase undef_method :setup def setup - @connection = ActiveRecord::Base.connection + @connection = ActiveRecord::Base.lease_connection end teardown do diff --git a/test/cases/json_test_sqlserver.rb b/test/cases/json_test_sqlserver.rb index a863868a8..501210a12 100644 --- a/test/cases/json_test_sqlserver.rb +++ b/test/cases/json_test_sqlserver.rb @@ -2,7 +2,7 @@ require "cases/helper_sqlserver" -if ActiveRecord::Base.connection.supports_json? +if ActiveRecord::Base.lease_connection.supports_json? class JsonTestSQLServer < ActiveRecord::TestCase before do @o1 = SSTestDatatypeMigrationJson.create! json_col: { "a" => "a", "b" => "b", "c" => "c" } diff --git a/test/cases/lateral_test_sqlserver.rb b/test/cases/lateral_test_sqlserver.rb index 17aea3c9b..fb1660110 100644 --- a/test/cases/lateral_test_sqlserver.rb +++ b/test/cases/lateral_test_sqlserver.rb @@ -16,7 +16,7 @@ class LateralTestSQLServer < ActiveRecord::TestCase eq = Arel::Nodes::Equality.new(one, one) sql = author.project(Arel.star).where(author[:name].matches("David")).outer_join(subselect.lateral.as("bar")).on(eq).to_sql - results = ActiveRecord::Base.connection.exec_query sql + results = ActiveRecord::Base.lease_connection.exec_query sql assert_equal sql, "SELECT * FROM [authors] OUTER APPLY (SELECT * FROM [posts] WHERE [posts].[author_id] = [authors].[id] AND [posts].[id] = 42 ORDER BY [posts].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) AS bar WHERE [authors].[name] LIKE N'David'" assert_equal results.length, 1 end @@ -27,7 +27,7 @@ class LateralTestSQLServer < ActiveRecord::TestCase subselect = post.project(Arel.star).take(1).where(post[:author_id].eq(author[:id])).where(post[:id].eq(42)) sql = author.project(Arel.star).where(author[:name].matches("David")).join(subselect.lateral.as("bar")).to_sql - results = ActiveRecord::Base.connection.exec_query sql + results = ActiveRecord::Base.lease_connection.exec_query sql assert_equal sql, "SELECT * FROM [authors] CROSS APPLY (SELECT * FROM [posts] WHERE [posts].[author_id] = [authors].[id] AND [posts].[id] = 42 ORDER BY [posts].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) AS bar WHERE [authors].[name] LIKE N'David'" assert_equal results.length, 0 diff --git a/test/cases/primary_keys_test_sqlserver.rb b/test/cases/primary_keys_test_sqlserver.rb index 433c17de0..8edf3dcfe 100644 --- a/test/cases/primary_keys_test_sqlserver.rb +++ b/test/cases/primary_keys_test_sqlserver.rb @@ -12,7 +12,7 @@ class Barcode < ActiveRecord::Base end setup do - @connection = ActiveRecord::Base.connection + @connection = ActiveRecord::Base.lease_connection @connection.create_table(:barcodes, primary_key: "code", id: :uuid, force: true) end @@ -50,7 +50,7 @@ class Widget < ActiveRecord::Base end setup do - @connection = ActiveRecord::Base.connection + @connection = ActiveRecord::Base.lease_connection end teardown do diff --git a/test/cases/schema_dumper_test_sqlserver.rb b/test/cases/schema_dumper_test_sqlserver.rb index 13ba5b5ce..f6ae6b2c3 100644 --- a/test/cases/schema_dumper_test_sqlserver.rb +++ b/test/cases/schema_dumper_test_sqlserver.rb @@ -5,7 +5,7 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase before { all_tables } - let(:all_tables) { ActiveRecord::Base.connection.tables } + let(:all_tables) { ActiveRecord::Base.lease_connection.tables } let(:schema) { @generated_schema } it "sst_datatypes" do @@ -166,7 +166,7 @@ def generate_schema_for_table(*table_names) stream = StringIO.new ActiveRecord::SchemaDumper.ignore_tables = all_tables - table_names - ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream) + ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.lease_connection, stream) @generated_schema = stream.string yield @generated_schema if block_given? @schema_lines = Hash.new diff --git a/test/cases/specific_schema_test_sqlserver.rb b/test/cases/specific_schema_test_sqlserver.rb index 6148f0874..c4590ce81 100644 --- a/test/cases/specific_schema_test_sqlserver.rb +++ b/test/cases/specific_schema_test_sqlserver.rb @@ -159,14 +159,14 @@ def quoted_id it "returns a new id via connection newid_function" do acceptable_uuid = ActiveRecord::ConnectionAdapters::SQLServer::Type::Uuid::ACCEPTABLE_UUID - db_uuid = ActiveRecord::Base.connection.newid_function + db_uuid = ActiveRecord::Base.lease_connection.newid_function _(db_uuid).must_match(acceptable_uuid) end # with similar table definition in two schemas it "returns the correct primary columns" do - connection = ActiveRecord::Base.connection + connection = ActiveRecord::Base.lease_connection assert_equal "field_1", connection.columns("test.sst_schema_test_mulitple_schema").detect(&:is_primary?).name assert_equal "field_2", connection.columns("test2.sst_schema_test_mulitple_schema").detect(&:is_primary?).name end diff --git a/test/cases/view_test_sqlserver.rb b/test/cases/view_test_sqlserver.rb index b371bd0b1..73ddf006a 100644 --- a/test/cases/view_test_sqlserver.rb +++ b/test/cases/view_test_sqlserver.rb @@ -3,7 +3,7 @@ require "cases/helper_sqlserver" class ViewTestSQLServer < ActiveRecord::TestCase - let(:connection) { ActiveRecord::Base.connection } + let(:connection) { ActiveRecord::Base.lease_connection } describe 'view with default values' do before do diff --git a/test/support/connection_reflection.rb b/test/support/connection_reflection.rb index a739f76ee..b7fe15ce2 100644 --- a/test/support/connection_reflection.rb +++ b/test/support/connection_reflection.rb @@ -8,7 +8,7 @@ module ConnectionReflection included { extend ConnectionReflection } def connection - ActiveRecord::Base.connection + ActiveRecord::Base.lease_connection end def connection_options diff --git a/test/support/test_in_memory_oltp.rb b/test/support/test_in_memory_oltp.rb index 88c918c92..2b5bb0c19 100644 --- a/test/support/test_in_memory_oltp.rb +++ b/test/support/test_in_memory_oltp.rb @@ -8,10 +8,10 @@ ARTest.connect - if ActiveRecord::Base.connection.supports_in_memory_oltp? + if ActiveRecord::Base.lease_connection.supports_in_memory_oltp? puts "Configuring In-Memory OLTP..." inmem_file = ARTest::SQLServer.test_root_sqlserver, "schema", "enable-in-memory-oltp.sql" inmem_sql = File.read File.join(inmem_file) - ActiveRecord::Base.connection.execute(inmem_sql) + ActiveRecord::Base.lease_connection.execute(inmem_sql) end end