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
|