@@ -205,7 +205,7 @@ static void set_buffer_for_string(MYSQL_BIND* bind_buffer, unsigned long *length
205
205
}
206
206
207
207
/* return 0 if the given bignum can cast as LONG_LONG, otherwise 1 */
208
- int my_big2ll (VALUE bignum , LONG_LONG * ptr )
208
+ static int my_big2ll (VALUE bignum , LONG_LONG * ptr )
209
209
{
210
210
unsigned LONG_LONG num ;
211
211
#ifdef HAVE_RB_ABSINT_SIZE
@@ -292,8 +292,22 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
292
292
break ;
293
293
case T_BIGNUM :
294
294
bind_buffers [i ].buffer_type = MYSQL_TYPE_LONGLONG ;
295
- bind_buffers [i ].buffer = xmalloc (sizeof (long long int ));
296
- my_big2ll (argv [i ], (LONG_LONG * )(bind_buffers [i ].buffer ));
295
+ {
296
+ LONG_LONG num ;
297
+ if (my_big2ll (argv [i ], & num )) {
298
+ VALUE rb_val_as_string = rb_big2str (argv [i ], 10 );
299
+ bind_buffers [i ].buffer_type = MYSQL_TYPE_NEWDECIMAL ;
300
+ params_enc [i ] = rb_val_as_string ;
301
+ #ifdef HAVE_RUBY_ENCODING_H
302
+ params_enc [i ] = rb_str_export_to_enc (params_enc [i ], conn_enc );
303
+ #endif
304
+ set_buffer_for_string (& bind_buffers [i ], & length_buffers [i ], params_enc [i ]);
305
+ }
306
+ else {
307
+ bind_buffers [i ].buffer = xmalloc (sizeof (long long int ));
308
+ * (LONG_LONG * )(bind_buffers [i ].buffer ) = num ;
309
+ }
310
+ }
297
311
break ;
298
312
case T_FLOAT :
299
313
bind_buffers [i ].buffer_type = MYSQL_TYPE_DOUBLE ;
0 commit comments