activerecord-jdbc-adapter 51.8-java → 52.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/.travis.yml +26 -51
- data/README.md +9 -11
- data/Rakefile +19 -74
- data/activerecord-jdbc-adapter.gemspec +2 -2
- data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +1 -0
- data/lib/arjdbc/abstract/core.rb +2 -12
- data/lib/arjdbc/abstract/database_statements.rb +24 -10
- data/lib/arjdbc/abstract/statement_cache.rb +4 -4
- data/lib/arjdbc/db2/adapter.rb +52 -2
- data/lib/arjdbc/jdbc.rb +4 -0
- data/lib/arjdbc/jdbc/column.rb +11 -5
- data/lib/arjdbc/jdbc/connection_methods.rb +9 -2
- data/lib/arjdbc/jdbc/jdbc.rake +4 -0
- data/lib/arjdbc/mssql.rb +7 -0
- data/lib/arjdbc/mssql/adapter.rb +804 -0
- data/lib/arjdbc/mssql/column.rb +200 -0
- data/lib/arjdbc/mssql/connection_methods.rb +79 -0
- data/lib/arjdbc/mssql/explain_support.rb +99 -0
- data/lib/arjdbc/mssql/limit_helpers.rb +231 -0
- data/lib/arjdbc/mssql/lock_methods.rb +77 -0
- data/lib/arjdbc/mssql/types.rb +343 -0
- data/lib/arjdbc/mssql/utils.rb +82 -0
- data/lib/arjdbc/mysql/adapter.rb +22 -14
- data/lib/arjdbc/mysql/connection_methods.rb +9 -18
- data/lib/arjdbc/postgresql/adapter.rb +102 -75
- data/lib/arjdbc/postgresql/column.rb +3 -6
- data/lib/arjdbc/postgresql/connection_methods.rb +3 -12
- data/lib/arjdbc/postgresql/oid_types.rb +12 -86
- data/lib/arjdbc/sqlite3/adapter.rb +88 -92
- data/lib/arjdbc/sqlite3/connection_methods.rb +0 -1
- data/lib/arjdbc/tasks/database_tasks.rb +36 -16
- data/lib/arjdbc/tasks/databases.rake +75 -32
- data/lib/arjdbc/tasks/databases3.rake +215 -0
- data/lib/arjdbc/tasks/databases4.rake +39 -0
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/01-tomcat.rake +2 -2
- data/rakelib/02-test.rake +3 -0
- data/rakelib/compile.rake +70 -0
- data/rakelib/db.rake +7 -21
- data/rakelib/rails.rake +4 -5
- data/src/java/arjdbc/ArJdbcModule.java +15 -5
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +2 -2
- data/src/java/arjdbc/jdbc/ConnectionFactory.java +87 -0
- data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +1 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +29 -113
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +14 -310
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +2 -2
- data/src/java/arjdbc/postgresql/PgResultSetMetaDataWrapper.java +23 -0
- data/src/java/arjdbc/postgresql/PostgreSQLResult.java +13 -21
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +50 -44
- data/src/java/arjdbc/util/DateTimeUtils.java +5 -141
- data/src/java/arjdbc/util/QuotingUtils.java +7 -6
- metadata +26 -11
- data/src/java/arjdbc/jdbc/RubyConnectionFactory.java +0 -61
- data/src/java/arjdbc/postgresql/PgDateTimeUtils.java +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4e30effdf5519398605801e776e032f385bba8da0008c15bdda99426ac0b2ee
|
4
|
+
data.tar.gz: 5c3075c02b57070186442fd4d8e88252ffab2db0f06ebed390dcdeb7556a27ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01c8df592aec36d47474c1968ff73e39f68414a3a3fbde27fcaa5c24fe078ee8cddb2b3f750d580660d567fb3323511e7ad9781913bb6fe658797a9445b42bce
|
7
|
+
data.tar.gz: 1940e41e96e0ac3af73bb0bbdd1dcc75c9c07554e2d3c05a8cc3bf3562cbd9fa9593919a8159c151577463ad676be42b92b2b61089efdebc9ad94fff34596ec7
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,27 +1,9 @@
|
|
1
|
+
language: ruby
|
1
2
|
sudo: false
|
2
|
-
|
3
|
-
|
4
|
-
services:
|
5
|
-
- mysql
|
6
|
-
addons:
|
7
|
-
postgresql: 9.4
|
8
|
-
|
3
|
+
bundler_args: --without development
|
4
|
+
script: bundle exec rake ${TEST_PREFIX}test_$DB
|
9
5
|
before_install:
|
10
6
|
- unset _JAVA_OPTIONS
|
11
|
-
- rvm @default,@global do gem uninstall bundler -a -x -I || true
|
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
|
25
7
|
before_script:
|
26
8
|
- echo "JAVA_OPTS=$JAVA_OPTS"
|
27
9
|
- export JRUBY_OPTS="-J-Xms64M -J-Xmx1024M"
|
@@ -39,15 +21,18 @@ before_script:
|
|
39
21
|
mysql -e "grant all privileges on activerecord_unittest.* to rails@localhost;" && \
|
40
22
|
mysql -e "grant all privileges on activerecord_unittest2.* to rails@localhost;" && \
|
41
23
|
mysql -e "grant all privileges on inexistent_activerecord_unittest.* to rails@localhost;" && \
|
42
|
-
mysql -e "CREATE DATABASE activerecord_unittest
|
43
|
-
mysql -e "CREATE DATABASE activerecord_unittest2
|
24
|
+
mysql -e "CREATE DATABASE activerecord_unittest;" && \
|
25
|
+
mysql -e "CREATE DATABASE activerecord_unittest2;" \
|
44
26
|
|| true
|
45
27
|
- |
|
46
28
|
[ "$DB" == "postgresql" ] && [ "$TEST_PREFIX" == "rails:" ] && \
|
47
29
|
psql -c "create database activerecord_unittest;" -U postgres && \
|
48
30
|
psql -c "create database activerecord_unittest2;" -U postgres \
|
49
31
|
|| true
|
50
|
-
|
32
|
+
rvm:
|
33
|
+
- jruby-9.1.16.0
|
34
|
+
jdk:
|
35
|
+
- openjdk8
|
51
36
|
env:
|
52
37
|
- DB=mysql2 PREPARED_STATEMENTS=false
|
53
38
|
- DB=mysql2 PREPARED_STATEMENTS=true
|
@@ -58,29 +43,19 @@ env:
|
|
58
43
|
- DB=postgresql PREPARED_STATEMENTS=true INSERT_RETURNING=true
|
59
44
|
- DB=sqlite3 PREPARED_STATEMENTS=false
|
60
45
|
- DB=sqlite3 PREPARED_STATEMENTS=true
|
61
|
-
|
62
|
-
|
46
|
+
#- DB=jndi PREPARED_STATEMENTS=false
|
47
|
+
#- DB=jndi PREPARED_STATEMENTS=true
|
48
|
+
branches:
|
49
|
+
only:
|
50
|
+
- master
|
51
|
+
- /.*-stable$/
|
52
|
+
- /^test-.*/
|
53
|
+
- /maintenance|support/
|
54
|
+
- /.*dev$/
|
63
55
|
matrix:
|
64
56
|
allow_failures:
|
65
57
|
- rvm: jruby-head
|
66
58
|
include:
|
67
|
-
# jruby-9.2
|
68
|
-
- rvm: jruby-9.2.6.0
|
69
|
-
env: DB=mysql2
|
70
|
-
- rvm: jruby-9.2.6.0
|
71
|
-
env: DB=postgresql
|
72
|
-
- rvm: jruby-9.2.6.0
|
73
|
-
env: DB=sqlite3
|
74
|
-
# jruby-9.2 + Java 11
|
75
|
-
- rvm: jruby-9.2.6.0
|
76
|
-
env: DB=mysql2
|
77
|
-
jdk: openjdk11
|
78
|
-
- rvm: jruby-9.2.6.0
|
79
|
-
env: DB=postgresql
|
80
|
-
jdk: openjdk11
|
81
|
-
- rvm: jruby-9.2.6.0
|
82
|
-
env: DB=sqlite3
|
83
|
-
jdk: openjdk11
|
84
59
|
# jruby-head
|
85
60
|
- rvm: jruby-head
|
86
61
|
env: DB=mysql2
|
@@ -90,15 +65,15 @@ matrix:
|
|
90
65
|
env: DB=sqlite3
|
91
66
|
# testing against MariaDB
|
92
67
|
- addons:
|
93
|
-
mariadb: 10.
|
68
|
+
mariadb: '10.0'
|
94
69
|
env: DB=mariadb PREPARED_STATEMENTS=false
|
95
70
|
- addons:
|
96
|
-
mariadb: 10.
|
71
|
+
mariadb: '10.1'
|
97
72
|
env: DB=mariadb PREPARED_STATEMENTS=true
|
98
73
|
# Rails test-suite :
|
99
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.
|
100
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.
|
101
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.
|
102
|
-
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.
|
103
|
-
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.
|
104
|
-
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="v5.
|
74
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.2.0" # PS off by default
|
75
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.2.0" PREPARED_STATEMENTS=true
|
76
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.2.0" DRIVER=MariaDB
|
77
|
+
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.2.0" # PS on by default
|
78
|
+
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.2.0" PREPARED_STATEMENTS=false
|
79
|
+
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="v5.2.0"
|
data/README.md
CHANGED
@@ -5,16 +5,15 @@
|
|
5
5
|
ActiveRecord-JDBC-Adapter (AR-JDBC) is the main database adapter for Rails'
|
6
6
|
*ActiveRecord* component that can be used with [JRuby][0].
|
7
7
|
ActiveRecord-JDBC-Adapter provides full or nearly full support for:
|
8
|
-
**MySQL**, **PostgreSQL**, **SQLite3
|
8
|
+
**MySQL**, **PostgreSQL**, **SQLite3**. In the near future there are plans to
|
9
|
+
add support **MSSQL**. Unless we get more contributions we will not be going
|
10
|
+
beyond these four adapters. Note that the amount of work needed to get
|
11
|
+
another adapter is not huge but the amount of testing required to make sure
|
12
|
+
that adapter continues to work is not something we can do with the resources
|
13
|
+
we currently have.
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
the amount of testing required to make sure that adapter continues to work
|
13
|
-
is not something we can do with the resources we currently have.
|
14
|
-
|
15
|
-
- for **Oracle** database users you are encouraged to use
|
16
|
-
https://github.com/rsim/oracle-enhanced
|
17
|
-
- **MSSQL** adapter's gem parts reside in a [separate repository][8]
|
15
|
+
For Oracle database users you are encouraged to use
|
16
|
+
https://github.com/rsim/oracle-enhanced.
|
18
17
|
|
19
18
|
Version **50.x** supports Rails version 5.0.x and it lives on branch 50-stable.
|
20
19
|
Version **51.x** supports Rails version 5.1.x and is currently on master until
|
@@ -33,7 +32,6 @@ adapters are available:
|
|
33
32
|
- MySQL (`activerecord-jdbcmysql-adapter`)
|
34
33
|
- PostgreSQL (`activerecord-jdbcpostgresql-adapter`)
|
35
34
|
- SQLite3 (`activerecord-jdbcsqlite3-adapter`)
|
36
|
-
- MSSQL (`activerecord-jdbcsqlserver-adapter`)
|
37
35
|
|
38
36
|
2. If you're generating a new Rails application, use the following command:
|
39
37
|
|
@@ -168,4 +166,4 @@ license the database's drivers are licensed. See each driver gem's LICENSE.txt.
|
|
168
166
|
[5]: https://github.com/jruby/activerecord-jdbc-adapter/wiki
|
169
167
|
[6]: https://webchat.freenode.net/?channels=#jruby
|
170
168
|
[7]: http://badge.fury.io/rb/activerecord-jdbc-adapter
|
171
|
-
[8]: https://github.com/jruby/activerecord-
|
169
|
+
[8]: https://github.com/jruby/activerecord-jdbc-adapter/wiki/Migrating-from-1.2.x-to-1.3.0
|
data/Rakefile
CHANGED
@@ -1,29 +1,3 @@
|
|
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
|
-
|
27
1
|
require 'rake/clean'
|
28
2
|
|
29
3
|
CLEAN.include 'derby*', 'test.db.*', '*test.sqlite3', 'test/reports'
|
@@ -64,8 +38,7 @@ rake = lambda { |task| ruby "-S", "rake", task }
|
|
64
38
|
|
65
39
|
desc "Build #{gem_name} gem into the pkg directory."
|
66
40
|
task :build => :jar do
|
67
|
-
|
68
|
-
sh("INCLUDE_JAR_IN_GEM=#{include_jar} gem build -V '#{gemspec_path}'") do
|
41
|
+
sh("RELEASE=#{ENV['RELEASE']} gem build -V '#{gemspec_path}'") do
|
69
42
|
gem_path = built_gem_path.call
|
70
43
|
file_name = File.basename(gem_path)
|
71
44
|
FileUtils.mkdir_p(File.join(base_dir, 'pkg'))
|
@@ -85,6 +58,7 @@ end
|
|
85
58
|
|
86
59
|
desc "Releasing AR-JDBC gems (use NOOP=true to disable gem pushing)"
|
87
60
|
task 'release:do' do
|
61
|
+
ENV['RELEASE'] = 'true' # so that .gemspec is built with adapter_java.jar
|
88
62
|
Rake::Task['build'].invoke
|
89
63
|
Rake::Task['build:adapters'].invoke
|
90
64
|
|
@@ -262,16 +236,19 @@ if defined? JRUBY_VERSION
|
|
262
236
|
end
|
263
237
|
|
264
238
|
classpath = []
|
265
|
-
[ 'java.class.path', 'sun.boot.class.path' ]
|
266
|
-
|
239
|
+
ENV_PATHS = [ 'java.class.path', 'sun.boot.class.path' ]
|
240
|
+
ENV_PATHS.map { |key| ENV_JAVA[key] }.compact.each do |v|
|
241
|
+
classpath += v.split(File::PATH_SEPARATOR).find_all { |jar| jar =~ /jruby/i }
|
267
242
|
end
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
243
|
+
|
244
|
+
# Using Java 9+. Let's try and infer jruby jar location from rbconfig
|
245
|
+
if classpath.empty?
|
246
|
+
require 'rbconfig'
|
247
|
+
libdir = RbConfig::CONFIG["libdir"]
|
248
|
+
if libdir.start_with? "classpath:"
|
272
249
|
error "Cannot build activerecord-jdbc with jruby-complete"
|
273
250
|
end
|
274
|
-
classpath << File.join(libdir,
|
251
|
+
classpath << File.join(libdir, "jruby.jar")
|
275
252
|
end
|
276
253
|
|
277
254
|
classpath += driver_jars
|
@@ -279,26 +256,11 @@ if defined? JRUBY_VERSION
|
|
279
256
|
|
280
257
|
source_files = FileList[ 'src/java/**/*.java' ]
|
281
258
|
|
282
|
-
|
283
|
-
begin
|
284
|
-
require 'arjdbc/version'
|
285
|
-
rescue LoadError
|
286
|
-
path = File.expand_path('lib', File.dirname(__FILE__))
|
287
|
-
unless $LOAD_PATH.include?(path)
|
288
|
-
$LOAD_PATH << path; retry
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
gem_version = Gem::Version.create(ArJdbc::VERSION)
|
293
|
-
if gem_version.segments.last == 'DEV'
|
294
|
-
gem_version.segments[0...-1] # 50.0.DEV -> 50.0
|
295
|
-
else
|
296
|
-
gem_version.segments.dup
|
297
|
-
end
|
298
|
-
end
|
259
|
+
require 'tmpdir'
|
299
260
|
|
300
|
-
|
301
|
-
# Cross-platform way of finding an executable in the $PATH.
|
261
|
+
Dir.mktmpdir do |classes_dir|
|
262
|
+
# Cross-platform way of finding an executable in the $PATH.
|
263
|
+
# Thanks to @mislav
|
302
264
|
which = lambda do |cmd|
|
303
265
|
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
304
266
|
ENV['PATH'].split(File::PATH_SEPARATOR).map do |path|
|
@@ -322,24 +284,7 @@ if defined? JRUBY_VERSION
|
|
322
284
|
# avoid environment variable expansion using backslash
|
323
285
|
# class_files.gsub!('$', '\$') unless windows?
|
324
286
|
# args = class_files.map { |path| [ "-C #{classes_dir}", path ] }.flatten
|
325
|
-
|
326
|
-
if ENV['INCLUDE_JAR_IN_GEM'] == 'true'; require 'tempfile'
|
327
|
-
manifest = "Built-Time: #{Time.now.utc.strftime('%Y-%m-%d %H:%M:%S')}\n"
|
328
|
-
manifest += "Built-JRuby: #{JRUBY_VERSION}\n"
|
329
|
-
manifest += "Specification-Title: ActiveRecord-JDBC\n"
|
330
|
-
manifest += "Specification-Vendor: JRuby\n"
|
331
|
-
manifest += "Specification-Version: #{version.call[0].to_s.split('').join('.')}\n" # AR VERSION (52 -> 5.2)
|
332
|
-
manifest += "Implementation-Vendor: The JRuby Team\n"
|
333
|
-
manifest += "Implementation-Version: #{version.call.join('.')}\n"
|
334
|
-
manifest = Tempfile.new('MANIFEST').tap { |f| f << manifest; f.close }.path
|
335
|
-
end
|
336
|
-
|
337
|
-
args = []; opts = '-cf'
|
338
|
-
if manifest
|
339
|
-
opts = "#{opts}m"
|
340
|
-
args = [ "#{manifest}" ]
|
341
|
-
end
|
342
|
-
args += [ '-C', "#{classes_dir}/ ." ]
|
287
|
+
args = [ '-C', "#{classes_dir}/ ." ] # args = class_files
|
343
288
|
|
344
289
|
jar_path = jar_file
|
345
290
|
if ext_lib_dir = ENV['RUBYLIBDIR']
|
@@ -349,7 +294,7 @@ if defined? JRUBY_VERSION
|
|
349
294
|
unless jar = which.call('jar')
|
350
295
|
warn "could not find jar tool, please make sure it's on the PATH"
|
351
296
|
end
|
352
|
-
sh("#{jar}
|
297
|
+
sh("#{jar} cf #{jar_path} #{args.join(' ')}") do |ok|
|
353
298
|
raise 'could not build .jar extension - packaging failure' unless ok
|
354
299
|
end
|
355
300
|
cp jar_path, jar_file if ext_lib_dir # NOTE: hopefully RG won't mind?!
|
@@ -357,6 +302,6 @@ if defined? JRUBY_VERSION
|
|
357
302
|
end
|
358
303
|
else
|
359
304
|
task :jar do
|
360
|
-
|
305
|
+
puts "please run `rake jar' under JRuby to re-compile the native (Java) extension"
|
361
306
|
end
|
362
307
|
end
|
@@ -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['
|
30
|
+
if ENV['RELEASE'] != '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!
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |gem|
|
|
44
44
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
45
45
|
gem.test_files = gem.files.grep(%r{^test/})
|
46
46
|
|
47
|
-
gem.add_dependency 'activerecord', '~> 5.
|
47
|
+
gem.add_dependency 'activerecord', '~> 5.2.0'
|
48
48
|
|
49
49
|
#gem.add_development_dependency 'test-unit', '2.5.4'
|
50
50
|
#gem.add_development_dependency 'test-unit-context', '>= 0.3.0'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'arjdbc/mssql'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'arjdbc/mssql'
|
data/lib/arjdbc/abstract/core.rb
CHANGED
@@ -22,7 +22,7 @@ module ArJdbc
|
|
22
22
|
|
23
23
|
connection.configure_connection # will call us (maybe)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
# Retrieve the raw `java.sql.Connection` object.
|
27
27
|
# The unwrap parameter is useful if an attempt to unwrap a pooled (JNDI)
|
28
28
|
# connection should be made - to really return the 'native' JDBC object.
|
@@ -56,21 +56,11 @@ 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
|
59
|
+
else ActiveRecord::StatementInvalid.new(message)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
def extract_raw_bind_values(binds)
|
64
|
-
binds.map(&:value_for_database)
|
65
|
-
end
|
66
63
|
|
67
|
-
# this version of log() automatically fills type_casted_binds from binds if necessary
|
68
|
-
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil)
|
69
|
-
if binds.any? && (type_casted_binds.nil? || type_casted_binds.empty?)
|
70
|
-
type_casted_binds = ->{ extract_raw_bind_values(binds) }
|
71
|
-
end
|
72
|
-
super
|
73
|
-
end
|
74
64
|
end
|
75
65
|
end
|
76
66
|
end
|
@@ -10,13 +10,11 @@ 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
|
-
|
15
13
|
if without_prepared_statement?(binds)
|
16
|
-
log(sql, name) { @connection.
|
14
|
+
log(sql, name) { @connection.execute_insert(sql) }
|
17
15
|
else
|
18
16
|
log(sql, name, binds) do
|
19
|
-
@connection.
|
17
|
+
@connection.execute_insert(sql, binds)
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
@@ -24,22 +22,18 @@ module ArJdbc
|
|
24
22
|
# It appears that at this point (AR 5.0) "prepare" should only ever be true
|
25
23
|
# if prepared statements are enabled
|
26
24
|
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
|
-
|
29
25
|
if without_prepared_statement?(binds)
|
30
26
|
log(sql, name) { @connection.execute_query(sql) }
|
31
27
|
else
|
32
28
|
log(sql, name, binds) do
|
33
|
-
#
|
34
|
-
cached_statement = fetch_cached_statement(sql) if prepare &&
|
29
|
+
# It seems that #supports_statement_cache? is defined but isn't checked before setting "prepare" (AR 5.0)
|
30
|
+
cached_statement = fetch_cached_statement(sql) if prepare && supports_statement_cache?
|
35
31
|
@connection.execute_prepared_query(sql, binds, cached_statement)
|
36
32
|
end
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
40
36
|
def exec_update(sql, name = nil, binds = NO_BINDS)
|
41
|
-
binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
|
42
|
-
|
43
37
|
if without_prepared_statement?(binds)
|
44
38
|
log(sql, name) { @connection.execute_update(sql) }
|
45
39
|
else
|
@@ -48,10 +42,30 @@ module ArJdbc
|
|
48
42
|
end
|
49
43
|
alias :exec_delete :exec_update
|
50
44
|
|
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
|
+
|
51
64
|
def execute(sql, name = nil)
|
52
65
|
log(sql, name) { @connection.execute(sql) }
|
53
66
|
end
|
54
67
|
|
68
|
+
# overridden to support legacy binds
|
55
69
|
def select_all(arel, name = nil, binds = NO_BINDS, preparable: nil)
|
56
70
|
binds = convert_legacy_binds_to_attributes(binds) if binds.first.is_a?(Array)
|
57
71
|
super
|