activerecord-jdbc-alt-adapter 70.2.0-java → 71.0.0.alpha2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +141 -24
  3. data/.github/workflows/ruby.yml +12 -12
  4. data/.gitignore +7 -3
  5. data/.solargraph.yml +15 -0
  6. data/Gemfile +17 -4
  7. data/README.md +7 -3
  8. data/RUNNING_TESTS.md +36 -0
  9. data/activerecord-jdbc-adapter.gemspec +2 -2
  10. data/activerecord-jdbc-alt-adapter.gemspec +1 -1
  11. data/lib/arjdbc/abstract/connection_management.rb +26 -10
  12. data/lib/arjdbc/abstract/core.rb +5 -12
  13. data/lib/arjdbc/abstract/database_statements.rb +35 -25
  14. data/lib/arjdbc/abstract/statement_cache.rb +2 -7
  15. data/lib/arjdbc/abstract/transaction_support.rb +37 -22
  16. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  17. data/lib/arjdbc/jdbc/column.rb +0 -34
  18. data/lib/arjdbc/jdbc/connection_methods.rb +1 -1
  19. data/lib/arjdbc/mssql/adapter.rb +101 -79
  20. data/lib/arjdbc/mssql/column.rb +1 -0
  21. data/lib/arjdbc/mssql/connection_methods.rb +7 -55
  22. data/lib/arjdbc/mssql/database_statements.rb +182 -71
  23. data/lib/arjdbc/mssql/explain_support.rb +8 -5
  24. data/lib/arjdbc/mssql/schema_creation.rb +1 -1
  25. data/lib/arjdbc/mssql/schema_definitions.rb +10 -0
  26. data/lib/arjdbc/mssql/schema_statements.rb +25 -14
  27. data/lib/arjdbc/mssql/server_version.rb +56 -0
  28. data/lib/arjdbc/mssql/utils.rb +23 -9
  29. data/lib/arjdbc/mysql/adapter.rb +104 -27
  30. data/lib/arjdbc/postgresql/adapter.rb +71 -44
  31. data/lib/arjdbc/postgresql/oid_types.rb +8 -27
  32. data/lib/arjdbc/postgresql/schema_statements.rb +57 -0
  33. data/lib/arjdbc/sqlite3/adapter.rb +205 -147
  34. data/lib/arjdbc/sqlite3/column.rb +103 -0
  35. data/lib/arjdbc/sqlite3/connection_methods.rb +7 -2
  36. data/lib/arjdbc/tasks/mssql_database_tasks.rb +9 -5
  37. data/lib/arjdbc/version.rb +1 -1
  38. data/rakelib/02-test.rake +1 -1
  39. data/rakelib/rails.rake +2 -0
  40. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +3 -1
  41. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +11 -0
  42. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +2 -1
  43. metadata +10 -12
  44. data/lib/arel/visitors/sql_server/ng42.rb +0 -294
  45. data/lib/arel/visitors/sql_server.rb +0 -124
  46. data/lib/arjdbc/mssql/limit_helpers.rb +0 -231
  47. data/lib/arjdbc/mssql/lock_methods.rb +0 -77
  48. data/lib/arjdbc/mssql/old_adapter.rb +0 -804
  49. data/lib/arjdbc/mssql/old_column.rb +0 -200
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d657378f80f357a04e2fdad85beaced7e0e8588bf516a4cfea0d2960dee6f517
4
- data.tar.gz: 713a05c4a59bdc8c6a767f5c7043f7f6b51130d231364e3ee11b0df537cdf6a1
3
+ metadata.gz: 6590c4d705c35e5a4849e4ef0bb076efba93509b8bcd8b4c2db49a4bc84b0f31
4
+ data.tar.gz: cb87d9f9f2763b178f990359efecb6b1199cbe15866460bb837232fcdd8b75e1
5
5
  SHA512:
6
- metadata.gz: cb38c344bcf3b01e991a5b026c01d250ea9fd82441373ee3095b9bc2f63e139370f9be4adad65863988119eabbcea80b0a1083909d4eaec61af17d42a42e9ee2
7
- data.tar.gz: 6b9e80af6e0bd15a0aa1eab237e1d0f8a5bc5752f1d22fb6ab2100c755d34f1c25f1853105a82eb58bb7ad7f08652213e9f8b147a2728062103d98007aa3510c
6
+ metadata.gz: 511e55410d149724a0765b5494a15ca4fe493bbd36b969a587d7bab23458cb32a45d34c01f79ca8b170b7f1e86fdf58e81bc4ba3ea15d464fe954a8266c41743
7
+ data.tar.gz: 9fdfe69ab63373f8e31cd2d60f5ae88fd3f4499250010aab4ffbeabb9c9345f017bb012932598a84297bd63d8b28f5bc38d18213f95b19b3307a93f38ecfc775
@@ -27,13 +27,16 @@ jobs:
27
27
  strategy:
28
28
  fail-fast: false
29
29
  matrix:
30
- ruby-version: ['jruby-9.4.2.0']
30
+ ruby-version: ['jruby-9.4.8.0']
31
31
  db: ['mssql']
32
32
  test_targets: ['test_mssql']
33
33
 
34
+ # NOTE: using a specific tag, it fails with 2019-latest.
35
+ # it seems the issue is related to some changes in mssql tools
36
+ # https://learn.microsoft.com/en-au/answers/questions/1853144/error-failed-to-initialize-container-mcr-microsoft
34
37
  services:
35
38
  mssql:
36
- image: mcr.microsoft.com/mssql/server:2019-latest
39
+ image: mcr.microsoft.com/mssql/server:2019-CU27-ubuntu-20.04
37
40
  env:
38
41
  ACCEPT_EULA: Y
39
42
  MSSQL_SA_PASSWORD: Password12!
@@ -68,22 +71,51 @@ jobs:
68
71
  run: |
69
72
  bundle exec rake ${{ matrix.test_targets }}
70
73
 
71
- test-rails-pgsql:
74
+ test-arjdbc-sqlite:
72
75
 
73
- name: Rails Tests (Postgres)
76
+ name: ARJDBC Tests (SQLite)
74
77
  runs-on: ubuntu-latest
75
78
  strategy:
76
79
  fail-fast: false
77
80
  matrix:
78
- ruby-version: [ 'jruby-9.4.2.0' ]
79
- db: [ 'postgresql' ]
80
- test_targets: [ "rails:test_postgresql" ]
81
- ar_version: ["7-0-stable"]
82
- prepared_statements: [ 'false', 'true' ]
81
+ ruby-version: ['jruby-9.4.8.0']
82
+ db: ['sqlite3']
83
+ test_targets: ['test_sqlite3']
84
+
85
+ env:
86
+ DB: ${{ matrix.db }}
87
+ JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M --dev"
88
+
89
+ steps:
90
+ - uses: actions/checkout@v4
91
+ - name: Set up Ruby
92
+ uses: ruby/setup-ruby@v1
93
+ with:
94
+ ruby-version: ${{ matrix.ruby-version }}
95
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
96
+ - name: Build
97
+ run: |
98
+ rake jar
99
+ - name: Run tests
100
+ run: |
101
+ bundle exec rake ${{ matrix.test_targets }}
102
+
103
+ test-arjdbc-pgsql:
104
+
105
+ name: ARJDBC Tests (Postgres)
106
+ runs-on: ubuntu-latest
107
+ strategy:
108
+ fail-fast: false
109
+ matrix:
110
+ ruby-version: ['jruby-9.4.8.0']
111
+ db: ['postgresql']
112
+ test_targets: ["db:postgresql test_postgresql"]
113
+ prepared_statements: ['false', 'true']
114
+ insert_returning: ['false', 'true']
83
115
 
84
116
  services:
85
117
  postgres:
86
- image: postgres:10
118
+ image: postgres:11
87
119
  env:
88
120
  POSTGRES_PASSWORD: postgres
89
121
  POSTGRES_HOST_AUTH_METHOD: trust
@@ -93,16 +125,64 @@ jobs:
93
125
 
94
126
  env:
95
127
  DB: ${{ matrix.db }}
96
- AR_VERSION: ${{ matrix.ar_version }}
97
128
  JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
98
129
  PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
99
- JDBC_SQLITE_VERSION: "3.32.3.3"
130
+ INSERT_RETURNING: ${{ matrix.insert_returning }}
100
131
  PGHOST: localhost
101
132
  PGPORT: 5432
102
133
  PGUSER: postgres
103
134
 
104
135
  steps:
105
136
  - uses: actions/checkout@v3
137
+ - name: Set up Ruby
138
+ uses: ruby/setup-ruby@v1
139
+ with:
140
+ ruby-version: ${{ matrix.ruby-version }}
141
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
142
+ - name: Build
143
+ run: |
144
+ rake jar
145
+ - name: Run tests
146
+ run: |
147
+ bundle exec rake ${{ matrix.test_targets }}
148
+
149
+ test-rails-mssql:
150
+
151
+ name: Rails Tests (mssql)
152
+ runs-on: ubuntu-latest
153
+ strategy:
154
+ fail-fast: false
155
+ matrix:
156
+ ruby-version: [ 'jruby-9.4.8.0' ]
157
+ db: [ 'mssql' ]
158
+ test_targets: [ "rails:test_mssql" ]
159
+ ar_version: ["7-1-stable-dev"]
160
+
161
+ services:
162
+ mssql:
163
+ image: mcr.microsoft.com/mssql/server:2019-CU27-ubuntu-20.04
164
+ env:
165
+ ACCEPT_EULA: Y
166
+ MSSQL_SA_PASSWORD: Password12!
167
+ ports:
168
+ - 1433:1433
169
+ options: >-
170
+ --health-cmd="/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P \"Password12!\" -l 30 -Q \"SELECT 1\""
171
+ --health-start-period 10s
172
+ --health-interval 10s
173
+ --health-timeout 5s
174
+ --health-retries 10
175
+
176
+ env:
177
+ DB: ${{ matrix.db }}
178
+ AR_VERSION: ${{ matrix.ar_version }}
179
+ JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
180
+ JDBC_SQLITE_VERSION: "3.32.3.3"
181
+ SQLUSER: SA
182
+ SQLPASS: Password12!
183
+
184
+ steps:
185
+ - uses: actions/checkout@v4
106
186
  - name: Set up Ruby
107
187
  uses: ruby/setup-ruby@v1
108
188
  with:
@@ -110,8 +190,8 @@ jobs:
110
190
  bundler-cache: true # runs 'bundle install' and caches installed gems automatically
111
191
  - name: Setup database
112
192
  run: |
113
- psql -c "create database activerecord_unittest;" -U postgres
114
- psql -c "create database activerecord_unittest2;" -U postgres
193
+ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Password12!" -Q "CREATE DATABASE jdbc_arunit;"
194
+ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Password12!" -Q "CREATE DATABASE jdbc_arunit2;"
115
195
  - name: Build
116
196
  run: |
117
197
  rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
@@ -119,22 +199,54 @@ jobs:
119
199
  run: |
120
200
  bundle exec rake ${{ matrix.test_targets }}
121
201
 
122
- test-arjdbc-pgsql:
202
+ test-rails-sqlite:
123
203
 
124
- name: ARJDBC Tests (Postgres)
204
+ name: Rails Tests (SQLite)
125
205
  runs-on: ubuntu-latest
126
206
  strategy:
127
207
  fail-fast: false
128
208
  matrix:
129
- ruby-version: ['jruby-9.4.2.0']
130
- db: ['postgresql']
131
- test_targets: ["db:postgresql test_postgresql"]
132
- prepared_statements: ['false', 'true']
133
- insert_returning: ['false', 'true']
209
+ ruby-version: ['jruby-9.4.8.0']
210
+ db: ['sqlite3']
211
+ test_targets: ["rails:test_sqlite3"]
212
+ ar_version: ["7-1-stable"]
213
+
214
+ env:
215
+ DB: ${{ matrix.db }}
216
+ AR_VERSION: ${{ matrix.ar_version }}
217
+ JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
218
+
219
+ steps:
220
+ - uses: actions/checkout@v4
221
+ - name: Set up Ruby
222
+ uses: ruby/setup-ruby@v1
223
+ with:
224
+ ruby-version: ${{ matrix.ruby-version }}
225
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
226
+ - name: Build
227
+ run: |
228
+ echo "JAVA_OPTS=$JAVA_OPTS"
229
+ rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
230
+ - name: Run tests
231
+ run: |
232
+ bundle exec rake ${{ matrix.test_targets }}
233
+
234
+ test-rails-pgsql:
235
+
236
+ name: Rails Tests (Postgres)
237
+ runs-on: ubuntu-latest
238
+ strategy:
239
+ fail-fast: false
240
+ matrix:
241
+ ruby-version: [ 'jruby-9.4.8.0' ]
242
+ db: [ 'postgresql' ]
243
+ test_targets: [ "rails:test_postgresql" ]
244
+ ar_version: ["7-1-stable"]
245
+ prepared_statements: [ 'false', 'true' ]
134
246
 
135
247
  services:
136
248
  postgres:
137
- image: postgres:10
249
+ image: postgres:11
138
250
  env:
139
251
  POSTGRES_PASSWORD: postgres
140
252
  POSTGRES_HOST_AUTH_METHOD: trust
@@ -144,9 +256,10 @@ jobs:
144
256
 
145
257
  env:
146
258
  DB: ${{ matrix.db }}
259
+ AR_VERSION: ${{ matrix.ar_version }}
147
260
  JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
148
261
  PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
149
- INSERT_RETURNING: ${{ matrix.insert_returning }}
262
+ JDBC_SQLITE_VERSION: "3.32.3.3"
150
263
  PGHOST: localhost
151
264
  PGPORT: 5432
152
265
  PGUSER: postgres
@@ -158,9 +271,13 @@ jobs:
158
271
  with:
159
272
  ruby-version: ${{ matrix.ruby-version }}
160
273
  bundler-cache: true # runs 'bundle install' and caches installed gems automatically
274
+ - name: Setup database
275
+ run: |
276
+ psql -c "create database activerecord_unittest;" -U postgres
277
+ psql -c "create database activerecord_unittest2;" -U postgres
161
278
  - name: Build
162
279
  run: |
163
- rake jar
280
+ rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
164
281
  - name: Run tests
165
282
  run: |
166
283
  bundle exec rake ${{ matrix.test_targets }}
@@ -27,7 +27,7 @@ jobs:
27
27
  ruby-version: ['jruby-head']
28
28
  db: ['mysql2']
29
29
  test_targets: ["rails:test_mysql2"]
30
- ar_version: ["7-0-stable"]
30
+ ar_version: ["7-1-stable"]
31
31
  prepared_statements: ['false', 'true']
32
32
  driver: ['MySQL']
33
33
 
@@ -45,7 +45,7 @@ jobs:
45
45
  JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
46
46
 
47
47
  steps:
48
- - uses: actions/checkout@v3
48
+ - uses: actions/checkout@v4
49
49
  - name: Set up Ruby
50
50
  uses: ruby/setup-ruby@v1
51
51
  with:
@@ -79,12 +79,12 @@ jobs:
79
79
  ruby-version: [ 'jruby-head' ]
80
80
  db: [ 'postgresql' ]
81
81
  test_targets: [ "rails:test_postgresql" ]
82
- ar_version: ["7-0-stable"]
82
+ ar_version: ["7-1-stable"]
83
83
  prepared_statements: [ 'false', 'true' ]
84
84
 
85
85
  services:
86
86
  postgres:
87
- image: postgres:10
87
+ image: postgres:11
88
88
  env:
89
89
  POSTGRES_PASSWORD: postgres
90
90
  POSTGRES_HOST_AUTH_METHOD: trust
@@ -102,7 +102,7 @@ jobs:
102
102
  PGUSER: postgres
103
103
 
104
104
  steps:
105
- - uses: actions/checkout@v3
105
+ - uses: actions/checkout@v4
106
106
  - name: Set up Ruby
107
107
  uses: ruby/setup-ruby@v1
108
108
  with:
@@ -129,7 +129,7 @@ jobs:
129
129
  ruby-version: ['jruby-head']
130
130
  db: ['sqlite3']
131
131
  test_targets: ["rails:test_sqlite3"]
132
- ar_version: ["7-0-stable"]
132
+ ar_version: ["7-1-stable", "main"]
133
133
 
134
134
  env:
135
135
  DB: ${{ matrix.db }}
@@ -137,7 +137,7 @@ jobs:
137
137
  JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
138
138
 
139
139
  steps:
140
- - uses: actions/checkout@v3
140
+ - uses: actions/checkout@v4
141
141
  - name: Set up Ruby
142
142
  uses: ruby/setup-ruby@v1
143
143
  with:
@@ -179,7 +179,7 @@ jobs:
179
179
  PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
180
180
 
181
181
  steps:
182
- - uses: actions/checkout@v3
182
+ - uses: actions/checkout@v4
183
183
  - name: Set up Ruby
184
184
  uses: ruby/setup-ruby@v1
185
185
  with:
@@ -211,7 +211,7 @@ jobs:
211
211
 
212
212
  services:
213
213
  postgres:
214
- image: postgres:10
214
+ image: postgres:11
215
215
  env:
216
216
  POSTGRES_PASSWORD: postgres
217
217
  POSTGRES_HOST_AUTH_METHOD: trust
@@ -230,7 +230,7 @@ jobs:
230
230
  PGUSER: postgres
231
231
 
232
232
  steps:
233
- - uses: actions/checkout@v3
233
+ - uses: actions/checkout@v4
234
234
  - name: Set up Ruby
235
235
  uses: ruby/setup-ruby@v1
236
236
  with:
@@ -256,10 +256,10 @@ jobs:
256
256
 
257
257
  env:
258
258
  DB: ${{ matrix.db }}
259
- JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
259
+ JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M --dev"
260
260
 
261
261
  steps:
262
- - uses: actions/checkout@v3
262
+ - uses: actions/checkout@v4
263
263
  - name: Set up Ruby
264
264
  uses: ruby/setup-ruby@v1
265
265
  with:
data/.gitignore CHANGED
@@ -15,9 +15,12 @@ coverage
15
15
  build.xml
16
16
  nbproject
17
17
  .classpath
18
+ .ruby-version
18
19
  .project
19
20
  *.sqlite
20
21
  *.sqlite3
22
+ *.sqlite3-shm
23
+ *.sqlite3-wal
21
24
  *.derby
22
25
  derby.log
23
26
  test.hsqldb*
@@ -32,8 +35,9 @@ Gemfile.lock
32
35
  .settings
33
36
  activerecord-jdbc.iml
34
37
  lib/arjdbc/jdbc/adapter_java.jar
35
- .jrubyrc
36
38
  tags
37
- pik.sh
38
- .ruby-version
39
+ .jrubyrc
39
40
  .rubocop.yml
41
+ .solargraph.yml
42
+ pik.sh
43
+ .tool-versions
data/.solargraph.yml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ include:
3
+ - "**/*.rb"
4
+ exclude:
5
+ - spec/**/*
6
+ - test/**/*
7
+ - vendor/**/*
8
+ - ".bundle/**/*"
9
+ require: []
10
+ domains: []
11
+ reporters:
12
+ - rubocop
13
+ - require_not_found
14
+ require_paths: []
15
+ max_files: 5000
data/Gemfile CHANGED
@@ -34,17 +34,24 @@ elsif ENV['AR_VERSION'] # Use specific version of AR and not .gemspec version
34
34
  opts = {branch: version}
35
35
  end
36
36
 
37
- git 'https://github.com/rails/rails.git', **opts do
37
+ git 'https://github.com/JesseChavez/rails.git', **opts do
38
38
  gem 'activerecord', require: false
39
39
  gem 'activemodel', require: false
40
40
  gem 'activesupport', require: false
41
41
  gem 'actionpack', require: false
42
42
  gem 'actionview', require: false
43
43
  end
44
+
44
45
  end
45
46
  end
46
47
  else
47
- gemspec name: 'activerecord-jdbc-alt-adapter' # Use versiom from .gemspec
48
+ if defined? JRUBY_VERSION
49
+ gemspec name: 'activerecord-jdbc-alt-adapter' # Use versiom from .gemspec
50
+ else # read add_dependency 'activerecord', '~> 7.0' and use the same requirement on MRI
51
+ ar_req = File.read('activerecord-jdbc-adapter.gemspec').match(/add_dependency.*?activerecord.*['"](.*?)['"]/)[1]
52
+ raise "add_dependency 'activerecord', ... line not detected in gemspec" unless ar_req
53
+ gem 'activerecord', ar_req
54
+ end
48
55
  end
49
56
 
50
57
  gem 'rake', require: nil
@@ -72,6 +79,10 @@ group :rails do
72
79
  gem 'builder', require: nil
73
80
 
74
81
  gem 'erubis', require: nil # "~> 2.7.0"
82
+
83
+ # Due to rails/activesupport/lib/active_support/message_pack.rb
84
+ gem 'msgpack', '>= 1.7.0', require: false
85
+
75
86
  # NOTE: due rails/activerecord/test/cases/connection_management_test.rb
76
87
  gem 'rack', require: nil
77
88
 
@@ -79,7 +90,7 @@ group :rails do
79
90
  end
80
91
 
81
92
  group :development do
82
- gem 'ruby-debug', require: nil # if ENV['DEBUG']
93
+ #gem 'ruby-debug', require: nil # if ENV['DEBUG']
83
94
  group :doc do
84
95
  gem 'yard', require: nil
85
96
  gem 'kramdown', require: nil
@@ -94,10 +105,12 @@ group :test do
94
105
 
95
106
  gem 'mysql2', '>= 0.4.4', require: nil, platform: :mri
96
107
  gem 'pg', '>= 0.18.0', require: nil, platform: :mri
97
- gem 'sqlite3', '~> 1.3.6', require: nil, platform: :mri
108
+ gem 'sqlite3', '~> 1.4', require: nil, platform: :mri
98
109
 
99
110
  # group :mssql do
100
111
  # gem 'tiny_tds', require: nil, platform: :mri
101
112
  # gem 'activerecord-sqlserver-adapter', require: nil, platform: :mri
102
113
  # end
103
114
  end
115
+
116
+ gem 'pry-nav'
data/README.md CHANGED
@@ -143,10 +143,14 @@ Versions are targeted at certain versions of Rails and live on their own branche
143
143
  | 51.x | 5.1.x | 51-stable | 9.1.x | 7 |
144
144
  | 52.x | 5.2.x | 52-stable | 9.1.x | 7 |
145
145
  | 60.x | 6.0.x | 60-stable | 9.2.7 | 8 |
146
- | 61.x | 6.1.x | master | 9.2.7 | 8 |
146
+ | 61.x | 6.1.x | 61-stable | 9.2.7 | 8 |
147
+ | 70.x | 7.0.x | 70-stable | 9.3.0 | 8 |
148
+ | 71.x | 7.1.x | master | 9.4.3 | 8 |
147
149
 
148
- Note that JRuby 9.1.x is end-of-life. We recommend Java 8 at a minimum for all
149
- versions.
150
+ Note: 71.x is still under development and not supported yet.
151
+
152
+ Note that JRuby 9.1.x and JRuby 9.2.x are at end-of-life. We recommend Java 8
153
+ at a minimum for all versions.
150
154
 
151
155
  ## Using ActiveRecord JDBC
152
156
 
data/RUNNING_TESTS.md CHANGED
@@ -16,6 +16,8 @@ Rake tasks are loaded from **rakelib/02-test-rake**, most adapters have a
16
16
  corresponding test_[adapter] task e.g. `rake test_sqlite3` that run against DB.
17
17
  To check all available (test related) tasks simply `rake -T | grep test`.
18
18
 
19
+ ### Database Setup
20
+
19
21
  If the adapter supports creating a database it will try to do so automatically
20
22
  (most embed databases such as SQLite3) for some adapters (MySQL, PostgreSQL) we
21
23
  do this auto-magically (see the `rake db:create` tasks), but otherwise you'll
@@ -48,6 +50,40 @@ but one can easily run tests with prepared statements disabled using env vars :
48
50
 
49
51
  rake test_derby PREPARED_STATEMENTS=false
50
52
 
53
+ #### MySQL with Docker
54
+
55
+ The standard Docker MySQL image can be used for testing and development. Depending on your environment these commands
56
+ may need to be run as root.
57
+
58
+ Pull the image:
59
+
60
+ ```
61
+ sudo docker pull mysql
62
+ ```
63
+
64
+ Start up the database with a root password (we show a simple one here but pick one no one else knows):
65
+
66
+ ```
67
+ docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=testtest9 -d mysql
68
+ ```
69
+
70
+ The `mysql` client can be run through Docker as well:
71
+
72
+ ```sh
73
+ docker run -it --link mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
74
+ ```
75
+
76
+ Set up the database for the unit tests (you may need to replace 'localhost' with your container's IP):
77
+
78
+ ```sql
79
+ CREATE USER 'rails'@'localhost' IDENTIFIED BY 'testtest9';
80
+ CREATE DATABASE activerecord_unittest;
81
+ GRANT ALL PRIVILEGES ON activerecord_unittest.* TO 'rails'@'localhost';
82
+ CREATE DATABASE activerecord_unittest2;
83
+ GRANT ALL PRIVILEGES ON activerecord_unittest2.* TO 'rails'@'localhost';
84
+ ```
85
+
86
+ Then edit test/rails/config.yml for the appropriate configuration credentials.
51
87
 
52
88
  ### ActiveRecord (Rails) Tests
53
89
 
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
  "AR-JDBC is a database adapter for Rails' ActiveRecord component " <<
15
15
  "designed to be used with JRuby built upon Java's JDBC API for " <<
16
16
  "database access. Provides (ActiveRecord) built-in adapters: MySQL, " <<
17
- "PostgreSQL, SQLite3, and SQLServer."
17
+ "PostgreSQL, and SQLite3."
18
18
 
19
19
  gem.require_paths = ["lib"]
20
20
 
@@ -41,7 +41,7 @@ Gem::Specification.new do |gem|
41
41
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
42
42
  gem.test_files = gem.files.grep(%r{^test/})
43
43
 
44
- gem.add_dependency 'activerecord', '~> 7.0'
44
+ gem.add_dependency 'activerecord', '~> 7.1.3'
45
45
 
46
46
  #gem.add_development_dependency 'test-unit', '2.5.4'
47
47
  #gem.add_development_dependency 'test-unit-context', '>= 0.3.0'
@@ -43,7 +43,7 @@ Gem::Specification.new do |gem|
43
43
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
44
44
  gem.test_files = gem.files.grep(%r{^test/})
45
45
 
46
- gem.add_dependency 'activerecord', '~> 7.0.0'
46
+ gem.add_dependency 'activerecord', '~> 7.1.3'
47
47
 
48
48
  #gem.add_development_dependency 'test-unit', '2.5.4'
49
49
  #gem.add_development_dependency 'test-unit-context', '>= 0.3.0'
@@ -6,29 +6,28 @@ module ArJdbc
6
6
 
7
7
  # @override
8
8
  def active?
9
- return unless @connection
10
- @connection.active?
9
+ @raw_connection&.active?
11
10
  end
12
11
 
13
12
  def really_valid?
14
- return unless @connection
15
- @connection.really_valid?
13
+ @raw_connection&.really_valid?
16
14
  end
17
15
 
18
16
  # @override
19
- def reconnect!
20
- super # clear_cache! && reset_transaction
21
- @connection.reconnect! # handles adapter.configure_connection
22
- end
17
+ # Removed to fix sqlite adapter, may be needed for others
18
+ # def reconnect!
19
+ # super # clear_cache! && reset_transaction
20
+ # @connection.reconnect! # handles adapter.configure_connection
21
+ # end
23
22
 
24
23
  # @override
25
24
  def disconnect!
26
25
  super # clear_cache! && reset_transaction
27
- return unless @connection
28
- @connection.disconnect!
26
+ @raw_connection&.disconnect!
29
27
  end
30
28
 
31
29
  # @override
30
+ # Removed to fix sqlite adapter, may be needed for others
32
31
  # def verify!(*ignored)
33
32
  # if @connection && @connection.jndi?
34
33
  # # checkout call-back does #reconnect!
@@ -37,6 +36,23 @@ module ArJdbc
37
36
  # end
38
37
  # end
39
38
 
39
+ private
40
+
41
+ # DIFFERENCE: we delve into jdbc shared code and this does self.class.new_client.
42
+ def connect
43
+ @raw_connection = self.class.new_client(@connection_parameters, self)
44
+ rescue ActiveRecord::ConnectionNotEstablished => ex
45
+ raise ex.set_pool(@pool)
46
+ end
47
+
48
+ def reconnect
49
+ if active?
50
+ @raw_connection.rollback rescue nil
51
+ else
52
+ connect
53
+ end
54
+ end
55
+
40
56
  end
41
57
  end
42
58
  end
@@ -2,27 +2,17 @@
2
2
 
3
3
  module ArJdbc
4
4
  module Abstract
5
-
6
5
  # This is minimum amount of code needed from base JDBC Adapter class to make common adapters
7
6
  # work. This replaces using jdbc/adapter as a base class for all adapters.
8
7
  module Core
9
-
10
- attr_reader :config
11
-
12
- def initialize(connection, logger = nil, config = {})
13
- @config = config
8
+ def initialize(...)
9
+ super
14
10
 
15
11
  if self.class.equal? ActiveRecord::ConnectionAdapters::JdbcAdapter
16
12
  spec = @config.key?(:adapter_spec) ? @config[:adapter_spec] :
17
13
  ( @config[:adapter_spec] = adapter_spec(@config) ) # due resolving visitor
18
14
  extend spec if spec
19
15
  end
20
-
21
- connection ||= jdbc_connection_class(config[:adapter_spec]).new(config, self)
22
-
23
- super(connection, logger, config) # AbstractAdapter
24
-
25
- connection.configure_connection # will call us (maybe)
26
16
  end
27
17
 
28
18
  # Retrieve the raw `java.sql.Connection` object.
@@ -56,6 +46,9 @@ module ArJdbc
56
46
  # swallow an ArJdbc / driver bug into an AR::StatementInvalid !
57
47
  return exception if exception.is_a?(Throwable)
58
48
 
49
+ # We create this exception in Java where we do not have access to the pool
50
+ exception.instance_variable_set(:@connection_pool, @pool) if exception.kind_of?(::ActiveRecord::JDBCError)
51
+
59
52
  case exception
60
53
  when SystemExit, SignalException, NoMemoryError then exception
61
54
  when ActiveModel::RangeError, TypeError, RuntimeError then exception