activerecord-jdbc-adapter 1.3.17 → 1.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +24 -5
  3. data/History.md +54 -0
  4. data/lib/arel/visitors/compat.rb +30 -2
  5. data/lib/arel/visitors/db2.rb +118 -29
  6. data/lib/arel/visitors/derby.rb +84 -29
  7. data/lib/arel/visitors/firebird.rb +66 -9
  8. data/lib/arel/visitors/h2.rb +16 -0
  9. data/lib/arel/visitors/hsqldb.rb +6 -3
  10. data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
  11. data/lib/arel/visitors/sql_server.rb +121 -40
  12. data/lib/arel/visitors/sql_server/ng42.rb +293 -0
  13. data/lib/arjdbc.rb +1 -7
  14. data/lib/arjdbc/db2.rb +1 -0
  15. data/lib/arjdbc/db2/adapter.rb +118 -18
  16. data/lib/arjdbc/derby/adapter.rb +29 -8
  17. data/lib/arjdbc/firebird.rb +1 -0
  18. data/lib/arjdbc/firebird/adapter.rb +126 -11
  19. data/lib/arjdbc/hsqldb/adapter.rb +3 -0
  20. data/lib/arjdbc/informix.rb +1 -0
  21. data/lib/arjdbc/jdbc.rb +17 -0
  22. data/lib/arjdbc/jdbc/adapter.rb +28 -3
  23. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  24. data/lib/arjdbc/jdbc/column.rb +7 -3
  25. data/lib/arjdbc/jdbc/type_cast.rb +2 -0
  26. data/lib/arjdbc/jdbc/type_converter.rb +28 -15
  27. data/lib/arjdbc/mimer.rb +1 -0
  28. data/lib/arjdbc/mssql.rb +2 -1
  29. data/lib/arjdbc/mssql/adapter.rb +105 -30
  30. data/lib/arjdbc/mssql/column.rb +30 -7
  31. data/lib/arjdbc/mssql/limit_helpers.rb +22 -9
  32. data/lib/arjdbc/mssql/types.rb +343 -0
  33. data/lib/arjdbc/mssql/utils.rb +25 -2
  34. data/lib/arjdbc/mysql/adapter.rb +22 -21
  35. data/lib/arjdbc/oracle.rb +1 -0
  36. data/lib/arjdbc/oracle/adapter.rb +291 -19
  37. data/lib/arjdbc/oracle/column.rb +9 -5
  38. data/lib/arjdbc/oracle/connection_methods.rb +4 -1
  39. data/lib/arjdbc/postgresql/_bc_time_cast_patch.rb +21 -0
  40. data/lib/arjdbc/postgresql/adapter.rb +7 -1
  41. data/lib/arjdbc/postgresql/oid/bytea.rb +3 -0
  42. data/lib/arjdbc/postgresql/oid_types.rb +2 -1
  43. data/lib/arjdbc/tasks/database_tasks.rb +3 -0
  44. data/lib/arjdbc/util/quoted_cache.rb +2 -2
  45. data/lib/arjdbc/util/serialized_attributes.rb +11 -0
  46. data/lib/arjdbc/version.rb +1 -1
  47. data/rakelib/02-test.rake +1 -1
  48. data/rakelib/db.rake +3 -1
  49. data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +190 -0
  50. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +259 -61
  51. data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +13 -2
  52. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +192 -15
  53. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +10 -2
  54. metadata +9 -4
@@ -59,13 +59,13 @@ public class MSSQLRubyJdbcConnection extends RubyJdbcConnection {
59
59
 
60
60
  public static RubyClass createMSSQLJdbcConnectionClass(Ruby runtime, RubyClass jdbcConnection) {
61
61
  final RubyClass clazz = getConnectionAdapters(runtime). // ActiveRecord::ConnectionAdapters
62
- defineClassUnder("MSSQLJdbcConnection", jdbcConnection, MSSQL_JDBCCONNECTION_ALLOCATOR);
62
+ defineClassUnder("MSSQLJdbcConnection", jdbcConnection, ALLOCATOR);
63
63
  clazz.defineAnnotatedMethods(MSSQLRubyJdbcConnection.class);
64
64
  getConnectionAdapters(runtime).setConstant("MssqlJdbcConnection", clazz); // backwards-compat
65
65
  return clazz;
66
66
  }
67
67
 
68
- private static ObjectAllocator MSSQL_JDBCCONNECTION_ALLOCATOR = new ObjectAllocator() {
68
+ private static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
69
69
  public IRubyObject allocate(Ruby runtime, RubyClass klass) {
70
70
  return new MSSQLRubyJdbcConnection(runtime, klass);
71
71
  }
@@ -111,6 +111,17 @@ public class MSSQLRubyJdbcConnection extends RubyJdbcConnection {
111
111
  return tables;
112
112
  }
113
113
 
114
+ @Override
115
+ protected RubyArray mapColumnsResult(final ThreadContext context,
116
+ final DatabaseMetaData metaData, final TableName components, final ResultSet results)
117
+ throws SQLException {
118
+
119
+ final RubyClass Column = getJdbcColumnClass(context);
120
+ final boolean lookupCastType = Column.isMethodBound("cast_type", false);
121
+ // NOTE: MSSQL depends on Column#primary? no matter the AR version - thus always set @primary
122
+ return mapColumnsResult(context, metaData, components, results, Column, lookupCastType, true);
123
+ }
124
+
114
125
  /**
115
126
  * Microsoft SQL 2000+ support schemas
116
127
  */
@@ -23,6 +23,12 @@
23
23
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
24
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
25
  ***** END LICENSE BLOCK *****/
26
+ // NOTE: file contains code adapted from **oracle-enhanced** adapter, license follows
27
+ /*
28
+ Copyright (c) 2008-2011 Graham Jenkins, Michael Schoen, Raimonds Simanovskis
29
+
30
+ ... LICENSING TERMS ARE THE VERY SAME AS ACTIVERECORD-JDBC-ADAPTER'S ABOVE ...
31
+ */
26
32
  package arjdbc.oracle;
27
33
 
28
34
  import arjdbc.jdbc.Callable;
@@ -37,11 +43,12 @@ import java.sql.ResultSet;
37
43
  import java.sql.SQLException;
38
44
  import java.sql.DatabaseMetaData;
39
45
  import java.sql.PreparedStatement;
46
+ import java.sql.ResultSetMetaData;
40
47
  import java.sql.Statement;
41
48
  import java.sql.Types;
42
- import java.util.ArrayList;
43
49
  import java.util.Collections;
44
50
  import java.util.List;
51
+ import java.util.regex.Pattern;
45
52
 
46
53
  import org.jruby.Ruby;
47
54
  import org.jruby.RubyArray;
@@ -77,37 +84,35 @@ public class OracleRubyJdbcConnection extends RubyJdbcConnection {
77
84
  };
78
85
 
79
86
  @JRubyMethod(name = "next_sequence_value", required = 1)
80
- public IRubyObject next_sequence_value(final ThreadContext context,
81
- final IRubyObject sequence) throws SQLException {
87
+ public IRubyObject next_sequence_value(final ThreadContext context, final IRubyObject sequence) {
82
88
  return withConnection(context, new Callable<IRubyObject>() {
83
89
  public IRubyObject call(final Connection connection) throws SQLException {
84
- Statement statement = null; ResultSet valSet = null;
90
+ Statement statement = null; ResultSet value = null;
85
91
  try {
86
92
  statement = connection.createStatement();
87
- valSet = statement.executeQuery("SELECT "+ sequence +".NEXTVAL id FROM dual");
88
- if ( ! valSet.next() ) return context.getRuntime().getNil();
89
- return context.getRuntime().newFixnum( valSet.getLong(1) );
93
+ value = statement.executeQuery("SELECT "+ sequence +".NEXTVAL id FROM dual");
94
+ if ( ! value.next() ) return context.getRuntime().getNil();
95
+ return context.getRuntime().newFixnum( value.getLong(1) );
90
96
  }
91
97
  catch (final SQLException e) {
92
98
  debugMessage(context, "failed to get " + sequence + ".NEXTVAL : " + e.getMessage());
93
99
  throw e;
94
100
  }
95
- finally { close(valSet); close(statement); }
101
+ finally { close(value); close(statement); }
96
102
  }
97
103
  });
98
104
  }
99
105
 
100
106
  @JRubyMethod(name = "execute_insert_returning", required = 2)
101
107
  public IRubyObject execute_insert_returning(final ThreadContext context,
102
- final IRubyObject sql, final IRubyObject binds) throws SQLException {
108
+ final IRubyObject sql, final IRubyObject binds) {
103
109
  final String query = sql.convertToString().getUnicodeValue();
104
110
  final int outType = Types.VARCHAR;
105
111
  if ( binds == null || binds.isNil() ) { // no prepared statements
106
112
  return executePreparedCall(context, query, Collections.EMPTY_LIST, outType);
107
113
  }
108
- else { // allow prepared statements with empty binds parameters
109
- return executePreparedCall(context, query, (List) binds, outType);
110
- }
114
+ // allow prepared statements with empty binds parameters
115
+ return executePreparedCall(context, query, (List) binds, outType);
111
116
  }
112
117
 
113
118
  private IRubyObject executePreparedCall(final ThreadContext context, final String query,
@@ -258,15 +263,54 @@ public class OracleRubyJdbcConnection extends RubyJdbcConnection {
258
263
  protected RubyArray mapTables(final Ruby runtime, final DatabaseMetaData metaData,
259
264
  final String catalog, final String schemaPattern, final String tablePattern,
260
265
  final ResultSet tablesSet) throws SQLException {
261
- final List<IRubyObject> tables = new ArrayList<IRubyObject>(32);
266
+ final RubyArray tables = RubyArray.newArray(runtime, 32);
262
267
  while ( tablesSet.next() ) {
263
268
  String name = tablesSet.getString(TABLES_TABLE_NAME);
264
269
  name = caseConvertIdentifierForRails(metaData, name);
265
270
  // Handle stupid Oracle 10g RecycleBin feature
266
271
  if ( name.startsWith("bin$") ) continue;
267
- tables.add(RubyString.newUnicodeString(runtime, name));
272
+ tables.append(RubyString.newUnicodeString(runtime, name));
273
+ }
274
+ return tables;
275
+ }
276
+
277
+ @Override
278
+ protected ColumnData[] extractColumns(final Ruby runtime,
279
+ final Connection connection, final ResultSet resultSet,
280
+ final boolean downCase) throws SQLException {
281
+
282
+ final ResultSetMetaData resultMetaData = resultSet.getMetaData();
283
+
284
+ final int columnCount = resultMetaData.getColumnCount();
285
+ final ColumnData[] columns = new ColumnData[columnCount];
286
+
287
+ for ( int i = 1; i <= columnCount; i++ ) { // metadata is one-based
288
+ String name = resultMetaData.getColumnLabel(i);
289
+ if ( downCase ) {
290
+ name = name.toLowerCase();
291
+ } else {
292
+ name = caseConvertIdentifierForRails(connection, name);
293
+ }
294
+ final RubyString columnName = RubyString.newUnicodeString(runtime, name);
295
+
296
+ int columnType = resultMetaData.getColumnType(i);
297
+ if (columnType == Types.NUMERIC) {
298
+ // avoid extracting all NUMBER columns as BigDecimal :
299
+ if (resultMetaData.getScale(i) == 0) {
300
+ final int prec = resultMetaData.getPrecision(i);
301
+ if ( prec < 10 ) { // fits into int
302
+ columnType = Types.INTEGER;
303
+ }
304
+ else if ( prec < 19 ) { // fits into long
305
+ columnType = Types.BIGINT;
306
+ }
307
+ }
308
+ }
309
+
310
+ columns[i - 1] = new ColumnData(columnName, columnType, i);
268
311
  }
269
- return runtime.newArray(tables);
312
+
313
+ return columns;
270
314
  }
271
315
 
272
316
  // storesMixedCaseIdentifiers() return false;
@@ -285,4 +329,137 @@ public class OracleRubyJdbcConnection extends RubyJdbcConnection {
285
329
  return value == null ? null : value.toUpperCase();
286
330
  }
287
331
 
332
+ // based on OracleEnhanced's Ruby connection.describe
333
+ @JRubyMethod(name = "describe", required = 1)
334
+ public IRubyObject describe(final ThreadContext context, final IRubyObject name) {
335
+ final RubyArray desc = describe(context, name.toString(), null);
336
+ return desc == null ? context.nil : desc; // TODO raise instead of nil
337
+ }
338
+
339
+ @JRubyMethod(name = "describe", required = 2)
340
+ public IRubyObject describe(final ThreadContext context, final IRubyObject name, final IRubyObject owner) {
341
+ final RubyArray desc = describe(context, name.toString(), owner.isNil() ? null : owner.toString());
342
+ return desc == null ? context.nil : desc; // TODO raise instead of nil
343
+ }
344
+
345
+ private RubyArray describe(final ThreadContext context, final String name, final String owner) {
346
+ final String dbLink; String defaultOwner, theName = name; int delim;
347
+ if ( ( delim = theName.indexOf('@') ) > 0 ) {
348
+ dbLink = theName.substring(delim).toUpperCase(); // '@DBLINK'
349
+ theName = theName.substring(0, delim);
350
+ defaultOwner = null; // will SELECT username FROM all_dbLinks ...
351
+ }
352
+ else {
353
+ dbLink = ""; defaultOwner = owner; // config[:username] || meta_data.user_name
354
+ }
355
+
356
+ theName = isValidTableName(theName) ? theName.toUpperCase() : unquoteTableName(theName);
357
+
358
+ final String tableName; final String tableOwner;
359
+ if ( ( delim = theName.indexOf('.') ) > 0 ) {
360
+ tableOwner = theName.substring(0, delim);
361
+ tableName = theName.substring(delim + 1);
362
+ }
363
+ else {
364
+ tableName = theName;
365
+ tableOwner = (defaultOwner == null && dbLink.length() > 0) ? selectOwner(context, dbLink) : defaultOwner;
366
+ }
367
+
368
+ return withConnection(context, new Callable<RubyArray>() {
369
+ public RubyArray call(final Connection connection) throws SQLException {
370
+ String owner = tableOwner == null ? connection.getMetaData().getUserName() : tableOwner;
371
+ final String sql =
372
+ "SELECT owner, table_name, 'TABLE' name_type" +
373
+ " FROM all_tables" + dbLink +
374
+ " WHERE owner = '" + owner + "' AND table_name = '" + tableName + "'" +
375
+ " UNION ALL " +
376
+ "SELECT owner, view_name table_name, 'VIEW' name_type" +
377
+ " FROM all_views" + dbLink +
378
+ " WHERE owner = '" + owner + "' AND view_name = '" + tableName + "'" +
379
+ " UNION ALL " +
380
+ "SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type" +
381
+ " FROM all_synonyms" + dbLink +
382
+ " WHERE owner = '" + owner + "' AND synonym_name = '" + tableName + "'" +
383
+ " UNION ALL " +
384
+ "SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type" +
385
+ " FROM all_synonyms" + dbLink +
386
+ " WHERE owner = 'PUBLIC' AND synonym_name = '" + tableName + "'" ;
387
+
388
+ Statement statement = null; ResultSet result = null;
389
+ try {
390
+ statement = connection.createStatement();
391
+ result = statement.executeQuery(sql);
392
+
393
+ if ( ! result.next() ) return null; // NOTE: should raise
394
+
395
+ owner = result.getString("owner");
396
+ final String table_name = result.getString("table_name");
397
+ final String name_type = result.getString("name_type");
398
+
399
+ if ( "SYNONYM".equals(name_type) ) {
400
+ final StringBuilder name = new StringBuilder();
401
+ if ( owner != null && owner.length() > 0 ) {
402
+ name.append(owner).append('.');
403
+ }
404
+ name.append(table_name);
405
+ if ( dbLink != null ) name.append(dbLink);
406
+ return describe(context, name.toString(), owner);
407
+ }
408
+
409
+ final RubyArray arr = RubyArray.newArray(context.runtime, 3);
410
+ arr.append( context.runtime.newString(owner) );
411
+ arr.append( context.runtime.newString(table_name) );
412
+ if ( dbLink != null ) arr.append( context.runtime.newString(dbLink) );
413
+ return arr;
414
+ }
415
+ catch (final SQLException e) {
416
+ debugMessage(context, "failed to describe '" + name + "' : " + e.getMessage());
417
+ throw e;
418
+ }
419
+ finally { close(result); close(statement); }
420
+ }
421
+ });
422
+ }
423
+
424
+ private String selectOwner(final ThreadContext context, final String dbLink) {
425
+ return withConnection(context, new Callable<String>() {
426
+ public String call(final Connection connection) throws SQLException {
427
+ Statement statement = null; ResultSet result = null;
428
+ final String sql = "SELECT username FROM all_db_links WHERE db_link = '" + dbLink + "'";
429
+ try {
430
+ statement = connection.createStatement();
431
+ result = statement.executeQuery(sql);
432
+ // if ( ! result.next() ) return null;
433
+ return result.getString(1);
434
+ }
435
+ catch (final SQLException e) {
436
+ debugMessage(context, "\"" + sql + "\" failed : " + e.getMessage());
437
+ throw e;
438
+ }
439
+ finally { close(result); close(statement); }
440
+ }
441
+ });
442
+ }
443
+
444
+ private static final Pattern VALID_TABLE_NAME;
445
+ static {
446
+ final String NONQUOTED_OBJECT_NAME = "[A-Za-z][A-z0-9$#]{0,29}";
447
+ final String NONQUOTED_DATABASE_LINK = "[A-Za-z][A-z0-9$#\\.@]{0,127}";
448
+ VALID_TABLE_NAME = Pattern.compile(
449
+ "\\A(?:" + NONQUOTED_OBJECT_NAME + "\\.)?" + NONQUOTED_OBJECT_NAME + "(?:@" + NONQUOTED_DATABASE_LINK + ")?\\Z");
450
+ }
451
+
452
+ private static boolean isValidTableName(final String name) {
453
+ return VALID_TABLE_NAME.matcher(name).matches();
454
+ }
455
+
456
+ private static String unquoteTableName(String name) {
457
+ name = name.trim();
458
+ final int len = name.length();
459
+ if (len > 0 && name.charAt(0) == '"' && name.charAt(len - 1) == '"') {
460
+ return name.substring(1, len - 1);
461
+ }
462
+ return name;
463
+ }
464
+
288
465
  }
@@ -327,7 +327,9 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
327
327
  if ( rubyValue.isNil() ) {
328
328
  statement.setNull(index, Types.OTHER); return;
329
329
  }
330
- value = column.getMetaClass().callMethod(context, "json_to_string", rubyValue);
330
+ if (!isAr42(column)) { // Value has already been cast for AR42
331
+ value = column.getMetaClass().callMethod(context, "json_to_string", rubyValue);
332
+ }
331
333
  }
332
334
  else if ( value == null ) {
333
335
  statement.setNull(index, Types.OTHER); return;
@@ -369,7 +371,9 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
369
371
  if ( rubyValue.isNil() ) {
370
372
  statement.setNull(index, Types.OTHER); return;
371
373
  }
372
- value = column.getMetaClass().callMethod(context, "cidr_to_string", rubyValue);
374
+ if (!isAr42(column)) { // Value has already been cast for AR42
375
+ value = column.getMetaClass().callMethod(context, "cidr_to_string", rubyValue);
376
+ }
373
377
  }
374
378
  else if ( value == null ) {
375
379
  statement.setNull(index, Types.OTHER); return;
@@ -494,6 +498,10 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
494
498
  if ( rawDateTime != null && rawDateTime.booleanValue() ) return strValue;
495
499
 
496
500
  final IRubyObject adapter = callMethod(context, "adapter"); // self.adapter
501
+ if ( usesType(runtime) ) {
502
+ return typeCastFromDatabase(context, adapter, runtime.newSymbol("timestamp"), strValue);
503
+ }
504
+
497
505
  if ( adapter.isNil() ) return strValue; // NOTE: we warn on init_connection
498
506
  return adapter.callMethod(context, "_string_to_timestamp", strValue);
499
507
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbc-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.17
4
+ version: 1.3.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-30 00:00:00.000000000 Z
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -75,7 +75,9 @@ files:
75
75
  - lib/arel/visitors/firebird.rb
76
76
  - lib/arel/visitors/h2.rb
77
77
  - lib/arel/visitors/hsqldb.rb
78
+ - lib/arel/visitors/postgresql_jdbc.rb
78
79
  - lib/arel/visitors/sql_server.rb
80
+ - lib/arel/visitors/sql_server/ng42.rb
79
81
  - lib/arjdbc.rb
80
82
  - lib/arjdbc/db2.rb
81
83
  - lib/arjdbc/db2/adapter.rb
@@ -131,6 +133,7 @@ files:
131
133
  - lib/arjdbc/mssql/explain_support.rb
132
134
  - lib/arjdbc/mssql/limit_helpers.rb
133
135
  - lib/arjdbc/mssql/lock_methods.rb
136
+ - lib/arjdbc/mssql/types.rb
134
137
  - lib/arjdbc/mssql/utils.rb
135
138
  - lib/arjdbc/mysql.rb
136
139
  - lib/arjdbc/mysql/adapter.rb
@@ -144,6 +147,7 @@ files:
144
147
  - lib/arjdbc/oracle/column.rb
145
148
  - lib/arjdbc/oracle/connection_methods.rb
146
149
  - lib/arjdbc/postgresql.rb
150
+ - lib/arjdbc/postgresql/_bc_time_cast_patch.rb
147
151
  - lib/arjdbc/postgresql/adapter.rb
148
152
  - lib/arjdbc/postgresql/base/array_parser.rb
149
153
  - lib/arjdbc/postgresql/base/oid.rb
@@ -152,6 +156,7 @@ files:
152
156
  - lib/arjdbc/postgresql/column.rb
153
157
  - lib/arjdbc/postgresql/connection_methods.rb
154
158
  - lib/arjdbc/postgresql/explain_support.rb
159
+ - lib/arjdbc/postgresql/oid/bytea.rb
155
160
  - lib/arjdbc/postgresql/oid_types.rb
156
161
  - lib/arjdbc/postgresql/schema_creation.rb
157
162
  - lib/arjdbc/railtie.rb
@@ -198,6 +203,7 @@ files:
198
203
  - src/java/arjdbc/db2/DB2RubyJdbcConnection.java
199
204
  - src/java/arjdbc/derby/DerbyModule.java
200
205
  - src/java/arjdbc/derby/DerbyRubyJdbcConnection.java
206
+ - src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java
201
207
  - src/java/arjdbc/h2/H2Module.java
202
208
  - src/java/arjdbc/h2/H2RubyJdbcConnection.java
203
209
  - src/java/arjdbc/hsqldb/HSQLDBModule.java
@@ -246,9 +252,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
252
  version: '0'
247
253
  requirements: []
248
254
  rubyforge_project: jruby-extras
249
- rubygems_version: 2.4.5
255
+ rubygems_version: 2.4.8
250
256
  signing_key:
251
257
  specification_version: 4
252
258
  summary: JDBC adapter for ActiveRecord, for use within JRuby on Rails.
253
259
  test_files: []
254
- has_rdoc: