176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/blazer/data_source.rb', line 176
def bind_params(statement, variables)
if parameter_binding == :positional
locations = []
variables.each do |k, v|
i = 0
while (idx = statement.index("{#{k}}", i))
locations << [v, idx]
i = idx + 1
end
end
variables.each do |k, v|
statement = statement.gsub("{#{k}}", "?")
end
[statement, locations.sort_by(&:last).map(&:first)]
elsif parameter_binding == :numeric
variables.each_with_index do |(k, v), i|
statement = statement.gsub(/#{Regexp.escape("{#{k}}")}(\d)/, "$#{i + 1} \\1").gsub("{#{k}}", "$#{i + 1}")
end
[statement, variables.values]
elsif parameter_binding.respond_to?(:call)
parameter_binding.call(statement, variables)
elsif parameter_binding.nil?
[sub_variables(statement, variables), []]
else
raise Blazer::Error, "Unknown bind parameters"
end
end
|