activerecord-jdbc-adapter 1.3.0.beta1 → 1.3.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +12 -11
- data/.travis.yml +36 -7
- data/Appraisals +3 -3
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -6
- data/History.txt +64 -0
- data/README.md +8 -1
- data/Rakefile +3 -1
- data/gemfiles/rails23.gemfile +1 -1
- data/gemfiles/rails23.gemfile.lock +6 -5
- data/gemfiles/rails30.gemfile +1 -1
- data/gemfiles/rails30.gemfile.lock +7 -6
- data/gemfiles/rails31.gemfile +1 -1
- data/gemfiles/rails31.gemfile.lock +6 -5
- data/gemfiles/rails32.gemfile +1 -1
- data/gemfiles/rails32.gemfile.lock +6 -5
- data/gemfiles/rails40.gemfile +2 -4
- data/gemfiles/rails40.gemfile.lock +37 -51
- data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/db2_adapter.rb +1 -1
- data/lib/arel/visitors/db2.rb +5 -1
- data/lib/arel/visitors/hsqldb.rb +1 -0
- data/lib/arel/visitors/sql_server.rb +55 -13
- data/lib/arjdbc/db2/adapter.rb +197 -227
- data/lib/arjdbc/db2/as400.rb +124 -0
- data/lib/arjdbc/db2/connection_methods.rb +20 -1
- data/lib/arjdbc/derby/adapter.rb +17 -85
- data/lib/arjdbc/derby/connection_methods.rb +2 -1
- data/lib/arjdbc/discover.rb +55 -47
- data/lib/arjdbc/h2/adapter.rb +52 -18
- data/lib/arjdbc/h2/connection_methods.rb +10 -2
- data/lib/arjdbc/hsqldb/adapter.rb +33 -9
- data/lib/arjdbc/hsqldb/connection_methods.rb +10 -2
- data/lib/arjdbc/informix.rb +2 -1
- data/lib/arjdbc/jdbc.rb +5 -1
- data/lib/arjdbc/jdbc/adapter.rb +167 -89
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
- data/lib/arjdbc/jdbc/base_ext.rb +25 -3
- data/lib/arjdbc/jdbc/callbacks.rb +9 -8
- data/lib/arjdbc/jdbc/column.rb +8 -20
- data/lib/arjdbc/jdbc/connection.rb +69 -80
- data/lib/arjdbc/jdbc/extension.rb +6 -8
- data/lib/arjdbc/jdbc/jdbc.rake +3 -141
- data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
- data/lib/arjdbc/mssql/adapter.rb +108 -34
- data/lib/arjdbc/mssql/connection_methods.rb +3 -1
- data/lib/arjdbc/mssql/limit_helpers.rb +3 -2
- data/lib/arjdbc/mssql/lock_helpers.rb +5 -1
- data/lib/arjdbc/mysql/adapter.rb +127 -70
- data/lib/arjdbc/mysql/connection_methods.rb +5 -2
- data/lib/arjdbc/oracle/adapter.rb +124 -94
- data/lib/arjdbc/oracle/connection_methods.rb +2 -1
- data/lib/arjdbc/postgresql/adapter.rb +99 -67
- data/lib/arjdbc/postgresql/column_cast.rb +3 -5
- data/lib/arjdbc/postgresql/connection_methods.rb +6 -6
- data/lib/arjdbc/railtie.rb +3 -1
- data/lib/arjdbc/sqlite3/adapter.rb +60 -43
- data/lib/arjdbc/sqlite3/connection_methods.rb +9 -9
- data/lib/arjdbc/sybase.rb +1 -1
- data/lib/arjdbc/tasks.rb +13 -0
- data/lib/arjdbc/tasks/database_tasks.rb +50 -0
- data/lib/arjdbc/tasks/databases.rake +89 -0
- data/lib/arjdbc/tasks/databases3.rake +203 -0
- data/lib/arjdbc/tasks/databases4.rake +39 -0
- data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
- data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
- data/lib/arjdbc/tasks/h2_database_tasks.rb +29 -0
- data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
- data/lib/arjdbc/tasks/jdbc_database_tasks.rb +122 -0
- data/lib/arjdbc/tasks/mssql_database_tasks.rb +36 -0
- data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +297 -0
- data/lib/arjdbc/tasks/oracle_database_tasks.rb +62 -0
- data/lib/arjdbc/version.rb +1 -1
- data/pom.xml +11 -12
- data/rails_generators/jdbc_generator.rb +1 -1
- data/rails_generators/templates/config/initializers/jdbc.rb +8 -5
- data/rails_generators/templates/lib/tasks/jdbc.rake +7 -4
- data/rakelib/02-test.rake +42 -15
- data/rakelib/compile.rake +29 -2
- data/rakelib/db.rake +2 -1
- data/rakelib/rails.rake +23 -6
- data/src/java/arjdbc/ArJdbcModule.java +175 -0
- data/src/java/arjdbc/db2/DB2Module.java +2 -1
- data/src/java/arjdbc/derby/DerbyModule.java +5 -24
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +3 -2
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -46
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1001 -259
- data/src/java/arjdbc/mssql/MSSQLModule.java +2 -1
- data/src/java/arjdbc/mysql/MySQLModule.java +4 -3
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +12 -7
- data/src/java/arjdbc/oracle/OracleModule.java +2 -1
- data/src/java/arjdbc/sqlite3/SQLite3Module.java +2 -1
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +12 -0
- data/test/db/db2.rb +14 -7
- data/test/db/db2/rake_test.rb +82 -0
- data/test/db/db2/rake_test_data.sql +35 -0
- data/test/db/db2/simple_test.rb +20 -0
- data/test/db/db2/unit_test.rb +3 -1
- data/test/db/derby.rb +7 -5
- data/test/db/derby/rake_test.rb +96 -0
- data/test/db/derby/simple_test.rb +10 -2
- data/test/db/h2.rb +6 -8
- data/test/db/h2/identity_column_test.rb +35 -0
- data/test/db/h2/offset_test.rb +49 -0
- data/test/db/h2/rake_test.rb +98 -0
- data/test/db/h2/schema_dump_test.rb +5 -1
- data/test/db/hsqldb.rb +6 -10
- data/test/db/hsqldb/rake_test.rb +101 -0
- data/test/db/hsqldb/schema_dump_test.rb +5 -1
- data/test/db/hsqldb/simple_test.rb +8 -0
- data/test/db/jndi_config.rb +1 -3
- data/test/db/jndi_pooled_config.rb +1 -3
- data/test/db/mssql/limit_offset_test.rb +23 -14
- data/test/db/mssql/rake_test.rb +143 -0
- data/test/db/mysql/_rails_test_mysql.32.out +1069 -1252
- data/test/db/mysql/nonstandard_primary_key_test.rb +21 -24
- data/test/db/mysql/rake_test.rb +97 -0
- data/test/db/mysql/schema_dump_test.rb +11 -11
- data/test/db/mysql/simple_test.rb +52 -3
- data/test/db/mysql/statement_escaping_test.rb +46 -0
- data/test/db/oracle/rake_test.rb +100 -0
- data/test/db/oracle/simple_test.rb +48 -0
- data/test/db/postgres/_rails_test_postgres.32.out +998 -1370
- data/test/db/postgres/active_schema_unit_test.rb +68 -0
- data/test/db/postgres/connection_test.rb +10 -2
- data/test/db/postgres/data_types_test.rb +2 -2
- data/test/db/postgres/ltree_test.rb +6 -5
- data/test/db/postgres/native_types_test.rb +1 -5
- data/test/db/postgres/rake_test.rb +117 -0
- data/test/db/postgres/schema_dump_test.rb +9 -2
- data/test/db/postgres/schema_test.rb +4 -2
- data/test/db/postgres/simple_test.rb +57 -16
- data/test/db/sqlite3.rb +3 -10
- data/test/db/sqlite3/_rails_test_sqlite3.32.out +1070 -1298
- data/test/db/sqlite3/rake_test.rb +71 -0
- data/test/db/sqlite3/simple_test.rb +9 -9
- data/test/has_many_through.rb +4 -1
- data/test/jdbc/db2.rb +14 -1
- data/test/jdbc_column_test.rb +23 -0
- data/test/{generic_jdbc_connection_test.rb → jdbc_connection_test.rb} +22 -17
- data/test/jndi_callbacks_test.rb +26 -28
- data/test/jndi_test.rb +7 -16
- data/test/models/data_types.rb +2 -1
- data/test/models/thing.rb +1 -0
- data/test/rails/mysql.rb +13 -0
- data/test/rails/sqlite3/version.rb +6 -0
- data/test/rails_stub.rb +31 -0
- data/test/rake_test_support.rb +298 -0
- data/test/serialize.rb +2 -4
- data/test/{helper.rb → shared_helper.rb} +0 -0
- data/test/simple.rb +167 -93
- data/test/test_helper.rb +52 -16
- metadata +388 -354
- data/lib/pg.rb +0 -26
- data/test/abstract_db_create.rb +0 -139
- data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -36
- data/test/db/mssql/db_create_test.rb +0 -29
- data/test/db/mysql/db_create_test.rb +0 -33
- data/test/db/postgres/db_create_test.rb +0 -44
- data/test/db/postgres/db_drop_test.rb +0 -17
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'arjdbc/db2/adapter'
|
2
|
+
|
3
|
+
module ArJdbc
|
4
|
+
module AS400
|
5
|
+
include DB2
|
6
|
+
|
7
|
+
def self.extended(base); DB2.extended(base); end
|
8
|
+
|
9
|
+
def self.column_selector
|
10
|
+
[ /as400/i, lambda { |cfg, column| column.extend(::ArJdbc::AS400::Column) } ]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.jdbc_connection_class; DB2.jdbc_connection_class; end
|
14
|
+
|
15
|
+
def self.arel2_visitors(config)
|
16
|
+
visitors = DB2.arel2_visitors(config).dup
|
17
|
+
visitors['as400'] = ::Arel::Visitors::DB2
|
18
|
+
visitors
|
19
|
+
end
|
20
|
+
|
21
|
+
ADAPTER_NAME = 'AS400'.freeze
|
22
|
+
|
23
|
+
def adapter_name
|
24
|
+
ADAPTER_NAME
|
25
|
+
end
|
26
|
+
|
27
|
+
# @override
|
28
|
+
def prefetch_primary_key?(table_name = nil)
|
29
|
+
# TRUE if the table has no identity column
|
30
|
+
names = table_name.upcase.split(".")
|
31
|
+
sql = "SELECT 1 FROM SYSIBM.SQLPRIMARYKEYS WHERE "
|
32
|
+
sql << "TABLE_SCHEM = '#{names.first}' AND " if names.size == 2
|
33
|
+
sql << "TABLE_NAME = '#{names.last}'"
|
34
|
+
select_one(sql).nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
# @override
|
38
|
+
def rename_column(table_name, column_name, new_column_name) # :nodoc:
|
39
|
+
raise NotImplementedError, "rename_column is not supported on IBM iSeries"
|
40
|
+
end
|
41
|
+
|
42
|
+
# @override
|
43
|
+
def execute_table_change(sql, table_name, name = nil)
|
44
|
+
execute_and_auto_confirm(sql, name)
|
45
|
+
end
|
46
|
+
|
47
|
+
# holy moly batman! all this to tell AS400 "yes i am sure"
|
48
|
+
def execute_and_auto_confirm(sql, name = nil)
|
49
|
+
|
50
|
+
begin
|
51
|
+
@connection.execute_update "call qsys.qcmdexc('QSYS/CHGJOB INQMSGRPY(*SYSRPYL)',0000000031.00000)"
|
52
|
+
@connection.execute_update "call qsys.qcmdexc('ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY(''I'')',0000000045.00000)"
|
53
|
+
rescue Exception => e
|
54
|
+
raise "Could not call CHGJOB INQMSGRPY(*SYSRPYL) and ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY('I').\n" +
|
55
|
+
"Do you have authority to do this?\n\n#{e.inspect}"
|
56
|
+
end
|
57
|
+
|
58
|
+
begin
|
59
|
+
result = execute(sql, name)
|
60
|
+
rescue Exception
|
61
|
+
raise
|
62
|
+
else
|
63
|
+
# Return if all work fine
|
64
|
+
result
|
65
|
+
ensure
|
66
|
+
|
67
|
+
# Ensure default configuration restoration
|
68
|
+
begin
|
69
|
+
@connection.execute_update "call qsys.qcmdexc('QSYS/CHGJOB INQMSGRPY(*DFT)',0000000027.00000)"
|
70
|
+
@connection.execute_update "call qsys.qcmdexc('RMVRPYLE SEQNBR(9876)',0000000021.00000)"
|
71
|
+
rescue Exception => e
|
72
|
+
raise "Could not call CHGJOB INQMSGRPY(*DFT) and RMVRPYLE SEQNBR(9876).\n" +
|
73
|
+
"Do you have authority to do this?\n\n#{e.inspect}"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
private :execute_and_auto_confirm
|
79
|
+
|
80
|
+
# disable all schemas browsing when default schema is specified
|
81
|
+
def table_exists?(name)
|
82
|
+
schema ?
|
83
|
+
@connection.table_exists?(name, schema) :
|
84
|
+
@connection.table_exists?(name)
|
85
|
+
end
|
86
|
+
|
87
|
+
DRIVER_NAME = 'com.ibm.as400.access.AS400JDBCDriver'.freeze
|
88
|
+
|
89
|
+
# @deprecated no longer used
|
90
|
+
def as400?
|
91
|
+
true
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
# @override
|
97
|
+
def db2_schema
|
98
|
+
@db2_schema = false unless defined? @db2_schema
|
99
|
+
return @db2_schema if @db2_schema != false
|
100
|
+
@db2_schema =
|
101
|
+
if config[:schema].present?
|
102
|
+
config[:schema]
|
103
|
+
elsif config[:jndi].present?
|
104
|
+
# Only found method to set db2_schema from jndi
|
105
|
+
result = select_one("SELECT CURRENT_SCHEMA FROM SYSIBM.SYSDUMMY1")
|
106
|
+
schema = result['00001']
|
107
|
+
# If the connection uses the library list schema name will be nil
|
108
|
+
if schema == '*LIBL'
|
109
|
+
schema = nil
|
110
|
+
end
|
111
|
+
schema
|
112
|
+
else
|
113
|
+
# AS400 implementation takes schema from library name (last part of URL)
|
114
|
+
# jdbc:as400://localhost/schema;naming=system;libraries=lib1,lib2
|
115
|
+
schema = nil
|
116
|
+
split = config[:url].split('/')
|
117
|
+
# Return nil if schema isn't defined
|
118
|
+
schema = split.last.split(';').first.strip if split.size == 4
|
119
|
+
schema
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
@@ -9,9 +9,28 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
config[:driver] ||= ::ArJdbc::DB2::DRIVER_NAME
|
12
|
-
config[:adapter_spec]
|
12
|
+
config[:adapter_spec] ||= ::ArJdbc::DB2
|
13
13
|
config[:connection_alive_sql] ||= 'SELECT 1 FROM syscat.tables FETCH FIRST 1 ROWS ONLY'
|
14
14
|
jdbc_connection(config)
|
15
15
|
end
|
16
16
|
alias_method :jdbcdb2_connection, :db2_connection
|
17
|
+
|
18
|
+
def as400_connection(config)
|
19
|
+
config[:url] ||= begin
|
20
|
+
# jdbc:as400://[host]
|
21
|
+
url = 'jdbc:as400://'
|
22
|
+
url << config[:host] if config[:host]
|
23
|
+
# jdbc:as400://myiSeries;database name=IASP1
|
24
|
+
url << ";database name=#{config[:database]}" if config[:database]
|
25
|
+
# jdbc:as400://[host];proxy server=HODServerName:proxyServerPort
|
26
|
+
url << ";proxy server=#{config[:proxy]}" if config[:proxy]
|
27
|
+
url
|
28
|
+
end
|
29
|
+
require 'arjdbc/db2/as400'
|
30
|
+
config[:driver] ||= ::ArJdbc::AS400::DRIVER_NAME
|
31
|
+
config[:adapter_spec] ||= ::ArJdbc::AS400
|
32
|
+
config[:connection_alive_sql] ||= 'SELECT 1 FROM sysibm.tables FETCH FIRST 1 ROWS ONLY'
|
33
|
+
jdbc_connection(config)
|
34
|
+
end
|
35
|
+
alias_method :jdbcas400_connection, :as400_connection
|
17
36
|
end
|
data/lib/arjdbc/derby/adapter.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
ArJdbc.load_java_part :Derby
|
1
2
|
require 'arjdbc/jdbc/missing_functionality_helper'
|
2
3
|
|
3
4
|
module ArJdbc
|
@@ -5,10 +6,9 @@ module ArJdbc
|
|
5
6
|
|
6
7
|
def self.extended(adapter)
|
7
8
|
require 'arjdbc/derby/active_record_patch'
|
8
|
-
adapter.configure_connection
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.included(
|
11
|
+
def self.included(base)
|
12
12
|
require 'arjdbc/derby/active_record_patch'
|
13
13
|
end
|
14
14
|
|
@@ -160,6 +160,10 @@ module ArJdbc
|
|
160
160
|
super
|
161
161
|
end
|
162
162
|
|
163
|
+
def empty_insert_statement_value
|
164
|
+
'VALUES ( DEFAULT )' # won't work as Derby does need to know the columns count
|
165
|
+
end
|
166
|
+
|
163
167
|
# Set the sequence to the max value of the table's column.
|
164
168
|
def reset_sequence!(table, column, sequence = nil)
|
165
169
|
mpk = select_value("SELECT MAX(#{quote_column_name(column)}) FROM #{quote_table_name(table)}")
|
@@ -195,7 +199,7 @@ module ArJdbc
|
|
195
199
|
end
|
196
200
|
|
197
201
|
def execute(sql, name = nil, binds = [])
|
198
|
-
sql = to_sql(sql)
|
202
|
+
sql = to_sql(sql, binds)
|
199
203
|
if sql =~ /\A\s*(UPDATE|INSERT)/i
|
200
204
|
if ( i = sql =~ /\sWHERE\s/im )
|
201
205
|
where_part = sql[i..-1]; sql = sql.dup
|
@@ -230,69 +234,6 @@ module ArJdbc
|
|
230
234
|
sql = "DISTINCT #{columns}, #{order_columns * ', '}"
|
231
235
|
sql
|
232
236
|
end
|
233
|
-
|
234
|
-
SIZEABLE = %w(VARCHAR CLOB BLOB) # :nodoc:
|
235
|
-
|
236
|
-
def structure_dump # :nodoc:
|
237
|
-
definition = ""
|
238
|
-
meta_data = @connection.connection.meta_data
|
239
|
-
tables_rs = meta_data.getTables(nil, nil, nil, ["TABLE"].to_java(:string))
|
240
|
-
while tables_rs.next
|
241
|
-
table_name = tables_rs.getString(3)
|
242
|
-
definition << "CREATE TABLE #{table_name} (\n"
|
243
|
-
columns_rs = meta_data.getColumns(nil, nil, table_name, nil)
|
244
|
-
first_col = true
|
245
|
-
while columns_rs.next
|
246
|
-
column_name = add_quotes(columns_rs.getString(4));
|
247
|
-
default = ''
|
248
|
-
d1 = columns_rs.getString(13)
|
249
|
-
if d1 =~ /^GENERATED_/
|
250
|
-
default = auto_increment_stmt(table_name, column_name)
|
251
|
-
elsif d1
|
252
|
-
default = " DEFAULT #{d1}"
|
253
|
-
end
|
254
|
-
|
255
|
-
type = columns_rs.getString(6)
|
256
|
-
column_size = columns_rs.getString(7)
|
257
|
-
nulling = (columns_rs.getString(18) == 'NO' ? " NOT NULL" : "")
|
258
|
-
create_column = add_quotes(expand_double_quotes(strip_quotes(column_name)))
|
259
|
-
create_column << " #{type}"
|
260
|
-
create_column << ( SIZEABLE.include?(type) ? "(#{column_size})" : "" )
|
261
|
-
create_column << nulling
|
262
|
-
create_column << default
|
263
|
-
|
264
|
-
create_column = first_col ? " #{create_column}" : ",\n #{create_column}"
|
265
|
-
definition << create_column
|
266
|
-
|
267
|
-
first_col = false
|
268
|
-
end
|
269
|
-
definition << ");\n\n"
|
270
|
-
end
|
271
|
-
definition
|
272
|
-
end
|
273
|
-
|
274
|
-
AUTO_INC_STMT2 = "" +
|
275
|
-
"SELECT AUTOINCREMENTSTART, AUTOINCREMENTINC, COLUMNNAME, REFERENCEID, COLUMNDEFAULT " +
|
276
|
-
"FROM SYS.SYSCOLUMNS WHERE REFERENCEID = " +
|
277
|
-
"(SELECT T.TABLEID FROM SYS.SYSTABLES T WHERE T.TABLENAME = '%s') AND COLUMNNAME = '%s'"
|
278
|
-
|
279
|
-
def auto_increment_stmt(tname, cname)
|
280
|
-
stmt = AUTO_INC_STMT2 % [ tname, strip_quotes(cname) ]
|
281
|
-
if data = execute(stmt).first
|
282
|
-
if start = data['autoincrementstart']
|
283
|
-
coldef = ""
|
284
|
-
coldef << " GENERATED " << (data['columndefault'].nil? ? "ALWAYS" : "BY DEFAULT ")
|
285
|
-
coldef << "AS IDENTITY (START WITH "
|
286
|
-
coldef << start
|
287
|
-
coldef << ", INCREMENT BY "
|
288
|
-
coldef << data['autoincrementinc']
|
289
|
-
coldef << ")"
|
290
|
-
return coldef
|
291
|
-
end
|
292
|
-
end
|
293
|
-
""
|
294
|
-
end
|
295
|
-
private :auto_increment_stmt
|
296
237
|
|
297
238
|
def remove_column(table_name, *column_names) # :nodoc:
|
298
239
|
for column_name in column_names.flatten
|
@@ -354,13 +295,20 @@ module ArJdbc
|
|
354
295
|
def tables
|
355
296
|
@connection.tables(nil, derby_schema)
|
356
297
|
end
|
298
|
+
|
299
|
+
def recreate_database(name = nil, options = {}) # :nodoc:
|
300
|
+
drop_database(name)
|
301
|
+
create_database(name, options)
|
302
|
+
end
|
303
|
+
|
304
|
+
def create_database(name = nil, options = {}); end # :nodoc:
|
357
305
|
|
358
|
-
def
|
359
|
-
tables.each { |table| drop_table
|
306
|
+
def drop_database(name = nil) # :nodoc:
|
307
|
+
tables.each { |table| drop_table(table) }
|
360
308
|
end
|
361
309
|
|
362
310
|
def quote_column_name(name) # :nodoc:
|
363
|
-
%Q{"#{name.to_s.upcase.gsub(
|
311
|
+
%Q{"#{name.to_s.upcase.gsub('"', '""')}"}
|
364
312
|
end
|
365
313
|
|
366
314
|
def add_limit_offset!(sql, options) # :nodoc:
|
@@ -371,22 +319,6 @@ module ArJdbc
|
|
371
319
|
|
372
320
|
private
|
373
321
|
|
374
|
-
def add_quotes(name)
|
375
|
-
return name unless name
|
376
|
-
%Q{"#{name}"}
|
377
|
-
end
|
378
|
-
|
379
|
-
def strip_quotes(str)
|
380
|
-
return str unless str
|
381
|
-
return str unless /^(["']).*\1$/ =~ str
|
382
|
-
str[1..-2]
|
383
|
-
end
|
384
|
-
|
385
|
-
def expand_double_quotes(name)
|
386
|
-
return name unless name && name['"']
|
387
|
-
name.gsub('"', '""')
|
388
|
-
end
|
389
|
-
|
390
322
|
# Derby appears to define schemas using the username
|
391
323
|
def derby_schema
|
392
324
|
if @config.has_key?(:schema)
|
@@ -8,8 +8,9 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
8
8
|
|
9
9
|
config[:url] ||= "jdbc:derby:#{config[:database]};create=true"
|
10
10
|
config[:driver] ||= defined?(::Jdbc::Derby.driver_name) ? ::Jdbc::Derby.driver_name : 'org.apache.derby.jdbc.EmbeddedDriver'
|
11
|
-
config[:adapter_spec]
|
11
|
+
config[:adapter_spec] ||= ::ArJdbc::Derby
|
12
12
|
config[:connection_alive_sql] ||= 'SELECT 1 FROM SYS.SYSSCHEMAS FETCH FIRST 1 ROWS ONLY' # FROM clause is mandatory
|
13
|
+
|
13
14
|
connection = embedded_driver(config)
|
14
15
|
md = connection.jdbc_connection.meta_data
|
15
16
|
if md.database_major_version < 10 || (md.database_major_version == 10 && md.database_minor_version < 5)
|
data/lib/arjdbc/discover.rb
CHANGED
@@ -1,31 +1,29 @@
|
|
1
|
-
#
|
2
|
-
#
|
1
|
+
# this file is discovered by the extension mechanism
|
2
|
+
# @see {ArJdbc#discover_extensions}
|
3
3
|
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
module ArJdbc
|
5
|
+
|
6
|
+
require 'arjdbc/jdbc/adapter_require'
|
7
|
+
|
8
|
+
# Adapters built-in to AR :
|
9
|
+
|
10
|
+
require 'arjdbc/mysql' if Java::JavaLang::Boolean.getBoolean('arjdbc.mysql.eager_load')
|
11
|
+
require 'arjdbc/postgresql' if Java::JavaLang::Boolean.getBoolean('arjdbc.postgresql.eager_load')
|
12
|
+
require 'arjdbc/sqlite3' if Java::JavaLang::Boolean.getBoolean('arjdbc.sqlite3.eager_load')
|
13
|
+
|
8
14
|
extension :MySQL do |name|
|
9
|
-
name =~ /mysql/i
|
15
|
+
require('arjdbc/mysql') || true if name =~ /mysql/i
|
10
16
|
end
|
11
|
-
|
12
|
-
require 'arjdbc/postgresql'
|
17
|
+
|
13
18
|
extension :PostgreSQL do |name|
|
14
|
-
name =~ /postgre/i
|
19
|
+
require('arjdbc/postgresql') || true if name =~ /postgre/i
|
15
20
|
end
|
16
21
|
|
17
|
-
require 'arjdbc/sqlite3'
|
18
22
|
extension :SQLite3 do |name|
|
19
|
-
name =~ /sqlite/i
|
20
|
-
end
|
21
|
-
|
22
|
-
# Other adapters are lazy-loaded
|
23
|
-
extension :DB2 do |name, config|
|
24
|
-
if name =~ /(db2|as400)/i && config[:url] !~ /^jdbc:derby:net:/
|
25
|
-
require 'arjdbc/db2'
|
26
|
-
true
|
27
|
-
end
|
23
|
+
require('arjdbc/sqlite3') || true if name =~ /sqlite/i
|
28
24
|
end
|
25
|
+
|
26
|
+
# Other supported adapters :
|
29
27
|
|
30
28
|
extension :Derby do |name, config|
|
31
29
|
if name =~ /derby/i
|
@@ -49,44 +47,30 @@ module ::ArJdbc
|
|
49
47
|
end
|
50
48
|
end
|
51
49
|
|
52
|
-
extension :FireBird do |name|
|
53
|
-
if name =~ /firebird/i
|
54
|
-
require 'arjdbc/firebird'
|
55
|
-
true
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
50
|
extension :H2 do |name|
|
60
|
-
if name =~ /\.h2\./i
|
61
|
-
require 'arjdbc/h2'
|
62
|
-
true
|
63
|
-
end
|
51
|
+
require('arjdbc/h2') || true if name =~ /\.h2\./i
|
64
52
|
end
|
65
53
|
|
66
54
|
extension :HSQLDB do |name|
|
67
|
-
if name =~ /hsqldb/i
|
68
|
-
require 'arjdbc/hsqldb'
|
69
|
-
true
|
70
|
-
end
|
55
|
+
require('arjdbc/hsqldb') || true if name =~ /hsqldb/i
|
71
56
|
end
|
72
57
|
|
73
|
-
extension :
|
74
|
-
if name =~ /
|
75
|
-
require 'arjdbc/informix'
|
76
|
-
true
|
77
|
-
end
|
58
|
+
extension :MSSQL do |name|
|
59
|
+
require('arjdbc/mssql') || true if name =~ /sqlserver|tds|Microsoft SQL/i
|
78
60
|
end
|
79
61
|
|
80
|
-
extension :
|
81
|
-
if name =~ /
|
82
|
-
require 'arjdbc/
|
62
|
+
extension :DB2 do |name, config|
|
63
|
+
if name =~ /db2/i && name !~ /as\/?400/i && config[:url] !~ /^jdbc:derby:net:/
|
64
|
+
require 'arjdbc/db2'
|
83
65
|
true
|
84
66
|
end
|
85
67
|
end
|
86
|
-
|
87
|
-
extension :
|
88
|
-
|
89
|
-
|
68
|
+
|
69
|
+
extension :AS400 do |name, config|
|
70
|
+
# The native JDBC driver always returns "DB2 UDB for AS/400"
|
71
|
+
if name =~ /as\/?400/i
|
72
|
+
require 'arjdbc/db2'
|
73
|
+
require 'arjdbc/db2/as400'
|
90
74
|
true
|
91
75
|
end
|
92
76
|
end
|
@@ -97,6 +81,15 @@ module ::ArJdbc
|
|
97
81
|
true
|
98
82
|
end
|
99
83
|
end
|
84
|
+
|
85
|
+
# NOTE: following ones are likely getting deprecated :
|
86
|
+
|
87
|
+
extension :FireBird do |name|
|
88
|
+
if name =~ /firebird/i
|
89
|
+
require 'arjdbc/firebird'
|
90
|
+
true
|
91
|
+
end
|
92
|
+
end
|
100
93
|
|
101
94
|
extension :Sybase do |name|
|
102
95
|
if name =~ /sybase|tds/i
|
@@ -104,4 +97,19 @@ module ::ArJdbc
|
|
104
97
|
true
|
105
98
|
end
|
106
99
|
end
|
100
|
+
|
101
|
+
extension :Informix do |name|
|
102
|
+
if name =~ /informix/i
|
103
|
+
require 'arjdbc/informix'
|
104
|
+
true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
extension :Mimer do |name|
|
109
|
+
if name =~ /mimer/i
|
110
|
+
require 'arjdbc/mimer'
|
111
|
+
true
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
107
115
|
end
|