@@ -40,7 +40,7 @@ def initialize(
4040 circuit_breaker : nil
4141 )
4242 @username = username
43- @password = password
43+ @password = password && ! password . respond_to? ( :call ) ? -> ( _ ) { password } : password
4444 @db = begin
4545 Integer ( db || DEFAULT_DB )
4646 rescue ArgumentError
@@ -70,7 +70,6 @@ def initialize(
7070
7171 reconnect_attempts = Array . new ( reconnect_attempts , 0 ) . freeze if reconnect_attempts . is_a? ( Integer )
7272 @reconnect_attempts = reconnect_attempts
73- @connection_prelude = ( build_connection_prelude unless @password . respond_to? ( :call ) )
7473
7574 circuit_breaker = CircuitBreaker . new ( **circuit_breaker ) if circuit_breaker . is_a? ( Hash )
7675 if @circuit_breaker = circuit_breaker
@@ -88,19 +87,36 @@ def initialize(
8887 end
8988
9089 def connection_prelude
91- if @password . respond_to? ( :call )
92- build_connection_prelude
93- else
94- @connection_prelude
90+ prelude = [ ]
91+ pass = password
92+ if protocol == 3
93+ prelude << if pass
94+ [ "HELLO" , "3" , "AUTH" , username , pass ]
95+ else
96+ [ "HELLO" , "3" ]
97+ end
98+ elsif pass
99+ prelude << if @username && !@username . empty?
100+ [ "AUTH" , @username , pass ]
101+ else
102+ [ "AUTH" , pass ]
103+ end
95104 end
105+
106+ if @db && @db != 0
107+ prelude << [ "SELECT" , @db . to_s ]
108+ end
109+
110+ # Deep freeze all the strings and commands
111+ prelude . map! do |commands |
112+ commands = commands . map { |str | str . frozen? ? str : str . dup . freeze }
113+ commands . freeze
114+ end
115+ prelude . freeze
96116 end
97117
98118 def password
99- if @password . respond_to? ( :call )
100- @password . call ( username )
101- else
102- @password
103- end
119+ @password &.call ( username )
104120 end
105121
106122 def username
@@ -162,37 +178,6 @@ def server_url
162178 end
163179 url
164180 end
165-
166- private
167-
168- def build_connection_prelude
169- prelude = [ ]
170- pass = password
171- if protocol == 3
172- prelude << if pass
173- [ "HELLO" , "3" , "AUTH" , username , pass ]
174- else
175- [ "HELLO" , "3" ]
176- end
177- elsif pass
178- prelude << if @username && !@username . empty?
179- [ "AUTH" , @username , pass ]
180- else
181- [ "AUTH" , pass ]
182- end
183- end
184-
185- if @db && @db != 0
186- prelude << [ "SELECT" , @db . to_s ]
187- end
188-
189- # Deep freeze all the strings and commands
190- prelude . map! do |commands |
191- commands = commands . map { |str | str . frozen? ? str : str . dup . freeze }
192- commands . freeze
193- end
194- prelude . freeze
195- end
196181 end
197182
198183 include Common
0 commit comments