activerecord-jdbc-adapter 1.3.0.rc1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTING.md +3 -5
- data/Gemfile +3 -5
- data/Gemfile.lock +1 -1
- data/History.md +30 -3
- data/README.md +14 -9
- data/gemfiles/rails23.gemfile +3 -0
- data/gemfiles/rails23.gemfile.lock +8 -0
- data/gemfiles/rails30.gemfile +3 -0
- data/gemfiles/rails30.gemfile.lock +11 -0
- data/gemfiles/rails31.gemfile +3 -0
- data/gemfiles/rails31.gemfile.lock +8 -0
- data/gemfiles/rails32.gemfile +3 -0
- data/gemfiles/rails32.gemfile.lock +11 -0
- data/gemfiles/rails40.gemfile +3 -0
- data/gemfiles/rails40.gemfile.lock +6 -0
- data/lib/arjdbc/db2/adapter.rb +39 -23
- data/lib/arjdbc/db2/column.rb +3 -3
- data/lib/arjdbc/derby/adapter.rb +45 -0
- data/lib/arjdbc/firebird/adapter.rb +38 -36
- data/lib/arjdbc/h2/adapter.rb +1 -1
- data/lib/arjdbc/hsqldb/adapter.rb +1 -0
- data/lib/arjdbc/hsqldb/explain_support.rb +6 -6
- data/lib/arjdbc/jdbc/adapter.rb +80 -39
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -21
- data/lib/arjdbc/mssql/adapter.rb +41 -18
- data/lib/arjdbc/mssql/column.rb +3 -8
- data/lib/arjdbc/mssql/explain_support.rb +1 -1
- data/lib/arjdbc/mysql/adapter.rb +19 -9
- data/lib/arjdbc/mysql/column.rb +1 -1
- data/lib/arjdbc/mysql/connection_methods.rb +1 -0
- data/lib/arjdbc/mysql/explain_support.rb +2 -1
- data/lib/arjdbc/oracle/adapter.rb +42 -26
- data/lib/arjdbc/oracle/column.rb +1 -1
- data/lib/arjdbc/postgresql/adapter.rb +13 -4
- data/lib/arjdbc/sqlite3/adapter.rb +2 -0
- data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +5 -5
- data/lib/arjdbc/util/serialized_attributes.rb +87 -0
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/02-test.rake +1 -1
- data/rakelib/db.rake +1 -1
- data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +2 -2
- data/src/java/arjdbc/derby/DerbyModule.java +26 -173
- data/src/java/arjdbc/h2/H2Module.java +1 -0
- data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +1 -2
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +10 -9
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -3
- data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +4 -3
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +189 -70
- data/src/java/arjdbc/jdbc/SQLBlock.java +4 -4
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +6 -7
- data/src/java/arjdbc/mysql/MySQLModule.java +1 -0
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +14 -9
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +19 -3
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +305 -11
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +3 -3
- metadata +6 -5
data/CONTRIBUTING.md
CHANGED
@@ -37,10 +37,8 @@ When fixing issues for a particular Rails version please be aware that we suppor
|
|
37
37
|
multiple AR versions from a single code-base (and that means supporting Ruby 1.8
|
38
38
|
as well - esp. targeting 4.x **we can not use the 1.9 syntax** yet).
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
Please keep our [test-suite](https://travis-ci.org/jruby/activerecord-jdbc-adapter)
|
41
|
+
green (been funky for a while and it's been hard-work getting in back to shape),
|
42
|
+
while making changes, if they're related to an adapter covered by those.
|
43
43
|
|
44
44
|
:heart: JRuby-Up!
|
45
|
-
|
46
|
-
[0]: https://www.bountysource.com/#fundraisers/311-activerecord-jdbc-adapter-1-3-x
|
data/Gemfile
CHANGED
@@ -33,8 +33,6 @@ group :rails do
|
|
33
33
|
gem 'actionpack', :require => nil
|
34
34
|
end
|
35
35
|
|
36
|
-
group :test
|
37
|
-
|
38
|
-
|
39
|
-
gem 'sqlite3', :require => nil, :platform => :mri
|
40
|
-
end
|
36
|
+
gem 'mysql2', :require => nil, :platform => :mri, :group => :test
|
37
|
+
gem 'pg', :require => nil, :platform => :mri, :group => :test
|
38
|
+
gem 'sqlite3', :require => nil, :platform => :mri, :group => :test
|
data/Gemfile.lock
CHANGED
data/History.md
CHANGED
@@ -1,3 +1,33 @@
|
|
1
|
+
## 1.3.0 (08/29/13)
|
2
|
+
|
3
|
+
- [oracle] fix structure_dump: `column['data_default']` might come back as ''
|
4
|
+
- [oracle] avoid the JDBC call `connection.getMetaData` with exec_query (#453)
|
5
|
+
- review MSSQL/HSQLDB/H2 explain - make sure prepared statements are used
|
6
|
+
- [oracle] make sure explain works with prepared statements
|
7
|
+
- warn users about using our now deprecated suble_binds "extension"
|
8
|
+
- [mysql] username defaults to 'root' on MRI
|
9
|
+
- [mysql] match `columns` returned with latest AR 4.0 (collation, strict, extra)
|
10
|
+
- only `suble_binds` if not an arel passed + allow to turn bind subling off
|
11
|
+
- [postgres] fix `extension_enabled?` to work with raw boolean values
|
12
|
+
- [derby] setting true/false into text/string columns values should use `to_s`
|
13
|
+
also non-serializable attrs should use `to_s` (instead of `to_yaml`) on 3.x
|
14
|
+
- [derby] needs `quote_table_name_for_assignment` (on AR 4.0)
|
15
|
+
- [postgres] driver "hooks" to make PG types work with prepared statements, now
|
16
|
+
working: ranges, arrays, interval, (ip) addr types, tsvector, json and uuid
|
17
|
+
- missing `last_insert_id_result` method on PostgreSQL (#450)
|
18
|
+
- emulate pre AR 4.0 behavior with date-times/booleans (in custom SELECTs) they
|
19
|
+
will be returned as (raw) strings on AR 3.x
|
20
|
+
- warn when driver is not JDBC 4.0 compilant when checking if valid (#445)
|
21
|
+
- fix inline rescue syntax - invalid syntax at MSSQL's `string_to_time` (#444)
|
22
|
+
- no need to (double) update LOB values when using prepared statements
|
23
|
+
- replaced `emulate_booleans` with `emulate_booleans?` on adapter specs
|
24
|
+
- [firebird] emulate booleans with char(1) + fix time and review native types
|
25
|
+
- [db2] using new `update_lob_values` - now handles null inserts safely (#430)
|
26
|
+
- [mssql] configurable `update_lob_values?` - `string_to_binary` no longer abused
|
27
|
+
- refactored SerializedAttributesHelper and moved to Util::SerializedAttributes
|
28
|
+
there's now a new `update_lob_columns` helper hooked onto AR::Base for adapters
|
29
|
+
that send clob/blob values in a separate statement DB2, Oracle, MSSQL, Firebird
|
30
|
+
|
1
31
|
## 1.3.0.rc1 (08/03/13)
|
2
32
|
|
3
33
|
- add activerecord gem as a dependency of the main AR-JDBC gem
|
@@ -62,9 +92,6 @@
|
|
62
92
|
Code Contributors (in no particular order): Alexey Noskov, Pierrick Rouxel,
|
63
93
|
Matías Battocchia, @gapthemind and Sören Mothes
|
64
94
|
|
65
|
-
Code Contributors (in no particular order): @alno, @pierrickrouxel,
|
66
|
-
@matiasbattocchia, @gapthemind, @soemo
|
67
|
-
|
68
95
|
## 1.3.0.beta2 (05/30/13)
|
69
96
|
|
70
97
|
- only load rake tasks if AR is being used - AR::Railtie is loaded (#234)
|
data/README.md
CHANGED
@@ -1,24 +1,27 @@
|
|
1
1
|
# ActiveRecord JDBC Adapter
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/activerecord-jdbc-adapter.png)][7]
|
4
|
+
|
3
5
|
ActiveRecord-JDBC-Adapter (AR-JDBC) is a database adapter for Rails'
|
4
6
|
*ActiveRecord* component that can be used with [JRuby][0]. It allows use of
|
5
7
|
virtually any JDBC-compliant database with your JRuby on Rails application.
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
9
|
+
We supports *ActiveRecord* **2.3**, **3.x** and **4.x** from a single code base.
|
10
|
+
You'll need JRuby >= **1.6.8** (we recommend using the latest and greatest of
|
11
|
+
JRubies) thus Java >= **1.6** is mandatory.
|
10
12
|
|
11
|
-
|
12
|
-
**4.x** compatibility (as well as still supporting **2.3** and **3.x**) from a
|
13
|
-
single code base. It's a recommended update for all AR-JDBC 1.2.x users.
|
13
|
+
#### AR-JDBC **1.3.x** is a recommended update for all **1.2.x** users.
|
14
14
|
|
15
|
-
|
15
|
+
Our latest major version **1.3.x** represents a few months of refactoring and
|
16
|
+
updates covering (not just) new *ActiveRecord* features. It tries to stay compatible
|
17
|
+
with 1.2.9 as much as possible but please be aware that it's not always possible
|
18
|
+
(mostly for the best), please read our [migration guide][8] for details.
|
16
19
|
|
17
20
|
## Databases
|
18
21
|
|
19
22
|
ActiveRecord-JDBC-Adapter provides full or nearly full support for:
|
20
|
-
**MySQL**, **PostgreSQL**, **SQLite3**, **Oracle**, **
|
21
|
-
**DB2**, **
|
23
|
+
**MySQL**, **PostgreSQL**, **SQLite3**, **Oracle**, *MS-SQL** (SQL Server),
|
24
|
+
**DB2**, **Firebird**, **Derby**, **HSQLDB**, **H2**, and **Informix**.
|
22
25
|
|
23
26
|
Other databases will require testing and likely a custom configuration module.
|
24
27
|
Please join the JRuby [mailing list][1] to help us discover support for more
|
@@ -262,3 +265,5 @@ license the database's drivers are licensed. See each driver gem's LICENSE.txt.
|
|
262
265
|
[4]: http://github.com/nicksieger/activerecord-cachedb-adapter
|
263
266
|
[5]: https://github.com/jruby/activerecord-jdbc-adapter/wiki
|
264
267
|
[6]: https://webchat.freenode.net/?channels=#jruby
|
268
|
+
[7]: http://badge.fury.io/rb/activerecord-jdbc-adapter
|
269
|
+
[8]: https://github.com/jruby/activerecord-jdbc-adapter/wiki/Migrating-from-1.2.x-to-1.3.0
|
data/gemfiles/rails23.gemfile
CHANGED
@@ -11,6 +11,9 @@ gem "test-unit-context", ">= 0.3.0", :group=>:test
|
|
11
11
|
gem "mocha", "~> 0.13.1", :require=>nil, :group=>:test
|
12
12
|
gem "simplecov", :require=>nil, :group=>:test
|
13
13
|
gem "bcrypt-ruby", "~> 3.0.0", :require=>nil, :group=>:test
|
14
|
+
gem "mysql2", :require=>nil, :platform=>:mri, :group=>:test
|
15
|
+
gem "pg", :require=>nil, :platform=>:mri, :group=>:test
|
16
|
+
gem "sqlite3", :require=>nil, :platform=>:mri, :group=>:test
|
14
17
|
gem "activerecord", "~> 2.3.18"
|
15
18
|
gem "rails", "~> 2.3.18"
|
16
19
|
|
@@ -14,7 +14,9 @@ GEM
|
|
14
14
|
appraisal (0.5.2)
|
15
15
|
bundler
|
16
16
|
rake
|
17
|
+
atomic (1.1.10)
|
17
18
|
atomic (1.1.10-java)
|
19
|
+
bcrypt-ruby (3.0.1)
|
18
20
|
bcrypt-ruby (3.0.1-java)
|
19
21
|
bouncy-castle-java (1.5.0147)
|
20
22
|
jruby-openssl (0.8.8)
|
@@ -39,11 +41,14 @@ GEM
|
|
39
41
|
test-unit (2.5.4)
|
40
42
|
test-unit-context (0.3.1)
|
41
43
|
test-unit (>= 2.4.0)
|
44
|
+
thread_safe (0.1.2)
|
45
|
+
atomic
|
42
46
|
thread_safe (0.1.2-java)
|
43
47
|
atomic
|
44
48
|
|
45
49
|
PLATFORMS
|
46
50
|
java
|
51
|
+
ruby
|
47
52
|
|
48
53
|
DEPENDENCIES
|
49
54
|
activerecord (~> 2.3.18)
|
@@ -51,9 +56,12 @@ DEPENDENCIES
|
|
51
56
|
bcrypt-ruby (~> 3.0.0)
|
52
57
|
jruby-openssl
|
53
58
|
mocha (~> 0.13.1)
|
59
|
+
mysql2
|
60
|
+
pg
|
54
61
|
rails (~> 2.3.18)
|
55
62
|
rake
|
56
63
|
simplecov
|
64
|
+
sqlite3
|
57
65
|
test-unit (= 2.5.4)
|
58
66
|
test-unit-context (>= 0.3.0)
|
59
67
|
thread_safe
|
data/gemfiles/rails30.gemfile
CHANGED
@@ -11,5 +11,8 @@ gem "test-unit-context", ">= 0.3.0", :group=>:test
|
|
11
11
|
gem "mocha", "~> 0.13.1", :require=>nil, :group=>:test
|
12
12
|
gem "simplecov", :require=>nil, :group=>:test
|
13
13
|
gem "bcrypt-ruby", "~> 3.0.0", :require=>nil, :group=>:test
|
14
|
+
gem "mysql2", :require=>nil, :platform=>:mri, :group=>:test
|
15
|
+
gem "pg", :require=>nil, :platform=>:mri, :group=>:test
|
16
|
+
gem "sqlite3", :require=>nil, :platform=>:mri, :group=>:test
|
14
17
|
gem "activerecord", "~> 3.0.20"
|
15
18
|
|
@@ -15,7 +15,9 @@ GEM
|
|
15
15
|
bundler
|
16
16
|
rake
|
17
17
|
arel (2.0.10)
|
18
|
+
atomic (1.1.10)
|
18
19
|
atomic (1.1.10-java)
|
20
|
+
bcrypt-ruby (3.0.1)
|
19
21
|
bcrypt-ruby (3.0.1-java)
|
20
22
|
bouncy-castle-java (1.5.0147)
|
21
23
|
builder (2.1.2)
|
@@ -26,20 +28,26 @@ GEM
|
|
26
28
|
mocha (0.13.3)
|
27
29
|
metaclass (~> 0.0.1)
|
28
30
|
multi_json (1.7.7)
|
31
|
+
mysql2 (0.3.13)
|
32
|
+
pg (0.16.0)
|
29
33
|
rake (10.1.0)
|
30
34
|
simplecov (0.7.1)
|
31
35
|
multi_json (~> 1.0)
|
32
36
|
simplecov-html (~> 0.7.1)
|
33
37
|
simplecov-html (0.7.1)
|
38
|
+
sqlite3 (1.3.8)
|
34
39
|
test-unit (2.5.4)
|
35
40
|
test-unit-context (0.3.1)
|
36
41
|
test-unit (>= 2.4.0)
|
42
|
+
thread_safe (0.1.2)
|
43
|
+
atomic
|
37
44
|
thread_safe (0.1.2-java)
|
38
45
|
atomic
|
39
46
|
tzinfo (0.3.37)
|
40
47
|
|
41
48
|
PLATFORMS
|
42
49
|
java
|
50
|
+
ruby
|
43
51
|
|
44
52
|
DEPENDENCIES
|
45
53
|
activerecord (~> 3.0.20)
|
@@ -47,8 +55,11 @@ DEPENDENCIES
|
|
47
55
|
bcrypt-ruby (~> 3.0.0)
|
48
56
|
jruby-openssl
|
49
57
|
mocha (~> 0.13.1)
|
58
|
+
mysql2
|
59
|
+
pg
|
50
60
|
rake
|
51
61
|
simplecov
|
62
|
+
sqlite3
|
52
63
|
test-unit (= 2.5.4)
|
53
64
|
test-unit-context (>= 0.3.0)
|
54
65
|
thread_safe
|
data/gemfiles/rails31.gemfile
CHANGED
@@ -11,5 +11,8 @@ gem "test-unit-context", ">= 0.3.0", :group=>:test
|
|
11
11
|
gem "mocha", "~> 0.13.1", :require=>nil, :group=>:test
|
12
12
|
gem "simplecov", :require=>nil, :group=>:test
|
13
13
|
gem "bcrypt-ruby", "~> 3.0.0", :require=>nil, :group=>:test
|
14
|
+
gem "mysql2", :require=>nil, :platform=>:mri, :group=>:test
|
15
|
+
gem "pg", :require=>nil, :platform=>:mri, :group=>:test
|
16
|
+
gem "sqlite3", :require=>nil, :platform=>:mri, :group=>:test
|
14
17
|
gem "activerecord", "~> 3.1.12"
|
15
18
|
|
@@ -16,7 +16,9 @@ GEM
|
|
16
16
|
bundler
|
17
17
|
rake
|
18
18
|
arel (2.2.3)
|
19
|
+
atomic (1.1.10)
|
19
20
|
atomic (1.1.10-java)
|
21
|
+
bcrypt-ruby (3.0.1)
|
20
22
|
bcrypt-ruby (3.0.1-java)
|
21
23
|
bouncy-castle-java (1.5.0147)
|
22
24
|
builder (3.0.4)
|
@@ -35,12 +37,15 @@ GEM
|
|
35
37
|
test-unit (2.5.4)
|
36
38
|
test-unit-context (0.3.1)
|
37
39
|
test-unit (>= 2.4.0)
|
40
|
+
thread_safe (0.1.2)
|
41
|
+
atomic
|
38
42
|
thread_safe (0.1.2-java)
|
39
43
|
atomic
|
40
44
|
tzinfo (0.3.37)
|
41
45
|
|
42
46
|
PLATFORMS
|
43
47
|
java
|
48
|
+
ruby
|
44
49
|
|
45
50
|
DEPENDENCIES
|
46
51
|
activerecord (~> 3.1.12)
|
@@ -48,8 +53,11 @@ DEPENDENCIES
|
|
48
53
|
bcrypt-ruby (~> 3.0.0)
|
49
54
|
jruby-openssl
|
50
55
|
mocha (~> 0.13.1)
|
56
|
+
mysql2
|
57
|
+
pg
|
51
58
|
rake
|
52
59
|
simplecov
|
60
|
+
sqlite3
|
53
61
|
test-unit (= 2.5.4)
|
54
62
|
test-unit-context (>= 0.3.0)
|
55
63
|
thread_safe
|
data/gemfiles/rails32.gemfile
CHANGED
@@ -11,5 +11,8 @@ gem "test-unit-context", ">= 0.3.0", :group=>:test
|
|
11
11
|
gem "mocha", "~> 0.13.1", :require=>nil, :group=>:test
|
12
12
|
gem "simplecov", :require=>nil, :group=>:test
|
13
13
|
gem "bcrypt-ruby", "~> 3.0.0", :require=>nil, :group=>:test
|
14
|
+
gem "mysql2", :require=>nil, :platform=>:mri, :group=>:test
|
15
|
+
gem "pg", :require=>nil, :platform=>:mri, :group=>:test
|
16
|
+
gem "sqlite3", :require=>nil, :platform=>:mri, :group=>:test
|
14
17
|
gem "activerecord", "~> 3.2.13"
|
15
18
|
|
@@ -16,7 +16,9 @@ GEM
|
|
16
16
|
bundler
|
17
17
|
rake
|
18
18
|
arel (3.0.2)
|
19
|
+
atomic (1.1.10)
|
19
20
|
atomic (1.1.10-java)
|
21
|
+
bcrypt-ruby (3.0.1)
|
20
22
|
bcrypt-ruby (3.0.1-java)
|
21
23
|
bouncy-castle-java (1.5.0147)
|
22
24
|
builder (3.0.4)
|
@@ -27,20 +29,26 @@ GEM
|
|
27
29
|
mocha (0.13.3)
|
28
30
|
metaclass (~> 0.0.1)
|
29
31
|
multi_json (1.7.7)
|
32
|
+
mysql2 (0.3.13)
|
33
|
+
pg (0.16.0)
|
30
34
|
rake (10.1.0)
|
31
35
|
simplecov (0.7.1)
|
32
36
|
multi_json (~> 1.0)
|
33
37
|
simplecov-html (~> 0.7.1)
|
34
38
|
simplecov-html (0.7.1)
|
39
|
+
sqlite3 (1.3.8)
|
35
40
|
test-unit (2.5.4)
|
36
41
|
test-unit-context (0.3.1)
|
37
42
|
test-unit (>= 2.4.0)
|
43
|
+
thread_safe (0.1.2)
|
44
|
+
atomic
|
38
45
|
thread_safe (0.1.2-java)
|
39
46
|
atomic
|
40
47
|
tzinfo (0.3.37)
|
41
48
|
|
42
49
|
PLATFORMS
|
43
50
|
java
|
51
|
+
ruby
|
44
52
|
|
45
53
|
DEPENDENCIES
|
46
54
|
activerecord (~> 3.2.13)
|
@@ -48,8 +56,11 @@ DEPENDENCIES
|
|
48
56
|
bcrypt-ruby (~> 3.0.0)
|
49
57
|
jruby-openssl
|
50
58
|
mocha (~> 0.13.1)
|
59
|
+
mysql2
|
60
|
+
pg
|
51
61
|
rake
|
52
62
|
simplecov
|
63
|
+
sqlite3
|
53
64
|
test-unit (= 2.5.4)
|
54
65
|
test-unit-context (>= 0.3.0)
|
55
66
|
thread_safe
|
data/gemfiles/rails40.gemfile
CHANGED
@@ -11,5 +11,8 @@ gem "test-unit-context", ">= 0.3.0", :group=>:test
|
|
11
11
|
gem "mocha", "~> 0.13.1", :require=>nil, :group=>:test
|
12
12
|
gem "simplecov", :require=>nil, :group=>:test
|
13
13
|
gem "bcrypt-ruby", "~> 3.0.0", :require=>nil, :group=>:test
|
14
|
+
gem "mysql2", :require=>nil, :platform=>:mri, :group=>:test
|
15
|
+
gem "pg", :require=>nil, :platform=>:mri, :group=>:test
|
16
|
+
gem "sqlite3", :require=>nil, :platform=>:mri, :group=>:test
|
14
17
|
gem "activerecord", "~> 4.0.0"
|
15
18
|
|
@@ -20,7 +20,9 @@ GEM
|
|
20
20
|
bundler
|
21
21
|
rake
|
22
22
|
arel (4.0.0)
|
23
|
+
atomic (1.1.10)
|
23
24
|
atomic (1.1.10-java)
|
25
|
+
bcrypt-ruby (3.0.1)
|
24
26
|
bcrypt-ruby (3.0.1-java)
|
25
27
|
bouncy-castle-java (1.5.0147)
|
26
28
|
builder (3.1.4)
|
@@ -46,6 +48,7 @@ GEM
|
|
46
48
|
|
47
49
|
PLATFORMS
|
48
50
|
java
|
51
|
+
ruby
|
49
52
|
|
50
53
|
DEPENDENCIES
|
51
54
|
activerecord (~> 4.0.0)
|
@@ -53,8 +56,11 @@ DEPENDENCIES
|
|
53
56
|
bcrypt-ruby (~> 3.0.0)
|
54
57
|
jruby-openssl
|
55
58
|
mocha (~> 0.13.1)
|
59
|
+
mysql2
|
60
|
+
pg
|
56
61
|
rake
|
57
62
|
simplecov
|
63
|
+
sqlite3
|
58
64
|
test-unit (= 2.5.4)
|
59
65
|
test-unit-context (>= 0.3.0)
|
60
66
|
thread_safe
|
data/lib/arjdbc/db2/adapter.rb
CHANGED
@@ -16,19 +16,8 @@ module ArJdbc
|
|
16
16
|
def self.initialize!
|
17
17
|
return if @@_initialized; @@_initialized = true
|
18
18
|
|
19
|
-
require 'arjdbc/
|
20
|
-
|
21
|
-
def after_save_with_db2_lob
|
22
|
-
lob_columns = self.class.columns.select { |c| c.sql_type =~ /blob|clob/i }
|
23
|
-
lob_columns.each do |column|
|
24
|
-
value = ::ArJdbc::SerializedAttributesHelper.dump_column_value(self, column)
|
25
|
-
next if value.nil? # already set NULL
|
26
|
-
|
27
|
-
self.class.connection.update_lob_value(self, column, value)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
ActiveRecord::Base.after_save :after_save_with_db2_lob
|
19
|
+
require 'arjdbc/util/serialized_attributes'
|
20
|
+
Util::SerializedAttributes.setup /blob|clob/i, 'after_save_with_db2_lob'
|
32
21
|
end
|
33
22
|
|
34
23
|
# @see ActiveRecord::ConnectionAdapters::JdbcAdapter#jdbc_connection_class
|
@@ -52,9 +41,6 @@ module ArJdbc
|
|
52
41
|
{ 'db2' => arel_visitor_type }
|
53
42
|
end
|
54
43
|
|
55
|
-
# @private
|
56
|
-
def self.handle_lobs?; true; end
|
57
|
-
|
58
44
|
# @private
|
59
45
|
@@emulate_booleans = true
|
60
46
|
|
@@ -62,9 +48,38 @@ module ArJdbc
|
|
62
48
|
#
|
63
49
|
# ArJdbc::DB2.emulate_booleans = false
|
64
50
|
#
|
51
|
+
def self.emulate_booleans?; @@emulate_booleans; end
|
52
|
+
# @deprecated Use {#emulate_booleans?} instead.
|
65
53
|
def self.emulate_booleans; @@emulate_booleans; end
|
54
|
+
# @see #emulate_booleans?
|
66
55
|
def self.emulate_booleans=(emulate); @@emulate_booleans = emulate; end
|
67
56
|
|
57
|
+
# @private
|
58
|
+
@@update_lob_values = true
|
59
|
+
|
60
|
+
# Updating records with LOB values (binary/text columns) in a separate
|
61
|
+
# statement can be disabled using :
|
62
|
+
#
|
63
|
+
# ArJdbc::DB2.update_lob_values = false
|
64
|
+
#
|
65
|
+
# @note This only applies when prepared statements are not used.
|
66
|
+
def self.update_lob_values?; @@update_lob_values; end
|
67
|
+
# @see #update_lob_values?
|
68
|
+
def self.update_lob_values=(update); @@update_lob_values = update; end
|
69
|
+
|
70
|
+
# @see #update_lob_values?
|
71
|
+
# @see ArJdbc::Util::SerializedAttributes#update_lob_columns
|
72
|
+
def update_lob_value?(value, column = nil)
|
73
|
+
DB2.update_lob_values? && ! prepared_statements? # && value
|
74
|
+
end
|
75
|
+
|
76
|
+
# @see #quote
|
77
|
+
# @private
|
78
|
+
BLOB_VALUE_MARKER = "BLOB('')"
|
79
|
+
# @see #quote
|
80
|
+
# @private
|
81
|
+
CLOB_VALUE_MARKER = "''"
|
82
|
+
|
68
83
|
def configure_connection
|
69
84
|
schema = self.schema
|
70
85
|
set_schema(schema) if schema && schema != config[:username]
|
@@ -248,6 +263,7 @@ module ArJdbc
|
|
248
263
|
# @override
|
249
264
|
def quote(value, column = nil)
|
250
265
|
return value.quoted_id if value.respond_to?(:quoted_id)
|
266
|
+
return value if sql_literal?(value)
|
251
267
|
|
252
268
|
if column
|
253
269
|
if column.respond_to?(:primary) && column.primary && column.klass != String
|
@@ -261,7 +277,7 @@ module ArJdbc
|
|
261
277
|
column_type = column && column.type.to_sym
|
262
278
|
|
263
279
|
case value
|
264
|
-
when nil then
|
280
|
+
when nil then 'NULL'
|
265
281
|
when Numeric # IBM_DB doesn't accept quotes on numeric types
|
266
282
|
# if the column type is text or string, return the quote value
|
267
283
|
if column_type == :text || column_type == :string
|
@@ -270,20 +286,20 @@ module ArJdbc
|
|
270
286
|
value.to_s
|
271
287
|
end
|
272
288
|
when String, ActiveSupport::Multibyte::Chars
|
273
|
-
if column_type == :binary &&
|
274
|
-
if
|
275
|
-
|
289
|
+
if column_type == :binary && column.sql_type !~ /for bit data/i
|
290
|
+
if update_lob_value?(value, column)
|
291
|
+
value.nil? ? 'NULL' : BLOB_VALUE_MARKER # '@@@IBMBINARY@@@'"
|
276
292
|
else
|
277
293
|
"BLOB('#{quote_string(value)}')"
|
278
294
|
end
|
279
295
|
elsif column && column.sql_type =~ /clob/ # :text
|
280
|
-
if
|
281
|
-
|
296
|
+
if update_lob_value?(value, column)
|
297
|
+
value.nil? ? 'NULL' : CLOB_VALUE_MARKER # "'@@@IBMTEXT@@@'"
|
282
298
|
else
|
283
299
|
"'#{quote_string(value)}'"
|
284
300
|
end
|
285
301
|
elsif column_type == :xml
|
286
|
-
value.nil? ?
|
302
|
+
value.nil? ? 'NULL' : "'#{quote_string(value)}'" # "'<ibm>@@@IBMXML@@@</ibm>'"
|
287
303
|
else
|
288
304
|
"'#{quote_string(value)}'"
|
289
305
|
end
|