@@ -8,13 +8,47 @@ class Error < StandardError
88 replace : '?' . freeze ,
99 } . freeze
1010
11- BaseConnectionError = Class . new ( Error )
11+ ConnectionError = Class . new ( Error )
12+ TimeoutError = Class . new ( Error )
1213
1314 CODES = {
14- 1045 => AccessDenied = Class . new ( BaseConnectionError ) ,
15- 2005 => UnknownHost = Class . new ( BaseConnectionError ) ,
15+ 1205 => TimeoutError , # ER_LOCK_WAIT_TIMEOUT
1616 }
1717
18+ [
19+ 1044 , # ER_DBACCESS_DENIED_ERROR
20+ 1045 , # ER_ACCESS_DENIED_ERROR
21+ 1152 , # ER_ABORTING_CONNECTION
22+ 1153 , # ER_NET_PACKET_TOO_LARGE
23+ 1154 , # ER_NET_READ_ERROR_FROM_PIPE
24+ 1155 , # ER_NET_FCNTL_ERROR
25+ 1156 , # ER_NET_PACKETS_OUT_OF_ORDER
26+ 1157 , # ER_NET_UNCOMPRESS_ERROR
27+ 1158 , # ER_NET_READ_ERROR
28+ 1159 , # ER_NET_READ_INTERRUPTED
29+ 1160 , # ER_NET_ERROR_ON_WRITE
30+ 1161 , # ER_NET_WRITE_INTERRUPTED
31+
32+ 2001 , # CR_SOCKET_CREATE_ERROR
33+ 2002 , # CR_CONNECTION_ERROR
34+ 2003 , # CR_CONN_HOST_ERROR
35+ 2004 , # CR_IPSOCK_ERROR
36+ 2005 , # CR_UNKNOWN_HOST
37+ 2006 , # CR_SERVER_GONE_ERROR
38+ 2007 , # CR_VERSION_ERROR
39+ 2009 , # CR_WRONG_HOST_INFO
40+ 2012 , # CR_SERVER_HANDSHAKE_ERR
41+ 2013 , # CR_SERVER_LOST
42+ 2020 , # CR_NET_PACKET_TOO_LARGE
43+ 2026 , # CR_SSL_CONNECTION_ERROR
44+ 2027 , # CR_MALFORMED_PACKET
45+ 2047 , # CR_CONN_UNKNOW_PROTOCOL
46+ 2048 , # CR_INVALID_CONN_HANDLE
47+ 2049 , # CR_UNUSED_1
48+ ] . each { |c | CODES [ c ] = ConnectionError }
49+
50+ CODES . freeze
51+
1852 attr_reader :error_number , :sql_state
1953
2054 # Mysql gem compatibility
@@ -24,7 +58,7 @@ class Error < StandardError
2458 def initialize ( msg , server_version = nil , error_number = nil , sql_state = nil )
2559 @server_version = server_version
2660 @error_number = error_number
27- @sql_state = sql_state . encode ( ENCODE_OPTS )
61+ @sql_state = sql_state ? sql_state . encode ( ENCODE_OPTS ) : nil
2862
2963 super ( clean_message ( msg ) )
3064 end
0 commit comments