Skip to content

Commit cab7d2e

Browse files
brianmariosodabrew
authored andcommitted
move Mysql2::Client#info to a class method for easier debugging
1 parent 034dc40 commit cab7d2e

File tree

3 files changed

+29
-36
lines changed

3 files changed

+29
-36
lines changed

ext/mysql2/client.c

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
VALUE cMysql2Client;
1818
extern VALUE mMysql2, cMysql2Error;
19-
static VALUE sym_id, sym_version, sym_async, sym_symbolize_keys, sym_as, sym_array, sym_stream;
19+
static VALUE sym_id, sym_version, sym_header_version, sym_async, sym_symbolize_keys, sym_as, sym_array, sym_stream;
2020
static ID intern_merge, intern_merge_bang, intern_error_number_eql, intern_sql_state_eql;
2121
static ID intern_brackets, intern_new;
2222

@@ -824,30 +824,23 @@ static VALUE _mysql_client_options(VALUE self, int opt, VALUE value) {
824824
*
825825
* Returns a string that represents the client library version.
826826
*/
827-
static VALUE rb_mysql_client_info(VALUE self) {
828-
VALUE version, client_info;
829-
#ifdef HAVE_RUBY_ENCODING_H
830-
rb_encoding *default_internal_enc;
831-
rb_encoding *conn_enc;
832-
GET_CLIENT(self);
833-
#endif
834-
version = rb_hash_new();
827+
static VALUE rb_mysql_client_info(RB_MYSQL_UNUSED VALUE klass) {
828+
VALUE version_info, version, header_version;
829+
version_info = rb_hash_new();
835830

836-
#ifdef HAVE_RUBY_ENCODING_H
837-
default_internal_enc = rb_default_internal_encoding();
838-
conn_enc = rb_to_encoding(wrapper->encoding);
839-
#endif
831+
version = rb_str_new2(mysql_get_client_info());
832+
header_version = rb_str_new2(MYSQL_LINK_VERSION);
840833

841-
rb_hash_aset(version, sym_id, LONG2NUM(mysql_get_client_version()));
842-
client_info = rb_str_new2(mysql_get_client_info());
843834
#ifdef HAVE_RUBY_ENCODING_H
844-
rb_enc_associate(client_info, conn_enc);
845-
if (default_internal_enc) {
846-
client_info = rb_str_export_to_enc(client_info, default_internal_enc);
847-
}
835+
rb_enc_associate(version, rb_usascii_encoding());
836+
rb_enc_associate(header_version, rb_usascii_encoding());
848837
#endif
849-
rb_hash_aset(version, sym_version, client_info);
850-
return version;
838+
839+
rb_hash_aset(version_info, sym_id, LONG2NUM(mysql_get_client_version()));
840+
rb_hash_aset(version_info, sym_version, version);
841+
rb_hash_aset(version_info, sym_header_version, header_version);
842+
843+
return version_info;
851844
}
852845

853846
/* call-seq:
@@ -1244,11 +1237,11 @@ void init_mysql2_client() {
12441237
rb_define_alloc_func(cMysql2Client, allocate);
12451238

12461239
rb_define_singleton_method(cMysql2Client, "escape", rb_mysql_client_escape, 1);
1240+
rb_define_singleton_method(cMysql2Client, "info", rb_mysql_client_info, 0);
12471241

12481242
rb_define_method(cMysql2Client, "close", rb_mysql_client_close, 0);
12491243
rb_define_method(cMysql2Client, "abandon_results!", rb_mysql_client_abandon_results, 0);
12501244
rb_define_method(cMysql2Client, "escape", rb_mysql_client_real_escape, 1);
1251-
rb_define_method(cMysql2Client, "info", rb_mysql_client_info, 0);
12521245
rb_define_method(cMysql2Client, "server_info", rb_mysql_client_server_info, 0);
12531246
rb_define_method(cMysql2Client, "socket", rb_mysql_client_socket, 0);
12541247
rb_define_method(cMysql2Client, "async_result", rb_mysql_client_async_result, 0);
@@ -1284,6 +1277,7 @@ void init_mysql2_client() {
12841277

12851278
sym_id = ID2SYM(rb_intern("id"));
12861279
sym_version = ID2SYM(rb_intern("version"));
1280+
sym_header_version = ID2SYM(rb_intern("header_version"));
12871281
sym_async = ID2SYM(rb_intern("async"));
12881282
sym_symbolize_keys = ID2SYM(rb_intern("symbolize_keys"));
12891283
sym_as = ID2SYM(rb_intern("as"));

lib/mysql2/client.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ def query_info
9494
info_hash
9595
end
9696

97+
def info
98+
self.class.info
99+
end
100+
97101
private
98102
def self.local_offset
99103
::Time.local(2010).utc_offset.to_r / 86400

spec/mysql2/client_spec.rb

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -711,23 +711,18 @@ def run_gc
711711
context "strings returned by #info" do
712712
before { pending('Encoding is undefined') unless defined?(Encoding) }
713713

714-
it "should default to the connection's encoding if Encoding.default_internal is nil" do
715-
with_internal_encoding nil do
716-
expect(@client.info[:version].encoding).to eql(Encoding::UTF_8)
717-
718-
client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => 'ascii'))
719-
expect(client2.info[:version].encoding).to eql(Encoding::ASCII)
720-
end
714+
it "should be tagged as ascii" do
715+
expect(@client.info[:version].encoding).to eql(Encoding::US_ASCII)
716+
expect(@client.info[:header_version].encoding).to eql(Encoding::US_ASCII)
721717
end
718+
end
722719

723-
it "should use Encoding.default_internal" do
724-
with_internal_encoding Encoding::UTF_8 do
725-
expect(@client.info[:version].encoding).to eql(Encoding.default_internal)
726-
end
720+
context "strings returned by .info" do
721+
before { pending('Encoding is undefined') unless defined?(Encoding) }
727722

728-
with_internal_encoding Encoding::ASCII do
729-
expect(@client.info[:version].encoding).to eql(Encoding.default_internal)
730-
end
723+
it "should be tagged as ascii" do
724+
expect(Mysql2::Client.info[:version].encoding).to eql(Encoding::US_ASCII)
725+
expect(Mysql2::Client.info[:header_version].encoding).to eql(Encoding::US_ASCII)
731726
end
732727
end
733728

0 commit comments

Comments
 (0)