activerecord-jdbc-adapter 1.2.5 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +5 -1
  3. data/Appraisals +5 -5
  4. data/Gemfile +9 -1
  5. data/Gemfile.lock +44 -10
  6. data/History.txt +126 -2
  7. data/README.md +246 -0
  8. data/Rakefile +34 -25
  9. data/activerecord-jdbc-adapter.gemspec +1 -1
  10. data/gemfiles/rails23.gemfile +5 -3
  11. data/gemfiles/rails23.gemfile.lock +26 -18
  12. data/gemfiles/rails30.gemfile +4 -2
  13. data/gemfiles/rails30.gemfile.lock +16 -8
  14. data/gemfiles/rails31.gemfile +4 -2
  15. data/gemfiles/rails31.gemfile.lock +16 -9
  16. data/gemfiles/rails32.gemfile +4 -2
  17. data/gemfiles/rails32.gemfile.lock +15 -8
  18. data/lib/active_record/connection_adapters/db2_adapter.rb +1 -0
  19. data/lib/arel/visitors/sql_server.rb +3 -0
  20. data/lib/arjdbc.rb +3 -5
  21. data/lib/arjdbc/db2.rb +1 -0
  22. data/lib/arjdbc/db2/adapter.rb +302 -196
  23. data/lib/arjdbc/db2/connection_methods.rb +18 -0
  24. data/lib/arjdbc/derby/active_record_patch.rb +12 -0
  25. data/lib/arjdbc/derby/adapter.rb +180 -158
  26. data/lib/arjdbc/derby/connection_methods.rb +5 -1
  27. data/lib/arjdbc/firebird/adapter.rb +27 -19
  28. data/lib/arjdbc/h2/adapter.rb +162 -7
  29. data/lib/arjdbc/h2/connection_methods.rb +5 -1
  30. data/lib/arjdbc/hsqldb.rb +1 -1
  31. data/lib/arjdbc/hsqldb/adapter.rb +96 -61
  32. data/lib/arjdbc/hsqldb/connection_methods.rb +5 -1
  33. data/lib/arjdbc/hsqldb/explain_support.rb +35 -0
  34. data/lib/arjdbc/informix/adapter.rb +56 -55
  35. data/lib/arjdbc/jdbc/adapter.rb +173 -86
  36. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  37. data/lib/arjdbc/jdbc/column.rb +28 -23
  38. data/lib/arjdbc/jdbc/connection.rb +10 -6
  39. data/lib/arjdbc/jdbc/driver.rb +13 -5
  40. data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +21 -0
  41. data/lib/arjdbc/mssql.rb +1 -1
  42. data/lib/arjdbc/mssql/adapter.rb +51 -53
  43. data/lib/arjdbc/mssql/connection_methods.rb +8 -1
  44. data/lib/arjdbc/mysql.rb +1 -1
  45. data/lib/arjdbc/mysql/adapter.rb +186 -150
  46. data/lib/arjdbc/mysql/connection_methods.rb +9 -9
  47. data/lib/arjdbc/mysql/explain_support.rb +85 -0
  48. data/lib/arjdbc/oracle.rb +1 -1
  49. data/lib/arjdbc/oracle/adapter.rb +232 -125
  50. data/lib/arjdbc/oracle/connection_methods.rb +2 -2
  51. data/lib/arjdbc/postgresql.rb +1 -1
  52. data/lib/arjdbc/postgresql/adapter.rb +134 -86
  53. data/lib/arjdbc/postgresql/connection_methods.rb +6 -4
  54. data/lib/arjdbc/postgresql/explain_support.rb +55 -0
  55. data/lib/arjdbc/sqlite3.rb +1 -1
  56. data/lib/arjdbc/sqlite3/adapter.rb +176 -108
  57. data/lib/arjdbc/sqlite3/connection_methods.rb +5 -5
  58. data/lib/arjdbc/sqlite3/explain_support.rb +32 -0
  59. data/lib/arjdbc/sybase/adapter.rb +7 -6
  60. data/lib/arjdbc/version.rb +1 -1
  61. data/pom.xml +1 -1
  62. data/rakelib/02-test.rake +9 -11
  63. data/rakelib/rails.rake +18 -10
  64. data/src/java/arjdbc/db2/DB2Module.java +70 -0
  65. data/src/java/arjdbc/derby/DerbyModule.java +24 -5
  66. data/src/java/arjdbc/hsqldb/HSQLDBModule.java +66 -0
  67. data/src/java/arjdbc/jdbc/AdapterJavaService.java +14 -7
  68. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +111 -89
  69. data/src/java/arjdbc/mysql/MySQLModule.java +79 -70
  70. data/src/java/arjdbc/oracle/OracleModule.java +74 -0
  71. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +5 -10
  72. data/src/java/arjdbc/sqlite3/SQLite3Module.java +77 -0
  73. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +127 -0
  74. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +25 -111
  75. data/src/java/arjdbc/util/QuotingUtils.java +104 -0
  76. data/test/abstract_db_create.rb +6 -6
  77. data/test/activerecord/connection_adapters/type_conversion_test.rb +2 -2
  78. data/test/assets/flowers.jpg +0 -0
  79. data/test/binary.rb +67 -0
  80. data/test/db/db2.rb +30 -7
  81. data/test/db/jdbc.rb +4 -2
  82. data/test/db/oracle.rb +18 -27
  83. data/test/db2_binary_test.rb +6 -0
  84. data/test/db2_serialize_test.rb +6 -0
  85. data/test/db2_simple_test.rb +20 -25
  86. data/test/db2_test.rb +71 -0
  87. data/test/derby_binary_test.rb +6 -0
  88. data/test/derby_migration_test.rb +42 -35
  89. data/test/derby_reset_column_information_test.rb +1 -0
  90. data/test/derby_row_locking_test.rb +17 -0
  91. data/test/derby_schema_dump_test.rb +9 -0
  92. data/test/derby_serialize_test.rb +6 -0
  93. data/test/derby_simple_test.rb +59 -17
  94. data/test/generic_jdbc_connection_test.rb +112 -5
  95. data/test/h2_binary_test.rb +6 -0
  96. data/test/h2_change_column_test.rb +1 -1
  97. data/test/h2_schema_dump_test.rb +25 -0
  98. data/test/h2_serialize_test.rb +6 -0
  99. data/test/h2_simple_test.rb +23 -9
  100. data/test/has_many_through.rb +18 -4
  101. data/test/hsqldb_binary_test.rb +6 -0
  102. data/test/hsqldb_schema_dump_test.rb +15 -0
  103. data/test/hsqldb_serialize_test.rb +6 -0
  104. data/test/hsqldb_simple_test.rb +1 -0
  105. data/test/informix_simple_test.rb +1 -1
  106. data/test/jdbc/db2.rb +23 -0
  107. data/test/jdbc/oracle.rb +23 -0
  108. data/test/jdbc_common.rb +3 -110
  109. data/test/jndi_callbacks_test.rb +0 -2
  110. data/test/jndi_test.rb +2 -0
  111. data/test/models/binary.rb +18 -0
  112. data/test/models/custom_pk_name.rb +1 -0
  113. data/test/models/data_types.rb +11 -2
  114. data/test/models/entry.rb +1 -1
  115. data/test/models/string_id.rb +2 -2
  116. data/test/models/thing.rb +1 -1
  117. data/test/models/topic.rb +32 -0
  118. data/test/mssql_legacy_types_test.rb +1 -1
  119. data/test/mssql_limit_offset_test.rb +13 -3
  120. data/test/mssql_serialize_test.rb +6 -0
  121. data/test/mysql_binary_test.rb +6 -0
  122. data/test/mysql_schema_dump_test.rb +220 -0
  123. data/test/mysql_serialize_test.rb +6 -0
  124. data/test/mysql_simple_test.rb +22 -2
  125. data/test/mysql_test.rb +93 -0
  126. data/test/oracle_binary_test.rb +6 -0
  127. data/test/oracle_limit_test.rb +2 -1
  128. data/test/oracle_serialize_test.rb +6 -0
  129. data/test/oracle_simple_test.rb +61 -0
  130. data/test/oracle_specific_test.rb +77 -26
  131. data/test/postgres_binary_test.rb +6 -0
  132. data/test/postgres_native_type_mapping_test.rb +12 -11
  133. data/test/postgres_nonseq_pkey_test.rb +1 -0
  134. data/test/postgres_reserved_test.rb +1 -0
  135. data/test/postgres_reset_column_information_test.rb +1 -0
  136. data/test/postgres_row_locking_test.rb +21 -0
  137. data/test/postgres_schema_dump_test.rb +88 -0
  138. data/test/postgres_schema_search_path_test.rb +1 -0
  139. data/test/postgres_simple_test.rb +62 -89
  140. data/test/postgres_table_alias_length_test.rb +1 -0
  141. data/test/postgres_test.rb +31 -0
  142. data/test/postgres_type_conversion_test.rb +16 -16
  143. data/test/row_locking.rb +69 -64
  144. data/test/schema_dump.rb +168 -0
  145. data/test/serialize.rb +277 -0
  146. data/test/simple.rb +326 -122
  147. data/test/sqlite3_serialize_test.rb +6 -0
  148. data/test/sqlite3_simple_test.rb +51 -84
  149. data/test/sqlite3_type_conversion_test.rb +101 -0
  150. data/test/test_helper.rb +224 -0
  151. metadata +325 -366
  152. data/README.rdoc +0 -214
  153. data/test/db/logger.rb +0 -3
  154. data/test/derby_multibyte_test.rb +0 -11
  155. data/test/mysql_info_test.rb +0 -123
data/.gitignore CHANGED
@@ -19,3 +19,4 @@ patches*
19
19
  /jndi_test/jdbc/.bindings
20
20
  target
21
21
  test/jars
22
+ coverage
@@ -6,10 +6,13 @@ rvm:
6
6
  env:
7
7
  - DB=mysql
8
8
  - DB=postgresql
9
+ - DB=sqlite3
10
+ # derby - tested with test_jndi
11
+ #- DB=derby
9
12
  - DB=h2
10
13
  - DB=hsqldb
11
- - DB=sqlite3
12
14
  - DB=jndi
15
+ - DB=jdbc
13
16
  gemfile:
14
17
  - gemfiles/rails23.gemfile
15
18
  - gemfiles/rails30.gemfile
@@ -18,6 +21,7 @@ gemfile:
18
21
  branches:
19
22
  only:
20
23
  - master
24
+ - 1-2-stable
21
25
  matrix:
22
26
  allow_failures:
23
27
  - gemfile: gemfiles/rails23.gemfile
data/Appraisals CHANGED
@@ -1,16 +1,16 @@
1
1
  appraise "rails23" do
2
- gem "activerecord", "~> 2.3.14"
3
- gem "rails", "~> 2.3.14"
2
+ gem "activerecord", "~> 2.3.16"
3
+ gem "rails", "~> 2.3.16"
4
4
  end
5
5
 
6
6
  appraise "rails30" do
7
- gem "activerecord", "~> 3.0.17"
7
+ gem "activerecord", "~> 3.0.20"
8
8
  end
9
9
 
10
10
  appraise "rails31" do
11
- gem "activerecord", "~> 3.1.8"
11
+ gem "activerecord", "~> 3.1.10"
12
12
  end
13
13
 
14
14
  appraise "rails32" do
15
- gem "activerecord", "~> 3.2.9"
15
+ gem "activerecord", "~> 3.2.11"
16
16
  end
data/Gemfile CHANGED
@@ -11,4 +11,12 @@ gem 'appraisal'
11
11
  gem 'rake', :require => nil
12
12
  # appraisal ignores group block declarations :
13
13
  gem 'test-unit', :group => :test
14
- gem 'mocha', :group => :test
14
+ gem 'mocha', :require => nil, :group => :test # '>= 0.13.0'
15
+ gem 'simplecov', :require => nil, :group => :test
16
+ gem 'bcrypt-ruby', '~> 3.0.0', :require => nil, :group => :test
17
+
18
+ group :rails do
19
+ gem 'erubis', :require => nil
20
+ # NOTE: due rails/activerecord/test/cases/session_store/session_test.rb
21
+ gem 'actionpack', :require => nil
22
+ end
@@ -1,32 +1,52 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activemodel (3.2.9)
5
- activesupport (= 3.2.9)
4
+ actionpack (3.2.11)
5
+ activemodel (= 3.2.11)
6
+ activesupport (= 3.2.11)
6
7
  builder (~> 3.0.0)
7
- activerecord (3.2.9)
8
- activemodel (= 3.2.9)
9
- activesupport (= 3.2.9)
8
+ erubis (~> 2.7.0)
9
+ journey (~> 1.0.4)
10
+ rack (~> 1.4.0)
11
+ rack-cache (~> 1.2)
12
+ rack-test (~> 0.6.1)
13
+ sprockets (~> 2.2.1)
14
+ activemodel (3.2.11)
15
+ activesupport (= 3.2.11)
16
+ builder (~> 3.0.0)
17
+ activerecord (3.2.11)
18
+ activemodel (= 3.2.11)
19
+ activesupport (= 3.2.11)
10
20
  arel (~> 3.0.2)
11
21
  tzinfo (~> 0.3.29)
12
- activesupport (3.2.9)
22
+ activesupport (3.2.11)
13
23
  i18n (~> 0.6)
14
24
  multi_json (~> 1.0)
15
25
  appraisal (0.5.1)
16
26
  bundler
17
27
  rake
18
28
  arel (3.0.2)
29
+ bcrypt-ruby (3.0.1)
30
+ bcrypt-ruby (3.0.1-java)
19
31
  bouncy-castle-java (1.5.0146.1)
20
32
  builder (3.0.4)
21
33
  columnize (0.3.6)
34
+ erubis (2.7.0)
35
+ hike (1.2.1)
22
36
  i18n (0.6.1)
23
- jruby-openssl (0.7.7)
37
+ journey (1.0.4)
38
+ jruby-openssl (0.8.2)
24
39
  bouncy-castle-java (>= 1.5.0146.1)
25
40
  linecache (0.46-java)
26
41
  metaclass (0.0.1)
27
- mocha (0.11.4)
42
+ mocha (0.13.2)
28
43
  metaclass (~> 0.0.1)
29
- multi_json (1.3.7)
44
+ multi_json (1.5.0)
45
+ rack (1.4.4)
46
+ rack-cache (1.2)
47
+ rack (>= 0.4)
48
+ rack-test (0.6.2)
49
+ rack (>= 1.0)
30
50
  rake (10.0.3)
31
51
  ruby-debug (0.10.4)
32
52
  columnize (>= 0.1)
@@ -34,17 +54,31 @@ GEM
34
54
  ruby-debug-base (0.10.4)
35
55
  linecache (>= 0.3)
36
56
  ruby-debug-base (0.10.4-java)
37
- test-unit (2.5.3)
57
+ simplecov (0.7.1)
58
+ multi_json (~> 1.0)
59
+ simplecov-html (~> 0.7.1)
60
+ simplecov-html (0.7.1)
61
+ sprockets (2.2.2)
62
+ hike (~> 1.2)
63
+ multi_json (~> 1.0)
64
+ rack (~> 1.0)
65
+ tilt (~> 1.1, != 1.3.0)
66
+ test-unit (2.5.4)
67
+ tilt (1.3.3)
38
68
  tzinfo (0.3.35)
39
69
 
40
70
  PLATFORMS
41
71
  java
42
72
 
43
73
  DEPENDENCIES
74
+ actionpack
44
75
  activerecord
45
76
  appraisal
77
+ bcrypt-ruby (~> 3.0.0)
78
+ erubis
46
79
  jruby-openssl
47
80
  mocha
48
81
  rake
49
82
  ruby-debug
83
+ simplecov
50
84
  test-unit
@@ -1,3 +1,127 @@
1
+ == 1.2.8 (03/13/13)
2
+
3
+ - [derby] (native) types review & cleanup, externalize AR patch-ing
4
+ - [h2] correct schema dump (jdbc detected sql types)
5
+ - [hsqldb] correct schema dump (jdbc detected sql types)
6
+ - cleanup H2 / HSQLDB adapter - HSQLDB should not know about H2
7
+ - [mssql] [oracle] [db2] [derby] remove_column 3.x compatibility
8
+ - [sqlite3] setup native types + make sure tables accepts table_name as well
9
+ - [mysql] version + support_"feature" (as Rails)
10
+ - jdbc_connection unwrap parameter for unwrapping (pooled) connections
11
+ - (native) connection #columns #columns_internal expects string table_name
12
+ - [postgres] no need to clear_query_cache after insert on AR-2.3's #insert_sql
13
+ - there's still a double bind when "raw" crud methods used (re-closing #322)
14
+
15
+ == 1.2.7 (02/12/13)
16
+
17
+ - add some (probably redundant) synchronization + "arjdbc.disconnect.debug" flag
18
+ as an attempt to detect when connection is set to null (#197 and #198)
19
+ avoid (deprecated) Java.java_to_ruby when wrapping java.sql.Connection
20
+ - follow Column-naming convention in MySQL adapter ArJdbc module
21
+ - make sure update_sql is public in mysql adapter (Rails compatibility)
22
+ - fix 1.2.6 regression - incorrectly setup to_sql method based on Rails version
23
+ this caused double '?' bind substitution issues (#322)
24
+
25
+ == 1.2.6 (01/31/13)
26
+
27
+ - [postgres] only set --schema (to search path) for pg_dump if configured (#315)
28
+ - [oracle] id limits + quoting; current user/db/schema + savepoint support
29
+ - execute "log" (sql) name correctly based on AR version
30
+ - deprecate substitute_binds and extract_sql
31
+ - [derby] make sure we never modify the passed sql param
32
+ - [sqlite3] execute on insert_sql + savepoint support
33
+ - [mssql] [firebird] [informix] (shared) serialized attribute support
34
+ - [oracle] (shared) serialized attribute support
35
+ - [sqlite3] fix binary column handling failure (#51)
36
+ - renamed Sqlite3RubyJdbcConnection to SQLite3RubyJdbcConnection
37
+ - [mysql] re-define remove_index! for "better" AR-2.3 compatibility
38
+ - [derby] avoid failures with #quote when second arg nil + keep string encoding
39
+ - [db2] binary support & improved quoting +
40
+ use lob callback for all since it was failing on BLOB/CLOB inserts otherwise
41
+ - [db2] better (simplified) type handling for DB2
42
+ - JRuby 1.6.8 compatibility when rescue-ing Java exception
43
+ - [mysql] avoid encoding issues with MySQL's quoting methods (#185)
44
+ - [postgres] ignore binary precision / limit for bytea
45
+ - [oracle] explain (query) support
46
+ - [oracle] since Oracle supports TIMESTAMP for quite a while we should not
47
+ create DATE columns for a :timestamp column type
48
+ - [oracle] avoid CREATE DDL failure when BLOB has length specified
49
+ - [jdbc-] review autoloading backwards-incompatible change in jdbc- gems
50
+ auto-load (backwards-compat) can be enabled back using jdbc.driver.autoload
51
+ system property or using the driver specific autoload option as well
52
+ - [jdbc-] Update version handling introduce DRIVER_VERSION constant
53
+ - [oracle] should support WITH statements (as SELECTs)
54
+ - expose select? and insert? helpers on JdbcAdapter class
55
+ - [postgres] bug in create_database without options (#306)
56
+ - [db2] correct DB2 schema selection (when as400 url has parameters)
57
+ - [db2] DB2 becomes a first-class citizen (adapter) `adapter: db2`
58
+ - [h2] [hsqldb] explain support for H2 and HSQLDB
59
+ - [db2] column should be checked if ain't nil when quoting on DB2
60
+ - [mssql] raise exception when offset is specified but limit is not
61
+ - [sqlite3] SQLite3 explain support (Rails style)
62
+ - [postgres] (re-usable) explain support for PostgreSQL (based on Rails)
63
+ - [h2] update handling of time fields on H2/HSQLDB (#252)
64
+ - rescue (and wrap) only SQLExceptions from driver.connect this caused
65
+ swallowing of runtime exceptions from JDBC drivers
66
+ - support for setting (custom) jdbc driver properties in config
67
+ - when a new adapter (constant) gets loaded column types should pick it up
68
+ - [jdbc-derby] updated to 10.8.3.0
69
+ - raise LoadError with explanation on with jTDS 1.3.0 on non Java 1.7
70
+ - setup the connection methods when adapter is loaded (broken in 1.2.5)
71
+
72
+ == 1.2.5 (01/02/13)
73
+
74
+ - backwards compat with older jdbc- (driver) gems (#279)
75
+ - no need to set the :driver for jndi config (did not work anyways) when jdbc is being
76
+ configured + do not raise if there's a :driver_instance setup instead of the :driver
77
+ - support extra options with recreate_database (for postgres)
78
+ - [jdbc-derby] update Derby to 10.8.2.2
79
+ - [jdbc-h2] update H2 to 1.3.170
80
+ - no need for poluting Kernel (#jdbc_require_driver) anymore
81
+ - [sqlite3] updated sqlite3 binary handling
82
+ - [jdbc-jtds] upgrade to jtds (driver) 1.3.0
83
+ - JDBC driver names should be on one (re-usable) place
84
+ - make sure that (jdbc-xxx gem) .jars are only loaded (required) when first connection
85
+ is attempted (this avoids e.g. sqlite-jdbc.jar being always among loaded features)
86
+ - jdbc-* gems should expose the driver_jar instead of (auto) loading it
87
+ - [oracle] adding in_clause_limit override to properly handle Oracle's 1000 entry limit
88
+ - [jdbc-mysql] upgrade to mysql connector 5.1.22
89
+ - [jdbc-postgres] upgade to postgresql-9.2 jar version 9.2-1002
90
+ - [postgres] fix standard_conforming_strings's default not being set and
91
+ backslash escaping to account for standard_conforming_strings
92
+ - [jdbc-postgres] upgrade to postgres.jar 9.1.903 driver
93
+ - [jdbc-h2] update h2.jar to 1.3.168
94
+ - [postgres] use newer hex-encoding for postgresql >= 9.0
95
+ - [postgres] use updated postgres string escaping for byte arrays
96
+ - [hsqldb] fix binary data quoting
97
+ - [jdbc-hsqldb] update hsqldb.jar to 2.2.9
98
+ - [db2] if guessing the date or time fails return the value
99
+ - [db2] fix crasher regression on dump of primary keys
100
+ - [db2] fix change_column always executing as as400
101
+ - [db2] add support for primary keys to structure_dump
102
+ - [db2] detect identity columns in db2 structure_dump
103
+ - [mysql] added support for Rails 3.2 explain feature (#159)
104
+ - add support for DB_STRUCTURE in db:structure:dump
105
+ (and db:structure:load task) (#203)
106
+ - [postgres] rename sequence during table rename
107
+ - [db2] iseries returns date with two digit year - leave it as string
108
+ - [mssql] fix pessimistic locking
109
+ - [mssql] fix row_number errors on SQL Server 2000
110
+ - [db2] support WITH statements in select
111
+ - [db2] use DECIMAL(1) for boolean fields
112
+ - [db2] fetch a sequence value manually for tables with no identity columns
113
+ - [postgres] add support for template in PostgreSQLAdapter
114
+ - [db2] add recognition of MQTs and ALIASes as table types for DB2
115
+ - [postgres] remove count distinct restriction to match native ruby adapter
116
+ - [mssql] pull back primary key using table name via AR
117
+ - [db2] return nil if using jndi and schema/user is not set
118
+ - fixed support for AR 3.2.1
119
+ - [postgres] implemented dynamic search path management
120
+
121
+ == 1.2.2.1 (10/18/12)
122
+
123
+ - [postgresql] fix regression on insert for Rails 2.3 (#173)
124
+
1
125
  == 1.2.2 (01/27/12)
2
126
 
3
127
  - Thanks George Murphy and Dwayne Litzenberger for their significant
@@ -234,7 +358,7 @@
234
358
  - ACTIVERECORD_JDBC-97: Dont use Rails 3 deprecated constants (David
235
359
  Calavera)
236
360
  - Updates for rake db:schema:dump compatibility with Rails 2.3+ and
237
- MySQL (Joakim Kolsj�)
361
+ MySQL (Joakim Kolsj�)
238
362
  - Rails 3.0.0.beta2 compatibility
239
363
  - Return of Derby, H2, Hsqldb support (requires AR >= 3.0.0.beta2)
240
364
 
@@ -325,7 +449,7 @@
325
449
  actual maximum size of the JNDI connection pool. (We'll look at how
326
450
  to eliminate the need to configure AR's pool in the future.)
327
451
  - NEW! Informix support courtesy of Javier Fernandez-Ivern.
328
- - Backport another Oracle CLOB issue, thanks Edson C�sar.
452
+ - Backport another Oracle CLOB issue, thanks Edson C�sar.
329
453
  - Rubyforge #22018: chomp final trailing semicolon for oracle
330
454
  - JRUBY-2848: Fix NPE error in set_native_database_types
331
455
  - Rework oracle lob saving callback to be Rails 2.1 friendly (assist
@@ -0,0 +1,246 @@
1
+ # ActiveRecord JDBC Adapter
2
+
3
+ ActiveRecord-JDBC-Adapter (AR-JDBC) is a database adapter for Rails'
4
+ *ActiveRecord* component that can be used with [JRuby][0]. It allows use of
5
+ virtually any JDBC-compliant database with your JRuby on Rails application.
6
+
7
+ AR-JDBC **1.2.x** officially supports ActiveRecord 3.x as well as 2.3, it's
8
+ latest version is compatible with JRuby 1.6.8+ (but as always we recommend to
9
+ use the latest and greatest of JRubies) thus requires Java 1.6 at minimum.
10
+
11
+ ## Databases
12
+
13
+ ActiveRecord-JDBC-Adapter provides full or nearly full support for:
14
+ **MySQL**, **PostgreSQL**, **SQLite3**, **Oracle**, **Microsoft SQL Server**,
15
+ **DB2**, **FireBird**, **Derby**, **HSQLDB**, **H2**, and **Informix**.
16
+
17
+ Other databases will require testing and likely a custom configuration module.
18
+ Please join the JRuby [mailing list][1] to help us discover support for more
19
+ databases.
20
+
21
+ ## Using ActiveRecord JDBC
22
+
23
+ ### Inside Rails
24
+
25
+ To use `activerecord-jdbc-adapter` with JRuby on Rails :
26
+
27
+ 1. Choose the adapter you wish to gem install. The following pre-packaged
28
+ adapters are available :
29
+
30
+ - Base JDBC (`activerecord-jdbc-adapter`) - supports all available databases via
31
+ JDBC, but requires you to download and manually setup the database vendor's
32
+ JDBC driver .jar file.
33
+ - MySQL (`activerecord-jdbcmysql-adapter`)
34
+ - PostgreSQL (`activerecord-jdbcpostgresql-adapter`)
35
+ - SQLite3 (`activerecord-jdbcsqlite3-adapter`)
36
+ - Derby (`activerecord-jdbcderby-adapter`)
37
+ - HSQLDB (`activerecord-jdbchsqldb-adapter`)
38
+ - H2 (`activerecord-jdbch2-adapter`)
39
+ - MSSQL (`activerecord-jdbcmssql-adapter`) - does not support SQL Azure by default,
40
+ see the [README][2] for more information.
41
+
42
+ 2a. For Rails 3, if you're generating a new application, use the
43
+ following command to generate your application:
44
+
45
+ jruby -S rails new sweetapp
46
+
47
+ 2b. Otherwise, you might need to perform some extra configuration steps
48
+ to prepare your Rails application for JDBC.
49
+
50
+ If you're using Rails 3, you'll need to modify your *Gemfile* to use the
51
+ *activerecord-jdbc-adapter* gem under JRuby. Change your *Gemfile* to look
52
+ like the following (using sqlite3 as an example) :
53
+
54
+ ```ruby
55
+ gem 'sqlite3', :platform => :ruby
56
+
57
+ platforms :jruby do
58
+ gem 'jruby-openssl'
59
+ gem 'activerecord-jdbcsqlite3-adapter'
60
+ end
61
+ ```
62
+
63
+ If you're using Rails 2:
64
+
65
+ jruby script/generate jdbc
66
+
67
+ 3. Configure your *database.yml* in the normal Rails style.
68
+
69
+ Legacy configuration: If you use one of the convenience
70
+ *activerecord-jdbcXXX-adapter* adapters, you can still put a 'jdbc'
71
+ prefix in front of the database adapter name e.g. :
72
+
73
+ ```yml
74
+ development:
75
+ adapter: jdbcmysql
76
+ username: blog
77
+ password:
78
+ host: localhost
79
+ database: weblog_development
80
+ ```
81
+
82
+ For plain JDBC database configurations, you'll need to know the database driver
83
+ class and URL (do not forget to put the driver jar on the class-path) e.g. :
84
+
85
+ ```yml
86
+ development:
87
+ adapter: jdbc
88
+ username: blog
89
+ password:
90
+ driver: com.mysql.jdbc.Driver
91
+ url: jdbc:mysql://localhost:3306/weblog_development
92
+ ```
93
+
94
+ For JNDI data sources, you may simply specify the JNDI location as follows (the
95
+ correct adapter type will be automatically detected) :
96
+
97
+ ```yml
98
+ production:
99
+ adapter: jdbc
100
+ jndi: jdbc/mysqldb
101
+ ```
102
+
103
+ JDBC driver specific properties might be set if you use an URL to specify the DB
104
+ or using the *properties:* syntax (since AR-JDBC **1.2.6**) :
105
+
106
+ ```yml
107
+ production:
108
+ adapter: mysql
109
+ username: blog
110
+ password: blog
111
+ url: "jdbc:mysql://localhost:3306/weblog?profileSQL=true"
112
+ properties: # specific to com.mysql.jdbc.Driver
113
+ socketTimeout: 60000
114
+ connectTimeout: 60000
115
+ ```
116
+
117
+ If you're really old school you might want to use AR-JDBC with a DB2 on z/OS :
118
+
119
+ ```yml
120
+ development:
121
+ adapter: jdbc
122
+ encoding: unicode
123
+ url: jdbc:db2j:net://mightyzoshost:446/RAILS_DBT1
124
+ driver: com.ibm.db2.jcc.DB2Driver
125
+ schema: DB2XB12
126
+ database: RAILS_DB1
127
+ tablespace: TSDE911
128
+ lob_tablespaces:
129
+ first_table: TSDE912
130
+ username: scott
131
+ password: lion
132
+ ```
133
+
134
+ ### Standalone (with ActiveRecord)
135
+
136
+ 1. Install the gem with JRuby:
137
+
138
+ jruby -S gem install activerecord-jdbc-adapter
139
+
140
+ If you wish to use the adapter for a specific database, you can install it
141
+ directly and the driver gem (dependency) will be installed as well :
142
+
143
+ jruby -S gem install activerecord-jdbcderby-adapter
144
+
145
+ 2. After this you can establish a JDBC connection like this :
146
+
147
+ ```ruby
148
+ ActiveRecord::Base.establish_connection(
149
+ :adapter => 'derby', # or 'jdbcderby'
150
+ :database => "db/my-database"
151
+ )
152
+ ```
153
+
154
+ or like (but requires that you manually put the driver jar on the classpath) :
155
+
156
+ ```ruby
157
+ ActiveRecord::Base.establish_connection(
158
+ :adapter => 'jdbc',
159
+ :driver => 'org.apache.derby.jdbc.EmbeddedDriver',
160
+ :url => 'jdbc:derby:sample_db;create=true'
161
+ )
162
+ ```
163
+
164
+ ## Source
165
+
166
+ The source for activerecord-jdbc-adapter is available using git :
167
+
168
+ git clone git://github.com/jruby/activerecord-jdbc-adapter.git
169
+
170
+ Please note that the project manages multiple gems from a single repository,
171
+ if you're using *Bundler* 1.2 it should be able to locate all gemspecs from
172
+ the git repository. Sample *Gemfile* for running with (MySQL) master :
173
+
174
+ ```ruby
175
+ gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter'
176
+ gem 'activerecord-jdbcmysql-adapter', :github => 'jruby/activerecord-jdbc-adapter'
177
+ gem 'jdbc-mysql', :github => 'jruby/activerecord-jdbc-adapter'
178
+ ```
179
+
180
+ ## Running AR-JDBC Tests
181
+
182
+ [![Build Status][9]](http://travis-ci.org/#!/jruby/activerecord-jdbc-adapter)
183
+
184
+ Drivers for 6 open-source databases are included. Provided you have
185
+ MySQL installed, you can simply type `jruby -S rake` to run the tests.
186
+ A database named *weblog_development* is needed beforehand with a
187
+ connection user of "blog" and an empty password. You alse need to grant
188
+ "blog" create privileges on 'test_rake_db_create.*'.
189
+
190
+ If you also have PostgreSQL available, those tests will be run if the
191
+ `psql` executable can be found. Also ensure you have a database named
192
+ *weblog_development* and a user named "blog" with an empty password.
193
+ You can control the host and port the tests will attempt to by setting
194
+ the environment variables `PGHOST` and `PGPORT`.
195
+
196
+ To execute a single test case, you can run:
197
+
198
+ rake appraisal:{version} test_{db} TEST=test/{tests_file}
199
+
200
+ Substitute the *version* of ActiveRecord for version, which can be one of :
201
+ *rails23*, *rails30*, *rails31*, or *rails32*.
202
+
203
+ The db can be one of these : *sqlite3*, *mysql*, *postgres*,
204
+ *mssql*, *sybase*, *oracle*, *db2*, *derby*, *h2* or *hssql*.
205
+
206
+ Finally, the *tests_file* will be whichever (.rb) test case you want to run.
207
+
208
+ ### Running AR Tests
209
+
210
+ To run the current AR-JDBC sources with `ActiveRecord`, just use the included
211
+ `rails:test` task. Be sure to specify a driver and a path to the AR's sources :
212
+
213
+ jruby -S rake rails:test DRIVER=mysql RAILS=/path/rails_source_dir
214
+
215
+ ## Extending AR-JDBC
216
+
217
+ You can create your own extension to AR-JDBC for a JDBC-based database
218
+ that core AR-JDBC does not support. We've created an example project
219
+ for the Intersystems Cache database that you can examine as a template.
220
+ See the [cachedb-adapter project][4] for more information.
221
+
222
+ ## Feedback
223
+
224
+ Please report bugs at our [issue tracker][3]. If you're not sure if
225
+ something's a bug, feel free to pre-report it on the [mailing lists][1] or
226
+ ask on the #JRuby IRC channel on http://freenode.net/.
227
+
228
+ ## Authors
229
+
230
+ This project was written by Nick Sieger <nick@nicksieger.com> and Ola Bini
231
+ <olabini@gmail.com> with lots of help from the JRuby community.
232
+
233
+ ## License
234
+
235
+ ActiveRecord-JDBC-Adapter is released under the BSD/MIT license.
236
+ See the LICENSE.txt file included with the distribution for details.
237
+
238
+ Open-source driver gems within AR-JDBC's sources are licensed under the same
239
+ license the database's drivers are licensed. See each driver gem's LICENSE.txt.
240
+
241
+ [0]: http://www.jruby.org/
242
+ [1]: http://jruby.org/community
243
+ [2]: http://github.com/jruby/activerecord-jdbc-adapter/blob/master/activerecord-jdbcmssql-adapter
244
+ [3]: https://github.com/jruby/activerecord-jdbc-adapter/issues
245
+ [4]: http://github.com/nicksieger/activerecord-cachedb-adapter
246
+ [9]: https://secure.travis-ci.org/jruby/activerecord-jdbc-adapter.png