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.
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