activerecord-jdbc-alt-adapter 60.1.0-java → 61.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
|