From 8e6f300f9db75f07c03049efd00a6b91fe16538d Mon Sep 17 00:00:00 2001 From: Lourens Naude Date: Wed, 8 Oct 2008 17:09:47 +0100 Subject: [PATCH] Introduce Mysql#reconnected? --- ext/mysql.c | 9 +++++++++ test/async_query_with_block_test.rb | 4 ++-- test/reconnected_test.rb | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 test/reconnected_test.rb diff --git a/ext/mysql.c b/ext/mysql.c index bfbc27e..4b1fb44 100644 --- a/ext/mysql.c +++ b/ext/mysql.c @@ -851,6 +851,14 @@ static VALUE interrupted( VALUE obj ) return ( vio_was_interrupted( m->net.vio ) == 1 ? Qtrue : Qfalse ); } +/* reconnected */ +static VALUE reconnected( VALUE obj ){ + MYSQL* m = GetHandler(obj); + int current_connection_id = mysql_thread_id( m ); + mysql_ping(m); + return ( current_connection_id == mysql_thread_id( m ) ) ? Qfalse : Qtrue; +} + static void validate_async_query( VALUE obj ) { MYSQL* m = GetHandler(obj); @@ -2240,6 +2248,7 @@ void Init_mysql(void) rb_define_method(cMysql, "async_in_progress=", async_in_progress_set, 1); rb_define_method(cMysql, "send_query", send_query, 1); rb_define_method(cMysql, "simulate_disconnect", simulate_disconnect, 0); + rb_define_method(cMysql, "reconnected?", reconnected, 0); rb_define_method(cMysql, "get_result", get_result, 0); rb_define_method(cMysql, "readable?", readable, -1); rb_define_method(cMysql, "retry?", retry, 0); diff --git a/test/async_query_with_block_test.rb b/test/async_query_with_block_test.rb index 06e1369..7c5a216 100644 --- a/test/async_query_with_block_test.rb +++ b/test/async_query_with_block_test.rb @@ -1,7 +1,7 @@ require File.dirname(__FILE__) + '/test_helper' -m = Mysql.real_connect('localhost','root') +m = Mysql.real_connect('localhost','root','','mysql') -m.c_async_query( 'SELECT SLEEP(1)' ) do |result| +m.c_async_query( 'SELECT * FROM user' ) do |result| puts result.inspect end \ No newline at end of file diff --git a/test/reconnected_test.rb b/test/reconnected_test.rb new file mode 100644 index 0000000..f4f0154 --- /dev/null +++ b/test/reconnected_test.rb @@ -0,0 +1,18 @@ +require File.dirname(__FILE__) + '/test_helper' + +$m = Mysql.real_connect('localhost','root') +#$m.reconnect = true + +def assert_reconnected + puts $m.reconnected?().inspect + sleep 1 + yield + puts $m.reconnected?().inspect +end + +assert_reconnected do + $m.simulate_disconnect +end +assert_reconnected do + $m.close +end \ No newline at end of file