@@ -191,10 +191,11 @@ static unsigned int msec_char_to_uint(char *msec_char, size_t len)
191191 return (unsigned int )strtoul (msec_char , NULL , 10 );
192192}
193193
194- static VALUE rb_mysql_result_fetch_row (VALUE self , ID db_timezone , ID app_timezone , int symbolizeKeys , int asArray , int castBool , int cast , MYSQL_FIELD * fields ) {
194+ static VALUE rb_mysql_result_fetch_row (VALUE self , ID db_timezone , ID app_timezone , int symbolizeKeys , int asArray , int castBool , int cast ) {
195195 VALUE rowVal ;
196196 mysql2_result_wrapper * wrapper ;
197197 MYSQL_ROW row ;
198+ MYSQL_FIELD * fields ;
198199 unsigned int i = 0 ;
199200 unsigned long * fieldLengths ;
200201 void * ptr ;
@@ -226,6 +227,9 @@ static VALUE rb_mysql_result_fetch_row(VALUE self, ID db_timezone, ID app_timezo
226227 wrapper -> fields = rb_ary_new2 (wrapper -> numberOfFields );
227228 }
228229
230+ /* get the MySQL field types to convert to Ruby field types */
231+ fields = mysql_fetch_fields (wrapper -> result );
232+
229233 for (i = 0 ; i < wrapper -> numberOfFields ; i ++ ) {
230234 VALUE field = rb_mysql_result_fetch_field (self , i , symbolizeKeys );
231235 if (row [i ]) {
@@ -447,7 +451,6 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
447451 unsigned long i ;
448452 const char * errstr ;
449453 int symbolizeKeys , asArray , castBool , cacheRows , cast ;
450- MYSQL_FIELD * fields = NULL ;
451454
452455 GetMysql2Result (self , wrapper );
453456
@@ -499,10 +502,8 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
499502 if (!wrapper -> streamingComplete ) {
500503 VALUE row ;
501504
502- fields = mysql_fetch_fields (wrapper -> result );
503-
504505 do {
505- row = rb_mysql_result_fetch_row (self , db_timezone , app_timezone , symbolizeKeys , asArray , castBool , cast , fields );
506+ row = rb_mysql_result_fetch_row (self , db_timezone , app_timezone , symbolizeKeys , asArray , castBool , cast );
506507 if (row != Qnil ) {
507508 wrapper -> numberOfRows ++ ;
508509 if (block != Qnil ) {
@@ -542,14 +543,13 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
542543 } else {
543544 unsigned long rowsProcessed = 0 ;
544545 rowsProcessed = RARRAY_LEN (wrapper -> rows );
545- fields = mysql_fetch_fields (wrapper -> result );
546546
547547 for (i = 0 ; i < wrapper -> numberOfRows ; i ++ ) {
548548 VALUE row ;
549549 if (cacheRows && i < rowsProcessed ) {
550550 row = rb_ary_entry (wrapper -> rows , i );
551551 } else {
552- row = rb_mysql_result_fetch_row (self , db_timezone , app_timezone , symbolizeKeys , asArray , castBool , cast , fields );
552+ row = rb_mysql_result_fetch_row (self , db_timezone , app_timezone , symbolizeKeys , asArray , castBool , cast );
553553 if (cacheRows ) {
554554 rb_ary_store (wrapper -> rows , i , row );
555555 }
0 commit comments