activerecord-jdbc-alt-adapter 52.4.0-java → 61.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.nvimlog +0 -0
  4. data/.travis.yml +63 -39
  5. data/Gemfile +11 -4
  6. data/README.md +55 -35
  7. data/Rakefile +1 -1
  8. data/Rakefile.jdbc +8 -1
  9. data/activerecord-jdbc-adapter.gemspec +6 -9
  10. data/activerecord-jdbc-alt-adapter.gemspec +9 -12
  11. data/lib/arel/visitors/postgresql_jdbc.rb +1 -1
  12. data/lib/arel/visitors/sqlserver.rb +49 -23
  13. data/lib/arjdbc/abstract/connection_management.rb +7 -0
  14. data/lib/arjdbc/abstract/core.rb +17 -23
  15. data/lib/arjdbc/abstract/database_statements.rb +30 -2
  16. data/lib/arjdbc/abstract/statement_cache.rb +2 -5
  17. data/lib/arjdbc/abstract/transaction_support.rb +22 -7
  18. data/lib/arjdbc/db2/column.rb +0 -39
  19. data/lib/arjdbc/derby/adapter.rb +1 -20
  20. data/lib/arjdbc/firebird/adapter.rb +0 -21
  21. data/lib/arjdbc/h2/adapter.rb +0 -15
  22. data/lib/arjdbc/hsqldb/adapter.rb +0 -14
  23. data/lib/arjdbc/informix/adapter.rb +0 -23
  24. data/lib/arjdbc/jdbc/adapter.rb +3 -1
  25. data/lib/arjdbc/jdbc/adapter_require.rb +3 -1
  26. data/lib/arjdbc/jdbc/base_ext.rb +3 -1
  27. data/lib/arjdbc/jdbc/callbacks.rb +2 -0
  28. data/lib/arjdbc/jdbc/column.rb +2 -0
  29. data/lib/arjdbc/jdbc/connection.rb +2 -0
  30. data/lib/arjdbc/jdbc/connection_methods.rb +2 -0
  31. data/lib/arjdbc/jdbc/error.rb +2 -0
  32. data/lib/arjdbc/jdbc/extension.rb +2 -0
  33. data/lib/arjdbc/jdbc/java.rb +3 -1
  34. data/lib/arjdbc/jdbc/railtie.rb +3 -1
  35. data/lib/arjdbc/jdbc/rake_tasks.rb +3 -1
  36. data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -1
  37. data/lib/arjdbc/jdbc/type_cast.rb +2 -0
  38. data/lib/arjdbc/jdbc/type_converter.rb +2 -0
  39. data/lib/arjdbc/mssql.rb +3 -1
  40. data/lib/arjdbc/mssql/adapter.rb +114 -36
  41. data/lib/arjdbc/mssql/column.rb +19 -1
  42. data/lib/arjdbc/mssql/connection_methods.rb +10 -2
  43. data/lib/arjdbc/mssql/database_limits.rb +9 -0
  44. data/lib/arjdbc/mssql/database_statements.rb +44 -6
  45. data/lib/arjdbc/mssql/errors.rb +2 -0
  46. data/lib/arjdbc/mssql/explain_support.rb +3 -1
  47. data/lib/arjdbc/mssql/extensions/attribute_methods.rb +6 -2
  48. data/lib/arjdbc/mssql/extensions/calculations.rb +2 -0
  49. data/lib/arjdbc/mssql/quoting.rb +38 -0
  50. data/lib/arjdbc/mssql/schema_creation.rb +25 -3
  51. data/lib/arjdbc/mssql/schema_definitions.rb +10 -0
  52. data/lib/arjdbc/mssql/schema_dumper.rb +2 -0
  53. data/lib/arjdbc/mssql/schema_statements.rb +92 -22
  54. data/lib/arjdbc/mssql/transaction.rb +2 -0
  55. data/lib/arjdbc/mssql/types.rb +2 -0
  56. data/lib/arjdbc/mssql/types/binary_types.rb +2 -0
  57. data/lib/arjdbc/mssql/types/date_and_time_types.rb +2 -0
  58. data/lib/arjdbc/mssql/types/deprecated_types.rb +2 -0
  59. data/lib/arjdbc/mssql/types/numeric_types.rb +2 -0
  60. data/lib/arjdbc/mssql/types/string_types.rb +2 -0
  61. data/lib/arjdbc/mssql/utils.rb +2 -0
  62. data/lib/arjdbc/mysql/adapter.rb +59 -21
  63. data/lib/arjdbc/mysql/connection_methods.rb +6 -1
  64. data/lib/arjdbc/postgresql/adapter.rb +257 -219
  65. data/lib/arjdbc/postgresql/base/array_decoder.rb +2 -0
  66. data/lib/arjdbc/postgresql/base/array_encoder.rb +4 -2
  67. data/lib/arjdbc/postgresql/base/array_parser.rb +4 -2
  68. data/lib/arjdbc/postgresql/base/pgconn.rb +2 -0
  69. data/lib/arjdbc/postgresql/column.rb +6 -4
  70. data/lib/arjdbc/postgresql/connection_methods.rb +1 -0
  71. data/lib/arjdbc/postgresql/name.rb +2 -0
  72. data/lib/arjdbc/postgresql/oid_types.rb +7 -4
  73. data/lib/arjdbc/sqlite3/adapter.rb +266 -221
  74. data/lib/arjdbc/sqlite3/connection_methods.rb +26 -4
  75. data/lib/arjdbc/tasks/databases.rake +21 -13
  76. data/lib/arjdbc/tasks/mssql_database_tasks.rb +126 -25
  77. data/lib/arjdbc/util/quoted_cache.rb +3 -1
  78. data/lib/arjdbc/util/serialized_attributes.rb +3 -1
  79. data/lib/arjdbc/util/table_copier.rb +3 -1
  80. data/lib/arjdbc/version.rb +3 -1
  81. data/pom.xml +4 -4
  82. data/rakelib/01-tomcat.rake +2 -2
  83. data/rakelib/rails.rake +1 -1
  84. data/src/java/arjdbc/ArJdbcModule.java +5 -5
  85. data/src/java/arjdbc/jdbc/DriverWrapper.java +1 -9
  86. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +549 -691
  87. data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +88 -0
  88. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +13 -23
  89. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +125 -53
  90. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +97 -103
  91. data/src/java/arjdbc/util/DateTimeUtils.java +12 -4
  92. metadata +10 -18
@@ -100,55 +100,53 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
100
100
  public IRubyObject encoding(final ThreadContext context) throws SQLException {
101
101
  if (encoding != null) return encoding;
102
102
 
103
- return withConnection(context, new Callable<IRubyObject>() {
104
- // FIXME: How many single result queries do we have in Java?
105
- public IRubyObject call(final Connection connection) throws SQLException {
106
- String query = "PRAGMA encoding";
107
- Statement statement = null;
108
- ResultSet resultSet = null;
109
- try {
110
- statement = createStatement(context, connection);
111
- if (statement.execute(query)) {
112
- // Enebo: I do not think we need to worry about failure here?
113
- String encodingString = statement.getResultSet().getString(1);
114
-
115
- encoding = cachedString(context, encodingString);
116
-
117
- return encoding;
118
- }
119
- } catch (final SQLException e) {
120
- debugErrorSQL(context, query);
121
- throw e;
122
- } finally {
123
- close(resultSet);
124
- close(statement);
103
+ // FIXME: How many single result queries do we have in Java?
104
+ return withConnection(context, connection -> {
105
+ String query = "PRAGMA encoding";
106
+ Statement statement = null;
107
+ ResultSet resultSet = null;
108
+ try {
109
+ statement = createStatement(context, connection);
110
+ if (statement.execute(query)) {
111
+ // Enebo: I do not think we need to worry about failure here?
112
+ resultSet = statement.getResultSet();
113
+ if (!resultSet.next()) return context.nil;
114
+ String encodingString = resultSet.getString(1);
115
+
116
+ encoding = cachedString(context, encodingString);
117
+
118
+ return encoding;
125
119
  }
126
-
127
- return context.nil;
120
+ } catch (final SQLException e) {
121
+ debugErrorSQL(context, query);
122
+ throw e;
123
+ } finally {
124
+ close(resultSet);
125
+ close(statement);
128
126
  }
127
+
128
+ return context.nil;
129
129
  });
130
130
  }
131
131
 
132
132
  @JRubyMethod(name = {"last_insert_rowid", "last_insert_id"}, alias = "last_insert_row_id")
133
133
  public IRubyObject last_insert_rowid(final ThreadContext context)
134
134
  throws SQLException {
135
- return withConnection(context, new Callable<IRubyObject>() {
136
- public IRubyObject call(final Connection connection) throws SQLException {
137
- Statement statement = null; ResultSet genKeys = null;
138
- try {
139
- statement = connection.createStatement();
140
- // NOTE: strangely this will work and has been used for quite some time :
141
- //return mapGeneratedKeys(context.getRuntime(), connection, statement, true);
142
- // but we should assume SQLite JDBC will prefer sane API usage eventually :
143
- genKeys = statement.executeQuery("SELECT last_insert_rowid()");
144
- return doMapGeneratedKeys(context.runtime, genKeys, true);
145
- }
146
- catch (final SQLException e) {
147
- debugMessage(context.runtime, "failed to get generated keys: ", e);
148
- throw e;
149
- }
150
- finally { close(genKeys); close(statement); }
135
+ return withConnection(context, connection -> {
136
+ Statement statement = null; ResultSet genKeys = null;
137
+ try {
138
+ statement = connection.createStatement();
139
+ // NOTE: strangely this will work and has been used for quite some time :
140
+ //return mapGeneratedKeys(context.getRuntime(), connection, statement, true);
141
+ // but we should assume SQLite JDBC will prefer sane API usage eventually :
142
+ genKeys = statement.executeQuery("SELECT last_insert_rowid()");
143
+ return doMapGeneratedKeys(context.runtime, genKeys, true);
144
+ }
145
+ catch (final SQLException e) {
146
+ debugMessage(context.runtime, "failed to get generated keys: ", e);
147
+ throw e;
151
148
  }
149
+ finally { close(genKeys); close(statement); }
152
150
  });
153
151
  }
154
152
 
@@ -183,66 +181,64 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
183
181
  final String tableName = table;
184
182
  final String schemaName = schema;
185
183
  // return super.indexes(context, tableName, name, schemaName);
186
- return withConnection(context, new Callable<IRubyObject>() {
187
- public RubyArray call(final Connection connection) throws SQLException {
188
- final Ruby runtime = context.runtime;
189
- final RubyClass IndexDefinition = getIndexDefinition(runtime);
184
+ return withConnection(context, (Callable<IRubyObject>) connection -> {
185
+ final Ruby runtime = context.runtime;
186
+ final RubyClass IndexDefinition = getIndexDefinition(runtime);
190
187
 
191
- final TableName table = extractTableName(connection, null, schemaName, tableName);
188
+ final TableName table1 = extractTableName(connection, null, schemaName, tableName);
192
189
 
193
- final List<RubyString> primaryKeys = primaryKeys(context, connection, table);
190
+ final List<RubyString> primaryKeys = primaryKeys(context, connection, table1);
194
191
 
195
- final DatabaseMetaData metaData = connection.getMetaData();
196
- ResultSet indexInfoSet;
197
- try {
198
- indexInfoSet = metaData.getIndexInfo(table.catalog, table.schema, table.name, false, true);
199
- }
200
- catch (SQLException e) {
201
- final String msg = e.getMessage();
202
- if ( msg != null && msg.startsWith("[SQLITE_ERROR] SQL error or missing database") ) {
203
- return RubyArray.newEmptyArray(runtime); // on 3.8.7 getIndexInfo fails if table has no indexes
204
- }
205
- throw e;
192
+ final DatabaseMetaData metaData = connection.getMetaData();
193
+ ResultSet indexInfoSet;
194
+ try {
195
+ indexInfoSet = metaData.getIndexInfo(table1.catalog, table1.schema, table1.name, false, true);
196
+ }
197
+ catch (SQLException e) {
198
+ final String msg = e.getMessage();
199
+ if ( msg != null && msg.startsWith("[SQLITE_ERROR] SQL error or missing database") ) {
200
+ return RubyArray.newEmptyArray(runtime); // on 3.8.7 getIndexInfo fails if table has no indexes
206
201
  }
207
- final RubyArray indexes = RubyArray.newArray(runtime, 8);
208
- try {
209
- String currentIndex = null;
210
-
211
- while ( indexInfoSet.next() ) {
212
- String indexName = indexInfoSet.getString(INDEX_INFO_NAME);
213
- if ( indexName == null ) continue;
214
- RubyArray currentColumns = null;
202
+ throw e;
203
+ }
204
+ final RubyArray indexes = RubyArray.newArray(runtime, 8);
205
+ try {
206
+ String currentIndex = null;
215
207
 
216
- final String columnName = indexInfoSet.getString(INDEX_INFO_COLUMN_NAME);
217
- final RubyString rubyColumnName = cachedString(context, columnName);
218
- if ( primaryKeys.contains(rubyColumnName) ) continue;
208
+ while ( indexInfoSet.next() ) {
209
+ String indexName = indexInfoSet.getString(INDEX_INFO_NAME);
210
+ if ( indexName == null ) continue;
211
+ RubyArray currentColumns = null;
219
212
 
220
- // We are working on a new index
221
- if ( ! indexName.equals(currentIndex) ) {
222
- currentIndex = indexName;
213
+ final String columnName = indexInfoSet.getString(INDEX_INFO_COLUMN_NAME);
214
+ final RubyString rubyColumnName = cachedString(context, columnName);
215
+ if ( primaryKeys.contains(rubyColumnName) ) continue;
223
216
 
224
- String indexTableName = indexInfoSet.getString(INDEX_INFO_TABLE_NAME);
217
+ // We are working on a new index
218
+ if ( ! indexName.equals(currentIndex) ) {
219
+ currentIndex = indexName;
225
220
 
226
- final boolean nonUnique = indexInfoSet.getBoolean(INDEX_INFO_NON_UNIQUE);
221
+ String indexTableName = indexInfoSet.getString(INDEX_INFO_TABLE_NAME);
227
222
 
228
- IRubyObject[] args = new IRubyObject[] {
229
- cachedString(context, indexTableName), // table_name
230
- cachedString(context, indexName), // index_name
231
- nonUnique ? runtime.getFalse() : runtime.getTrue(), // unique
232
- currentColumns = RubyArray.newArray(runtime, 4) // [] column names
233
- };
223
+ final boolean nonUnique = indexInfoSet.getBoolean(INDEX_INFO_NON_UNIQUE);
234
224
 
235
- indexes.append( IndexDefinition.newInstance(context, args, Block.NULL_BLOCK) ); // IndexDefinition.new
236
- }
225
+ IRubyObject[] args = new IRubyObject[] {
226
+ cachedString(context, indexTableName), // table_name
227
+ cachedString(context, indexName), // index_name
228
+ nonUnique ? context.fals : context.tru, // unique
229
+ currentColumns = RubyArray.newArray(runtime, 4) // [] column names
230
+ };
237
231
 
238
- // one or more columns can be associated with an index
239
- if ( currentColumns != null ) currentColumns.append(rubyColumnName);
232
+ indexes.append( IndexDefinition.newInstance(context, args, Block.NULL_BLOCK) ); // IndexDefinition.new
240
233
  }
241
234
 
242
- return indexes;
235
+ // one or more columns can be associated with an index
236
+ if ( currentColumns != null ) currentColumns.append(rubyColumnName);
237
+ }
243
238
 
244
- } finally { close(indexInfoSet); }
245
- }
239
+ return indexes;
240
+
241
+ } finally { close(indexInfoSet); }
246
242
  });
247
243
  }
248
244
 
@@ -374,10 +370,9 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
374
370
  }
375
371
 
376
372
  @Override
377
- public IRubyObject begin(ThreadContext context, IRubyObject level) {
378
- throw context.runtime.newRaiseException(getTransactionIsolationError(context.runtime),
379
- "SQLite3 does not support isolation levels"
380
- );
373
+ protected boolean resetSavepoints(final ThreadContext context, final Connection connection) throws SQLException {
374
+ connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
375
+ return super.resetSavepoints(context, connection);
381
376
  }
382
377
 
383
378
  @Override
@@ -390,8 +385,9 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
390
385
  "create_savepoint (without name) not implemented!"
391
386
  );
392
387
  }
393
- final Connection connection = getConnection(true); Statement statement = null;
388
+ Statement statement = null;
394
389
  try {
390
+ final Connection connection = getConnectionInternal(true);
395
391
  connection.setAutoCommit(false);
396
392
  // NOTE: JDBC driver does not support setSavepoint(String) :
397
393
  ( statement = connection.createStatement() ).execute("SAVEPOINT " + name.toString());
@@ -411,12 +407,13 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
411
407
  public IRubyObject rollback_savepoint(final ThreadContext context, final IRubyObject name) {
412
408
  if ( useSavepointAPI(context) ) return super.rollback_savepoint(context, name);
413
409
 
414
- final Connection connection = getConnection(true); Statement statement = null;
410
+ Statement statement = null;
415
411
  try {
416
412
  if ( getSavepoints(context).get(name) == null ) {
417
413
  throw newSavepointNotSetError(context, name, "rollback");
418
414
  }
419
415
  // NOTE: JDBC driver does not implement rollback(Savepoint) :
416
+ final Connection connection = getConnectionInternal(true);
420
417
  ( statement = connection.createStatement() ).execute("ROLLBACK TO SAVEPOINT " + name.toString());
421
418
 
422
419
  return context.nil;
@@ -434,12 +431,13 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
434
431
  public IRubyObject release_savepoint(final ThreadContext context, final IRubyObject name) {
435
432
  if ( useSavepointAPI(context) ) return super.release_savepoint(context, name);
436
433
 
437
- final Connection connection = getConnection(true); Statement statement = null;
434
+ Statement statement = null;
438
435
  try {
439
436
  if ( getSavepoints(context).remove(name) == null ) {
440
437
  throw newSavepointNotSetError(context, name, "release");
441
438
  }
442
439
  // NOTE: JDBC driver does not implement release(Savepoint) :
440
+ final Connection connection = getConnectionInternal(true);
443
441
  ( statement = connection.createStatement() ).execute("RELEASE SAVEPOINT " + name.toString());
444
442
  return context.nil;
445
443
  } catch (SQLException e) {
@@ -453,19 +451,15 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
453
451
  // a consistent JDBC layer.
454
452
  @JRubyMethod(name = "supports_savepoints?")
455
453
  public IRubyObject supports_savepoints_p(final ThreadContext context) throws SQLException {
456
- return context.runtime.getTrue();
454
+ return context.tru;
457
455
  }
458
456
 
459
- @Override
460
- protected void setBooleanParameter(final ThreadContext context,
461
- final Connection connection, final PreparedStatement statement,
462
- final int index, final IRubyObject value,
463
- final IRubyObject attribute, final int type) throws SQLException {
464
- // Apparently active record stores booleans in sqlite as 't' and 'f' instead of the built in 1/0
465
- statement.setString(index, value.isTrue() ? "t" : "f");
457
+ @JRubyMethod(name = "readonly?")
458
+ public IRubyObject readonly_p(final ThreadContext context) throws SQLException {
459
+ final Connection connection = getConnection(true);
460
+ return context.runtime.newBoolean(connection.isReadOnly());
466
461
  }
467
462
 
468
-
469
463
  @Override
470
464
  protected void setDecimalParameter(final ThreadContext context,
471
465
  final Connection connection, final PreparedStatement statement,
@@ -518,7 +512,7 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
518
512
  final int index, IRubyObject value,
519
513
  final IRubyObject attribute, final int type) throws SQLException {
520
514
 
521
- if (value instanceof RubyTime) value = ((RubyTime) value).strftime(TIMESTAMP_FORMAT);
515
+ if (value instanceof RubyTime) value = ((RubyTime) value).strftime(context, TIMESTAMP_FORMAT);
522
516
 
523
517
  setStringParameter(context, connection, statement, index, value, attribute, type);
524
518
  }
@@ -37,6 +37,7 @@ import org.jruby.Ruby;
37
37
  import org.jruby.RubyFloat;
38
38
  import org.jruby.RubyString;
39
39
  import org.jruby.RubyTime;
40
+ import org.jruby.ext.date.RubyDateTime;
40
41
  import org.jruby.javasupport.Java;
41
42
  import org.jruby.runtime.Block;
42
43
  import org.jruby.runtime.ThreadContext;
@@ -632,14 +633,21 @@ public abstract class DateTimeUtils {
632
633
  */
633
634
  public static String timestampTimeToString(final ThreadContext context,
634
635
  final IRubyObject value, DateTimeZone zone, boolean withZone) {
635
- RubyTime timeValue = toTime(context, value);
636
- DateTime dt = timeValue.getDateTime();
636
+ DateTime dt;
637
+ int usec = 0;
638
+ if (value instanceof RubyDateTime) {
639
+ dt = ((RubyDateTime) value).getDateTime();
640
+ } else {
641
+ RubyTime timeValue = toTime(context, value);
642
+ dt = timeValue.getDateTime();
643
+ usec = (int) timeValue.getUSec();
644
+ }
637
645
 
638
646
  StringBuilder sb = new StringBuilder(36);
639
647
 
640
648
  int year = dt.getYear();
641
649
  if (year <= 0) {
642
- year--;
650
+ if (!(value instanceof RubyDateTime)) year--;
643
651
  } else if (zone != null) {
644
652
  dt = dateTimeInZone(dt, zone);
645
653
  year = dt.getYear();
@@ -659,7 +667,7 @@ public abstract class DateTimeUtils {
659
667
  if (year < 0) sb.append(" BC");
660
668
  sb.append(' ');
661
669
 
662
- appendTime(sb, chrono, millis, (int) timeValue.getUSec(), withZone);
670
+ appendTime(sb, chrono, millis, usec, withZone);
663
671
 
664
672
  return sb.toString();
665
673
  }
metadata CHANGED
@@ -1,24 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbc-alt-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 52.4.0
4
+ version: 61.0.0
5
5
  platform: java
6
6
  authors:
7
- - Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors
7
+ - Nick Sieger, Ola Bini, Karol Bucek, Jesse Chavez, and JRuby contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-24 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 5.2.0
19
- - - ">="
20
- - !ruby/object:Gem::Version
21
- version: 5.2.3
18
+ version: 6.1.0
22
19
  name: activerecord
23
20
  prerelease: false
24
21
  type: :runtime
@@ -26,27 +23,23 @@ dependencies:
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: 5.2.0
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 5.2.3
26
+ version: 6.1.0
33
27
  description: 'Fork of the ActiveRecord JDBC adapter with support for SQL Server and
34
28
  Azure SQL, for more information and help look at the README file in the github repository.
35
29
  AR-JDBC is a database adapter for Rails'' ActiveRecord component designed to be
36
30
  used with JRuby built upon Java''s JDBC API for database access. Provides (ActiveRecord)
37
- built-in adapters: MySQL, PostgreSQL and SQLite3 as well as adapters for popular
38
- databases such as Oracle, SQLServer, DB2, FireBird and even Java (embed) databases:
39
- Derby, HSQLDB and H2. It allows to connect to virtually any JDBC-compliant database
40
- with your JRuby on Rails application.'
31
+ built-in adapters: MySQL, PostgreSQL, SQLite3, and SQLServer.'
41
32
  email:
42
33
  - nick@nicksieger.com
43
34
  - ola.bini@gmail.com
44
35
  - self@kares.org
36
+ - jesse.chavez.r@gmail.com
45
37
  executables: []
46
38
  extensions: []
47
39
  extra_rdoc_files: []
48
40
  files:
49
41
  - ".gitignore"
42
+ - ".nvimlog"
50
43
  - ".travis.yml"
51
44
  - ".yardopts"
52
45
  - CONTRIBUTING.md
@@ -257,7 +250,7 @@ post_install_message:
257
250
  rdoc_options:
258
251
  - "--main"
259
252
  - README.md
260
- - "-SHN"
253
+ - "-HN"
261
254
  - "-f"
262
255
  - darkfish
263
256
  require_paths:
@@ -273,8 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
266
  - !ruby/object:Gem::Version
274
267
  version: '0'
275
268
  requirements: []
276
- rubyforge_project:
277
- rubygems_version: 2.7.10
269
+ rubygems_version: 3.1.6
278
270
  signing_key:
279
271
  specification_version: 4
280
272
  summary: ActiveRecord JDBC adapter, for use within JRuby on Rails and SQL Server