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.
- checksums.yaml +4 -4
- data/.travis.yml +24 -5
- data/History.md +54 -0
- data/lib/arel/visitors/compat.rb +30 -2
- data/lib/arel/visitors/db2.rb +118 -29
- data/lib/arel/visitors/derby.rb +84 -29
- data/lib/arel/visitors/firebird.rb +66 -9
- data/lib/arel/visitors/h2.rb +16 -0
- data/lib/arel/visitors/hsqldb.rb +6 -3
- data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
- data/lib/arel/visitors/sql_server.rb +121 -40
- data/lib/arel/visitors/sql_server/ng42.rb +293 -0
- data/lib/arjdbc.rb +1 -7
- data/lib/arjdbc/db2.rb +1 -0
- data/lib/arjdbc/db2/adapter.rb +118 -18
- data/lib/arjdbc/derby/adapter.rb +29 -8
- data/lib/arjdbc/firebird.rb +1 -0
- data/lib/arjdbc/firebird/adapter.rb +126 -11
- data/lib/arjdbc/hsqldb/adapter.rb +3 -0
- data/lib/arjdbc/informix.rb +1 -0
- data/lib/arjdbc/jdbc.rb +17 -0
- data/lib/arjdbc/jdbc/adapter.rb +28 -3
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/column.rb +7 -3
- data/lib/arjdbc/jdbc/type_cast.rb +2 -0
- data/lib/arjdbc/jdbc/type_converter.rb +28 -15
- data/lib/arjdbc/mimer.rb +1 -0
- data/lib/arjdbc/mssql.rb +2 -1
- data/lib/arjdbc/mssql/adapter.rb +105 -30
- data/lib/arjdbc/mssql/column.rb +30 -7
- data/lib/arjdbc/mssql/limit_helpers.rb +22 -9
- data/lib/arjdbc/mssql/types.rb +343 -0
- data/lib/arjdbc/mssql/utils.rb +25 -2
- data/lib/arjdbc/mysql/adapter.rb +22 -21
- data/lib/arjdbc/oracle.rb +1 -0
- data/lib/arjdbc/oracle/adapter.rb +291 -19
- data/lib/arjdbc/oracle/column.rb +9 -5
- data/lib/arjdbc/oracle/connection_methods.rb +4 -1
- data/lib/arjdbc/postgresql/_bc_time_cast_patch.rb +21 -0
- data/lib/arjdbc/postgresql/adapter.rb +7 -1
- data/lib/arjdbc/postgresql/oid/bytea.rb +3 -0
- data/lib/arjdbc/postgresql/oid_types.rb +2 -1
- data/lib/arjdbc/tasks/database_tasks.rb +3 -0
- data/lib/arjdbc/util/quoted_cache.rb +2 -2
- data/lib/arjdbc/util/serialized_attributes.rb +11 -0
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/02-test.rake +1 -1
- data/rakelib/db.rake +3 -1
- data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +190 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +259 -61
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +13 -2
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +192 -15
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +10 -2
- 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,
|
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
|
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
|
90
|
+
Statement statement = null; ResultSet value = null;
|
85
91
|
try {
|
86
92
|
statement = connection.createStatement();
|
87
|
-
|
88
|
-
if ( !
|
89
|
-
return context.getRuntime().newFixnum(
|
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(
|
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)
|
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
|
-
|
109
|
-
|
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
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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-
|
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.
|
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:
|