activerecord-jdbc-adapter 1.3.17 → 1.3.18
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.
- 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:
|