Skip to content

Commit

Permalink
Move server flags to result object
Browse files Browse the repository at this point in the history
  • Loading branch information
Cees de Groot committed May 24, 2016
1 parent e7ea748 commit 4385ff5
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 10 deletions.
26 changes: 19 additions & 7 deletions ext/mysql2/client.c
Expand Up @@ -525,7 +525,7 @@ static VALUE rb_mysql_client_async_result(VALUE self) {
Check_Type(current, T_HASH);
resultObj = rb_mysql_result_to_obj(self, wrapper->encoding, current, result, Qnil);

rb_iv_set(self, "@server_status", INT2NUM(wrapper->client->server_status));
set_server_query_flags(wrapper->client, resultObj);

return resultObj;
}
Expand Down Expand Up @@ -1466,19 +1466,31 @@ void init_mysql2_client() {
rb_const_set(cMysql2Client, rb_intern("BASIC_FLAGS"),
LONG2NUM(CLIENT_BASIC_FLAGS));
#endif
}

#define flag_to_bool(f) ((client->server_status & f) ? Qtrue : Qfalse)

void set_server_query_flags(MYSQL *client, VALUE result) {
VALUE server_flags = rb_hash_new();

#ifdef SERVER_QUERY_NO_GOOD_INDEX_USED
rb_const_set(cMysql2Client, rb_intern("NO_GOOD_INDEX_USED"),
LONG2NUM(SERVER_QUERY_NO_GOOD_INDEX_USED));
rb_hash_aset(server_flags, ID2SYM(rb_intern("no_good_index_used")), flag_to_bool(SERVER_QUERY_NO_GOOD_INDEX_USED));
#else
rb_hash_aset(server_flags, ID2SYM(rb_intern("no_good_index_used")), Qnil);
#endif

#ifdef SERVER_QUERY_NO_INDEX_USED
rb_const_set(cMysql2Client, rb_intern("NO_INDEX_USED"),
LONG2NUM(SERVER_QUERY_NO_INDEX_USED));
rb_hash_aset(server_flags, ID2SYM(rb_intern("no_index_used")), flag_to_bool(SERVER_QUERY_NO_INDEX_USED));
#else
rb_hash_aset(server_flags, ID2SYM(rb_intern("no_index_used")), Qnil);
#endif

#ifdef SERVER_QUERY_WAS_SLOW
rb_const_set(cMysql2Client, rb_intern("QUERY_WAS_SLOW"),
LONG2NUM(SERVER_QUERY_WAS_SLOW));
rb_hash_aset(server_flags, ID2SYM(rb_intern("query_was_slow")), flag_to_bool(SERVER_QUERY_WAS_SLOW));
#else
rb_hash_aset(server_flags, ID2SYM(rb_intern("query_was_slow")), Qnil;)
#endif

rb_iv_set(result, "@server_flags", server_flags);
}

2 changes: 2 additions & 0 deletions ext/mysql2/client.h
Expand Up @@ -65,9 +65,11 @@ void rb_mysql_client_set_active_thread(VALUE self);

void init_mysql2_client(void);
void decr_mysql2_client(mysql_client_wrapper *wrapper);
void set_server_query_flags(MYSQL *client, VALUE result);

#endif

#ifndef HAVE_RB_HASH_DUP
VALUE rb_hash_dup(VALUE other);
#endif

4 changes: 2 additions & 2 deletions ext/mysql2/statement.c
Expand Up @@ -352,8 +352,6 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {

FREE_BINDS;

rb_iv_set(self, "@server_status", INT2NUM(wrapper->client->server_status));

metadata = mysql_stmt_result_metadata(stmt);
if (metadata == NULL) {
if (mysql_stmt_errno(stmt) != 0) {
Expand Down Expand Up @@ -381,6 +379,8 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {

resultObj = rb_mysql_result_to_obj(stmt_wrapper->client, wrapper->encoding, current, metadata, self);

set_server_query_flags(wrapper->client, resultObj);

if (!is_streaming) {
// cache all result
rb_funcall(resultObj, intern_each, 0);
Expand Down
2 changes: 1 addition & 1 deletion lib/mysql2/client.rb
@@ -1,6 +1,6 @@
module Mysql2
class Client
attr_reader :query_options, :read_timeout, :server_status
attr_reader :query_options, :read_timeout

def self.default_query_options
@default_query_options ||= {
Expand Down
2 changes: 2 additions & 0 deletions lib/mysql2/result.rb
@@ -1,5 +1,7 @@
module Mysql2
class Result
attr_reader :server_flags

include Enumerable
end
end

0 comments on commit 4385ff5

Please sign in to comment.