提交 43bbb25d 编写于 作者: A Aaron Patterson

bind substitution is working properly

上级 9d46e0d0
......@@ -228,7 +228,7 @@ def initialize(connection, logger, connection_parameters, config)
def clear_cache!
@statements.each_value do |value|
exec "DEALLOCATE #{value}"
@connection.query "DEALLOCATE #{value}"
end
@statements.clear
end
......@@ -251,6 +251,7 @@ def active?
def reconnect!
if @connection.respond_to?(:reset)
@connection.reset
clear_cache!
configure_connection
else
disconnect!
......@@ -515,6 +516,10 @@ def execute(sql, name = nil)
end
end
def substitute_for(column, current_values)
Arel.sql("$#{current_values.length + 1}")
end
def exec(sql, name = 'SQL', binds = [])
return async_exec(sql, name, binds) if @async
......@@ -537,7 +542,9 @@ def async_exec(sql, name, binds)
})
@connection.block
result = @connection.get_last_result
ActiveRecord::Result.new(result.fields, result_as_array(result))
ret = ActiveRecord::Result.new(result.fields, result_as_array(result))
result.clear
return ret
end
end
......@@ -1014,11 +1021,8 @@ def last_insert_id(table, sequence_name) #:nodoc:
# Executes a SELECT query and returns the results, performing any data type
# conversions that are required to be performed here instead of in PostgreSQLColumn.
def select(sql, name = nil)
fields, rows = select_raw(sql, name)
rows.map do |row|
Hash[fields.zip(row)]
end
def select(sql, name = nil, binds = [])
exec(sql, name, binds).to_a
end
def select_raw(sql, name = nil)
......
......@@ -55,6 +55,14 @@ def test_exec_typecasts_bind_vals
assert_equal [['1', 'foo']], result.rows
end
def test_substitute_for
bind = @connection.substitute_for(nil, [])
assert_equal Arel.sql('$1'), bind
bind = @connection.substitute_for(nil, [nil])
assert_equal Arel.sql('$2'), bind
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册