@@ -92,8 +92,8 @@ static void rb_mysql_result_free_result(mysql2_result_wrapper * wrapper) {
92
92
if (!wrapper ) return ;
93
93
94
94
if (wrapper -> resultFreed != 1 ) {
95
- if (wrapper -> stmt ) {
96
- mysql_stmt_free_result (wrapper -> stmt );
95
+ if (wrapper -> stmt_wrapper ) {
96
+ mysql_stmt_free_result (wrapper -> stmt_wrapper -> stmt );
97
97
98
98
if (wrapper -> result_buffers ) {
99
99
unsigned int i ;
@@ -125,6 +125,10 @@ static void rb_mysql_result_free(void *ptr) {
125
125
decr_mysql2_client (wrapper -> client_wrapper );
126
126
}
127
127
128
+ if (wrapper -> statement != Qnil ) {
129
+ decr_mysql2_stmt (wrapper -> stmt_wrapper );
130
+ }
131
+
128
132
xfree (wrapper );
129
133
}
130
134
@@ -341,23 +345,23 @@ static VALUE rb_mysql_result_fetch_row_stmt(VALUE self, MYSQL_FIELD * fields, co
341
345
rb_mysql_result_alloc_result_buffers (self , fields );
342
346
}
343
347
344
- if (mysql_stmt_bind_result (wrapper -> stmt , wrapper -> result_buffers )) {
345
- rb_raise_mysql2_stmt_error2 (wrapper -> stmt
348
+ if (mysql_stmt_bind_result (wrapper -> stmt_wrapper -> stmt , wrapper -> result_buffers )) {
349
+ rb_raise_mysql2_stmt_error2 (wrapper -> stmt_wrapper -> stmt
346
350
#ifdef HAVE_RUBY_ENCODING_H
347
351
, conn_enc
348
352
#endif
349
353
);
350
354
}
351
355
352
356
{
353
- switch ((uintptr_t )rb_thread_call_without_gvl (nogvl_stmt_fetch , wrapper -> stmt , RUBY_UBF_IO , 0 )) {
357
+ switch ((uintptr_t )rb_thread_call_without_gvl (nogvl_stmt_fetch , wrapper -> stmt_wrapper -> stmt , RUBY_UBF_IO , 0 )) {
354
358
case 0 :
355
359
/* success */
356
360
break ;
357
361
358
362
case 1 :
359
363
/* error */
360
- rb_raise_mysql2_stmt_error2 (wrapper -> stmt
364
+ rb_raise_mysql2_stmt_error2 (wrapper -> stmt_wrapper -> stmt
361
365
#ifdef HAVE_RUBY_ENCODING_H
362
366
, conn_enc
363
367
#endif
@@ -873,11 +877,11 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
873
877
rb_warn (":cache_rows is ignored if :stream is true" );
874
878
}
875
879
876
- if (wrapper -> stmt && !cacheRows && !wrapper -> is_streaming ) {
880
+ if (wrapper -> stmt_wrapper && !cacheRows && !wrapper -> is_streaming ) {
877
881
rb_warn (":cache_rows is forced for prepared statements (if not streaming)" );
878
882
}
879
883
880
- if (wrapper -> stmt && !cast ) {
884
+ if (wrapper -> stmt_wrapper && !cast ) {
881
885
rb_warn (":cast is forced for prepared statements" );
882
886
}
883
887
@@ -903,7 +907,7 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
903
907
}
904
908
905
909
if (wrapper -> lastRowProcessed == 0 && !wrapper -> is_streaming ) {
906
- wrapper -> numberOfRows = wrapper -> stmt ? mysql_stmt_num_rows (wrapper -> stmt ) : mysql_num_rows (wrapper -> result );
910
+ wrapper -> numberOfRows = wrapper -> stmt_wrapper ? mysql_stmt_num_rows (wrapper -> stmt_wrapper -> stmt ) : mysql_num_rows (wrapper -> result );
907
911
if (wrapper -> numberOfRows == 0 ) {
908
912
wrapper -> rows = rb_ary_new ();
909
913
return wrapper -> rows ;
@@ -921,7 +925,7 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
921
925
args .app_timezone = app_timezone ;
922
926
args .block_given = block ;
923
927
924
- if (wrapper -> stmt ) {
928
+ if (wrapper -> stmt_wrapper ) {
925
929
fetch_row_func = rb_mysql_result_fetch_row_stmt ;
926
930
} else {
927
931
fetch_row_func = rb_mysql_result_fetch_row ;
@@ -943,8 +947,8 @@ static VALUE rb_mysql_result_count(VALUE self) {
943
947
return LONG2NUM (RARRAY_LEN (wrapper -> rows ));
944
948
} else {
945
949
/* MySQL returns an unsigned 64-bit long here */
946
- if (wrapper -> stmt ) {
947
- return ULL2NUM (mysql_stmt_num_rows (wrapper -> stmt ));
950
+ if (wrapper -> stmt_wrapper ) {
951
+ return ULL2NUM (mysql_stmt_num_rows (wrapper -> stmt_wrapper -> stmt ));
948
952
} else {
949
953
return ULL2NUM (mysql_num_rows (wrapper -> result ));
950
954
}
@@ -977,9 +981,10 @@ VALUE rb_mysql_result_to_obj(VALUE client, VALUE encoding, VALUE options, MYSQL_
977
981
/* Keep a handle to the Statement to ensure it doesn't get garbage collected first */
978
982
wrapper -> statement = statement ;
979
983
if (statement != Qnil ) {
980
- mysql_stmt_wrapper * stmt_wrapper = DATA_PTR (statement );
981
- wrapper -> stmt = stmt_wrapper -> stmt ;
982
- stmt_wrapper -> refcount ++ ;
984
+ wrapper -> stmt_wrapper = DATA_PTR (statement );
985
+ wrapper -> stmt_wrapper -> refcount ++ ;
986
+ } else {
987
+ wrapper -> stmt_wrapper = NULL ;
983
988
}
984
989
985
990
rb_obj_call_init (obj , 0 , NULL );
0 commit comments