activerecord-trilogy-adapter 2.0.0 → 2.2.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/lib/active_record/connection_adapters/trilogy_adapter.rb +46 -32
- data/lib/trilogy_adapter/connection.rb +5 -1
- data/lib/trilogy_adapter/lost_connection_exception_translator.rb +5 -3
- data/lib/trilogy_adapter/version.rb +1 -1
- metadata +9 -10
- data/lib/trilogy_adapter/rails/dbconsole.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a64e0395be9ae813e0aec59643758f1a2cc813099c290d95b5c6fbbf8c03746e
|
4
|
+
data.tar.gz: 7a1e5be7180c1f84475a40b7a48fe3b717eca0b3c4550ec2e687351049dcfa4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4e7aa7c78d2773783d578708d8267633f006db9f89eba45d58fb172e5fcb8a0bc8b0b4b70542c6cc4900ad0fd217706765db035601b0b862df1bbbf3d79c02e
|
7
|
+
data.tar.gz: f508049eb78a987e12c2e18480516b2ffced87c41a8517aaa95a3e24585b2bbb6ae181e1dd4abf8f6889155bf76e351f5912bb74c5deeeff63fce970b303b835
|
@@ -30,13 +30,6 @@ module ActiveRecord
|
|
30
30
|
MySQL::ExplainPrettyPrinter.new.pp(result, elapsed)
|
31
31
|
end
|
32
32
|
|
33
|
-
def execute(sql, name = nil, async: false)
|
34
|
-
sql = transform_query(sql)
|
35
|
-
check_if_write_query(sql)
|
36
|
-
|
37
|
-
raw_execute(sql, name, async: async)
|
38
|
-
end
|
39
|
-
|
40
33
|
def exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
|
41
34
|
result = execute(sql, name, async: async)
|
42
35
|
ActiveRecord::Result.new(result.fields, result.to_a)
|
@@ -63,30 +56,49 @@ module ActiveRecord
|
|
63
56
|
|
64
57
|
ER_BAD_DB_ERROR = 1049
|
65
58
|
ER_ACCESS_DENIED_ERROR = 1045
|
66
|
-
ER_CONN_HOST_ERROR = 2003
|
67
|
-
ER_UNKNOWN_HOST_ERROR = 2005
|
68
59
|
|
69
60
|
ADAPTER_NAME = "Trilogy"
|
70
61
|
|
71
62
|
include DatabaseStatements
|
72
63
|
|
64
|
+
SSL_MODES = {
|
65
|
+
SSL_MODE_DISABLED: Trilogy::SSL_DISABLED,
|
66
|
+
SSL_MODE_PREFERRED: Trilogy::SSL_PREFERRED_NOVERIFY,
|
67
|
+
SSL_MODE_REQUIRED: Trilogy::SSL_REQUIRED_NOVERIFY,
|
68
|
+
SSL_MODE_VERIFY_CA: Trilogy::SSL_VERIFY_CA,
|
69
|
+
SSL_MODE_VERIFY_IDENTITY: Trilogy::SSL_VERIFY_IDENTITY
|
70
|
+
}.freeze
|
71
|
+
|
73
72
|
class << self
|
74
73
|
def new_client(config)
|
74
|
+
config[:ssl_mode] = parse_ssl_mode(config[:ssl_mode]) if config[:ssl_mode]
|
75
75
|
::Trilogy.new(config)
|
76
|
-
rescue Trilogy::
|
76
|
+
rescue Trilogy::ConnectionError, Trilogy::ProtocolError => error
|
77
77
|
raise translate_connect_error(config, error)
|
78
78
|
end
|
79
79
|
|
80
|
+
def parse_ssl_mode(mode)
|
81
|
+
return mode if mode.is_a? Integer
|
82
|
+
|
83
|
+
m = mode.to_s.upcase
|
84
|
+
# enable Mysql2 client compatibility
|
85
|
+
m = "SSL_MODE_#{m}" unless m.start_with? "SSL_MODE_"
|
86
|
+
|
87
|
+
SSL_MODES.fetch(m.to_sym, mode)
|
88
|
+
end
|
89
|
+
|
80
90
|
def translate_connect_error(config, error)
|
81
91
|
case error.error_code
|
82
92
|
when ER_BAD_DB_ERROR
|
83
93
|
ActiveRecord::NoDatabaseError.db_error(config[:database])
|
84
94
|
when ER_ACCESS_DENIED_ERROR
|
85
95
|
ActiveRecord::DatabaseConnectionError.username_error(config[:username])
|
86
|
-
when ER_CONN_HOST_ERROR, ER_UNKNOWN_HOST_ERROR
|
87
|
-
ActiveRecord::DatabaseConnectionError.hostname_error(config[:host])
|
88
96
|
else
|
89
|
-
|
97
|
+
if error.message.match?(/TRILOGY_DNS_ERROR/)
|
98
|
+
ActiveRecord::DatabaseConnectionError.hostname_error(config[:host])
|
99
|
+
else
|
100
|
+
ActiveRecord::ConnectionNotEstablished.new(error.message)
|
101
|
+
end
|
90
102
|
end
|
91
103
|
end
|
92
104
|
end
|
@@ -116,7 +128,9 @@ module ActiveRecord
|
|
116
128
|
end
|
117
129
|
|
118
130
|
def quote_string(string)
|
119
|
-
|
131
|
+
with_raw_connection(allow_retry: true, uses_transaction: false) do |conn|
|
132
|
+
conn.escape(string)
|
133
|
+
end
|
120
134
|
end
|
121
135
|
|
122
136
|
def active?
|
@@ -128,6 +142,7 @@ module ActiveRecord
|
|
128
142
|
alias reset! reconnect!
|
129
143
|
|
130
144
|
def disconnect!
|
145
|
+
super
|
131
146
|
unless connection.nil?
|
132
147
|
connection.close
|
133
148
|
self.connection = nil
|
@@ -138,23 +153,6 @@ module ActiveRecord
|
|
138
153
|
self.connection = nil
|
139
154
|
end
|
140
155
|
|
141
|
-
def raw_execute(sql, name, async: false, allow_retry: false, uses_transaction: true)
|
142
|
-
mark_transaction_written_if_write(sql)
|
143
|
-
|
144
|
-
log(sql, name, async: async) do
|
145
|
-
with_raw_connection(allow_retry: allow_retry, uses_transaction: uses_transaction) do |conn|
|
146
|
-
# Sync any changes since connection last established.
|
147
|
-
if default_timezone == :local
|
148
|
-
conn.query_flags |= ::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
|
149
|
-
else
|
150
|
-
conn.query_flags &= ~::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
|
151
|
-
end
|
152
|
-
|
153
|
-
conn.query(sql)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
156
|
def each_hash(result)
|
159
157
|
return to_enum(:each_hash, result) unless block_given?
|
160
158
|
|
@@ -191,15 +189,27 @@ module ActiveRecord
|
|
191
189
|
|
192
190
|
def reconnect
|
193
191
|
connection&.close
|
192
|
+
self.connection = nil
|
194
193
|
connect
|
195
194
|
end
|
196
195
|
|
196
|
+
def sync_timezone_changes(conn)
|
197
|
+
# Sync any changes since connection last established.
|
198
|
+
if default_timezone == :local
|
199
|
+
conn.query_flags |= ::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
|
200
|
+
else
|
201
|
+
conn.query_flags &= ~::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
197
205
|
def full_version
|
198
206
|
schema_cache.database_version.full_version_string
|
199
207
|
end
|
200
208
|
|
201
209
|
def get_full_version
|
202
|
-
|
210
|
+
with_raw_connection(allow_retry: true, uses_transaction: false) do |conn|
|
211
|
+
conn.server_info[:version]
|
212
|
+
end
|
203
213
|
end
|
204
214
|
|
205
215
|
def translate_exception(exception, message:, sql:, binds:)
|
@@ -208,6 +218,10 @@ module ActiveRecord
|
|
208
218
|
::TrilogyAdapter::LostConnectionExceptionTranslator.
|
209
219
|
new(exception, message, error_code).translate || super
|
210
220
|
end
|
221
|
+
|
222
|
+
def default_prepared_statements
|
223
|
+
false
|
224
|
+
end
|
211
225
|
end
|
212
226
|
end
|
213
227
|
end
|
@@ -14,6 +14,10 @@ module TrilogyAdapter
|
|
14
14
|
# host: "localhost",
|
15
15
|
# database: "demo_development"
|
16
16
|
module Connection
|
17
|
+
def trilogy_adapter_class
|
18
|
+
ActiveRecord::ConnectionAdapters::TrilogyAdapter
|
19
|
+
end
|
20
|
+
|
17
21
|
def trilogy_connection(config)
|
18
22
|
configuration = config.dup
|
19
23
|
|
@@ -31,7 +35,7 @@ module TrilogyAdapter
|
|
31
35
|
0
|
32
36
|
]
|
33
37
|
|
34
|
-
|
38
|
+
trilogy_adapter_class.new nil, logger, options, configuration
|
35
39
|
end
|
36
40
|
end
|
37
41
|
end
|
@@ -35,10 +35,12 @@ module TrilogyAdapter
|
|
35
35
|
case exception
|
36
36
|
when Errno::EPIPE
|
37
37
|
Errors::BrokenPipe.new(message)
|
38
|
-
when SocketError
|
38
|
+
when SocketError, IOError
|
39
39
|
Errors::SocketError.new(message)
|
40
|
-
when
|
41
|
-
|
40
|
+
when Trilogy::ConnectionError
|
41
|
+
if message.match?(/Connection reset by peer/)
|
42
|
+
Errors::ConnectionResetByPeer.new(message)
|
43
|
+
end
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-trilogy-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.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:
|
11
|
+
date: 2023-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trilogy
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 7.1.
|
33
|
+
version: 7.1.a
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 7.1.
|
40
|
+
version: 7.1.a
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,7 +111,6 @@ files:
|
|
111
111
|
- lib/trilogy_adapter/connection.rb
|
112
112
|
- lib/trilogy_adapter/errors.rb
|
113
113
|
- lib/trilogy_adapter/lost_connection_exception_translator.rb
|
114
|
-
- lib/trilogy_adapter/rails/dbconsole.rb
|
115
114
|
- lib/trilogy_adapter/railtie.rb
|
116
115
|
- lib/trilogy_adapter/version.rb
|
117
116
|
homepage: https://github.com/github/activerecord-trilogy-adapter
|
@@ -136,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
135
|
- !ruby/object:Gem::Version
|
137
136
|
version: '0'
|
138
137
|
requirements: []
|
139
|
-
rubygems_version: 3.
|
138
|
+
rubygems_version: 3.2.33
|
140
139
|
signing_key:
|
141
140
|
specification_version: 4
|
142
141
|
summary: Active Record adapter for https://github.com/github/trilogy.
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TrilogyAdapter
|
4
|
-
module Rails
|
5
|
-
module DBConsole
|
6
|
-
class AdapterAdapter < SimpleDelegator
|
7
|
-
def adapter
|
8
|
-
"mysql"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def db_config
|
13
|
-
if super.adapter == "trilogy"
|
14
|
-
AdapterAdapter.new(super)
|
15
|
-
else
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|