Skip to content

Commit 576d6df

Browse files
committed
Move all args to Mysql2::Error to a separate method
1 parent 1ca2baa commit 576d6df

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

ext/mysql2/client.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
VALUE cMysql2Client;
1818
extern VALUE mMysql2, cMysql2Error;
1919
static VALUE sym_id, sym_version, sym_async, sym_symbolize_keys, sym_as, sym_array, sym_stream;
20-
static ID intern_merge, intern_merge_bang, intern_error_number_eql, intern_sql_state_eql;
20+
static ID intern_merge, intern_merge_bang, intern_new, intern_new_with_args;
2121

2222
#ifndef HAVE_RB_HASH_DUP
2323
static VALUE rb_hash_dup(VALUE other) {
@@ -136,7 +136,7 @@ static VALUE rb_raise_mysql2_error(mysql_client_wrapper *wrapper) {
136136
rb_enc_associate(rb_sql_state, rb_usascii_encoding());
137137
#endif
138138

139-
e = rb_funcall(cMysql2Error, rb_intern("new"), 4,
139+
e = rb_funcall(cMysql2Error, intern_new_with_args, 4,
140140
rb_error_msg,
141141
LONG2FIX(wrapper->server_version),
142142
UINT2NUM(mysql_errno(wrapper->client)),
@@ -1297,10 +1297,10 @@ void init_mysql2_client() {
12971297
sym_array = ID2SYM(rb_intern("array"));
12981298
sym_stream = ID2SYM(rb_intern("stream"));
12991299

1300-
intern_merge = rb_intern("merge");
1301-
intern_merge_bang = rb_intern("merge!");
1302-
intern_error_number_eql = rb_intern("error_number=");
1303-
intern_sql_state_eql = rb_intern("sql_state=");
1300+
intern_merge = rb_intern("merge");
1301+
intern_merge_bang = rb_intern("merge!");
1302+
intern_new = rb_intern("new");
1303+
intern_new_with_args = rb_intern("new_with_args");
13041304

13051305
#ifdef CLIENT_LONG_PASSWORD
13061306
rb_const_set(cMysql2Client, rb_intern("LONG_PASSWORD"),

lib/mysql2/error.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,21 @@ class Error < StandardError
1111
alias_method :errno, :error_number
1212
alias_method :error, :message
1313

14-
def initialize(msg, server_version=nil, error_number=nil, sql_state=nil)
15-
@server_version = server_version
16-
@error_number = error_number
17-
@sql_state = sql_state.respond_to?(:encode) ? sql_state.encode(ENCODE_OPTS) : sql_state
18-
14+
def initialize(msg)
1915
super(clean_message(msg))
2016
end
2117

18+
def self.new_with_args(msg, server_version, error_number, sql_state)
19+
err = allocate
20+
err.instance_variable_set('@server_version', server_version)
21+
err.instance_variable_set('@error_number', error_number)
22+
err.instance_variable_set('@sql_state', sql_state.respond_to?(:encode) ?
23+
sql_state.encode(ENCODE_OPTS) :
24+
sql_state)
25+
err.send(:initialize, msg)
26+
err
27+
end
28+
2229
private
2330

2431
# In MySQL 5.5+ error messages are always constructed server-side as UTF-8

0 commit comments

Comments
 (0)