activerecord-jdbc-adapter 51.2-java → 51.3-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +36 -15
- data/lib/arjdbc/abstract/database_statements.rb +2 -2
- data/lib/arjdbc/abstract/statement_cache.rb +4 -4
- data/lib/arjdbc/db2/adapter.rb +2 -52
- data/lib/arjdbc/mysql/adapter.rb +8 -0
- data/lib/arjdbc/postgresql/adapter.rb +1 -62
- data/lib/arjdbc/postgresql/oid_types.rb +81 -7
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/rails.rake +4 -3
- data/src/java/arjdbc/ArJdbcModule.java +5 -15
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +2 -2
- data/src/java/arjdbc/jdbc/ConnectionFactory.java +0 -87
- data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +0 -1
- data/src/java/arjdbc/jdbc/RubyConnectionFactory.java +61 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +47 -19
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +2 -2
- data/src/java/arjdbc/postgresql/PgDateTimeUtils.java +52 -0
- data/src/java/arjdbc/postgresql/PostgreSQLResult.java +21 -13
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +30 -44
- data/src/java/arjdbc/util/DateTimeUtils.java +119 -0
- data/src/java/arjdbc/util/QuotingUtils.java +6 -7
- metadata +5 -4
- data/src/java/arjdbc/postgresql/PgResultSetMetaDataWrapper.java +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7117b15f231051ebccb138e4f19e65780e179a751dc44fdb58dd54677af296b6
|
4
|
+
data.tar.gz: bad84fbfae38b6d2b30d6bbc09893001c0e2a60ab7137ace692462e257197807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22e383cc2c136411ce1b70fcb28bb17f83aee13ecffa69bdc5768c53787fc1eb9f8ba566dcc31433a5bfca46788d905222cc4f721c0dc1b83af1fe721a494c91
|
7
|
+
data.tar.gz: '084f6078c6887cf33d8c99f9ecf1b2fb907d3e5a1c27ea04058c30773970a295701846d6869e672aff9e8e7141ce29883be763f8b829dbefb36e8ddb562cbd01'
|
data/.travis.yml
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
|
+
branches:
|
4
|
+
only:
|
5
|
+
- master
|
6
|
+
- /.*-stable$/
|
7
|
+
- /^test-.*/
|
8
|
+
- /maintenance|support/
|
9
|
+
- /.*dev$/
|
3
10
|
bundler_args: --without development
|
4
11
|
script: bundle exec rake ${TEST_PREFIX}test_$DB
|
5
12
|
before_install:
|
6
13
|
- unset _JAVA_OPTIONS
|
14
|
+
- rvm @default,@global do gem uninstall bundler -a -x -I || true
|
15
|
+
- gem install bundler -v "~>1.17.3"
|
7
16
|
before_script:
|
8
17
|
- echo "JAVA_OPTS=$JAVA_OPTS"
|
9
18
|
- export JRUBY_OPTS="-J-Xms64M -J-Xmx1024M"
|
@@ -33,6 +42,8 @@ rvm:
|
|
33
42
|
- jruby-9.1.16.0
|
34
43
|
jdk:
|
35
44
|
- openjdk8
|
45
|
+
addons:
|
46
|
+
postgresql: "9.4"
|
36
47
|
env:
|
37
48
|
- DB=mysql2 PREPARED_STATEMENTS=false
|
38
49
|
- DB=mysql2 PREPARED_STATEMENTS=true
|
@@ -43,19 +54,29 @@ env:
|
|
43
54
|
- DB=postgresql PREPARED_STATEMENTS=true INSERT_RETURNING=true
|
44
55
|
- DB=sqlite3 PREPARED_STATEMENTS=false
|
45
56
|
- DB=sqlite3 PREPARED_STATEMENTS=true
|
46
|
-
|
47
|
-
|
48
|
-
branches:
|
49
|
-
only:
|
50
|
-
- master
|
51
|
-
- /.*-stable$/
|
52
|
-
- /^test-.*/
|
53
|
-
- /maintenance|support/
|
54
|
-
- /.*dev$/
|
57
|
+
- DB=jndi PREPARED_STATEMENTS=false
|
58
|
+
- DB=jndi PREPARED_STATEMENTS=true
|
55
59
|
matrix:
|
56
60
|
allow_failures:
|
57
61
|
- rvm: jruby-head
|
58
62
|
include:
|
63
|
+
# jruby-9.2
|
64
|
+
- rvm: jruby-9.2.6.0
|
65
|
+
env: DB=mysql2
|
66
|
+
- rvm: jruby-9.2.6.0
|
67
|
+
env: DB=postgresql
|
68
|
+
- rvm: jruby-9.2.6.0
|
69
|
+
env: DB=sqlite3
|
70
|
+
# jruby-9.2 + Java 11
|
71
|
+
- rvm: jruby-9.2.6.0
|
72
|
+
env: DB=mysql2
|
73
|
+
jdk: openjdk11
|
74
|
+
- rvm: jruby-9.2.6.0
|
75
|
+
env: DB=postgresql
|
76
|
+
jdk: openjdk11
|
77
|
+
- rvm: jruby-9.2.6.0
|
78
|
+
env: DB=sqlite3
|
79
|
+
jdk: openjdk11
|
59
80
|
# jruby-head
|
60
81
|
- rvm: jruby-head
|
61
82
|
env: DB=mysql2
|
@@ -71,9 +92,9 @@ matrix:
|
|
71
92
|
mariadb: '10.1'
|
72
93
|
env: DB=mariadb PREPARED_STATEMENTS=true
|
73
94
|
# Rails test-suite :
|
74
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
75
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
76
|
-
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
77
|
-
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
78
|
-
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
79
|
-
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="v5.1.
|
95
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.7" # PS off by default
|
96
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.7" PREPARED_STATEMENTS=true
|
97
|
+
- env: DB=mysql2 TEST_PREFIX="rails:" AR_VERSION="v5.1.7" DRIVER=MariaDB
|
98
|
+
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.1.7" # PS on by default
|
99
|
+
- env: DB=postgresql TEST_PREFIX="rails:" AR_VERSION="v5.1.7" PREPARED_STATEMENTS=false
|
100
|
+
- env: DB=sqlite3 TEST_PREFIX="rails:" AR_VERSION="v5.1.7"
|
@@ -26,8 +26,8 @@ module ArJdbc
|
|
26
26
|
log(sql, name) { @connection.execute_query(sql) }
|
27
27
|
else
|
28
28
|
log(sql, name, binds) do
|
29
|
-
#
|
30
|
-
cached_statement = fetch_cached_statement(sql) if prepare &&
|
29
|
+
# this is different from normal AR that always caches
|
30
|
+
cached_statement = fetch_cached_statement(sql) if prepare && @jdbc_statement_cache_enabled
|
31
31
|
@connection.execute_prepared_query(sql, binds, cached_statement)
|
32
32
|
end
|
33
33
|
end
|
@@ -23,7 +23,7 @@ module ArJdbc
|
|
23
23
|
# Only say we support the statement cache if we are using prepared statements
|
24
24
|
# and have a max number of statements defined
|
25
25
|
statement_limit = self.class.type_cast_config_to_integer(config[:statement_limit])
|
26
|
-
@jdbc_statement_cache_enabled =
|
26
|
+
@jdbc_statement_cache_enabled = prepared_statements && (statement_limit.nil? || statement_limit > 0)
|
27
27
|
|
28
28
|
@statements = StatementPool.new(statement_limit) # AR (5.0) expects this to be stored as @statements
|
29
29
|
end
|
@@ -34,11 +34,11 @@ module ArJdbc
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def delete_cached_statement(sql)
|
37
|
-
@statements.delete(
|
37
|
+
@statements.delete(sql_key(sql))
|
38
38
|
end
|
39
39
|
|
40
40
|
def fetch_cached_statement(sql)
|
41
|
-
@statements[
|
41
|
+
@statements[sql_key(sql)] ||= @connection.prepare_statement(sql)
|
42
42
|
end
|
43
43
|
|
44
44
|
def supports_statement_cache?
|
@@ -49,7 +49,7 @@ module ArJdbc
|
|
49
49
|
|
50
50
|
# This should be overridden by the adapter if the sql itself
|
51
51
|
# is not enough to make the key unique
|
52
|
-
def
|
52
|
+
def sql_key(sql)
|
53
53
|
sql
|
54
54
|
end
|
55
55
|
|
data/lib/arjdbc/db2/adapter.rb
CHANGED
@@ -342,60 +342,10 @@ module ArJdbc
|
|
342
342
|
|
343
343
|
# Properly quotes the various data types.
|
344
344
|
# @param value contains the data
|
345
|
-
# @param column (optional) contains info on the field
|
346
345
|
# @override
|
347
|
-
def quote(value
|
348
|
-
return value.quoted_id if value.respond_to?(:quoted_id)
|
346
|
+
def quote(value)
|
349
347
|
return value if sql_literal?(value)
|
350
|
-
|
351
|
-
if column
|
352
|
-
if column.respond_to?(:primary) && column.primary && column.klass != String
|
353
|
-
return value.to_i.to_s
|
354
|
-
end
|
355
|
-
if value && (column.type.to_sym == :decimal || column.type.to_sym == :integer)
|
356
|
-
return value.to_s
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
column_type = column && column.type.to_sym
|
361
|
-
|
362
|
-
case value
|
363
|
-
when nil then 'NULL'
|
364
|
-
when Numeric # IBM_DB doesn't accept quotes on numeric types
|
365
|
-
# if the column type is text or string, return the quote value
|
366
|
-
if column_type == :text || column_type == :string
|
367
|
-
"'#{value}'"
|
368
|
-
else
|
369
|
-
value.to_s
|
370
|
-
end
|
371
|
-
when String, ActiveSupport::Multibyte::Chars
|
372
|
-
if column_type == :binary && column.sql_type !~ /for bit data/i
|
373
|
-
if update_lob_value?(value, column)
|
374
|
-
value.nil? ? 'NULL' : BLOB_VALUE_MARKER # '@@@IBMBINARY@@@'"
|
375
|
-
else
|
376
|
-
"BLOB('#{quote_string(value)}')"
|
377
|
-
end
|
378
|
-
elsif column && column.sql_type =~ /clob/ # :text
|
379
|
-
if update_lob_value?(value, column)
|
380
|
-
value.nil? ? 'NULL' : CLOB_VALUE_MARKER # "'@@@IBMTEXT@@@'"
|
381
|
-
else
|
382
|
-
"'#{quote_string(value)}'"
|
383
|
-
end
|
384
|
-
elsif column_type == :xml
|
385
|
-
value.nil? ? 'NULL' : "'#{quote_string(value)}'" # "'<ibm>@@@IBMXML@@@</ibm>'"
|
386
|
-
else
|
387
|
-
"'#{quote_string(value)}'"
|
388
|
-
end
|
389
|
-
when Symbol then "'#{quote_string(value.to_s)}'"
|
390
|
-
when Time
|
391
|
-
# AS400 doesn't support date in time column
|
392
|
-
if column_type == :time
|
393
|
-
quote_time(value)
|
394
|
-
else
|
395
|
-
super
|
396
|
-
end
|
397
|
-
else super
|
398
|
-
end
|
348
|
+
super
|
399
349
|
end
|
400
350
|
|
401
351
|
# @override
|
data/lib/arjdbc/mysql/adapter.rb
CHANGED
@@ -32,7 +32,15 @@ module ActiveRecord
|
|
32
32
|
include ArJdbc::MySQL
|
33
33
|
|
34
34
|
def initialize(connection, logger, connection_parameters, config)
|
35
|
+
# workaround to skip version check on JNDI to be lazy, dummy version is high enough for Rails 5.0 - 6.0
|
36
|
+
is_jndi = ::ActiveRecord::ConnectionAdapters::JdbcConnection.jndi_config?(config)
|
37
|
+
@version = '8.1.5' if is_jndi
|
38
|
+
|
35
39
|
super
|
40
|
+
|
41
|
+
# set to nil to have it lazy-load the real value when required
|
42
|
+
@version = nil if is_jndi
|
43
|
+
|
36
44
|
@prepared_statements = false unless config.key?(:prepared_statements)
|
37
45
|
# configure_connection taken care of at ArJdbc::Abstract::Core
|
38
46
|
end
|
@@ -528,67 +528,6 @@ module ArJdbc
|
|
528
528
|
execute "TRUNCATE TABLE #{quote_table_name(table_name)}", name
|
529
529
|
end
|
530
530
|
|
531
|
-
# Returns an array of indexes for the given table.
|
532
|
-
def indexes(table_name, name = nil)
|
533
|
-
if name
|
534
|
-
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
535
|
-
Passing name to #indexes is deprecated without replacement.
|
536
|
-
MSG
|
537
|
-
end
|
538
|
-
|
539
|
-
# FIXME: AR version => table = Utils.extract_schema_qualified_name(table_name.to_s)
|
540
|
-
schema, table = extract_schema_and_table(table_name.to_s)
|
541
|
-
|
542
|
-
result = query(<<-SQL, 'SCHEMA')
|
543
|
-
SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
|
544
|
-
pg_catalog.obj_description(i.oid, 'pg_class') AS comment,
|
545
|
-
(SELECT COUNT(*) FROM pg_opclass o
|
546
|
-
JOIN (SELECT unnest(string_to_array(d.indclass::text, ' '))::int oid) c
|
547
|
-
ON o.oid = c.oid WHERE o.opcdefault = 'f')
|
548
|
-
FROM pg_class t
|
549
|
-
INNER JOIN pg_index d ON t.oid = d.indrelid
|
550
|
-
INNER JOIN pg_class i ON d.indexrelid = i.oid
|
551
|
-
LEFT JOIN pg_namespace n ON n.oid = i.relnamespace
|
552
|
-
WHERE i.relkind = 'i'
|
553
|
-
AND d.indisprimary = 'f'
|
554
|
-
AND t.relname = '#{table}'
|
555
|
-
AND n.nspname = #{schema ? "'#{schema}'" : 'ANY (current_schemas(false))'}
|
556
|
-
ORDER BY i.relname
|
557
|
-
SQL
|
558
|
-
|
559
|
-
result.map do |row|
|
560
|
-
index_name = row[0]
|
561
|
-
# FIXME: These values [1,2] are returned in a different format than AR expects, maybe we could update it on the Java side to be more accurate
|
562
|
-
unique = row[1].is_a?(String) ? row[1] == 't' : row[1] # JDBC gets us a boolean
|
563
|
-
indkey = row[2].is_a?(Java::OrgPostgresqlUtil::PGobject) ? row[2].value : row[2]
|
564
|
-
indkey = indkey.split(" ").map(&:to_i)
|
565
|
-
inddef = row[3]
|
566
|
-
oid = row[4]
|
567
|
-
comment = row[5]
|
568
|
-
opclass = row[6]
|
569
|
-
|
570
|
-
using, expressions, where = inddef.scan(/ USING (\w+?) \((.+?)\)(?: WHERE (.+))?\z/m).flatten
|
571
|
-
|
572
|
-
if indkey.include?(0) || opclass > 0
|
573
|
-
columns = expressions
|
574
|
-
else
|
575
|
-
columns = Hash[query(<<-SQL.strip_heredoc, "SCHEMA")].values_at(*indkey).compact
|
576
|
-
SELECT a.attnum, a.attname
|
577
|
-
FROM pg_attribute a
|
578
|
-
WHERE a.attrelid = #{oid}
|
579
|
-
AND a.attnum IN (#{indkey.join(",")})
|
580
|
-
SQL
|
581
|
-
|
582
|
-
# add info on sort order for columns (only desc order is explicitly specified, asc is the default)
|
583
|
-
orders = Hash[
|
584
|
-
expressions.scan(/(\w+) DESC/).flatten.map { |order_column| [order_column, :desc] }
|
585
|
-
]
|
586
|
-
end
|
587
|
-
|
588
|
-
IndexDefinition.new(table_name, index_name, unique, columns, [], orders, where, nil, using.to_sym, comment.presence)
|
589
|
-
end.compact
|
590
|
-
end
|
591
|
-
|
592
531
|
# @private
|
593
532
|
def column_name_for_operation(operation, node)
|
594
533
|
case operation
|
@@ -757,7 +696,7 @@ module ActiveRecord::ConnectionAdapters
|
|
757
696
|
|
758
697
|
# Prepared statements aren't schema aware so we need to make sure we
|
759
698
|
# store different PreparedStatement objects for different schemas
|
760
|
-
def
|
699
|
+
def sql_key(sql)
|
761
700
|
"#{schema_search_path}-#{sql}"
|
762
701
|
end
|
763
702
|
|
@@ -9,6 +9,61 @@ module ArJdbc
|
|
9
9
|
# @private
|
10
10
|
OID = ::ActiveRecord::ConnectionAdapters::PostgreSQL::OID
|
11
11
|
|
12
|
+
# this version makes sure to register the types by name as well
|
13
|
+
# we still need to version with OID since it's used from SchemaStatements as well
|
14
|
+
class ArjdbcTypeMapInitializer < OID::TypeMapInitializer
|
15
|
+
private
|
16
|
+
|
17
|
+
def name_with_ns(row)
|
18
|
+
if row['in_ns']
|
19
|
+
row['typname']
|
20
|
+
else
|
21
|
+
%Q("#{row['nspname']}"."#{row['typname']}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def register_enum_type(row)
|
26
|
+
super
|
27
|
+
register name_with_ns(row), OID::Enum.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def register_array_type(row)
|
31
|
+
super
|
32
|
+
register_with_subtype(name_with_ns(row), row['typelem'].to_i) do |subtype|
|
33
|
+
OID::Array.new(subtype, row['typdelim'])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def register_range_type(row)
|
38
|
+
super
|
39
|
+
name = name_with_ns(row)
|
40
|
+
register_with_subtype(name, row['rngsubtype'].to_i) do |subtype|
|
41
|
+
OID::Range.new(subtype, name.to_sym)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def register_domain_type(row)
|
46
|
+
if base_type = @store.lookup(row['typbasetype'].to_i)
|
47
|
+
register row['oid'], base_type
|
48
|
+
register name_with_ns(row), base_type
|
49
|
+
else
|
50
|
+
warn "unknown base type (OID: #{row['typbasetype']}) for domain #{row['typname']}."
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def register_composite_type(row)
|
55
|
+
if subtype = @store.lookup(row['typelem'].to_i)
|
56
|
+
register row['oid'], OID::Vector.new(row['typdelim'], subtype)
|
57
|
+
register name_with_ns(row), OID::Vector.new(row['typdelim'], subtype)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def assert_valid_registration(oid, oid_type)
|
62
|
+
ret = super
|
63
|
+
ret == 0 ? oid : ret
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
12
67
|
# @private
|
13
68
|
module OIDTypes
|
14
69
|
|
@@ -41,7 +96,7 @@ module ArJdbc
|
|
41
96
|
|
42
97
|
def get_oid_type(oid, fmod, column_name, sql_type = '') # :nodoc:
|
43
98
|
if !type_map.key?(oid)
|
44
|
-
load_additional_types(type_map,
|
99
|
+
load_additional_types(type_map, oid)
|
45
100
|
end
|
46
101
|
|
47
102
|
type_map.fetch(oid, fmod, sql_type) {
|
@@ -133,26 +188,45 @@ module ArJdbc
|
|
133
188
|
end
|
134
189
|
|
135
190
|
load_additional_types(m)
|
191
|
+
|
192
|
+
# pgjdbc returns these if the column is auto-incrmenting
|
193
|
+
m.alias_type 'serial', 'int4'
|
194
|
+
m.alias_type 'bigserial', 'int8'
|
136
195
|
end
|
137
196
|
|
138
|
-
def load_additional_types(type_map,
|
139
|
-
initializer =
|
197
|
+
def load_additional_types(type_map, oid = nil) # :nodoc:
|
198
|
+
initializer = ArjdbcTypeMapInitializer.new(type_map)
|
140
199
|
|
141
200
|
if supports_ranges?
|
142
201
|
query = <<-SQL
|
143
|
-
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype
|
202
|
+
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype,
|
203
|
+
ns.nspname, ns.nspname = ANY(current_schemas(true)) in_ns
|
144
204
|
FROM pg_type as t
|
145
205
|
LEFT JOIN pg_range as r ON oid = rngtypid
|
206
|
+
JOIN pg_namespace AS ns ON t.typnamespace = ns.oid
|
146
207
|
SQL
|
147
208
|
else
|
148
209
|
query = <<-SQL
|
149
|
-
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, t.typtype, t.typbasetype
|
210
|
+
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, t.typtype, t.typbasetype,
|
211
|
+
ns.nspname, ns.nspname = ANY(current_schemas(true)) in_ns
|
150
212
|
FROM pg_type as t
|
213
|
+
JOIN pg_namespace AS ns ON t.typnamespace = ns.oid
|
151
214
|
SQL
|
152
215
|
end
|
153
216
|
|
154
|
-
if
|
155
|
-
|
217
|
+
if oid
|
218
|
+
if oid.is_a? Numeric || oid.match(/^\d+$/)
|
219
|
+
# numeric OID
|
220
|
+
query += "WHERE t.oid::integer = %s" % oid
|
221
|
+
|
222
|
+
elsif m = oid.match(/"?(\w+)"?\."?(\w+)"?/)
|
223
|
+
# namespace and type name
|
224
|
+
query += "WHERE ns.nspname = '%s' AND t.typname = '%s'" % [m[1], m[2]]
|
225
|
+
|
226
|
+
else
|
227
|
+
# only type name
|
228
|
+
query += "WHERE t.typname = '%s' AND ns.nspname = ANY(current_schemas(true))" % oid
|
229
|
+
end
|
156
230
|
else
|
157
231
|
query += initializer.query_conditions_for_initial_load(type_map)
|
158
232
|
end
|
data/lib/arjdbc/version.rb
CHANGED
data/rakelib/rails.rake
CHANGED
@@ -9,14 +9,15 @@ namespace :rails do
|
|
9
9
|
if ENV['RAILS']
|
10
10
|
ar_path = File.join(ENV['RAILS'], 'activerecord')
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
unless ar_path && File.exist?(ar_path)
|
14
|
-
ar_path = `bundle info --path activerecord`.chomp
|
14
|
+
ar_path = `bundle info --path activerecord`.lines.last.chomp
|
15
15
|
end
|
16
16
|
|
17
17
|
unless File.exist? ar_test_dir = File.join(ar_path, 'test')
|
18
18
|
raise "can not directly load Rails tests;" +
|
19
|
-
" try setting a local repository path e.g. export RAILS=`pwd`/../rails"
|
19
|
+
" try setting a local repository path e.g. export RAILS=`pwd`/../rails;" +
|
20
|
+
" failed guess: #{ar_path}"
|
20
21
|
end
|
21
22
|
|
22
23
|
driver = "jdbc-#{ENV['DRIVER'] ? ENV['DRIVER'].downcase : (adapter =~ /postgres/i ? 'postgres' : adapter)}"
|
@@ -29,7 +29,6 @@ import java.util.HashMap;
|
|
29
29
|
import java.util.Map;
|
30
30
|
import java.util.WeakHashMap;
|
31
31
|
|
32
|
-
import org.jruby.NativeException;
|
33
32
|
import org.jruby.Ruby;
|
34
33
|
import org.jruby.RubyArray;
|
35
34
|
import org.jruby.RubyClass;
|
@@ -148,13 +147,7 @@ public class ArJdbcModule {
|
|
148
147
|
}
|
149
148
|
}
|
150
149
|
catch (ClassNotFoundException e) { /* ignored */ }
|
151
|
-
catch (NoSuchMethodException e) {
|
152
|
-
throw newNativeException(runtime, e);
|
153
|
-
}
|
154
|
-
catch (IllegalAccessException e) {
|
155
|
-
throw newNativeException(runtime, e);
|
156
|
-
}
|
157
|
-
catch (InvocationTargetException e) {
|
150
|
+
catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
158
151
|
throw newNativeException(runtime, e);
|
159
152
|
}
|
160
153
|
|
@@ -263,18 +256,15 @@ public class ArJdbcModule {
|
|
263
256
|
try {
|
264
257
|
return klass.getMethod(name, argType).invoke(null, arg);
|
265
258
|
}
|
266
|
-
catch (IllegalAccessException e) {
|
267
|
-
throw newNativeException(runtime, e);
|
268
|
-
}
|
269
|
-
catch (InvocationTargetException e) {
|
259
|
+
catch (IllegalAccessException | InvocationTargetException e) {
|
270
260
|
throw newNativeException(runtime, e);
|
271
261
|
}
|
272
262
|
}
|
273
263
|
|
274
264
|
private static RaiseException newNativeException(final Ruby runtime, final Throwable cause) {
|
275
|
-
|
276
|
-
|
277
|
-
return
|
265
|
+
final RaiseException error = runtime.newRuntimeError(cause.toString());
|
266
|
+
error.initCause(cause);
|
267
|
+
return error;
|
278
268
|
}
|
279
269
|
|
280
270
|
@JRubyMethod(meta = true)
|