trilogy 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/trilogy-ruby/cext.c +9 -2
- data/ext/trilogy-ruby/src/socket.c +8 -0
- data/lib/trilogy/error.rb +7 -1
- data/lib/trilogy/version.rb +1 -1
- data/lib/trilogy.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a56e3472569e26552e3c8d7a674b70d9f5e15a546187f75e806f4d56ff5f15b2
|
4
|
+
data.tar.gz: a2c29dc1fcf378be7a26088661401d9d4e7d4253c6823f8e7e84414662947cb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f3348ccdf12ae3cef0c34f95e09829528a0bdb09b466774a1a8369fdeae6f4d1fb59df96b1d17e5361aea4656968b5e2149ffbf9fe8337b17d45f0903408122
|
7
|
+
data.tar.gz: 33711de128dd47aeff4ab618d0c3b6032e966b1b52b7dad6352e1588f5d13e54df2d4709c97c006ec63d1fa603a1f190abd58784cea835d26be6c1f56da5b46c
|
data/ext/trilogy-ruby/cext.c
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
VALUE Trilogy_CastError;
|
19
19
|
static VALUE Trilogy_BaseConnectionError, Trilogy_ProtocolError, Trilogy_SSLError, Trilogy_QueryError,
|
20
20
|
Trilogy_ConnectionClosedError, Trilogy_ConnectionRefusedError, Trilogy_ConnectionResetError,
|
21
|
-
Trilogy_TimeoutError, Trilogy_SyscallError, Trilogy_Result;
|
21
|
+
Trilogy_TimeoutError, Trilogy_SyscallError, Trilogy_Result, Trilogy_EOFError;
|
22
22
|
|
23
23
|
static ID id_socket, id_host, id_port, id_username, id_password, id_found_rows, id_connect_timeout, id_read_timeout,
|
24
24
|
id_write_timeout, id_keepalive_enabled, id_keepalive_idle, id_keepalive_interval, id_keepalive_count,
|
@@ -96,7 +96,7 @@ static void trilogy_syserr_fail_str(int e, VALUE msg)
|
|
96
96
|
rb_raise(Trilogy_ConnectionResetError, "%" PRIsVALUE, msg);
|
97
97
|
} else if (e == EPIPE) {
|
98
98
|
// Backwards compatibility: This error class makes no sense, but matches legacy behavior
|
99
|
-
rb_raise(
|
99
|
+
rb_raise(Trilogy_EOFError, "%" PRIsVALUE ": TRILOGY_CLOSED_CONNECTION: EPIPE", msg);
|
100
100
|
} else {
|
101
101
|
VALUE exc = rb_funcall(Trilogy_SyscallError, id_from_errno, 2, INT2NUM(e), msg);
|
102
102
|
rb_exc_raise(exc);
|
@@ -158,6 +158,10 @@ static void handle_trilogy_error(struct trilogy_ctx *ctx, int rc, const char *ms
|
|
158
158
|
rb_raise(Trilogy_BaseConnectionError, "%" PRIsVALUE ": TRILOGY_DNS_ERROR", rbmsg);
|
159
159
|
}
|
160
160
|
|
161
|
+
case TRILOGY_CLOSED_CONNECTION: {
|
162
|
+
rb_raise(Trilogy_EOFError, "%" PRIsVALUE ": TRILOGY_CLOSED_CONNECTION", rbmsg);
|
163
|
+
}
|
164
|
+
|
161
165
|
default:
|
162
166
|
rb_raise(Trilogy_QueryError, "%" PRIsVALUE ": %s", rbmsg, trilogy_error(rc));
|
163
167
|
}
|
@@ -1176,6 +1180,9 @@ RUBY_FUNC_EXPORTED void Init_cext()
|
|
1176
1180
|
Trilogy_CastError = rb_const_get(Trilogy, rb_intern("CastError"));
|
1177
1181
|
rb_global_variable(&Trilogy_CastError);
|
1178
1182
|
|
1183
|
+
Trilogy_EOFError = rb_const_get(Trilogy, rb_intern("EOFError"));
|
1184
|
+
rb_global_variable(&Trilogy_EOFError);
|
1185
|
+
|
1179
1186
|
id_socket = rb_intern("socket");
|
1180
1187
|
id_host = rb_intern("host");
|
1181
1188
|
id_port = rb_intern("port");
|
@@ -195,6 +195,14 @@ static int raw_connect_internal(struct trilogy_sock *sock, const struct addrinfo
|
|
195
195
|
return TRILOGY_SYSERR;
|
196
196
|
}
|
197
197
|
|
198
|
+
#ifdef TCP_NODELAY
|
199
|
+
if (sock->addr->ai_family != PF_UNIX) {
|
200
|
+
int flags = 1;
|
201
|
+
if (setsockopt(sock->fd, IPPROTO_TCP, TCP_NODELAY, (void *)&flags, sizeof(flags)) < 0) {
|
202
|
+
goto fail;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
#endif
|
198
206
|
if (sock->base.opts.keepalive_enabled) {
|
199
207
|
int flags = 1;
|
200
208
|
if (setsockopt(sock->fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&flags, sizeof(flags)) < 0) {
|
data/lib/trilogy/error.rb
CHANGED
@@ -20,7 +20,7 @@ class Trilogy
|
|
20
20
|
.select { |c| c.is_a?(Class) && c < SystemCallError }
|
21
21
|
.each do |c|
|
22
22
|
errno_name = c.to_s.split('::').last
|
23
|
-
ERRORS[c::Errno] = const_set(errno_name, Class.new(c) { include Trilogy::
|
23
|
+
ERRORS[c::Errno] = const_set(errno_name, Class.new(c) { include Trilogy::ConnectionError })
|
24
24
|
end
|
25
25
|
|
26
26
|
ERRORS.freeze
|
@@ -112,7 +112,13 @@ class Trilogy
|
|
112
112
|
include ConnectionError
|
113
113
|
end
|
114
114
|
|
115
|
+
# Raised on attempt to use connection which was explicitly closed by the user
|
115
116
|
class ConnectionClosed < IOError
|
116
117
|
include ConnectionError
|
117
118
|
end
|
119
|
+
|
120
|
+
# Occurrs when a socket read or write returns EOF or when an operation is
|
121
|
+
# attempted on a socket which previously encountered an error.
|
122
|
+
class EOFError < BaseConnectionError
|
123
|
+
end
|
118
124
|
end
|
data/lib/trilogy/version.rb
CHANGED
data/lib/trilogy.rb
CHANGED
@@ -8,7 +8,7 @@ require "trilogy/encoding"
|
|
8
8
|
|
9
9
|
class Trilogy
|
10
10
|
def initialize(options = {})
|
11
|
-
options[:port] = options[:port].to_i if options
|
11
|
+
options[:port] = options[:port].to_i if options[:port]
|
12
12
|
mysql_encoding = options[:encoding] || "utf8mb4"
|
13
13
|
encoding = Trilogy::Encoding.find(mysql_encoding)
|
14
14
|
charset = Trilogy::Encoding.charset(mysql_encoding)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trilogy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
rubygems_version: 3.4.
|
105
|
+
rubygems_version: 3.4.10
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: A friendly MySQL-compatible library for Ruby, binding to libtrilogy
|