activerecord-jdbc-alt-adapter 60.1.0-java → 61.0.0-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/.nvimlog +0 -0
- data/.travis.yml +11 -11
- data/Gemfile +1 -1
- data/README.md +21 -17
- data/activerecord-jdbc-adapter.gemspec +2 -2
- data/activerecord-jdbc-alt-adapter.gemspec +5 -5
- data/lib/arel/visitors/postgresql_jdbc.rb +1 -1
- data/lib/arel/visitors/sqlserver.rb +16 -0
- 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/mssql.rb +1 -1
- data/lib/arjdbc/mssql/adapter.rb +3 -1
- data/lib/arjdbc/mssql/column.rb +14 -0
- data/lib/arjdbc/mssql/database_limits.rb +7 -0
- data/lib/arjdbc/mssql/extensions/attribute_methods.rb +1 -1
- data/lib/arjdbc/mssql/schema_creation.rb +2 -2
- data/lib/arjdbc/mssql/schema_statements.rb +29 -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/tasks/mssql_database_tasks.rb +88 -31
- data/lib/arjdbc/version.rb +3 -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 +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd61f85687802bf7bad5e3013413ccbda73395044d46775e8fa5f6d57e8410ca
|
4
|
+
data.tar.gz: 245c8e59a5bbf3e87e7f9f0759070dda617801ce650bdb089cb1c16daa4119eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f11b067072016b63fa265435c90d45672463cc80e5ac1e8199bc96d209704affdc30a75d89a6ac5fb67ea5fad06c91c7ef59af87651e387beb360e64dc027e32
|
7
|
+
data.tar.gz: b1e71248871946ccaa981bb0a74f08fdeba605637b020f704ae0197dad96c00947cfe0f87752f010499d6ddad9a6a97ffe7791cb6f7a0dd69e4f57f2d7643014
|
data/.nvimlog
ADDED
File without changes
|
data/.travis.yml
CHANGED
@@ -15,7 +15,7 @@ install:
|
|
15
15
|
|
16
16
|
language: ruby
|
17
17
|
rvm:
|
18
|
-
- jruby-9.2.
|
18
|
+
- jruby-9.2.14.0
|
19
19
|
jdk:
|
20
20
|
- openjdk8
|
21
21
|
|
@@ -37,8 +37,8 @@ before_script:
|
|
37
37
|
mysql -e "grant all privileges on activerecord_unittest.* to rails@localhost;" && \
|
38
38
|
mysql -e "grant all privileges on activerecord_unittest2.* to rails@localhost;" && \
|
39
39
|
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
|
40
|
+
mysql -e "CREATE DATABASE activerecord_unittest DEFAULT CHARACTER SET utf8mb4;" && \
|
41
|
+
mysql -e "CREATE DATABASE activerecord_unittest2 DEFAULT CHARACTER SET utf8mb4;" \
|
42
42
|
|| true
|
43
43
|
- |
|
44
44
|
[ "$DB" == "postgresql" ] && [ "$TEST_PREFIX" == "rails:" ] && \
|
@@ -48,7 +48,7 @@ before_script:
|
|
48
48
|
|
49
49
|
env:
|
50
50
|
global:
|
51
|
-
- AR_VERSION="
|
51
|
+
- AR_VERSION="master"
|
52
52
|
matrix:
|
53
53
|
allow_failures:
|
54
54
|
- rvm: jruby-head
|
@@ -111,18 +111,18 @@ matrix:
|
|
111
111
|
env: DB=mariadb PREPARED_STATEMENTS=true
|
112
112
|
|
113
113
|
# 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-
|
114
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS off by default
|
115
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" PREPARED_STATEMENTS=true
|
116
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="6-1-stable" DRIVER=MariaDB
|
117
117
|
|
118
118
|
- addons:
|
119
119
|
postgresql: "10"
|
120
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
120
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS on by default
|
121
121
|
- addons:
|
122
122
|
postgresql: "10"
|
123
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
123
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" PREPARED_STATEMENTS=false
|
124
124
|
- addons:
|
125
125
|
postgresql: "9.4"
|
126
|
-
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-
|
126
|
+
env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="6-1-stable" # PS on by default
|
127
127
|
|
128
|
-
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="6-
|
128
|
+
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="6-1-stable"
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,22 +2,23 @@
|
|
2
2
|
|
3
3
|
This adapter is a fork of the ActiveRecord JDBC Adapter with basic support for
|
4
4
|
**SQL Server/Azure SQL**. This adapter may work with other databases
|
5
|
-
supported by the original adapter such as
|
6
|
-
use the [original adapter](https://github.com/jruby/
|
5
|
+
supported by the original adapter such as MySQL but it is advised to
|
6
|
+
use the [original adapter](https://github.com/jruby/activerecord-jdbc-adapter)
|
7
7
|
|
8
8
|
This adapter only works with JRuby and it is advised to install the latest
|
9
9
|
stable of this adapter and Rails
|
10
10
|
|
11
11
|
| Gem Version | Rails Version | min JRuby |
|
12
12
|
| ----------- | ------------- | --------- |
|
13
|
-
| 50.
|
14
|
-
| 51.
|
15
|
-
| 52.
|
16
|
-
| 60.
|
13
|
+
| 50.7.0 | 5.0.7 | 9.1.x |
|
14
|
+
| 51.7.0 | 5.1.7 | 9.1.x |
|
15
|
+
| 52.6.0 | 5.2.4 | 9.1.x |
|
16
|
+
| 60.1.0 | 6.0.3 | 9.2.9 |
|
17
|
+
| 61.0.0 | 6.1.3 | 9.2.16 |
|
17
18
|
|
18
19
|
This adapter passes most of the Rails tests (ActiveRecord tests) with the
|
19
20
|
exception of some test that are not compatible with the SQL Server. To run
|
20
|
-
the test use the following fork [Rails](https://github.com/JesseChavez/rails/tree/6-
|
21
|
+
the test use the following fork [Rails](https://github.com/JesseChavez/rails/tree/6-1-stable-dev),
|
21
22
|
and the instructions in file `RUNNING_TESTS.md`. The fork has some
|
22
23
|
schema tweaks to make it compatible with SQL Server.
|
23
24
|
|
@@ -28,16 +29,18 @@ Add the following to your `Gemfile`:
|
|
28
29
|
```ruby
|
29
30
|
platforms :jruby do
|
30
31
|
# Use jdbc as the database for Active Record
|
31
|
-
gem 'activerecord-jdbc-alt-adapter', '~>
|
32
|
-
gem 'jdbc-mssql', '~> 0.
|
32
|
+
gem 'activerecord-jdbc-alt-adapter', '~> 61.0.0'
|
33
|
+
gem 'jdbc-mssql', '~> 0.9.0'
|
33
34
|
end
|
34
35
|
```
|
35
36
|
|
36
37
|
Or look at the sample rails and see how is set up:
|
37
38
|
|
39
|
+
- Rails 6.1 sample app [wombat61](https://github.com/JesseChavez/wombat61)
|
40
|
+
|
38
41
|
- Rails 6.0 sample app [wombat60](https://github.com/JesseChavez/wombat60)
|
39
42
|
|
40
|
-
-
|
43
|
+
- Rails 5.0 sample app [wombat50](https://github.com/JesseChavez/wombat50)
|
41
44
|
|
42
45
|
|
43
46
|
### Breaking changes
|
@@ -135,7 +138,8 @@ Versions are targeted at certain versions of Rails and live on their own branche
|
|
135
138
|
| 50.x | 5.0.x | 50-stable | 9.1.x | 7 |
|
136
139
|
| 51.x | 5.1.x | 51-stable | 9.1.x | 7 |
|
137
140
|
| 52.x | 5.2.x | 52-stable | 9.1.x | 7 |
|
138
|
-
| 60.x | 6.0.x |
|
141
|
+
| 60.x | 6.0.x | 60-stable | 9.2.7 | 8 |
|
142
|
+
| 61.x | 6.1.x | master | 9.2.7 | 8 |
|
139
143
|
|
140
144
|
Note that JRuby 9.1.x is end-of-life. We recommend Java 8 at a minimum for all
|
141
145
|
versions.
|
@@ -228,8 +232,8 @@ Proceed as with Rails; specify `ActiveRecord` in your Bundle along with the
|
|
228
232
|
chosen JDBC adapter(s), this time sample *Gemfile* for MySQL:
|
229
233
|
|
230
234
|
```ruby
|
231
|
-
gem 'activerecord', '~>
|
232
|
-
gem 'activerecord-jdbcmysql-adapter', :platform => :jruby
|
235
|
+
gem 'activerecord', '~> 6.0.3'
|
236
|
+
gem 'activerecord-jdbcmysql-adapter', '~> 60.2', :platform => :jruby
|
233
237
|
```
|
234
238
|
|
235
239
|
When you `require 'bundler/setup'` everything will be set up for you as expected.
|
@@ -238,13 +242,13 @@ When you `require 'bundler/setup'` everything will be set up for you as expected
|
|
238
242
|
|
239
243
|
Install the needed gems with JRuby, for example:
|
240
244
|
|
241
|
-
gem install activerecord -v "~>
|
242
|
-
gem install activerecord-jdbc-adapter --ignore-dependencies
|
245
|
+
gem install activerecord -v "~> 6.0.3"
|
246
|
+
gem install activerecord-jdbc-adapter -v "~> 60.2" --ignore-dependencies
|
243
247
|
|
244
248
|
If you wish to use the adapter for a specific database, you can install it
|
245
249
|
directly and the (jdbc-) driver gem (dependency) will be installed as well:
|
246
250
|
|
247
|
-
jruby -S gem install activerecord-jdbcmysql-adapter
|
251
|
+
jruby -S gem install activerecord-jdbcmysql-adapter -v "~> 60.2"
|
248
252
|
|
249
253
|
Your program should include:
|
250
254
|
|
@@ -284,7 +288,7 @@ ask on the #JRuby IRC channel on http://freenode.net/ (try [web-chat][6]).
|
|
284
288
|
This project was originally written by [Nick Sieger](http://github.com/nicksieger)
|
285
289
|
and [Ola Bini](http://github.com/olabini) with lots of help from the JRuby community.
|
286
290
|
Polished 3.x compatibility and 4.x support (for AR-JDBC >= 1.3.0) was managed by
|
287
|
-
[Karol Bucek](http://github.com/kares) among others. Support for Rails 6 was
|
291
|
+
[Karol Bucek](http://github.com/kares) among others. Support for Rails 6.0 and 6.1 was
|
288
292
|
contributed by [shellyBits GmbH](https://shellybits.ch/)
|
289
293
|
|
290
294
|
## License
|
@@ -34,14 +34,14 @@ Gem::Specification.new do |gem|
|
|
34
34
|
#gem.requirements << "jar org.postgresql:postgresql, 42.1.4.jre6, :scope => :compile"
|
35
35
|
|
36
36
|
# compilation .jar dependencies for extension (at least until `mvn') :
|
37
|
-
gem.add_development_dependency 'jdbc-mysql', '~>
|
37
|
+
gem.add_development_dependency 'jdbc-mysql', '~> 8.0.0'
|
38
38
|
gem.add_development_dependency 'jdbc-postgres', '~> 42.1'
|
39
39
|
end
|
40
40
|
|
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'
|
@@ -5,8 +5,8 @@ Gem::Specification.new do |gem|
|
|
5
5
|
path = File.expand_path('lib/arjdbc/version.rb', File.dirname(__FILE__))
|
6
6
|
gem.version = File.read(path).match( /.*VERSION\s*=\s*['"](.*)['"]/m )[1]
|
7
7
|
gem.platform = 'java' # due jar-dependencies to resolve requirements for ext
|
8
|
-
gem.authors = ['Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors']
|
9
|
-
gem.email = ['nick@nicksieger.com', 'ola.bini@gmail.com', 'self@kares.org']
|
8
|
+
gem.authors = ['Nick Sieger, Ola Bini, Karol Bucek, Jesse Chavez, and JRuby contributors']
|
9
|
+
gem.email = ['nick@nicksieger.com', 'ola.bini@gmail.com', 'self@kares.org', 'jesse.chavez.r@gmail.com']
|
10
10
|
gem.homepage = 'https://github.com/JesseChavez/activerecord-jdbc-adapter'
|
11
11
|
gem.license = 'BSD-2-Clause'
|
12
12
|
gem.summary = 'ActiveRecord JDBC adapter, for use within JRuby on Rails and SQL Server'
|
@@ -36,19 +36,19 @@ Gem::Specification.new do |gem|
|
|
36
36
|
#gem.requirements << "jar org.postgresql:postgresql, 42.1.4.jre6, :scope => :compile"
|
37
37
|
|
38
38
|
# compilation .jar dependencies for extension (at least until `mvn') :
|
39
|
-
gem.add_development_dependency 'jdbc-mysql', '~>
|
39
|
+
gem.add_development_dependency 'jdbc-mysql', '~> 8.0.0'
|
40
40
|
gem.add_development_dependency 'jdbc-postgres', '~> 42.1'
|
41
41
|
end
|
42
42
|
|
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', '~> 6.
|
46
|
+
gem.add_dependency 'activerecord', '~> 6.1.0'
|
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'
|
50
50
|
#gem.add_development_dependency 'mocha', '~> 0.13.1'
|
51
51
|
|
52
|
-
gem.rdoc_options = ["--main", "README.md", "-
|
52
|
+
gem.rdoc_options = ["--main", "README.md", "-HN", "-f", "darkfish"]
|
53
53
|
end
|
54
54
|
|
@@ -51,6 +51,11 @@ module Arel
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
def visit_Arel_Nodes_Grouping(o, collector)
|
55
|
+
remove_invalid_ordering_from_select_statement(o.expr)
|
56
|
+
super
|
57
|
+
end
|
58
|
+
|
54
59
|
def visit_Arel_Nodes_SelectStatement o, collector
|
55
60
|
@select_statement = o
|
56
61
|
distinct_One_As_One_Is_So_Not_Fetch o
|
@@ -183,9 +188,11 @@ module Arel
|
|
183
188
|
|
184
189
|
def make_Fetch_Possible_And_Deterministic o
|
185
190
|
return if o.limit.nil? && o.offset.nil?
|
191
|
+
|
186
192
|
t = table_From_Statement o
|
187
193
|
pk = primary_Key_From_Table t
|
188
194
|
return unless pk
|
195
|
+
|
189
196
|
if o.orders.empty?
|
190
197
|
# Prefer deterministic vs a simple `(SELECT NULL)` expr.
|
191
198
|
o.orders = [pk.asc]
|
@@ -221,6 +228,7 @@ module Arel
|
|
221
228
|
|
222
229
|
def primary_Key_From_Table t
|
223
230
|
return unless t
|
231
|
+
|
224
232
|
# column_name = schema_cache.primary_keys(t.name) || column_cache(t.name).first.try(:second).try(:name)
|
225
233
|
# NOTE: for table name aliases columns_hash('table_alias') requires to return an empty hash.
|
226
234
|
column_name = @connection.schema_cache.primary_keys(t.name) ||
|
@@ -234,6 +242,14 @@ module Arel
|
|
234
242
|
).quoted
|
235
243
|
end
|
236
244
|
|
245
|
+
# Need to remove ordering from subqueries unless TOP/OFFSET also used. Otherwise, SQLServer
|
246
|
+
# returns error "The ORDER BY clause is invalid in views, inline functions, derived tables,
|
247
|
+
# subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified."
|
248
|
+
def remove_invalid_ordering_from_select_statement(node)
|
249
|
+
return unless Arel::Nodes::SelectStatement === node
|
250
|
+
|
251
|
+
node.orders = [] unless node.offset || node.limit
|
252
|
+
end
|
237
253
|
end
|
238
254
|
end
|
239
255
|
end
|
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
|
data/lib/arjdbc/mssql.rb
CHANGED
data/lib/arjdbc/mssql/adapter.rb
CHANGED
@@ -224,7 +224,7 @@ module ActiveRecord
|
|
224
224
|
|
225
225
|
# FIXME: This needs to be fixed when we implement the collation per
|
226
226
|
# column basis. At the moment we only use the global database collation
|
227
|
-
def default_uniqueness_comparison(attribute, value
|
227
|
+
def default_uniqueness_comparison(attribute, value) # :nodoc:
|
228
228
|
column = column_for_attribute(attribute)
|
229
229
|
|
230
230
|
if [:string, :text].include?(column.type) && collation && !collation.match(/_CS/) && !value.nil?
|
@@ -313,6 +313,8 @@ module ActiveRecord
|
|
313
313
|
|
314
314
|
def translate_exception(exception, message:, sql:, binds:)
|
315
315
|
case message
|
316
|
+
when /no connection available/i
|
317
|
+
ConnectionNotEstablished.new(exception)
|
316
318
|
when /(cannot insert duplicate key .* with unique index) | (violation of unique key constraint)/i
|
317
319
|
RecordNotUnique.new(message, sql: sql, binds: binds)
|
318
320
|
when /Lock request time out period exceeded/i
|
data/lib/arjdbc/mssql/column.rb
CHANGED
@@ -5,8 +5,10 @@ module ActiveRecord
|
|
5
5
|
# MSSQL specific extensions to column definitions in a table.
|
6
6
|
class MSSQLColumn < Column
|
7
7
|
attr_reader :table_name
|
8
|
+
|
8
9
|
def initialize(name, raw_default, sql_type_metadata = nil, null = true, table_name = nil, default_function = nil, collation = nil, comment: nil)
|
9
10
|
@table_name = table_name
|
11
|
+
|
10
12
|
default = extract_default(raw_default)
|
11
13
|
|
12
14
|
super(name, default, sql_type_metadata, null, default_function, collation: collation, comment: comment)
|
@@ -28,6 +30,18 @@ module ActiveRecord
|
|
28
30
|
sql_type.downcase.include? 'identity'
|
29
31
|
end
|
30
32
|
|
33
|
+
def ==(other)
|
34
|
+
other.is_a?(MSSQLColumn) &&
|
35
|
+
super &&
|
36
|
+
table_name == other.table_name
|
37
|
+
end
|
38
|
+
alias :eql? :==
|
39
|
+
|
40
|
+
def hash
|
41
|
+
MSSQLColumn.hash ^
|
42
|
+
super.hash ^
|
43
|
+
table_name.hash
|
44
|
+
end
|
31
45
|
end
|
32
46
|
end
|
33
47
|
end
|