提交 7ce15399 编写于 作者: J Jeff Lawson 提交者: Aaron Patterson

Bug Fix -- clean up connection after stored procedure [#3151 state:resolved]

上级 137e4e75
......@@ -275,6 +275,7 @@ def select_rows(sql, name = nil)
rows = []
result.each { |row| rows << row }
result.free
@connection.more_results && @connection.next_result # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
rows
end
......@@ -617,6 +618,7 @@ def select(sql, name = nil)
result = execute(sql, name)
rows = []
result.each_hash { |row| rows << row }
@connection.more_results && @connection.next_result # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
result.free
rows
end
......
......@@ -48,6 +48,7 @@ def test_successful_reconnection_after_timeout_with_verify
def test_multi_results
rows = ActiveRecord::Base.connection.select_rows('CALL ten();')
assert_equal 10, rows[0][0].to_i, "ten() did not return 10 as expected: #{rows.inspect}"
assert @connection.active?, "Bad connection use by 'MysqlAdapter.select_rows'"
end
end
......
require "cases/helper"
require 'models/topic'
class StoredProcedureTest < ActiveRecord::TestCase
fixtures :topics
# Test that MySQL allows multiple results for stored procedures
if Mysql.const_defined?(:CLIENT_MULTI_RESULTS)
def test_multi_results_from_find_by_sql
topics = Topic.find_by_sql 'CALL topics();'
assert_equal 1, topics.size
assert ActiveRecord::Base.connection.active?, "Bad connection use by 'MysqlAdapter.select'"
end
end
end
......@@ -19,6 +19,17 @@
BEGIN
select 10;
END
SQL
ActiveRecord::Base.connection.execute <<-SQL
DROP PROCEDURE IF EXISTS topics;
SQL
ActiveRecord::Base.connection.execute <<-SQL
CREATE PROCEDURE topics() SQL SECURITY INVOKER
BEGIN
select * from topics limit 1;
END
SQL
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册