activerecord-tidb-adapter 0.5.0 → 5.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/Gemfile +5 -1
- data/Gemfile.lock +60 -75
- data/activerecord-tidb-adapter.gemspec +1 -1
- data/lib/active_record/connection_adapters/tidb_adapter.rb +31 -18
- data/lib/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: acd66282a9f0c498709a9258ca7337267c9cbd3770ce8a5d55d38be1607d4466
|
|
4
|
+
data.tar.gz: 8a73bc0cb0b685fa49e8247fd9d325e8800a95c6157b12c8eaa089bc85d47277
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9a478110b32ee9acaeaa7570a207f5721fa91cce9547f1c83bc89ab52e7b59f8401b3ccde38b4c224e8918d16fc2d1e376dca52a0bac316c77be8011161169a8
|
|
7
|
+
data.tar.gz: d9a0cdc919c9e09df981b779aa5b60b63fa927fcb93420d8629c671d96562b3f45c8a6280187813caefb5f3b39dd980d66584fbddc6d35bc7d80c11b7e96722d
|
data/Gemfile
CHANGED
|
@@ -14,10 +14,14 @@ gem 'pry'
|
|
|
14
14
|
|
|
15
15
|
gem 'rubocop', '~> 1.18'
|
|
16
16
|
|
|
17
|
-
gem 'rails', git: 'https://github.com/
|
|
17
|
+
gem 'rails', git: 'https://github.com/pingcap/rails.git', branch: '5-2-stable'
|
|
18
18
|
|
|
19
19
|
gem 'byebug', '~> 11.1'
|
|
20
20
|
|
|
21
21
|
gem 'sqlite3', '~> 1.4'
|
|
22
22
|
|
|
23
23
|
gem 'pg', '~> 1.2'
|
|
24
|
+
|
|
25
|
+
gem "mocha", "~> 1.13"
|
|
26
|
+
|
|
27
|
+
gem "bcrypt", "~> 3.1"
|
data/Gemfile.lock
CHANGED
|
@@ -1,100 +1,82 @@
|
|
|
1
1
|
GIT
|
|
2
|
-
remote: https://github.com/
|
|
3
|
-
revision:
|
|
4
|
-
branch:
|
|
2
|
+
remote: https://github.com/pingcap/rails.git
|
|
3
|
+
revision: 7a3fbc5e103be80107fabc9e626cfc32e10e6e1c
|
|
4
|
+
branch: 5-2-stable
|
|
5
5
|
specs:
|
|
6
|
-
actioncable (
|
|
7
|
-
actionpack (=
|
|
8
|
-
activesupport (= 6.1.4)
|
|
6
|
+
actioncable (5.2.6)
|
|
7
|
+
actionpack (= 5.2.6)
|
|
9
8
|
nio4r (~> 2.0)
|
|
10
9
|
websocket-driver (>= 0.6.1)
|
|
11
|
-
|
|
12
|
-
actionpack (=
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
activestorage (= 6.1.4)
|
|
16
|
-
activesupport (= 6.1.4)
|
|
17
|
-
mail (>= 2.7.1)
|
|
18
|
-
actionmailer (6.1.4)
|
|
19
|
-
actionpack (= 6.1.4)
|
|
20
|
-
actionview (= 6.1.4)
|
|
21
|
-
activejob (= 6.1.4)
|
|
22
|
-
activesupport (= 6.1.4)
|
|
10
|
+
actionmailer (5.2.6)
|
|
11
|
+
actionpack (= 5.2.6)
|
|
12
|
+
actionview (= 5.2.6)
|
|
13
|
+
activejob (= 5.2.6)
|
|
23
14
|
mail (~> 2.5, >= 2.5.4)
|
|
24
15
|
rails-dom-testing (~> 2.0)
|
|
25
|
-
actionpack (
|
|
26
|
-
actionview (=
|
|
27
|
-
activesupport (=
|
|
28
|
-
rack (~> 2.0, >= 2.0.
|
|
16
|
+
actionpack (5.2.6)
|
|
17
|
+
actionview (= 5.2.6)
|
|
18
|
+
activesupport (= 5.2.6)
|
|
19
|
+
rack (~> 2.0, >= 2.0.8)
|
|
29
20
|
rack-test (>= 0.6.3)
|
|
30
21
|
rails-dom-testing (~> 2.0)
|
|
31
|
-
rails-html-sanitizer (~> 1.0, >= 1.2
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
activerecord (= 6.1.4)
|
|
35
|
-
activestorage (= 6.1.4)
|
|
36
|
-
activesupport (= 6.1.4)
|
|
37
|
-
nokogiri (>= 1.8.5)
|
|
38
|
-
actionview (6.1.4)
|
|
39
|
-
activesupport (= 6.1.4)
|
|
22
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
23
|
+
actionview (5.2.6)
|
|
24
|
+
activesupport (= 5.2.6)
|
|
40
25
|
builder (~> 3.1)
|
|
41
26
|
erubi (~> 1.4)
|
|
42
27
|
rails-dom-testing (~> 2.0)
|
|
43
|
-
rails-html-sanitizer (~> 1.
|
|
44
|
-
activejob (
|
|
45
|
-
activesupport (=
|
|
28
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
29
|
+
activejob (5.2.6)
|
|
30
|
+
activesupport (= 5.2.6)
|
|
46
31
|
globalid (>= 0.3.6)
|
|
47
|
-
activemodel (
|
|
48
|
-
activesupport (=
|
|
49
|
-
activerecord (
|
|
50
|
-
activemodel (=
|
|
51
|
-
activesupport (=
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
activerecord (=
|
|
56
|
-
activesupport (= 6.1.4)
|
|
32
|
+
activemodel (5.2.6)
|
|
33
|
+
activesupport (= 5.2.6)
|
|
34
|
+
activerecord (5.2.6)
|
|
35
|
+
activemodel (= 5.2.6)
|
|
36
|
+
activesupport (= 5.2.6)
|
|
37
|
+
arel (>= 9.0)
|
|
38
|
+
activestorage (5.2.6)
|
|
39
|
+
actionpack (= 5.2.6)
|
|
40
|
+
activerecord (= 5.2.6)
|
|
57
41
|
marcel (~> 1.0.0)
|
|
58
|
-
|
|
59
|
-
activesupport (6.1.4)
|
|
42
|
+
activesupport (5.2.6)
|
|
60
43
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
61
|
-
i18n (>=
|
|
62
|
-
minitest (
|
|
63
|
-
tzinfo (~>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
activesupport (= 6.1.4)
|
|
77
|
-
bundler (>= 1.15.0)
|
|
78
|
-
railties (= 6.1.4)
|
|
44
|
+
i18n (>= 0.7, < 2)
|
|
45
|
+
minitest (~> 5.1)
|
|
46
|
+
tzinfo (~> 1.1)
|
|
47
|
+
rails (5.2.6)
|
|
48
|
+
actioncable (= 5.2.6)
|
|
49
|
+
actionmailer (= 5.2.6)
|
|
50
|
+
actionpack (= 5.2.6)
|
|
51
|
+
actionview (= 5.2.6)
|
|
52
|
+
activejob (= 5.2.6)
|
|
53
|
+
activemodel (= 5.2.6)
|
|
54
|
+
activerecord (= 5.2.6)
|
|
55
|
+
activestorage (= 5.2.6)
|
|
56
|
+
activesupport (= 5.2.6)
|
|
57
|
+
bundler (>= 1.3.0)
|
|
58
|
+
railties (= 5.2.6)
|
|
79
59
|
sprockets-rails (>= 2.0.0)
|
|
80
|
-
railties (
|
|
81
|
-
actionpack (=
|
|
82
|
-
activesupport (=
|
|
60
|
+
railties (5.2.6)
|
|
61
|
+
actionpack (= 5.2.6)
|
|
62
|
+
activesupport (= 5.2.6)
|
|
83
63
|
method_source
|
|
84
|
-
rake (>= 0.
|
|
85
|
-
thor (
|
|
64
|
+
rake (>= 0.8.7)
|
|
65
|
+
thor (>= 0.19.0, < 2.0)
|
|
86
66
|
|
|
87
67
|
PATH
|
|
88
68
|
remote: .
|
|
89
69
|
specs:
|
|
90
|
-
activerecord-tidb-adapter (
|
|
91
|
-
activerecord (~>
|
|
70
|
+
activerecord-tidb-adapter (5.2.0)
|
|
71
|
+
activerecord (~> 5.2)
|
|
92
72
|
mysql2
|
|
93
73
|
|
|
94
74
|
GEM
|
|
95
75
|
remote: https://rubygems.org/
|
|
96
76
|
specs:
|
|
77
|
+
arel (9.0.0)
|
|
97
78
|
ast (2.4.2)
|
|
79
|
+
bcrypt (3.1.16)
|
|
98
80
|
builder (3.2.4)
|
|
99
81
|
byebug (11.1.3)
|
|
100
82
|
coderay (1.1.3)
|
|
@@ -116,6 +98,7 @@ GEM
|
|
|
116
98
|
minitest (5.14.4)
|
|
117
99
|
minitest-excludes (2.0.1)
|
|
118
100
|
minitest (~> 5.0)
|
|
101
|
+
mocha (1.13.0)
|
|
119
102
|
mysql2 (0.5.3)
|
|
120
103
|
nio4r (2.5.8)
|
|
121
104
|
nokogiri (1.12.3-x86_64-darwin)
|
|
@@ -136,7 +119,7 @@ GEM
|
|
|
136
119
|
rails-dom-testing (2.0.3)
|
|
137
120
|
activesupport (>= 4.2.0)
|
|
138
121
|
nokogiri (>= 1.6)
|
|
139
|
-
rails-html-sanitizer (1.
|
|
122
|
+
rails-html-sanitizer (1.4.1)
|
|
140
123
|
loofah (~> 2.3)
|
|
141
124
|
rainbow (3.0.0)
|
|
142
125
|
rake (13.0.6)
|
|
@@ -163,13 +146,13 @@ GEM
|
|
|
163
146
|
sprockets (>= 3.0.0)
|
|
164
147
|
sqlite3 (1.4.2)
|
|
165
148
|
thor (1.1.0)
|
|
166
|
-
|
|
167
|
-
|
|
149
|
+
thread_safe (0.3.6)
|
|
150
|
+
tzinfo (1.2.9)
|
|
151
|
+
thread_safe (~> 0.1)
|
|
168
152
|
unicode-display_width (2.0.0)
|
|
169
153
|
websocket-driver (0.7.5)
|
|
170
154
|
websocket-extensions (>= 0.1.0)
|
|
171
155
|
websocket-extensions (0.1.5)
|
|
172
|
-
zeitwerk (2.4.2)
|
|
173
156
|
|
|
174
157
|
PLATFORMS
|
|
175
158
|
x86_64-darwin-18
|
|
@@ -177,9 +160,11 @@ PLATFORMS
|
|
|
177
160
|
|
|
178
161
|
DEPENDENCIES
|
|
179
162
|
activerecord-tidb-adapter!
|
|
163
|
+
bcrypt (~> 3.1)
|
|
180
164
|
byebug (~> 11.1)
|
|
181
165
|
minitest (~> 5.0)
|
|
182
166
|
minitest-excludes (~> 2.0)
|
|
167
|
+
mocha (~> 1.13)
|
|
183
168
|
pg (~> 1.2)
|
|
184
169
|
pry
|
|
185
170
|
rails!
|
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
30
30
|
spec.require_paths = ['lib']
|
|
31
31
|
|
|
32
|
-
spec.add_dependency 'activerecord', '~>
|
|
32
|
+
spec.add_dependency 'activerecord', '~> 5.2'
|
|
33
33
|
spec.add_dependency 'mysql2'
|
|
34
34
|
|
|
35
35
|
# Uncomment to register a new dependency of your gem
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'active_record/connection_adapters'
|
|
4
3
|
require 'active_record/connection_adapters/mysql2_adapter'
|
|
5
4
|
require 'active_record/connection_adapters/tidb/setup'
|
|
6
5
|
require_relative '../../version'
|
|
@@ -30,7 +29,28 @@ module ActiveRecord
|
|
|
30
29
|
end
|
|
31
30
|
end
|
|
32
31
|
|
|
32
|
+
|
|
33
|
+
|
|
33
34
|
module ConnectionAdapters
|
|
35
|
+
class Mysql2Adapter < AbstractMysqlAdapter
|
|
36
|
+
ER_BAD_DB_ERROR = 1049
|
|
37
|
+
ADAPTER_NAME = "Mysql2"
|
|
38
|
+
|
|
39
|
+
include MySQL::DatabaseStatements
|
|
40
|
+
|
|
41
|
+
class << self
|
|
42
|
+
def new_client(config)
|
|
43
|
+
Mysql2::Client.new(config)
|
|
44
|
+
rescue Mysql2::Error => error
|
|
45
|
+
if error.error_number == ConnectionAdapters::Mysql2Adapter::ER_BAD_DB_ERROR
|
|
46
|
+
raise ActiveRecord::NoDatabaseError
|
|
47
|
+
else
|
|
48
|
+
raise ActiveRecord::ConnectionNotEstablished, error.message
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
34
54
|
class TidbAdapter < Mysql2Adapter
|
|
35
55
|
include ActiveRecord::Sequence::Adapter
|
|
36
56
|
ADAPTER_NAME = 'Tidb'
|
|
@@ -105,42 +125,35 @@ module ActiveRecord
|
|
|
105
125
|
value = exec_insert(sql, name, binds, pk, sequence_name)
|
|
106
126
|
return id_value if id_value.present?
|
|
107
127
|
|
|
108
|
-
|
|
109
|
-
pk_def = schema_cache.columns_hash(
|
|
128
|
+
table_name = arel.ast.relation.table_name
|
|
129
|
+
pk_def = schema_cache.columns_hash(table_name)[pk]
|
|
110
130
|
if pk_def&.default_function && pk_def.default_function =~ /nextval/
|
|
111
131
|
query_value("SELECT #{pk_def.default_function.sub('nextval', 'lastval')}")
|
|
112
|
-
elsif model.sequence_name
|
|
113
|
-
ActiveRecord::Base.lastval(model.sequence_name)
|
|
114
132
|
else
|
|
115
133
|
last_inserted_id(value)
|
|
116
134
|
end
|
|
117
135
|
end
|
|
118
136
|
alias create insert
|
|
119
137
|
|
|
120
|
-
def new_column_from_field(
|
|
138
|
+
def new_column_from_field(table_name, field)
|
|
121
139
|
type_metadata = fetch_type_metadata(field[:Type], field[:Extra])
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/i.match?(default)
|
|
126
|
-
default_function = default
|
|
127
|
-
default = nil
|
|
128
|
-
elsif type_metadata.extra == 'DEFAULT_GENERATED'
|
|
129
|
-
default = +"(#{default})" unless default.start_with?('(')
|
|
130
|
-
default_function = default
|
|
131
|
-
default = nil
|
|
140
|
+
if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/i.match?(field[:Default])
|
|
141
|
+
default, default_function = nil, field[:Default]
|
|
132
142
|
elsif default.to_s =~ /nextval/i
|
|
133
143
|
default_function = default
|
|
134
144
|
default = nil
|
|
145
|
+
else
|
|
146
|
+
default, default_function = field[:Default], nil
|
|
135
147
|
end
|
|
136
148
|
|
|
137
149
|
MySQL::Column.new(
|
|
138
150
|
field[:Field],
|
|
139
151
|
default,
|
|
140
152
|
type_metadata,
|
|
141
|
-
field[:Null] ==
|
|
153
|
+
field[:Null] == "YES",
|
|
154
|
+
table_name,
|
|
142
155
|
default_function,
|
|
143
|
-
|
|
156
|
+
field[:Collation],
|
|
144
157
|
comment: field[:Comment].presence
|
|
145
158
|
)
|
|
146
159
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activerecord-tidb-adapter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hooopo Wang
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-08-
|
|
11
|
+
date: 2021-08-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '5.2'
|
|
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: '
|
|
26
|
+
version: '5.2'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: mysql2
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|