2
2
3
3
VALUE cMysql2Statement ;
4
4
extern VALUE mMysql2 , cMysql2Error , cBigDecimal , cDateTime , cDate ;
5
- static VALUE sym_stream , intern_error_number_eql , intern_sql_state_eql , intern_each ;
5
+ static VALUE sym_stream , intern_new_with_args , intern_each ;
6
6
static VALUE intern_usec , intern_sec , intern_min , intern_hour , intern_day , intern_month , intern_year ;
7
7
8
8
#define GET_STATEMENT (self ) \
@@ -31,15 +31,17 @@ void decr_mysql2_stmt(mysql_stmt_wrapper *stmt_wrapper) {
31
31
}
32
32
}
33
33
34
- VALUE rb_raise_mysql2_stmt_error2 (MYSQL_STMT * stmt
35
- #ifdef HAVE_RUBY_ENCODING_H
36
- , rb_encoding * conn_enc
37
- #endif
38
- ) {
39
- VALUE rb_error_msg = rb_str_new2 (mysql_stmt_error (stmt ));
40
- VALUE rb_sql_state = rb_tainted_str_new2 (mysql_stmt_sqlstate (stmt ));
41
- VALUE e = rb_exc_new3 (cMysql2Error , rb_error_msg );
34
+
35
+ void rb_raise_mysql2_stmt_error (mysql_stmt_wrapper * stmt_wrapper ) {
36
+ VALUE e ;
37
+ GET_CLIENT (stmt_wrapper -> client );
38
+ VALUE rb_error_msg = rb_str_new2 (mysql_stmt_error (stmt_wrapper -> stmt ));
39
+ VALUE rb_sql_state = rb_tainted_str_new2 (mysql_stmt_sqlstate (stmt_wrapper -> stmt ));
40
+
42
41
#ifdef HAVE_RUBY_ENCODING_H
42
+ rb_encoding * conn_enc ;
43
+ conn_enc = rb_to_encoding (wrapper -> encoding );
44
+
43
45
rb_encoding * default_internal_enc = rb_default_internal_encoding ();
44
46
45
47
rb_enc_associate (rb_error_msg , conn_enc );
@@ -49,30 +51,13 @@ VALUE rb_raise_mysql2_stmt_error2(MYSQL_STMT *stmt
49
51
rb_sql_state = rb_str_export_to_enc (rb_sql_state , default_internal_enc );
50
52
}
51
53
#endif
52
- rb_funcall (e , intern_error_number_eql , 1 , UINT2NUM (mysql_stmt_errno (stmt )));
53
- rb_funcall (e , intern_sql_state_eql , 1 , rb_sql_state );
54
- rb_exc_raise (e );
55
- return Qnil ;
56
- }
57
54
58
- static void rb_raise_mysql2_stmt_error (VALUE self ) {
59
- #ifdef HAVE_RUBY_ENCODING_H
60
- rb_encoding * conn_enc ;
61
- #endif
62
- GET_STATEMENT (self );
63
-
64
- #ifdef HAVE_RUBY_ENCODING_H
65
- {
66
- GET_CLIENT (stmt_wrapper -> client );
67
- conn_enc = rb_to_encoding (wrapper -> encoding );
68
- }
69
- #endif
70
-
71
- rb_raise_mysql2_stmt_error2 (stmt_wrapper -> stmt
72
- #ifdef HAVE_RUBY_ENCODING_H
73
- , conn_enc
74
- #endif
75
- );
55
+ e = rb_funcall (cMysql2Error , intern_new_with_args , 4 ,
56
+ rb_error_msg ,
57
+ LONG2FIX (wrapper -> server_version ),
58
+ UINT2NUM (mysql_stmt_errno (stmt_wrapper -> stmt )),
59
+ rb_sql_state );
60
+ rb_exc_raise (e );
76
61
}
77
62
78
63
@@ -146,7 +131,7 @@ VALUE rb_mysql_stmt_new(VALUE rb_client, VALUE sql) {
146
131
args .sql_len = RSTRING_LEN (sql );
147
132
148
133
if ((VALUE )rb_thread_call_without_gvl (nogvl_prepare_statement , & args , RUBY_UBF_IO , 0 ) == Qfalse ) {
149
- rb_raise_mysql2_stmt_error (rb_stmt );
134
+ rb_raise_mysql2_stmt_error (stmt_wrapper );
150
135
}
151
136
}
152
137
@@ -335,13 +320,13 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
335
320
// copies bind_buffers into internal storage
336
321
if (mysql_stmt_bind_param (stmt , bind_buffers )) {
337
322
FREE_BINDS ;
338
- rb_raise_mysql2_stmt_error (self );
323
+ rb_raise_mysql2_stmt_error (stmt_wrapper );
339
324
}
340
325
}
341
326
342
327
if ((VALUE )rb_thread_call_without_gvl (nogvl_execute , stmt , RUBY_UBF_IO , 0 ) == Qfalse ) {
343
328
FREE_BINDS ;
344
- rb_raise_mysql2_stmt_error (self );
329
+ rb_raise_mysql2_stmt_error (stmt_wrapper );
345
330
}
346
331
347
332
FREE_BINDS ;
@@ -352,7 +337,7 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
352
337
// either CR_OUT_OF_MEMORY or CR_UNKNOWN_ERROR. both fatal.
353
338
354
339
MARK_CONN_INACTIVE (stmt_wrapper -> client );
355
- rb_raise_mysql2_stmt_error (self );
340
+ rb_raise_mysql2_stmt_error (stmt_wrapper );
356
341
}
357
342
// no data and no error, so query was not a SELECT
358
343
return Qnil ;
@@ -367,7 +352,7 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
367
352
// recieve the whole result set from the server
368
353
if (rb_thread_call_without_gvl (nogvl_stmt_store_result , stmt , RUBY_UBF_IO , 0 ) == Qfalse ) {
369
354
mysql_free_result (metadata );
370
- rb_raise_mysql2_stmt_error (self );
355
+ rb_raise_mysql2_stmt_error (stmt_wrapper );
371
356
}
372
357
MARK_CONN_INACTIVE (stmt_wrapper -> client );
373
358
}
@@ -440,8 +425,7 @@ void init_mysql2_statement() {
440
425
441
426
sym_stream = ID2SYM (rb_intern ("stream" ));
442
427
443
- intern_error_number_eql = rb_intern ("error_number=" );
444
- intern_sql_state_eql = rb_intern ("sql_state=" );
428
+ intern_new_with_args = rb_intern ("new_with_args" );
445
429
intern_each = rb_intern ("each" );
446
430
447
431
intern_usec = rb_intern ("usec" );
0 commit comments