Skip to content

Commit 723930c

Browse files
authored
Merge pull request #1024 from gmcgibbon/dbconsole_support
Add dbconsole support to adapter
2 parents 5f020fd + e70e6c2 commit 723930c

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,23 @@ class SQLServerAdapter < AbstractAdapter
5959
self.exclude_output_inserted_table_names = Concurrent::Map.new { false }
6060

6161
class << self
62+
def dbconsole(config, options = {})
63+
sqlserver_config = config.configuration_hash
64+
args = []
65+
66+
args += ["-d", "#{config.database}"] if config.database
67+
args += ["-U", "#{sqlserver_config[:username]}"] if sqlserver_config[:username]
68+
args += ["-P", "#{sqlserver_config[:password]}"] if sqlserver_config[:password]
69+
70+
if sqlserver_config[:host]
71+
host_arg = +"tcp:#{sqlserver_config[:host]}"
72+
host_arg << ",#{sqlserver_config[:port]}" if sqlserver_config[:port]
73+
args += ["-S", host_arg]
74+
end
75+
76+
find_cmd_and_exec("sqlcmd", *args)
77+
end
78+
6279
def new_client(config)
6380
case config[:mode]
6481
when :dblib

lib/active_record/sqlserver_base.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
module ActiveRecord
44
module ConnectionHandling
5+
def sqlserver_connection_class
6+
ConnectionAdapters::SQLServerAdapter
7+
end
8+
59
def sqlserver_connection(config) #:nodoc:
610
config = config.symbolize_keys
711
config.reverse_merge!(mode: :dblib)
812
config[:mode] = config[:mode].to_s.downcase.underscore.to_sym
913

10-
ConnectionAdapters::SQLServerAdapter.new(
11-
ConnectionAdapters::SQLServerAdapter.new_client(config),
14+
sqlserver_connection_class.new(
15+
sqlserver_connection_class.new_client(config),
1216
logger,
1317
nil,
1418
config

test/cases/dbconsole.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
class DbConsole < ActiveRecord::TestCase
4+
subject { ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter }
5+
6+
it "uses sqlplus to connect to database" do
7+
subject.expects(:find_cmd_and_exec).with("sqlcmd", "-d", "db", "-U", "user", "-P", "secret", "-S", "tcp:localhost,1433")
8+
9+
config = make_db_config(adapter: "sqlserver", database: "db", username: "user", password: "secret", host: "localhost", port: 1433)
10+
11+
subject.dbconsole(config)
12+
end
13+
14+
private
15+
16+
def make_db_config(config)
17+
ActiveRecord::DatabaseConfigurations::HashConfig.new("test", "primary", config)
18+
end
19+
end

0 commit comments

Comments
 (0)