activerecord-jdbc-alt-adapter 52.2.1-java → 52.6.0-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdc3dc225b64df97a0f01e4459cd12dc6a0fd1c15d1100bb4529027ef4555d37
4
- data.tar.gz: 6643b6a66e4de271516e7e6b94edf9efd4c82026e1f099418e031fbf3adac7b3
3
+ metadata.gz: 0bbef112a6aaadd08c19169b2e2b1826e99a44f38f2d2b2e3b441383ab95b91b
4
+ data.tar.gz: 444be17b783f8b937d57cdbd47260b79f4d69a75117523b4848ec9171d082c85
5
5
  SHA512:
6
- metadata.gz: 3b29ee819acda10d5fdb9fe2b334098bd19925e61331c1cfd2c6cc3c66191d756765b7a69f13b28f1e8eea4d995c3bce62d9e499aeb3d067cf49e2e2156e42ef
7
- data.tar.gz: e094007eba9a26555506d8e4c6b8267ece09791ee03053fd81f9a08e541eed834634e3ff2336220111b3fd7f8abf9cfe073da9564e8040287ae70e035ba3033e
6
+ metadata.gz: bc41292328eb23e4d84a13fcc5213c1a44780ee974c207b930ca17357304f7feef2497a3642c231ef350d91d371e631a108e72d74da8d5c734d5f3194257c76c
7
+ data.tar.gz: d2a6656b88aa2432a54b9de7b27066847136de6857b6848901d3f3551dd65f5aa92787dfc9f83c7e44195509faf86416eb59ef9a04627499dc4883388882df04
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.tgz
3
3
  *~
4
4
  *.log
5
+ /log/
5
6
  patches*
6
7
  *#
7
8
  TAGS
@@ -33,3 +34,5 @@ activerecord-jdbc.iml
33
34
  lib/arjdbc/jdbc/adapter_java.jar
34
35
  .jrubyrc
35
36
  tags
37
+ pik.sh
38
+ .ruby-version
@@ -1,18 +1,27 @@
1
- language: ruby
2
1
  sudo: false
3
- branches:
4
- only:
5
- - master
6
- - /.*-stable$/
7
- - /^test-.*/
8
- - /maintenance|support/
9
- - /.*dev$/
10
- bundler_args: --without development
11
- script: bundle exec rake ${TEST_PREFIX}test_$DB
2
+ dist: xenial
3
+
4
+ services:
5
+ - mysql
6
+ addons:
7
+ postgresql: 9.4
8
+
12
9
  before_install:
13
10
  - unset _JAVA_OPTIONS
14
11
  - rvm @default,@global do gem uninstall bundler -a -x -I || true
15
12
  - gem install bundler -v "~>1.17.3"
13
+ install:
14
+ - bundle install --retry 3 --without development
15
+ # to fix this issue: https://travis-ci.community/t/mariadb-10-1-fails-to-install-on-xenial/3151/3
16
+ - mysql -u root -e 'CREATE USER IF NOT EXISTS travis@localhost; GRANT ALL ON *.* TO travis@localhost;' || true
17
+
18
+ language: ruby
19
+ rvm:
20
+ - jruby-9.1.16.0
21
+ jdk:
22
+ - openjdk8
23
+
24
+ script: bundle exec rake ${TEST_PREFIX}test_$DB
16
25
  before_script:
17
26
  - echo "JAVA_OPTS=$JAVA_OPTS"
18
27
  - export JRUBY_OPTS="-J-Xms64M -J-Xmx1024M"
@@ -38,12 +47,7 @@ before_script:
38
47
  psql -c "create database activerecord_unittest;" -U postgres && \
39
48
  psql -c "create database activerecord_unittest2;" -U postgres \
40
49
  || true
41
- rvm:
42
- - jruby-9.1.16.0
43
- jdk:
44
- - openjdk8
45
- addons:
46
- postgresql: "9.4"
50
+
47
51
  env:
48
52
  - DB=mysql2 PREPARED_STATEMENTS=false
49
53
  - DB=mysql2 PREPARED_STATEMENTS=true
@@ -86,10 +90,10 @@ matrix:
86
90
  env: DB=sqlite3
87
91
  # testing against MariaDB
88
92
  - addons:
89
- mariadb: '10.0'
93
+ mariadb: 10.2
90
94
  env: DB=mariadb PREPARED_STATEMENTS=false
91
95
  - addons:
92
- mariadb: '10.1'
96
+ mariadb: 10.3
93
97
  env: DB=mariadb PREPARED_STATEMENTS=true
94
98
  # Rails test-suite :
95
99
  - env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.2.3" # PS off by default
data/Gemfile CHANGED
@@ -48,7 +48,7 @@ group :test do
48
48
  gem 'mocha', '~> 1.2', require: false # Rails has '~> 0.14'
49
49
 
50
50
  gem 'bcrypt', '~> 3.1.11', require: false
51
- gem 'jdbc-mssql', '~> 0.6.0', require: nil
51
+ gem 'jdbc-mssql', '~> 0.7.0', require: nil
52
52
  # gem 'pry-debugger-jruby', platform: :jruby
53
53
  end
54
54
 
data/README.md CHANGED
@@ -8,9 +8,9 @@ use the [original adapter](https://github.com/jruby/active)
8
8
  This adapter only works with JRuby and it is advised to install the latest
9
9
  stable versions of Rails
10
10
 
11
- - For Rails `5.0.7.2` install the `50.3.1` version of this adapter
12
- - For Rails `5.1.7` install the `51.3.0` version of this adapter
13
- - For Rails `5.2.3` install the `52.2.0` version of this adapter
11
+ - For Rails `5.0.7` install the `50.7.0` version of this adapter
12
+ - For Rails `5.1.7` install the `51.7.0` version of this adapter
13
+ - For Rails `5.2.4` install the `52.6.0` version of this adapter
14
14
 
15
15
  Support for Rails 6.0 is planned in the future.
16
16
 
@@ -24,8 +24,8 @@ Add the following to your `Gemfile`:
24
24
  ```ruby
25
25
  platforms :jruby do
26
26
  # Use jdbc as the database for Active Record
27
- gem 'activerecord-jdbc-alt-adapter', '~> 50.3.1', require: 'arjdbc'
28
- gem 'jdbc-mssql', '~> 0.6.0'
27
+ gem 'activerecord-jdbc-alt-adapter', '~> 52.6.0'
28
+ gem 'jdbc-mssql', '~> 0.9.0'
29
29
  end
30
30
  ```
31
31
 
@@ -117,15 +117,16 @@ this adapter should just work.
117
117
  ActiveRecord-JDBC-Adapter (AR-JDBC) is the main database adapter for Rails'
118
118
  *ActiveRecord* component that can be used with [JRuby][0].
119
119
  ActiveRecord-JDBC-Adapter provides full or nearly full support for:
120
- **MySQL**, **PostgreSQL**, **SQLite3**. In the near future there are plans to
121
- add support **MSSQL**. Unless we get more contributions we will not be going
122
- beyond these four adapters. Note that the amount of work needed to get
123
- another adapter is not huge but the amount of testing required to make sure
124
- that adapter continues to work is not something we can do with the resources
125
- we currently have.
120
+ **MySQL**, **PostgreSQL**, **SQLite3** and **MSSQL*** (SQLServer).
126
121
 
127
- For Oracle database users you are encouraged to use
128
- https://github.com/rsim/oracle-enhanced.
122
+ Unless we get more contributions we will not be supporting more adapters.
123
+ Note that the amount of work needed to get another adapter is not huge but
124
+ the amount of testing required to make sure that adapter continues to work
125
+ is not something we can do with the resources we currently have.
126
+
127
+ - for **Oracle** database users you are encouraged to use
128
+ https://github.com/rsim/oracle-enhanced
129
+ - **MSSQL** adapter's gem parts reside in a [separate repository][8]
129
130
 
130
131
  Versions are targeted at certain versions of Rails and live on their own branches.
131
132
 
@@ -151,6 +152,7 @@ adapters are available:
151
152
  - MySQL (`activerecord-jdbcmysql-adapter`)
152
153
  - PostgreSQL (`activerecord-jdbcpostgresql-adapter`)
153
154
  - SQLite3 (`activerecord-jdbcsqlite3-adapter`)
155
+ - MSSQL (`activerecord-jdbcsqlserver-adapter`)
154
156
 
155
157
  2. If you're generating a new Rails application, use the following command:
156
158
 
@@ -285,4 +287,4 @@ license the database's drivers are licensed. See each driver gem's LICENSE.txt.
285
287
  [5]: https://github.com/jruby/activerecord-jdbc-adapter/wiki
286
288
  [6]: https://webchat.freenode.net/?channels=#jruby
287
289
  [7]: http://badge.fury.io/rb/activerecord-jdbc-adapter
288
- [8]: https://github.com/jruby/activerecord-jdbc-adapter/wiki/Migrating-from-1.2.x-to-1.3.0
290
+ [8]: https://github.com/jruby/activerecord-jdbcsqlserver-adapter
data/Rakefile CHANGED
@@ -1,3 +1,29 @@
1
+ # Common usage
2
+ #
3
+ # rake build:adapters - to build all specific adapter gems and the base gem
4
+ # rake release:do - build:adapters + git tag + push gems
5
+ #
6
+ # Environment variables used by this Rakefile:
7
+ #
8
+ # INCLUDE_JAR_IN_GEM [default task - false, other taks - true]:
9
+ # Note: This is something you should not normally have to set.
10
+ # For local development we always will end up including the jar file
11
+ # in any task which generates our main gem. The wrinkle to this
12
+ # is when we do a custom github link in bundler:
13
+ #
14
+ # gem 'ar-jdbc', github: '...'
15
+ #
16
+ # Because we stopped committing a .jar file for every change and so when
17
+ # we include a gem like this it clones the repository and does a default
18
+ # build in rake. This in turn will end up forcing a compile to generate
19
+ # that jar (similar to how c-extensions compile at the time of install).
20
+ # For shipped gems we do include the jar so that people do not require
21
+ # this compile step.
22
+ #
23
+ # NOOP [release:do - false]
24
+ #
25
+ # No commands or gem pushing during a release.
26
+
1
27
  require 'rake/clean'
2
28
 
3
29
  CLEAN.include 'derby*', 'test.db.*', '*test.sqlite3', 'test/reports'
@@ -38,7 +64,8 @@ rake = lambda { |task| ruby "-S", "rake", task }
38
64
 
39
65
  desc "Build #{gem_name} gem into the pkg directory."
40
66
  task :build => :jar do
41
- sh("RELEASE=#{ENV['RELEASE']} gem build -V '#{gemspec_path}'") do
67
+ include_jar = ENV['INCLUDE_JAR_IN_GEM'] || 'true'
68
+ sh("INCLUDE_JAR_IN_GEM=#{include_jar} gem build -V '#{gemspec_path}'") do
42
69
  gem_path = built_gem_path.call
43
70
  file_name = File.basename(gem_path)
44
71
  FileUtils.mkdir_p(File.join(base_dir, 'pkg'))
@@ -58,7 +85,6 @@ end
58
85
 
59
86
  desc "Releasing AR-JDBC gems (use NOOP=true to disable gem pushing)"
60
87
  task 'release:do' do
61
- ENV['RELEASE'] = 'true' # so that .gemspec is built with adapter_java.jar
62
88
  Rake::Task['build'].invoke
63
89
  # Rake::Task['build:adapters'].invoke
64
90
 
@@ -257,7 +283,7 @@ if defined? JRUBY_VERSION
257
283
  begin
258
284
  require 'arjdbc/version'
259
285
  rescue LoadError
260
- path = File.expand_path('../lib', File.dirname(__FILE__))
286
+ path = File.expand_path('lib', File.dirname(__FILE__))
261
287
  unless $LOAD_PATH.include?(path)
262
288
  $LOAD_PATH << path; retry
263
289
  end
@@ -297,7 +323,7 @@ if defined? JRUBY_VERSION
297
323
  # class_files.gsub!('$', '\$') unless windows?
298
324
  # args = class_files.map { |path| [ "-C #{classes_dir}", path ] }.flatten
299
325
 
300
- if ENV['RELEASE'] == 'true'; require 'tempfile'
326
+ if ENV['INCLUDE_JAR_IN_GEM'] == 'true'; require 'tempfile'
301
327
  manifest = "Built-Time: #{Time.now.utc.strftime('%Y-%m-%d %H:%M:%S')}\n"
302
328
  manifest += "Built-JRuby: #{JRUBY_VERSION}\n"
303
329
  manifest += "Specification-Title: ActiveRecord-JDBC\n"
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
27
27
  reject { |f| f =~ /^(gemfiles)/ } # no tests - no Gemfile_s appraised ...
28
28
  gem.files += ['lib/arjdbc/jdbc/adapter_java.jar'] #if ENV['RELEASE'].eql?('true')
29
29
 
30
- if ENV['RELEASE'] != 'true' # @see Rakefile
30
+ if ENV['INCLUDE_JAR_IN_GEM'] != 'true' # @see Rakefile
31
31
  gem.extensions << 'Rakefile' # to support auto-building .jar with :git paths
32
32
 
33
33
  #gem.add_runtime_dependency 'jar-dependencies', '~> 0.1' # development not enough!
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.license = 'BSD-2-Clause'
12
12
  gem.summary = 'ActiveRecord JDBC adapter, for use within JRuby on Rails and SQL Server'
13
13
  gem.description = "" <<
14
- "Fork of the ActiveRecord JDBC adapter with support for SQL Server/Azure SQL, " <<
14
+ "Fork of the ActiveRecord JDBC adapter with support for SQL Server and Azure SQL, " <<
15
15
  "for more information and help look at the README file in the github repository. " <<
16
16
  "AR-JDBC is a database adapter for Rails' ActiveRecord component designed " <<
17
17
  "to be used with JRuby built upon Java's JDBC API for database access. " <<
@@ -29,7 +29,7 @@ Gem::Specification.new do |gem|
29
29
  reject { |f| f =~ /^(gemfiles)/ } # no tests - no Gemfile_s appraised ...
30
30
  gem.files += ['lib/arjdbc/jdbc/adapter_java.jar'] #if ENV['RELEASE'].eql?('true')
31
31
 
32
- if ENV['RELEASE'] != 'true' # @see Rakefile
32
+ if ENV['INCLUDE_JAR_IN_GEM'] != 'true' # @see Rakefile
33
33
  gem.extensions << 'Rakefile' # to support auto-building .jar with :git paths
34
34
 
35
35
  #gem.add_runtime_dependency 'jar-dependencies', '~> 0.1' # development not enough!
@@ -0,0 +1 @@
1
+ require 'arjdbc'
@@ -56,7 +56,7 @@ module ArJdbc
56
56
  case e
57
57
  when SystemExit, SignalException, NoMemoryError then e
58
58
  when ActiveModel::RangeError, TypeError, RuntimeError then e
59
- else ActiveRecord::StatementInvalid.new(message)
59
+ else super
60
60
  end
61
61
  end
62
62
 
@@ -10,11 +10,13 @@ module ArJdbc
10
10
  NO_BINDS = [].freeze
11
11
 
12
12
  def exec_insert(sql, name = nil, binds = NO_BINDS, pk = nil, sequence_name = nil)
13
+ binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
14
+
13
15
  if without_prepared_statement?(binds)
14
- log(sql, name) { @connection.execute_insert(sql) }
16
+ log(sql, name) { @connection.execute_insert_pk(sql, pk) }
15
17
  else
16
18
  log(sql, name, binds) do
17
- @connection.execute_insert(sql, binds)
19
+ @connection.execute_insert_pk(sql, binds, pk)
18
20
  end
19
21
  end
20
22
  end
@@ -22,6 +24,8 @@ module ArJdbc
22
24
  # It appears that at this point (AR 5.0) "prepare" should only ever be true
23
25
  # if prepared statements are enabled
24
26
  def exec_query(sql, name = nil, binds = NO_BINDS, prepare: false)
27
+ binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
28
+
25
29
  if without_prepared_statement?(binds)
26
30
  log(sql, name) { @connection.execute_query(sql) }
27
31
  else
@@ -34,6 +38,8 @@ module ArJdbc
34
38
  end
35
39
 
36
40
  def exec_update(sql, name = nil, binds = NO_BINDS)
41
+ binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
42
+
37
43
  if without_prepared_statement?(binds)
38
44
  log(sql, name) { @connection.execute_update(sql) }
39
45
  else
@@ -42,25 +48,6 @@ module ArJdbc
42
48
  end
43
49
  alias :exec_delete :exec_update
44
50
 
45
- # overridden to support legacy binds
46
- def insert(arel, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])
47
- binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
48
- super
49
- end
50
- alias create insert
51
-
52
- # overridden to support legacy binds
53
- def update(arel, name = nil, binds = [])
54
- binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
55
- super
56
- end
57
-
58
- # overridden to support legacy binds
59
- def delete(arel, name = nil, binds = [])
60
- binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
61
- super
62
- end
63
-
64
51
  def execute(sql, name = nil)
65
52
  log(sql, name) { @connection.execute(sql) }
66
53
  end
@@ -2,12 +2,8 @@ require 'active_support/deprecation'
2
2
 
3
3
  module ArJdbc
4
4
 
5
- # @private
6
- AR40 = ::ActiveRecord::VERSION::MAJOR > 3
7
5
  # @private
8
6
  AR42 = ::ActiveRecord::VERSION::STRING >= '4.2'
9
- # @private
10
- AR50 = ::ActiveRecord::VERSION::MAJOR > 4
11
7
 
12
8
  # @private
13
9
  AR52 = ::ActiveRecord::VERSION::STRING >= '5.2'
@@ -28,17 +28,13 @@ module ActiveRecord
28
28
 
29
29
  if ArJdbc::AR52
30
30
  # undefined method `cast' for #<ActiveRecord::ConnectionAdapters::SqlTypeMetadata> on AR52
31
- elsif ArJdbc::AR50
31
+ else
32
32
  default = args[0].cast(default)
33
33
 
34
34
  sql_type = args.delete_at(1)
35
35
  type = args.delete_at(0)
36
36
 
37
37
  args.unshift(SqlTypeMetadata.new(:sql_type => sql_type, :type => type))
38
- elsif ArJdbc::AR42
39
- default = args[0].type_cast_from_database(default)
40
- else
41
- default = default_value(default)
42
38
  end
43
39
 
44
40
  # super <= 4.1: (name, default, sql_type = nil, null = true)
@@ -85,6 +85,12 @@ module ActiveRecord
85
85
  ::ActiveRecord::ConnectionAdapters::MSSQLColumn
86
86
  end
87
87
 
88
+ # Does this adapter support DDL rollbacks in transactions? That is, would
89
+ # CREATE TABLE or ALTER TABLE get rolled back by a transaction?
90
+ def supports_ddl_transactions?
91
+ true
92
+ end
93
+
88
94
  # Does this adapter support creating foreign key constraints?
89
95
  def supports_foreign_keys?
90
96
  true
@@ -100,6 +106,16 @@ module ActiveRecord
100
106
  true
101
107
  end
102
108
 
109
+ # Does this adapter support index sort order?
110
+ def supports_index_sort_order?
111
+ true
112
+ end
113
+
114
+ # Also known as filtered index
115
+ def supports_partial_index?
116
+ true
117
+ end
118
+
103
119
  # Does this adapter support views?
104
120
  def supports_views?
105
121
  true
@@ -116,6 +132,13 @@ module ActiveRecord
116
132
  super
117
133
  end
118
134
 
135
+ def reset!
136
+ # execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
137
+ # NOTE: it seems the above line interferes with the jdbc driver
138
+ # and ending up in connection closed, issue seen in rails 5.2 and 6.0
139
+ reconnect!
140
+ end
141
+
119
142
  def disable_referential_integrity
120
143
  tables = tables_with_referential_integrity
121
144
 
@@ -200,21 +223,11 @@ module ActiveRecord
200
223
  end
201
224
 
202
225
  def configure_connection
203
- execute("SET LOCK_TIMEOUT #{lock_timeout}")
226
+ # Here goes initial settings per connection
204
227
 
205
228
  set_session_transaction_isolation
206
229
  end
207
230
 
208
- def lock_timeout
209
- timeout = config[:lock_timeout].to_i
210
-
211
- if timeout.positive?
212
- timeout
213
- else
214
- 5_000
215
- end
216
- end
217
-
218
231
  def set_session_transaction_isolation
219
232
  isolation_level = config[:transaction_isolation]
220
233
 
@@ -52,6 +52,8 @@ ArJdbc::ConnectionMethods.module_eval do
52
52
 
53
53
  # @note Assumes SQLServer SQL-JDBC driver on the class-path.
54
54
  def sqlserver_connection(config)
55
+ config = config.deep_dup
56
+
55
57
  config[:adapter_spec] ||= ::ArJdbc::MSSQL
56
58
  config[:adapter_class] = ActiveRecord::ConnectionAdapters::MSSQLAdapter unless config.key?(:adapter_class)
57
59
 
@@ -60,6 +62,7 @@ ArJdbc::ConnectionMethods.module_eval do
60
62
  config[:host] ||= 'localhost'
61
63
  config[:driver] ||= 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
62
64
  config[:connection_alive_sql] ||= 'SELECT 1'
65
+ config[:lock_timeout] ||= 5000
63
66
 
64
67
  config[:url] ||= begin
65
68
  url = "jdbc:sqlserver://#{config[:host]}"
@@ -67,6 +70,8 @@ ArJdbc::ConnectionMethods.module_eval do
67
70
  url << "databaseName=#{config[:database]};" if config[:database]
68
71
  url << "instanceName=#{config[:instance]};" if config[:instance]
69
72
  url << "sendTimeAsDatetime=#{config[:send_time_as_datetime] || false};"
73
+ url << "loginTimeout=#{config[:login_timeout].to_i};" if config[:login_timeout]
74
+ url << "lockTimeout=#{config[:lock_timeout].to_i};"
70
75
  app = config[:appname] || config[:application]
71
76
  url << "applicationName=#{app};" if app
72
77
  isc = config[:integrated_security] # Win only - needs sqljdbc_auth.dll