activerecord-jdbc-adapter 60.4-java → 61.2-java
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/.github/workflows/ruby.yml +266 -0
- data/.travis.yml +13 -12
- data/Gemfile +1 -1
- data/README.md +8 -7
- data/activerecord-jdbc-adapter.gemspec +1 -1
- data/lib/arel/visitors/postgresql_jdbc.rb +1 -1
- data/lib/arjdbc/abstract/core.rb +1 -0
- data/lib/arjdbc/abstract/database_statements.rb +4 -0
- data/lib/arjdbc/abstract/transaction_support.rb +20 -7
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/adapter_require.rb +3 -1
- data/lib/arjdbc/mysql/adapter.rb +14 -5
- data/lib/arjdbc/mysql/connection_methods.rb +5 -1
- data/lib/arjdbc/postgresql/adapter.rb +85 -73
- data/lib/arjdbc/postgresql/column.rb +1 -1
- data/lib/arjdbc/postgresql/oid_types.rb +4 -3
- data/lib/arjdbc/sqlite3/adapter.rb +95 -58
- data/lib/arjdbc/sqlite3/connection_methods.rb +11 -1
- data/lib/arjdbc/tasks/databases.rake +15 -10
- data/lib/arjdbc/version.rb +1 -1
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +106 -68
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +81 -22
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +3 -4
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa4df302770068a233f5d07c6af210f49bddca54244ab09ecc3419ba3128918d
|
4
|
+
data.tar.gz: a1f4a473192ba55a305a8d62595fef416f00471a9d8957137966876325a25d03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d6d41aa2bcbb0e9583e2c09c7b8b46357910def331a5bf9869f1eaf95199c6797f012ac57ef58dd2d144f4c6d7d46a86f52f87e55e24d7bf5166105355f760d
|
7
|
+
data.tar.gz: 66ccf4e7075f94b6505669052f93bad576f4a6cb49ace225c049ce68a9d4302d2114352737f43bf0d8392de8c2a8ee1b28387caa2dda3e849880a7c8b82f42d6
|
@@ -0,0 +1,266 @@
|
|
1
|
+
name: Run ARJDBC and Rails tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ 61-stable, master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ 61-stable, master ]
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
test-rails-mysql:
|
14
|
+
|
15
|
+
name: Rails Tests (MySQL)
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
strategy:
|
18
|
+
fail-fast: false
|
19
|
+
matrix:
|
20
|
+
ruby-version: ['jruby-9.2.20.1']
|
21
|
+
db: ['mysql2']
|
22
|
+
test_targets: ["rails:test_mysql2"]
|
23
|
+
ar_version: ["6-1-stable"]
|
24
|
+
prepared_statements: ['false', 'true']
|
25
|
+
driver: ['MySQL']
|
26
|
+
|
27
|
+
services:
|
28
|
+
mysql:
|
29
|
+
image: mysql:5.7
|
30
|
+
ports:
|
31
|
+
- 3306
|
32
|
+
|
33
|
+
env:
|
34
|
+
DB: ${{ matrix.db }}
|
35
|
+
AR_VERSION: ${{ matrix.ar_version }}
|
36
|
+
PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
|
37
|
+
DRIVER: ${{ matrix.driver }}
|
38
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
39
|
+
|
40
|
+
steps:
|
41
|
+
- uses: actions/checkout@v3
|
42
|
+
- name: Set up Ruby
|
43
|
+
uses: ruby/setup-ruby@v1
|
44
|
+
with:
|
45
|
+
ruby-version: ${{ matrix.ruby-version }}
|
46
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
47
|
+
- name: Setup database
|
48
|
+
run: |
|
49
|
+
sudo service mysql start
|
50
|
+
mysql --version || true # to see if we're using MySQL or MariaDB
|
51
|
+
mysql -u root -proot -e "CREATE USER rails@localhost;"
|
52
|
+
mysql -u root -proot -e "grant all privileges on activerecord_unittest.* to rails@localhost;"
|
53
|
+
mysql -u root -proot -e "grant all privileges on activerecord_unittest2.* to rails@localhost;"
|
54
|
+
mysql -u root -proot -e "grant all privileges on inexistent_activerecord_unittest.* to rails@localhost;"
|
55
|
+
mysql -u root -proot -e "CREATE DATABASE activerecord_unittest DEFAULT CHARACTER SET utf8mb4;"
|
56
|
+
mysql -u root -proot -e "CREATE DATABASE activerecord_unittest2 DEFAULT CHARACTER SET utf8mb4;"
|
57
|
+
- name: Build
|
58
|
+
run: |
|
59
|
+
echo "JAVA_OPTS=$JAVA_OPTS"
|
60
|
+
rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
|
61
|
+
- name: Run tests
|
62
|
+
run: |
|
63
|
+
bundle exec rake ${{ matrix.test_targets }}
|
64
|
+
|
65
|
+
test-rails-pgsql:
|
66
|
+
|
67
|
+
name: Rails Tests (Postgres)
|
68
|
+
runs-on: ubuntu-latest
|
69
|
+
strategy:
|
70
|
+
fail-fast: false
|
71
|
+
matrix:
|
72
|
+
ruby-version: [ 'jruby-9.2.20.1' ]
|
73
|
+
db: [ 'postgresql' ]
|
74
|
+
test_targets: [ "rails:test_postgresql" ]
|
75
|
+
ar_version: ["6-1-stable"]
|
76
|
+
prepared_statements: [ 'false', 'true' ]
|
77
|
+
|
78
|
+
services:
|
79
|
+
postgres:
|
80
|
+
image: postgres:10
|
81
|
+
env:
|
82
|
+
POSTGRES_PASSWORD: postgres
|
83
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
84
|
+
ports:
|
85
|
+
- 5432:5432
|
86
|
+
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
87
|
+
|
88
|
+
env:
|
89
|
+
DB: ${{ matrix.db }}
|
90
|
+
AR_VERSION: ${{ matrix.ar_version }}
|
91
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
92
|
+
PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
|
93
|
+
PGHOST: localhost
|
94
|
+
PGPORT: 5432
|
95
|
+
PGUSER: postgres
|
96
|
+
|
97
|
+
steps:
|
98
|
+
- uses: actions/checkout@v3
|
99
|
+
- name: Set up Ruby
|
100
|
+
uses: ruby/setup-ruby@v1
|
101
|
+
with:
|
102
|
+
ruby-version: ${{ matrix.ruby-version }}
|
103
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
104
|
+
- name: Setup database
|
105
|
+
run: |
|
106
|
+
psql -c "create database activerecord_unittest;" -U postgres
|
107
|
+
psql -c "create database activerecord_unittest2;" -U postgres
|
108
|
+
- name: Build
|
109
|
+
run: |
|
110
|
+
rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
|
111
|
+
- name: Run tests
|
112
|
+
run: |
|
113
|
+
bundle exec rake ${{ matrix.test_targets }}
|
114
|
+
|
115
|
+
test-rails-sqlite:
|
116
|
+
|
117
|
+
name: Rails Tests (SQLite)
|
118
|
+
runs-on: ubuntu-latest
|
119
|
+
strategy:
|
120
|
+
fail-fast: false
|
121
|
+
matrix:
|
122
|
+
ruby-version: ['jruby-9.2.20.1']
|
123
|
+
db: ['sqlite3']
|
124
|
+
test_targets: ["rails:test_sqlite3"]
|
125
|
+
ar_version: ["6-1-stable"]
|
126
|
+
|
127
|
+
env:
|
128
|
+
DB: ${{ matrix.db }}
|
129
|
+
AR_VERSION: ${{ matrix.ar_version }}
|
130
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
131
|
+
|
132
|
+
steps:
|
133
|
+
- uses: actions/checkout@v3
|
134
|
+
- name: Set up Ruby
|
135
|
+
uses: ruby/setup-ruby@v1
|
136
|
+
with:
|
137
|
+
ruby-version: ${{ matrix.ruby-version }}
|
138
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
139
|
+
- name: Build
|
140
|
+
run: |
|
141
|
+
echo "JAVA_OPTS=$JAVA_OPTS"
|
142
|
+
rake jar # compiles ext generates: lib/arjdbc/jdbc/adapter_java.jar
|
143
|
+
- name: Run tests
|
144
|
+
run: |
|
145
|
+
bundle exec rake ${{ matrix.test_targets }}
|
146
|
+
|
147
|
+
test-arjdbc-mysql:
|
148
|
+
|
149
|
+
name: ARJDBC Tests (MySQL)
|
150
|
+
runs-on: ubuntu-latest
|
151
|
+
strategy:
|
152
|
+
fail-fast: false
|
153
|
+
matrix:
|
154
|
+
ruby-version: ['jruby-9.2.20.1']
|
155
|
+
db: ['mysql2']
|
156
|
+
test_targets: ["db:mysql test_mysql2"]
|
157
|
+
prepared_statements: ['false', 'true']
|
158
|
+
driver: ['MySQL']
|
159
|
+
|
160
|
+
services:
|
161
|
+
mysql:
|
162
|
+
image: mysql:5.7
|
163
|
+
ports:
|
164
|
+
- 3306
|
165
|
+
|
166
|
+
env:
|
167
|
+
DB: ${{ matrix.db }}
|
168
|
+
DRIVER: ${{ matrix.driver }}
|
169
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
170
|
+
MY_USER: root
|
171
|
+
MY_PASSWORD: root
|
172
|
+
PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
|
173
|
+
|
174
|
+
steps:
|
175
|
+
- uses: actions/checkout@v3
|
176
|
+
- name: Set up Ruby
|
177
|
+
uses: ruby/setup-ruby@v1
|
178
|
+
with:
|
179
|
+
ruby-version: ${{ matrix.ruby-version }}
|
180
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
181
|
+
- name: Setup database
|
182
|
+
run: |
|
183
|
+
sudo service mysql start
|
184
|
+
mysql --version || true # to see if we're using MySQL or MariaDB
|
185
|
+
- name: Build
|
186
|
+
run: |
|
187
|
+
rake jar
|
188
|
+
- name: Run tests
|
189
|
+
run: |
|
190
|
+
bundle exec rake ${{ matrix.test_targets }}
|
191
|
+
|
192
|
+
test-arjdbc-pgsql:
|
193
|
+
|
194
|
+
name: ARJDBC Tests (Postgres)
|
195
|
+
runs-on: ubuntu-latest
|
196
|
+
strategy:
|
197
|
+
fail-fast: false
|
198
|
+
matrix:
|
199
|
+
ruby-version: ['jruby-9.2.20.1']
|
200
|
+
db: ['postgresql']
|
201
|
+
test_targets: ["db:postgresql test_postgresql"]
|
202
|
+
prepared_statements: ['false', 'true']
|
203
|
+
insert_returning: ['false', 'true']
|
204
|
+
|
205
|
+
services:
|
206
|
+
postgres:
|
207
|
+
image: postgres:10
|
208
|
+
env:
|
209
|
+
POSTGRES_PASSWORD: postgres
|
210
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
211
|
+
ports:
|
212
|
+
- 5432:5432
|
213
|
+
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
214
|
+
|
215
|
+
env:
|
216
|
+
DB: ${{ matrix.db }}
|
217
|
+
DRIVER: ${{ matrix.driver }}
|
218
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
219
|
+
PREPARED_STATEMENTS: ${{ matrix.prepared_statements }}
|
220
|
+
INSERT_RETURNING: ${{ matrix.insert_returning }}
|
221
|
+
PGHOST: localhost
|
222
|
+
PGPORT: 5432
|
223
|
+
PGUSER: postgres
|
224
|
+
|
225
|
+
steps:
|
226
|
+
- uses: actions/checkout@v3
|
227
|
+
- name: Set up Ruby
|
228
|
+
uses: ruby/setup-ruby@v1
|
229
|
+
with:
|
230
|
+
ruby-version: ${{ matrix.ruby-version }}
|
231
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
232
|
+
- name: Build
|
233
|
+
run: |
|
234
|
+
rake jar
|
235
|
+
- name: Run tests
|
236
|
+
run: |
|
237
|
+
bundle exec rake ${{ matrix.test_targets }}
|
238
|
+
|
239
|
+
test-arjdbc-sqlite:
|
240
|
+
|
241
|
+
name: ARJDBC Tests (SQLite)
|
242
|
+
runs-on: ubuntu-latest
|
243
|
+
strategy:
|
244
|
+
fail-fast: false
|
245
|
+
matrix:
|
246
|
+
ruby-version: ['jruby-9.2.20.1']
|
247
|
+
db: ['sqlite3']
|
248
|
+
test_targets: ['test_sqlite3']
|
249
|
+
|
250
|
+
env:
|
251
|
+
DB: ${{ matrix.db }}
|
252
|
+
JRUBY_OPTS: "-J-Xms64M -J-Xmx1024M"
|
253
|
+
|
254
|
+
steps:
|
255
|
+
- uses: actions/checkout@v3
|
256
|
+
- name: Set up Ruby
|
257
|
+
uses: ruby/setup-ruby@v1
|
258
|
+
with:
|
259
|
+
ruby-version: ${{ matrix.ruby-version }}
|
260
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
261
|
+
- name: Build
|
262
|
+
run: |
|
263
|
+
rake jar
|
264
|
+
- name: Run tests
|
265
|
+
run: |
|
266
|
+
bundle exec rake ${{ matrix.test_targets }}
|
data/.travis.yml
CHANGED
@@ -9,13 +9,14 @@ before_install:
|
|
9
9
|
- rvm @default,@global do gem uninstall bundler -a -x -I || true
|
10
10
|
- gem install bundler -v "~>1.17.3"
|
11
11
|
install:
|
12
|
-
- bundle
|
12
|
+
- bundle config set --local without 'development'
|
13
|
+
- bundle install
|
13
14
|
# to fix this issue: https://travis-ci.community/t/mariadb-10-1-fails-to-install-on-xenial/3151/3
|
14
15
|
- mysql -u root -e 'CREATE USER IF NOT EXISTS travis@localhost; GRANT ALL ON *.* TO travis@localhost;' || true
|
15
16
|
|
16
17
|
language: ruby
|
17
18
|
rvm:
|
18
|
-
- jruby-9.2.
|
19
|
+
- jruby-9.2.19.0
|
19
20
|
jdk:
|
20
21
|
- openjdk8
|
21
22
|
|
@@ -37,8 +38,8 @@ before_script:
|
|
37
38
|
mysql -e "grant all privileges on activerecord_unittest.* to rails@localhost;" && \
|
38
39
|
mysql -e "grant all privileges on activerecord_unittest2.* to rails@localhost;" && \
|
39
40
|
mysql -e "grant all privileges on inexistent_activerecord_unittest.* to rails@localhost;" && \
|
40
|
-
mysql -e "CREATE DATABASE activerecord_unittest DEFAULT CHARACTER SET
|
41
|
-
mysql -e "CREATE DATABASE activerecord_unittest2 DEFAULT CHARACTER SET
|
41
|
+
mysql -e "CREATE DATABASE activerecord_unittest DEFAULT CHARACTER SET utf8mb4;" && \
|
42
|
+
mysql -e "CREATE DATABASE activerecord_unittest2 DEFAULT CHARACTER SET utf8mb4;" \
|
42
43
|
|| true
|
43
44
|
- |
|
44
45
|
[ "$DB" == "postgresql" ] && [ "$TEST_PREFIX" == "rails:" ] && \
|
@@ -48,7 +49,7 @@ before_script:
|
|
48
49
|
|
49
50
|
env:
|
50
51
|
global:
|
51
|
-
- AR_VERSION="6-
|
52
|
+
- AR_VERSION="6-1-stable"
|
52
53
|
matrix:
|
53
54
|
allow_failures:
|
54
55
|
- rvm: jruby-head
|
@@ -111,18 +112,18 @@ matrix:
|
|
111
112
|
env: DB=mariadb PREPARED_STATEMENTS=true
|
112
113
|
|
113
114
|
# Rails test-suite :
|
114
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-
|
115
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-
|
116
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-
|
115
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS off by default
|
116
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" PREPARED_STATEMENTS=true
|
117
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" DRIVER=MariaDB
|
117
118
|
|
118
119
|
- addons:
|
119
120
|
postgresql: "10"
|
120
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
121
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS on by default
|
121
122
|
- addons:
|
122
123
|
postgresql: "10"
|
123
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
124
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" PREPARED_STATEMENTS=false
|
124
125
|
- addons:
|
125
126
|
postgresql: "9.4"
|
126
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
127
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS on by default
|
127
128
|
|
128
|
-
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="6-
|
129
|
+
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="6-1-stable"
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -23,7 +23,8 @@ Versions are targeted at certain versions of Rails and live on their own branche
|
|
23
23
|
| 50.x | 5.0.x | 50-stable | 9.1.x | 7 |
|
24
24
|
| 51.x | 5.1.x | 51-stable | 9.1.x | 7 |
|
25
25
|
| 52.x | 5.2.x | 52-stable | 9.1.x | 7 |
|
26
|
-
| 60.x | 6.0.x |
|
26
|
+
| 60.x | 6.0.x | 60-stable | 9.2.7 | 8 |
|
27
|
+
| 61.x | 6.1.x | master | 9.2.7 | 8 |
|
27
28
|
|
28
29
|
Note that JRuby 9.1.x is end-of-life. We recommend Java 8 at a minimum for all
|
29
30
|
versions.
|
@@ -116,8 +117,8 @@ Proceed as with Rails; specify `ActiveRecord` in your Bundle along with the
|
|
116
117
|
chosen JDBC adapter(s), this time sample *Gemfile* for MySQL:
|
117
118
|
|
118
119
|
```ruby
|
119
|
-
gem 'activerecord', '~>
|
120
|
-
gem 'activerecord-jdbcmysql-adapter', :platform => :jruby
|
120
|
+
gem 'activerecord', '~> 6.0.3'
|
121
|
+
gem 'activerecord-jdbcmysql-adapter', '~> 60.2', :platform => :jruby
|
121
122
|
```
|
122
123
|
|
123
124
|
When you `require 'bundler/setup'` everything will be set up for you as expected.
|
@@ -126,13 +127,13 @@ When you `require 'bundler/setup'` everything will be set up for you as expected
|
|
126
127
|
|
127
128
|
Install the needed gems with JRuby, for example:
|
128
129
|
|
129
|
-
gem install activerecord -v "~>
|
130
|
-
gem install activerecord-jdbc-adapter --ignore-dependencies
|
130
|
+
gem install activerecord -v "~> 6.0.3"
|
131
|
+
gem install activerecord-jdbc-adapter -v "~> 60.2" --ignore-dependencies
|
131
132
|
|
132
133
|
If you wish to use the adapter for a specific database, you can install it
|
133
134
|
directly and the (jdbc-) driver gem (dependency) will be installed as well:
|
134
135
|
|
135
|
-
jruby -S gem install activerecord-jdbcmysql-adapter
|
136
|
+
jruby -S gem install activerecord-jdbcmysql-adapter -v "~> 60.2"
|
136
137
|
|
137
138
|
Your program should include:
|
138
139
|
|
@@ -172,7 +173,7 @@ ask on the #JRuby IRC channel on http://freenode.net/ (try [web-chat][6]).
|
|
172
173
|
This project was originally written by [Nick Sieger](http://github.com/nicksieger)
|
173
174
|
and [Ola Bini](http://github.com/olabini) with lots of help from the JRuby community.
|
174
175
|
Polished 3.x compatibility and 4.x support (for AR-JDBC >= 1.3.0) was managed by
|
175
|
-
[Karol Bucek](http://github.com/kares) among others. Support for Rails 6 was
|
176
|
+
[Karol Bucek](http://github.com/kares) among others. Support for Rails 6.0 and 6.1 was
|
176
177
|
contributed by [shellyBits GmbH](https://shellybits.ch/)
|
177
178
|
|
178
179
|
## License
|
@@ -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', '~> 6.
|
44
|
+
gem.add_dependency 'activerecord', '~> 6.1.0'
|
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'
|
data/lib/arjdbc/abstract/core.rb
CHANGED
@@ -15,6 +15,7 @@ module ArJdbc
|
|
15
15
|
end
|
16
16
|
|
17
17
|
materialize_transactions
|
18
|
+
mark_transaction_written_if_write(sql)
|
18
19
|
|
19
20
|
binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
|
20
21
|
|
@@ -35,6 +36,7 @@ module ArJdbc
|
|
35
36
|
end
|
36
37
|
|
37
38
|
materialize_transactions
|
39
|
+
mark_transaction_written_if_write(sql)
|
38
40
|
|
39
41
|
binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
|
40
42
|
|
@@ -55,6 +57,7 @@ module ArJdbc
|
|
55
57
|
end
|
56
58
|
|
57
59
|
materialize_transactions
|
60
|
+
mark_transaction_written_if_write(sql)
|
58
61
|
|
59
62
|
binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
|
60
63
|
|
@@ -72,6 +75,7 @@ module ArJdbc
|
|
72
75
|
end
|
73
76
|
|
74
77
|
materialize_transactions
|
78
|
+
mark_transaction_written_if_write(sql)
|
75
79
|
|
76
80
|
log(sql, name) { @connection.execute(sql) }
|
77
81
|
end
|
@@ -24,26 +24,26 @@ module ArJdbc
|
|
24
24
|
# Starts a database transaction.
|
25
25
|
# @override
|
26
26
|
def begin_db_transaction
|
27
|
-
log('BEGIN TRANSACTION'
|
27
|
+
log('BEGIN', 'TRANSACTION') { @connection.begin }
|
28
28
|
end
|
29
29
|
|
30
30
|
# Starts a database transaction.
|
31
31
|
# @param isolation the transaction isolation to use
|
32
32
|
def begin_isolated_db_transaction(isolation)
|
33
|
-
log("BEGIN ISOLATED
|
33
|
+
log("BEGIN ISOLATED - #{isolation}", 'TRANSACTION') { @connection.begin(isolation) }
|
34
34
|
end
|
35
35
|
|
36
36
|
# Commits the current database transaction.
|
37
37
|
# @override
|
38
38
|
def commit_db_transaction
|
39
|
-
log('COMMIT TRANSACTION'
|
39
|
+
log('COMMIT', 'TRANSACTION') { @connection.commit }
|
40
40
|
end
|
41
41
|
|
42
42
|
# Rolls back the current database transaction.
|
43
43
|
# Called from 'rollback_db_transaction' in the AbstractAdapter
|
44
44
|
# @override
|
45
45
|
def exec_rollback_db_transaction
|
46
|
-
log('ROLLBACK TRANSACTION'
|
46
|
+
log('ROLLBACK', 'TRANSACTION') { @connection.rollback }
|
47
47
|
end
|
48
48
|
|
49
49
|
########################## Savepoint Interface ############################
|
@@ -55,7 +55,7 @@ module ArJdbc
|
|
55
55
|
# @since 1.3.0
|
56
56
|
# @extension added optional name parameter
|
57
57
|
def create_savepoint(name = current_savepoint_name)
|
58
|
-
log("SAVEPOINT #{name}", '
|
58
|
+
log("SAVEPOINT #{name}", 'TRANSACTION') { @connection.create_savepoint(name) }
|
59
59
|
end
|
60
60
|
|
61
61
|
# Transaction rollback to a given (previously created) save-point.
|
@@ -64,7 +64,7 @@ module ArJdbc
|
|
64
64
|
# @param name the save-point name
|
65
65
|
# @extension added optional name parameter
|
66
66
|
def exec_rollback_to_savepoint(name = current_savepoint_name)
|
67
|
-
log("ROLLBACK TO SAVEPOINT #{name}", '
|
67
|
+
log("ROLLBACK TO SAVEPOINT #{name}", 'TRANSACTION') { @connection.rollback_savepoint(name) }
|
68
68
|
end
|
69
69
|
|
70
70
|
# Release a previously created save-point.
|
@@ -73,9 +73,22 @@ module ArJdbc
|
|
73
73
|
# @param name the save-point name
|
74
74
|
# @extension added optional name parameter
|
75
75
|
def release_savepoint(name = current_savepoint_name)
|
76
|
-
log("RELEASE SAVEPOINT #{name}", '
|
76
|
+
log("RELEASE SAVEPOINT #{name}", 'TRANSACTION') { @connection.release_savepoint(name) }
|
77
77
|
end
|
78
78
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
# patch to avoid the usage of WeakMap
|
84
|
+
require 'active_record/connection_adapters/abstract/transaction'
|
85
|
+
module ActiveRecord
|
86
|
+
module ConnectionAdapters
|
87
|
+
class Transaction
|
88
|
+
def add_record(record, ensure_finalize = true)
|
89
|
+
@records ||= []
|
90
|
+
@records << record
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
Binary file
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
module ActiveRecord
|
4
4
|
|
5
|
-
if defined? ConnectionAdapters::
|
5
|
+
if defined? ConnectionAdapters::ConnectionHandler # 6.1
|
6
|
+
ConnectionAdapters::ConnectionHandler
|
7
|
+
elsif defined? ConnectionAdapters::ConnectionSpecification::Resolver # 4.0, # 5.x, # 6.0
|
6
8
|
ConnectionAdapters::ConnectionSpecification::Resolver
|
7
9
|
elsif defined? Base::ConnectionSpecification::Resolver # 3.2
|
8
10
|
Base::ConnectionSpecification::Resolver
|
data/lib/arjdbc/mysql/adapter.rb
CHANGED
@@ -33,10 +33,10 @@ module ActiveRecord
|
|
33
33
|
|
34
34
|
include ArJdbc::MySQL
|
35
35
|
|
36
|
-
def initialize(connection, logger,
|
37
|
-
|
36
|
+
def initialize(connection, logger, connection_options, config)
|
37
|
+
superclass_config = config.reverse_merge(prepared_statements: false)
|
38
|
+
super(connection, logger, connection_options, superclass_config)
|
38
39
|
|
39
|
-
@prepared_statements = false unless config.key?(:prepared_statements)
|
40
40
|
# configure_connection taken care of at ArJdbc::Abstract::Core
|
41
41
|
end
|
42
42
|
|
@@ -88,7 +88,7 @@ module ActiveRecord
|
|
88
88
|
|
89
89
|
# from MySQL::DatabaseStatements
|
90
90
|
READ_QUERY = ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
|
91
|
-
:
|
91
|
+
:desc, :describe, :set, :show, :use
|
92
92
|
) # :nodoc:
|
93
93
|
private_constant :READ_QUERY
|
94
94
|
|
@@ -96,6 +96,15 @@ module ActiveRecord
|
|
96
96
|
!READ_QUERY.match?(sql)
|
97
97
|
end
|
98
98
|
|
99
|
+
def explain(arel, binds = [])
|
100
|
+
sql = "EXPLAIN #{to_sql(arel, binds)}"
|
101
|
+
start = Concurrent.monotonic_time
|
102
|
+
result = exec_query(sql, "EXPLAIN", binds)
|
103
|
+
elapsed = Concurrent.monotonic_time - start
|
104
|
+
|
105
|
+
MySQL::ExplainPrettyPrinter.new.pp(result, elapsed)
|
106
|
+
end
|
107
|
+
|
99
108
|
# Reloading the type map in abstract/statement_cache.rb blows up postgres
|
100
109
|
def clear_cache!
|
101
110
|
reload_type_map
|
@@ -179,7 +188,7 @@ module ActiveRecord
|
|
179
188
|
|
180
189
|
# defined in MySQL::DatabaseStatements which is not included
|
181
190
|
def default_insert_value(column)
|
182
|
-
|
191
|
+
super unless column.auto_increment?
|
183
192
|
end
|
184
193
|
|
185
194
|
# FIXME: optimize insert_fixtures_set by using JDBC Statement.addBatch()/executeBatch()
|
@@ -68,6 +68,7 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
68
68
|
# with reconnect fail-over sets connection read-only (by default)
|
69
69
|
# properties['failOverReadOnly'] ||= 'false'
|
70
70
|
end
|
71
|
+
properties['noDatetimeStringSync'] = true unless properties.key?('noDatetimeStringSync')
|
71
72
|
end
|
72
73
|
if config[:sslkey] || sslcert = config[:sslcert] # || config[:use_ssl]
|
73
74
|
properties['useSSL'] ||= true # supported by MariaDB as well
|
@@ -90,11 +91,12 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
90
91
|
properties['localSocket'] ||= socket if mariadb_driver
|
91
92
|
end
|
92
93
|
|
94
|
+
# properties['useJDBCCompliantTimezoneShift'] ||= true
|
93
95
|
# for the Connector/J 5.1 line this is true by default - but it requires some really nasty
|
94
96
|
# quirks to get casted Time values extracted properly according for AR's default_timezone
|
95
97
|
# - thus we're turning it off (should be off in newer driver versions >= 6 anyway)
|
96
98
|
# + also MariaDB driver is compilant and we would need to branch out based on driver
|
97
|
-
properties['useLegacyDatetimeCode'] = false
|
99
|
+
properties['useLegacyDatetimeCode'] = false # disables the effect of 'useTimezone'
|
98
100
|
|
99
101
|
jdbc_connection(config)
|
100
102
|
end
|
@@ -102,6 +104,8 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
102
104
|
alias_method :mysql2_connection, :mysql_connection
|
103
105
|
|
104
106
|
def mariadb_connection(config)
|
107
|
+
config = config.deep_dup
|
108
|
+
|
105
109
|
config[:adapter_spec] ||= ::ArJdbc::MySQL
|
106
110
|
config[:adapter_class] = ActiveRecord::ConnectionAdapters::Mysql2Adapter unless config.key?(:adapter_class)
|
107
111
|
|