Class: LocalDevelopmentGateway::DatabaseRouter::Drivers::SqlServerDriver

Inherits:
Object
  • Object
show all
Defined in:
lib/local_development_gateway/database_router/drivers/sql_server_driver.rb

Constant Summary collapse

NAME =
"sql_server"
LISTEN_PORT =
1433

Instance Method Summary collapse

Instance Method Details

#connect(client, routes, connector:) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/local_development_gateway/database_router/drivers/sql_server_driver.rb', line 20

def connect(client, routes, connector:)
  deadline = DatabaseRouter::Wire.deadline
  prelogin = DatabaseRouter::Tds::Message.read(client, deadline: deadline)
  if routes.empty?
    raise Error, "No labelled sql_server routes are available"
  end
  provisional, target, response =
    negotiate(routes, prelogin, connector, deadline)
  DatabaseRouter::Tds::Message.write(client, response)

  hostname, messages = read_client_hello(client, deadline)
  selected = routes.find { |route| route.hostname == hostname }
  raise Error, "No SQL Server route for #{hostname}" unless selected

  if selected != provisional
    target.close
    target = connector.call(selected)
    DatabaseRouter::Tds::Message.write(target, prelogin)
    DatabaseRouter::Tds::Message.read(target, deadline: deadline)
  end

  messages.each do |message|
    DatabaseRouter::Tds::Message.write(target, message)
  end
  [client, target]
rescue StandardError
  target&.close
  raise
end

#listen_portObject



16
17
18
# File 'lib/local_development_gateway/database_router/drivers/sql_server_driver.rb', line 16

def listen_port
  LISTEN_PORT
end

#nameObject



12
13
14
# File 'lib/local_development_gateway/database_router/drivers/sql_server_driver.rb', line 12

def name
  NAME
end