activerecord-jdbc-adapter 1.3.0.beta1 → 1.3.0.beta2

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 (161) hide show
  1. data/.gitignore +12 -11
  2. data/.travis.yml +36 -7
  3. data/Appraisals +3 -3
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +13 -6
  6. data/History.txt +64 -0
  7. data/README.md +8 -1
  8. data/Rakefile +3 -1
  9. data/gemfiles/rails23.gemfile +1 -1
  10. data/gemfiles/rails23.gemfile.lock +6 -5
  11. data/gemfiles/rails30.gemfile +1 -1
  12. data/gemfiles/rails30.gemfile.lock +7 -6
  13. data/gemfiles/rails31.gemfile +1 -1
  14. data/gemfiles/rails31.gemfile.lock +6 -5
  15. data/gemfiles/rails32.gemfile +1 -1
  16. data/gemfiles/rails32.gemfile.lock +6 -5
  17. data/gemfiles/rails40.gemfile +2 -4
  18. data/gemfiles/rails40.gemfile.lock +37 -51
  19. data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
  20. data/lib/active_record/connection_adapters/db2_adapter.rb +1 -1
  21. data/lib/arel/visitors/db2.rb +5 -1
  22. data/lib/arel/visitors/hsqldb.rb +1 -0
  23. data/lib/arel/visitors/sql_server.rb +55 -13
  24. data/lib/arjdbc/db2/adapter.rb +197 -227
  25. data/lib/arjdbc/db2/as400.rb +124 -0
  26. data/lib/arjdbc/db2/connection_methods.rb +20 -1
  27. data/lib/arjdbc/derby/adapter.rb +17 -85
  28. data/lib/arjdbc/derby/connection_methods.rb +2 -1
  29. data/lib/arjdbc/discover.rb +55 -47
  30. data/lib/arjdbc/h2/adapter.rb +52 -18
  31. data/lib/arjdbc/h2/connection_methods.rb +10 -2
  32. data/lib/arjdbc/hsqldb/adapter.rb +33 -9
  33. data/lib/arjdbc/hsqldb/connection_methods.rb +10 -2
  34. data/lib/arjdbc/informix.rb +2 -1
  35. data/lib/arjdbc/jdbc.rb +5 -1
  36. data/lib/arjdbc/jdbc/adapter.rb +167 -89
  37. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  38. data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
  39. data/lib/arjdbc/jdbc/base_ext.rb +25 -3
  40. data/lib/arjdbc/jdbc/callbacks.rb +9 -8
  41. data/lib/arjdbc/jdbc/column.rb +8 -20
  42. data/lib/arjdbc/jdbc/connection.rb +69 -80
  43. data/lib/arjdbc/jdbc/extension.rb +6 -8
  44. data/lib/arjdbc/jdbc/jdbc.rake +3 -141
  45. data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
  46. data/lib/arjdbc/mssql/adapter.rb +108 -34
  47. data/lib/arjdbc/mssql/connection_methods.rb +3 -1
  48. data/lib/arjdbc/mssql/limit_helpers.rb +3 -2
  49. data/lib/arjdbc/mssql/lock_helpers.rb +5 -1
  50. data/lib/arjdbc/mysql/adapter.rb +127 -70
  51. data/lib/arjdbc/mysql/connection_methods.rb +5 -2
  52. data/lib/arjdbc/oracle/adapter.rb +124 -94
  53. data/lib/arjdbc/oracle/connection_methods.rb +2 -1
  54. data/lib/arjdbc/postgresql/adapter.rb +99 -67
  55. data/lib/arjdbc/postgresql/column_cast.rb +3 -5
  56. data/lib/arjdbc/postgresql/connection_methods.rb +6 -6
  57. data/lib/arjdbc/railtie.rb +3 -1
  58. data/lib/arjdbc/sqlite3/adapter.rb +60 -43
  59. data/lib/arjdbc/sqlite3/connection_methods.rb +9 -9
  60. data/lib/arjdbc/sybase.rb +1 -1
  61. data/lib/arjdbc/tasks.rb +13 -0
  62. data/lib/arjdbc/tasks/database_tasks.rb +50 -0
  63. data/lib/arjdbc/tasks/databases.rake +89 -0
  64. data/lib/arjdbc/tasks/databases3.rake +203 -0
  65. data/lib/arjdbc/tasks/databases4.rake +39 -0
  66. data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
  67. data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
  68. data/lib/arjdbc/tasks/h2_database_tasks.rb +29 -0
  69. data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
  70. data/lib/arjdbc/tasks/jdbc_database_tasks.rb +122 -0
  71. data/lib/arjdbc/tasks/mssql_database_tasks.rb +36 -0
  72. data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +297 -0
  73. data/lib/arjdbc/tasks/oracle_database_tasks.rb +62 -0
  74. data/lib/arjdbc/version.rb +1 -1
  75. data/pom.xml +11 -12
  76. data/rails_generators/jdbc_generator.rb +1 -1
  77. data/rails_generators/templates/config/initializers/jdbc.rb +8 -5
  78. data/rails_generators/templates/lib/tasks/jdbc.rake +7 -4
  79. data/rakelib/02-test.rake +42 -15
  80. data/rakelib/compile.rake +29 -2
  81. data/rakelib/db.rake +2 -1
  82. data/rakelib/rails.rake +23 -6
  83. data/src/java/arjdbc/ArJdbcModule.java +175 -0
  84. data/src/java/arjdbc/db2/DB2Module.java +2 -1
  85. data/src/java/arjdbc/derby/DerbyModule.java +5 -24
  86. data/src/java/arjdbc/hsqldb/HSQLDBModule.java +3 -2
  87. data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -46
  88. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1001 -259
  89. data/src/java/arjdbc/mssql/MSSQLModule.java +2 -1
  90. data/src/java/arjdbc/mysql/MySQLModule.java +4 -3
  91. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +12 -7
  92. data/src/java/arjdbc/oracle/OracleModule.java +2 -1
  93. data/src/java/arjdbc/sqlite3/SQLite3Module.java +2 -1
  94. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +12 -0
  95. data/test/db/db2.rb +14 -7
  96. data/test/db/db2/rake_test.rb +82 -0
  97. data/test/db/db2/rake_test_data.sql +35 -0
  98. data/test/db/db2/simple_test.rb +20 -0
  99. data/test/db/db2/unit_test.rb +3 -1
  100. data/test/db/derby.rb +7 -5
  101. data/test/db/derby/rake_test.rb +96 -0
  102. data/test/db/derby/simple_test.rb +10 -2
  103. data/test/db/h2.rb +6 -8
  104. data/test/db/h2/identity_column_test.rb +35 -0
  105. data/test/db/h2/offset_test.rb +49 -0
  106. data/test/db/h2/rake_test.rb +98 -0
  107. data/test/db/h2/schema_dump_test.rb +5 -1
  108. data/test/db/hsqldb.rb +6 -10
  109. data/test/db/hsqldb/rake_test.rb +101 -0
  110. data/test/db/hsqldb/schema_dump_test.rb +5 -1
  111. data/test/db/hsqldb/simple_test.rb +8 -0
  112. data/test/db/jndi_config.rb +1 -3
  113. data/test/db/jndi_pooled_config.rb +1 -3
  114. data/test/db/mssql/limit_offset_test.rb +23 -14
  115. data/test/db/mssql/rake_test.rb +143 -0
  116. data/test/db/mysql/_rails_test_mysql.32.out +1069 -1252
  117. data/test/db/mysql/nonstandard_primary_key_test.rb +21 -24
  118. data/test/db/mysql/rake_test.rb +97 -0
  119. data/test/db/mysql/schema_dump_test.rb +11 -11
  120. data/test/db/mysql/simple_test.rb +52 -3
  121. data/test/db/mysql/statement_escaping_test.rb +46 -0
  122. data/test/db/oracle/rake_test.rb +100 -0
  123. data/test/db/oracle/simple_test.rb +48 -0
  124. data/test/db/postgres/_rails_test_postgres.32.out +998 -1370
  125. data/test/db/postgres/active_schema_unit_test.rb +68 -0
  126. data/test/db/postgres/connection_test.rb +10 -2
  127. data/test/db/postgres/data_types_test.rb +2 -2
  128. data/test/db/postgres/ltree_test.rb +6 -5
  129. data/test/db/postgres/native_types_test.rb +1 -5
  130. data/test/db/postgres/rake_test.rb +117 -0
  131. data/test/db/postgres/schema_dump_test.rb +9 -2
  132. data/test/db/postgres/schema_test.rb +4 -2
  133. data/test/db/postgres/simple_test.rb +57 -16
  134. data/test/db/sqlite3.rb +3 -10
  135. data/test/db/sqlite3/_rails_test_sqlite3.32.out +1070 -1298
  136. data/test/db/sqlite3/rake_test.rb +71 -0
  137. data/test/db/sqlite3/simple_test.rb +9 -9
  138. data/test/has_many_through.rb +4 -1
  139. data/test/jdbc/db2.rb +14 -1
  140. data/test/jdbc_column_test.rb +23 -0
  141. data/test/{generic_jdbc_connection_test.rb → jdbc_connection_test.rb} +22 -17
  142. data/test/jndi_callbacks_test.rb +26 -28
  143. data/test/jndi_test.rb +7 -16
  144. data/test/models/data_types.rb +2 -1
  145. data/test/models/thing.rb +1 -0
  146. data/test/rails/mysql.rb +13 -0
  147. data/test/rails/sqlite3/version.rb +6 -0
  148. data/test/rails_stub.rb +31 -0
  149. data/test/rake_test_support.rb +298 -0
  150. data/test/serialize.rb +2 -4
  151. data/test/{helper.rb → shared_helper.rb} +0 -0
  152. data/test/simple.rb +167 -93
  153. data/test/test_helper.rb +52 -16
  154. metadata +388 -354
  155. data/lib/pg.rb +0 -26
  156. data/test/abstract_db_create.rb +0 -139
  157. data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -36
  158. data/test/db/mssql/db_create_test.rb +0 -29
  159. data/test/db/mysql/db_create_test.rb +0 -33
  160. data/test/db/postgres/db_create_test.rb +0 -44
  161. 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] = ::ArJdbc::DB2
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
@@ -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(*args)
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 recreate_database(db_name, options = {})
359
- tables.each { |table| drop_table 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] = ::ArJdbc::Derby
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)
@@ -1,31 +1,29 @@
1
- # arjdbc/discover.rb: Declare ArJdbc.extension modules in this file
2
- # that loads a custom module and adapter.
1
+ # this file is discovered by the extension mechanism
2
+ # @see {ArJdbc#discover_extensions}
3
3
 
4
- module ::ArJdbc
5
- # Adapters built-in to AR are required up-front so we can override
6
- # the native ones
7
- require 'arjdbc/mysql'
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 :Informix do |name|
74
- if name =~ /informix/i
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 :Mimer do |name|
81
- if name =~ /mimer/i
82
- require 'arjdbc/mimer'
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 :MSSQL do |name|
88
- if name =~ /sqlserver|tds|Microsoft SQL/i
89
- require 'arjdbc/mssql'
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