Skip to content

Commit 1d4de89

Browse files
committed
Move all args to Mysql2::Error to a separate method
1 parent f9eba44 commit 1d4de89

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

ext/mysql2/client.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
VALUE cMysql2Client;
1818
extern VALUE mMysql2, cMysql2Error;
1919
static VALUE sym_id, sym_version, sym_header_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;
21-
static ID intern_brackets, intern_new;
20+
static ID intern_brackets, intern_new, intern_merge, intern_merge_bang, intern_new_with_args;
2221

2322
#ifndef HAVE_RB_HASH_DUP
2423
VALUE rb_hash_dup(VALUE other) {
@@ -124,7 +123,7 @@ static VALUE rb_raise_mysql2_error(mysql_client_wrapper *wrapper) {
124123
rb_enc_associate(rb_sql_state, rb_usascii_encoding());
125124
#endif
126125

127-
e = rb_funcall(cMysql2Error, intern_new, 4,
126+
e = rb_funcall(cMysql2Error, intern_new_with_args, 4,
128127
rb_error_msg,
129128
LONG2FIX(wrapper->server_version),
130129
UINT2NUM(mysql_errno(wrapper->client)),
@@ -1303,8 +1302,7 @@ void init_mysql2_client() {
13031302
intern_new = rb_intern("new");
13041303
intern_merge = rb_intern("merge");
13051304
intern_merge_bang = rb_intern("merge!");
1306-
intern_error_number_eql = rb_intern("error_number=");
1307-
intern_sql_state_eql = rb_intern("sql_state=");
1305+
intern_new_with_args = rb_intern("new_with_args");
13081306

13091307
#ifdef CLIENT_LONG_PASSWORD
13101308
rb_const_set(cMysql2Client, rb_intern("LONG_PASSWORD"),

lib/mysql2/error.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,26 @@ class Error < StandardError
99
}.freeze
1010

1111
attr_reader :error_number, :sql_state
12-
attr_writer :server_version
1312

1413
# Mysql gem compatibility
1514
alias_method :errno, :error_number
1615
alias_method :error, :message
1716

18-
def initialize(msg, server_version=nil, error_number=nil, sql_state=nil)
19-
self.server_version = server_version
20-
self.error_number = error_number
21-
self.sql_state = sql_state.respond_to?(:encode) ? sql_state.encode(ENCODE_OPTS) : sql_state
17+
def initialize(msg)
18+
@server_version ||= nil
2219

2320
super(clean_message(msg))
2421
end
2522

23+
def self.new_with_args(msg, server_version, error_number, sql_state)
24+
err = allocate
25+
err.instance_variable_set('@server_version', server_version)
26+
err.instance_variable_set('@error_number', error_number)
27+
err.instance_variable_set('@sql_state', sql_state.respond_to?(:encode) ? sql_state.encode(ENCODE_OPTS) : sql_state)
28+
err.send(:initialize, msg)
29+
err
30+
end
31+
2632
private
2733

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

0 commit comments

Comments
 (0)