kb-activerecord-jdbc-adapter 0.9.7.1-java → 1.0.0.beta1-java

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 (123) hide show
  1. data/History.txt +11 -0
  2. data/Manifest.txt +71 -38
  3. data/lib/active_record/connection_adapters/cachedb_adapter.rb +1 -1
  4. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -13
  5. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -13
  6. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -13
  7. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -1
  8. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -661
  9. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -1
  10. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -13
  11. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -13
  12. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -1
  13. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -13
  14. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -13
  15. data/lib/activerecord-jdbc-adapter.rb +2 -2
  16. data/lib/arjdbc/cachedb/adapter.rb +20 -0
  17. data/lib/arjdbc/cachedb/connection_methods.rb +10 -0
  18. data/lib/arjdbc/cachedb.rb +3 -0
  19. data/lib/{jdbc_adapter/jdbc_db2.rb → arjdbc/db2/adapter.rb} +2 -17
  20. data/lib/arjdbc/db2.rb +2 -0
  21. data/lib/{jdbc_adapter/jdbc_derby.rb → arjdbc/derby/adapter.rb} +8 -26
  22. data/lib/arjdbc/derby/connection_methods.rb +18 -0
  23. data/lib/arjdbc/derby.rb +7 -0
  24. data/lib/arjdbc/discover.rb +99 -0
  25. data/lib/{jdbc_adapter/jdbc_firebird.rb → arjdbc/firebird/adapter.rb} +12 -16
  26. data/lib/arjdbc/firebird.rb +2 -0
  27. data/lib/arjdbc/h2/adapter.rb +15 -0
  28. data/lib/arjdbc/h2/connection_methods.rb +12 -0
  29. data/lib/arjdbc/h2.rb +4 -0
  30. data/lib/{jdbc_adapter/jdbc_hsqldb.rb → arjdbc/hsqldb/adapter.rb} +6 -58
  31. data/lib/arjdbc/hsqldb/connection_methods.rb +14 -0
  32. data/lib/arjdbc/hsqldb.rb +4 -0
  33. data/lib/{jdbc_adapter/jdbc_informix.rb → arjdbc/informix/adapter.rb} +6 -19
  34. data/lib/arjdbc/informix/connection_methods.rb +10 -0
  35. data/lib/arjdbc/informix.rb +3 -0
  36. data/lib/arjdbc/jdbc/adapter.rb +235 -0
  37. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  38. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  39. data/lib/arjdbc/jdbc/column.rb +38 -0
  40. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  41. data/lib/arjdbc/jdbc/connection.rb +97 -0
  42. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  43. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  44. data/lib/arjdbc/jdbc/discover.rb +18 -0
  45. data/lib/arjdbc/jdbc/driver.rb +44 -0
  46. data/lib/arjdbc/jdbc/extension.rb +47 -0
  47. data/lib/arjdbc/jdbc/java.rb +14 -0
  48. data/lib/{jdbc_adapter → arjdbc/jdbc}/missing_functionality_helper.rb +5 -5
  49. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  50. data/lib/{jdbc_adapter → arjdbc/jdbc}/railtie.rb +1 -1
  51. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  52. data/lib/arjdbc/jdbc/type_converter.rb +119 -0
  53. data/lib/arjdbc/jdbc.rb +2 -0
  54. data/lib/{jdbc_adapter/jdbc_mimer.rb → arjdbc/mimer/adapter.rb} +16 -19
  55. data/lib/arjdbc/mimer.rb +2 -0
  56. data/lib/{jdbc_adapter/jdbc_mssql.rb → arjdbc/mssql/adapter.rb} +19 -31
  57. data/lib/arjdbc/mssql/connection_methods.rb +13 -0
  58. data/lib/arjdbc/mssql.rb +4 -0
  59. data/lib/arjdbc/mysql/adapter.rb +388 -0
  60. data/lib/arjdbc/mysql/connection_methods.rb +26 -0
  61. data/lib/arjdbc/mysql.rb +4 -0
  62. data/lib/{jdbc_adapter/jdbc_oracle.rb → arjdbc/oracle/adapter.rb} +9 -17
  63. data/lib/arjdbc/oracle/connection_methods.rb +11 -0
  64. data/lib/arjdbc/oracle.rb +3 -0
  65. data/lib/{jdbc_adapter/jdbc_postgre.rb → arjdbc/postgresql/adapter.rb} +7 -36
  66. data/lib/arjdbc/postgresql/connection_methods.rb +21 -0
  67. data/lib/arjdbc/postgresql.rb +4 -0
  68. data/lib/{jdbc_adapter/jdbc_sqlite3.rb → arjdbc/sqlite3/adapter.rb} +106 -104
  69. data/lib/arjdbc/sqlite3/connection_methods.rb +33 -0
  70. data/lib/arjdbc/sqlite3.rb +4 -0
  71. data/lib/arjdbc/sybase/adapter.rb +46 -0
  72. data/lib/arjdbc/sybase.rb +2 -0
  73. data/lib/arjdbc/version.rb +8 -0
  74. data/lib/arjdbc.rb +29 -0
  75. data/lib/jdbc_adapter/version.rb +3 -5
  76. data/lib/jdbc_adapter.rb +2 -27
  77. data/rails_generators/templates/config/initializers/jdbc.rb +1 -1
  78. data/rakelib/compile.rake +3 -2
  79. data/rakelib/package.rake +3 -3
  80. data/src/java/{jdbc_adapter/JdbcDerbySpec.java → arjdbc/derby/DerbyModule.java} +32 -32
  81. data/src/java/{jdbc_adapter/JdbcAdapterInternalService.java → arjdbc/jdbc/AdapterJavaService.java} +13 -7
  82. data/src/java/{jdbc_adapter → arjdbc/jdbc}/JdbcConnectionFactory.java +6 -6
  83. data/src/java/{jdbc_adapter → arjdbc/jdbc}/RubyJdbcConnection.java +91 -16
  84. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  85. data/src/java/{jdbc_adapter → arjdbc/mssql}/MssqlRubyJdbcConnection.java +5 -2
  86. data/src/java/{jdbc_adapter/JdbcMySQLSpec.java → arjdbc/mysql/MySQLModule.java} +12 -12
  87. data/src/java/{jdbc_adapter/PostgresRubyJdbcConnection.java → arjdbc/postgresql/PostgresqlRubyJdbcConnection.java} +11 -9
  88. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +64 -0
  89. data/test/abstract_db_create.rb +4 -1
  90. data/test/activerecord/connection_adapters/type_conversion_test.rb +1 -1
  91. data/test/db/cachedb.rb +0 -0
  92. data/test/db/derby.rb +12 -14
  93. data/test/db/hsqldb.rb +3 -2
  94. data/test/db/jndi_config.rb +4 -4
  95. data/test/db/sqlite3.rb +2 -6
  96. data/test/db2_simple_test.rb +23 -0
  97. data/test/derby_migration_test.rb +50 -3
  98. data/test/jdbc_common.rb +1 -1
  99. data/test/jndi_callbacks_test.rb +1 -0
  100. data/test/postgres_nonseq_pkey_test.rb +0 -2
  101. data/test/postgres_schema_search_path_test.rb +0 -2
  102. data/test/simple.rb +3 -3
  103. data/test/sybase_jtds_simple_test.rb +22 -0
  104. metadata +81 -46
  105. data/lib/active_record/connection_adapters/jdbc_adapter_spec.rb +0 -26
  106. data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
  107. data/lib/jdbc_adapter/jdbc_cachedb.rb +0 -33
  108. data/lib/jdbc_adapter/jdbc_mysql.rb +0 -260
  109. data/lib/jdbc_adapter/jdbc_sybase.rb +0 -50
  110. data/src/java/jdbc_adapter/SQLBlock.java +0 -27
  111. data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +0 -41
  112. data/test/jdbc_adapter/jdbc_db2_test.rb +0 -26
  113. data/test/jdbc_adapter/jdbc_sybase_test.rb +0 -33
  114. data/test/minirunit/testConnect.rb +0 -14
  115. data/test/minirunit/testH2.rb +0 -73
  116. data/test/minirunit/testHsqldb.rb +0 -73
  117. data/test/minirunit/testLoadActiveRecord.rb +0 -3
  118. data/test/minirunit/testMysql.rb +0 -83
  119. data/test/minirunit/testRawSelect.rb +0 -24
  120. data/test/minirunit.rb +0 -109
  121. /data/lib/{jdbc_adapter → arjdbc/jdbc}/jdbc.rake +0 -0
  122. /data/lib/{jdbc_adapter → arjdbc/jdbc}/rake_tasks.rb +0 -0
  123. /data/lib/{jdbc_adapter → arjdbc/mssql}/tsql_helper.rb +0 -0
@@ -0,0 +1,388 @@
1
+ require 'active_record/connection_adapters/abstract/schema_definitions'
2
+
3
+ module ::ArJdbc
4
+ module MySQL
5
+ def self.column_selector
6
+ [/mysql/i, lambda {|cfg,col| col.extend(::ArJdbc::MySQL::Column)}]
7
+ end
8
+
9
+ def self.extended(adapter)
10
+ adapter.configure_connection
11
+ end
12
+
13
+ def configure_connection
14
+ execute("SET SQL_AUTO_IS_NULL=0")
15
+ end
16
+
17
+ module Column
18
+ def extract_default(default)
19
+ if sql_type =~ /blob/i || type == :text
20
+ if default.blank?
21
+ return null ? nil : ''
22
+ else
23
+ raise ArgumentError, "#{type} columns cannot have a default value: #{default.inspect}"
24
+ end
25
+ elsif missing_default_forged_as_empty_string?(default)
26
+ nil
27
+ else
28
+ super
29
+ end
30
+ end
31
+
32
+ def has_default?
33
+ return false if sql_type =~ /blob/i || type == :text #mysql forbids defaults on blob and text columns
34
+ super
35
+ end
36
+
37
+ def simplified_type(field_type)
38
+ return :boolean if field_type =~ /tinyint\(1\)|bit/i
39
+ return :string if field_type =~ /enum/i
40
+ super
41
+ end
42
+
43
+ def extract_limit(sql_type)
44
+ case sql_type
45
+ when /blob|text/i
46
+ case sql_type
47
+ when /tiny/i
48
+ 255
49
+ when /medium/i
50
+ 16777215
51
+ when /long/i
52
+ 2147483647 # mysql only allows 2^31-1, not 2^32-1, somewhat inconsistently with the tiny/medium/normal cases
53
+ else
54
+ nil # we could return 65535 here, but we leave it undecorated by default
55
+ end
56
+ when /^bigint/i; 8
57
+ when /^int/i; 4
58
+ when /^mediumint/i; 3
59
+ when /^smallint/i; 2
60
+ when /^tinyint/i; 1
61
+ else
62
+ super
63
+ end
64
+ end
65
+
66
+ # MySQL misreports NOT NULL column default when none is given.
67
+ # We can't detect this for columns which may have a legitimate ''
68
+ # default (string) but we can for others (integer, datetime, boolean,
69
+ # and the rest).
70
+ #
71
+ # Test whether the column has default '', is not null, and is not
72
+ # a type allowing default ''.
73
+ def missing_default_forged_as_empty_string?(default)
74
+ type != :string && !null && default == ''
75
+ end
76
+ end
77
+
78
+ def modify_types(tp)
79
+ tp[:primary_key] = "int(11) DEFAULT NULL auto_increment PRIMARY KEY"
80
+ tp[:integer] = { :name => 'int', :limit => 4 }
81
+ tp[:decimal] = { :name => "decimal" }
82
+ tp[:timestamp] = { :name => "datetime" }
83
+ tp[:datetime][:limit] = nil
84
+ tp
85
+ end
86
+
87
+ def adapter_name #:nodoc:
88
+ 'MySQL'
89
+ end
90
+
91
+ def case_sensitive_equality_operator
92
+ "= BINARY"
93
+ end
94
+
95
+ # QUOTING ==================================================
96
+
97
+ def quote(value, column = nil)
98
+ return value.quoted_id if value.respond_to?(:quoted_id)
99
+
100
+ if column && column.type == :primary_key
101
+ value.to_s
102
+ elsif column && String === value && column.type == :binary && column.class.respond_to?(:string_to_binary)
103
+ s = column.class.string_to_binary(value).unpack("H*")[0]
104
+ "x'#{s}'"
105
+ elsif BigDecimal === value
106
+ "'#{value.to_s("F")}'"
107
+ else
108
+ super
109
+ end
110
+ end
111
+
112
+ def quoted_true
113
+ "1"
114
+ end
115
+
116
+ def quoted_false
117
+ "0"
118
+ end
119
+
120
+ def begin_db_transaction #:nodoc:
121
+ @connection.begin
122
+ rescue Exception
123
+ # Transactions aren't supported
124
+ end
125
+
126
+ def commit_db_transaction #:nodoc:
127
+ @connection.commit
128
+ rescue Exception
129
+ # Transactions aren't supported
130
+ end
131
+
132
+ def rollback_db_transaction #:nodoc:
133
+ @connection.rollback
134
+ rescue Exception
135
+ # Transactions aren't supported
136
+ end
137
+
138
+ def supports_savepoints? #:nodoc:
139
+ true
140
+ end
141
+
142
+ def create_savepoint
143
+ execute("SAVEPOINT #{current_savepoint_name}")
144
+ end
145
+
146
+ def rollback_to_savepoint
147
+ execute("ROLLBACK TO SAVEPOINT #{current_savepoint_name}")
148
+ end
149
+
150
+ def release_savepoint
151
+ execute("RELEASE SAVEPOINT #{current_savepoint_name}")
152
+ end
153
+
154
+ def disable_referential_integrity(&block) #:nodoc:
155
+ old = select_value("SELECT @@FOREIGN_KEY_CHECKS")
156
+ begin
157
+ update("SET FOREIGN_KEY_CHECKS = 0")
158
+ yield
159
+ ensure
160
+ update("SET FOREIGN_KEY_CHECKS = #{old}")
161
+ end
162
+ end
163
+
164
+ # SCHEMA STATEMENTS ========================================
165
+
166
+ def structure_dump #:nodoc:
167
+ if supports_views?
168
+ sql = "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'"
169
+ else
170
+ sql = "SHOW TABLES"
171
+ end
172
+
173
+ select_all(sql).inject("") do |structure, table|
174
+ table.delete('Table_type')
175
+
176
+ hash = show_create_table(table.to_a.first.last)
177
+
178
+ if(table = hash["Create Table"])
179
+ structure += table + ";\n\n"
180
+ elsif(view = hash["Create View"])
181
+ structure += view + ";\n\n"
182
+ end
183
+ end
184
+ end
185
+
186
+ def recreate_database(name, options = {}) #:nodoc:
187
+ drop_database(name)
188
+ create_database(name, options)
189
+ end
190
+
191
+ def character_set(options) #:nodoc:
192
+ str = "CHARACTER SET `#{options[:charset] || 'utf8'}`"
193
+ str += " COLLATE `#{options[:collation]}`" if options[:collation]
194
+ str
195
+ end
196
+ private :character_set
197
+
198
+ def create_database(name, options = {}) #:nodoc:
199
+ execute "CREATE DATABASE `#{name}` DEFAULT #{character_set(options)}"
200
+ end
201
+
202
+ def drop_database(name) #:nodoc:
203
+ execute "DROP DATABASE IF EXISTS `#{name}`"
204
+ end
205
+
206
+ def current_database
207
+ select_one("SELECT DATABASE() as db")["db"]
208
+ end
209
+
210
+ def create_table(name, options = {}) #:nodoc:
211
+ super(name, {:options => "ENGINE=InnoDB #{character_set(options)}"}.merge(options))
212
+ end
213
+
214
+ def rename_table(name, new_name)
215
+ execute "RENAME TABLE #{quote_table_name(name)} TO #{quote_table_name(new_name)}"
216
+ end
217
+
218
+ def add_column(table_name, column_name, type, options = {})
219
+ add_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ADD #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
220
+ add_column_options!(add_column_sql, options)
221
+ add_column_position!(add_column_sql, options)
222
+ execute(add_column_sql)
223
+ end
224
+
225
+ def change_column_default(table_name, column_name, default) #:nodoc:
226
+ column = column_for(table_name, column_name)
227
+ change_column table_name, column_name, column.sql_type, :default => default
228
+ end
229
+
230
+ def change_column_null(table_name, column_name, null, default = nil)
231
+ column = column_for(table_name, column_name)
232
+
233
+ unless null || default.nil?
234
+ execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL")
235
+ end
236
+
237
+ change_column table_name, column_name, column.sql_type, :null => null
238
+ end
239
+
240
+ def change_column(table_name, column_name, type, options = {}) #:nodoc:
241
+ column = column_for(table_name, column_name)
242
+
243
+ unless options_include_default?(options)
244
+ options[:default] = column.default
245
+ end
246
+
247
+ unless options.has_key?(:null)
248
+ options[:null] = column.null
249
+ end
250
+
251
+ change_column_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
252
+ add_column_options!(change_column_sql, options)
253
+ add_column_position!(change_column_sql, options)
254
+ execute(change_column_sql)
255
+ end
256
+
257
+ def rename_column(table_name, column_name, new_column_name) #:nodoc:
258
+ options = {}
259
+ if column = columns(table_name).find { |c| c.name == column_name.to_s }
260
+ options[:default] = column.default
261
+ options[:null] = column.null
262
+ else
263
+ raise ActiveRecord::ActiveRecordError, "No such column: #{table_name}.#{column_name}"
264
+ end
265
+ current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"]
266
+ rename_column_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}"
267
+ add_column_options!(rename_column_sql, options)
268
+ execute(rename_column_sql)
269
+ end
270
+
271
+ def add_limit_offset!(sql, options) #:nodoc:
272
+ limit, offset = options[:limit], options[:offset]
273
+ if limit && offset
274
+ sql << " LIMIT #{offset.to_i}, #{sanitize_limit(limit)}"
275
+ elsif limit
276
+ sql << " LIMIT #{sanitize_limit(limit)}"
277
+ elsif offset
278
+ sql << " OFFSET #{offset.to_i}"
279
+ end
280
+ sql
281
+ end
282
+
283
+ def show_variable(var)
284
+ res = execute("show variables like '#{var}'")
285
+ row = res.detect {|row| row["Variable_name"] == var }
286
+ row && row["Value"]
287
+ end
288
+
289
+ def charset
290
+ show_variable("character_set_database")
291
+ end
292
+
293
+ def collation
294
+ show_variable("collation_database")
295
+ end
296
+
297
+ def type_to_sql(type, limit = nil, precision = nil, scale = nil)
298
+ return super unless type.to_s == 'integer'
299
+
300
+ case limit
301
+ when 1; 'tinyint'
302
+ when 2; 'smallint'
303
+ when 3; 'mediumint'
304
+ when nil, 4, 11; 'int(11)' # compatibility with MySQL default
305
+ when 5..8; 'bigint'
306
+ else raise(ActiveRecordError, "No integer type has byte size #{limit}")
307
+ end
308
+ end
309
+
310
+ def add_column_position!(sql, options)
311
+ if options[:first]
312
+ sql << " FIRST"
313
+ elsif options[:after]
314
+ sql << " AFTER #{quote_column_name(options[:after])}"
315
+ end
316
+ end
317
+
318
+ protected
319
+ def translate_exception(exception, message)
320
+ return super unless exception.respond_to?(:errno)
321
+
322
+ case exception.errno
323
+ when 1062
324
+ ::ActiveRecord::RecordNotUnique.new(message, exception)
325
+ when 1452
326
+ ::ActiveRecord::InvalidForeignKey.new(message, exception)
327
+ else
328
+ super
329
+ end
330
+ end
331
+
332
+ private
333
+ def column_for(table_name, column_name)
334
+ unless column = columns(table_name).find { |c| c.name == column_name.to_s }
335
+ raise "No such column: #{table_name}.#{column_name}"
336
+ end
337
+ column
338
+ end
339
+
340
+ def show_create_table(table)
341
+ select_one("SHOW CREATE TABLE #{quote_table_name(table)}")
342
+ end
343
+
344
+ def supports_views?
345
+ false
346
+ end
347
+ end
348
+ end
349
+
350
+ module ActiveRecord::ConnectionAdapters
351
+ class MysqlColumn < JdbcColumn
352
+ include ArJdbc::MySQL::Column
353
+
354
+ def initialize(name, *args)
355
+ if Hash === name
356
+ super
357
+ else
358
+ super(nil, name, *args)
359
+ end
360
+ end
361
+
362
+ def call_discovered_column_callbacks(*)
363
+ end
364
+ end
365
+
366
+ class MysqlAdapter < JdbcAdapter
367
+ include ArJdbc::MySQL
368
+
369
+ def initialize(*args)
370
+ super
371
+ configure_connection
372
+ end
373
+
374
+ def adapter_spec(config)
375
+ # return nil to avoid extending ArJdbc::MySQL, which we've already done
376
+ end
377
+
378
+ def jdbc_column_class
379
+ ActiveRecord::ConnectionAdapters::MysqlColumn
380
+ end
381
+ end
382
+ end
383
+
384
+ module Mysql # :nodoc:
385
+ def self.client_version
386
+ 50400 # faked out for AR tests
387
+ end
388
+ end
@@ -0,0 +1,26 @@
1
+ # Don't need to load native mysql adapter
2
+ $LOADED_FEATURES << "active_record/connection_adapters/mysql_adapter.rb"
3
+
4
+ class ActiveRecord::Base
5
+ class << self
6
+ def mysql_connection(config)
7
+ require "arjdbc/mysql"
8
+ config[:port] ||= 3306
9
+ url_options = "zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&useUnicode=true&characterEncoding="
10
+ url_options << (config[:encoding] || 'utf8')
11
+ if config[:url]
12
+ config[:url] = config[:url]['?'] ? "#{config[:url]}&#{url_options}" : "#{config[:url]}?#{url_options}"
13
+ else
14
+ config[:url] = "jdbc:mysql://#{config[:host]}:#{config[:port]}/#{config[:database]}?#{url_options}"
15
+ end
16
+ config[:driver] ||= "com.mysql.jdbc.Driver"
17
+ config[:adapter_class] = ActiveRecord::ConnectionAdapters::MysqlAdapter
18
+ connection = jdbc_connection(config)
19
+ ::ArJdbc::MySQL.kill_cancel_timer(connection.raw_connection)
20
+ connection
21
+ end
22
+ alias_method :jdbcmysql_connection, :mysql_connection
23
+ end
24
+ end
25
+
26
+
@@ -0,0 +1,4 @@
1
+ require 'arjdbc/jdbc'
2
+ jdbc_require_driver 'jdbc/mysql'
3
+ require 'arjdbc/mysql/connection_methods'
4
+ require 'arjdbc/mysql/adapter'
@@ -1,13 +1,8 @@
1
- module ::JdbcSpec
2
- module ActiveRecordExtensions
3
- def oracle_connection(config)
4
- config[:port] ||= 1521
5
- config[:url] ||= "jdbc:oracle:thin:@#{config[:host]}:#{config[:port]}:#{config[:database]}"
6
- config[:driver] ||= "oracle.jdbc.driver.OracleDriver"
7
- jdbc_connection(config)
8
- end
9
- end
1
+ module ActiveRecord::ConnectionAdapters
2
+ OracleAdapter = Class.new(AbstractAdapter) unless const_defined?(:OracleAdapter)
3
+ end
10
4
 
5
+ module ::ArJdbc
11
6
  module Oracle
12
7
  def self.extended(mod)
13
8
  unless @lob_callback_added
@@ -26,19 +21,16 @@ module ::JdbcSpec
26
21
  ActiveRecord::Base.after_save :after_save_with_oracle_lob
27
22
  @lob_callback_added = true
28
23
  end
29
- ActiveRecord::Base.extend JdbcSpec::QuotedPrimaryKeyExtension
24
+ require 'arjdbc/jdbc/quoted_primary_key'
25
+ ActiveRecord::Base.extend ArJdbc::QuotedPrimaryKeyExtension
30
26
  mod.class.class_eval do
31
27
  alias_chained_method :insert, :query_dirty, :insert
32
28
  alias_chained_method :columns, :query_cache, :columns
33
29
  end
34
30
  end
35
31
 
36
- def self.adapter_matcher(name, *)
37
- name =~ /oracle/i ? self : false
38
- end
39
-
40
32
  def self.column_selector
41
- [/oracle/i, lambda {|cfg,col| col.extend(::JdbcSpec::Oracle::Column)}]
33
+ [/oracle/i, lambda {|cfg,col| col.extend(::ArJdbc::Oracle::Column)}]
42
34
  end
43
35
 
44
36
  module Column
@@ -52,7 +44,7 @@ module ::JdbcSpec
52
44
  def type_cast(value)
53
45
  return nil if value.nil?
54
46
  case type
55
- when :datetime then JdbcSpec::Oracle::Column.string_to_time(value, self.class)
47
+ when :datetime then ArJdbc::Oracle::Column.string_to_time(value, self.class)
56
48
  else
57
49
  super
58
50
  end
@@ -60,7 +52,7 @@ module ::JdbcSpec
60
52
 
61
53
  def type_cast_code(var_name)
62
54
  case type
63
- when :datetime then "JdbcSpec::Oracle::Column.string_to_time(#{var_name}, self.class)"
55
+ when :datetime then "ArJdbc::Oracle::Column.string_to_time(#{var_name}, self.class)"
64
56
  else
65
57
  super
66
58
  end
@@ -0,0 +1,11 @@
1
+ class ActiveRecord::Base
2
+ class << self
3
+ def oracle_connection(config)
4
+ config[:port] ||= 1521
5
+ config[:url] ||= "jdbc:oracle:thin:@#{config[:host]}:#{config[:port]}:#{config[:database]}"
6
+ config[:driver] ||= "oracle.jdbc.driver.OracleDriver"
7
+ jdbc_connection(config)
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,3 @@
1
+ require 'arjdbc/jdbc'
2
+ require 'arjdbc/oracle/connection_methods'
3
+ require 'arjdbc/oracle/adapter'
@@ -1,24 +1,8 @@
1
+ module ActiveRecord::ConnectionAdapters
2
+ PostgreSQLAdapter = Class.new(AbstractAdapter) unless const_defined?(:PostgreSQLAdapter)
3
+ end
1
4
 
2
- module ::JdbcSpec
3
- # Don't need to load native postgres adapter
4
- $LOADED_FEATURES << "active_record/connection_adapters/postgresql_adapter.rb"
5
-
6
- module ActiveRecordExtensions
7
- add_method_to_remove_from_ar_base(:postgresql_connection)
8
-
9
- def postgresql_connection(config)
10
- require File.dirname(__FILE__) + "/../active_record/connection_adapters/postgresql_adapter"
11
- config[:host] ||= "localhost"
12
- config[:port] ||= 5432
13
- config[:url] ||= "jdbc:postgresql://#{config[:host]}:#{config[:port]}/#{config[:database]}"
14
- config[:url] << config[:pg_params] if config[:pg_params]
15
- config[:driver] ||= "org.postgresql.Driver"
16
- conn = jdbc_connection(config)
17
- conn.execute("SET SEARCH_PATH TO #{config[:schema_search_path]}") if config[:schema_search_path]
18
- conn
19
- end
20
- end
21
-
5
+ module ::ArJdbc
22
6
  module PostgreSQL
23
7
  def self.extended(mod)
24
8
  mod.class.class_eval do
@@ -26,12 +10,8 @@ module ::JdbcSpec
26
10
  end
27
11
  end
28
12
 
29
- def self.adapter_matcher(name, *)
30
- name =~ /postgre/i ? self : false
31
- end
32
-
33
13
  def self.column_selector
34
- [/postgre/i, lambda {|cfg,col| col.extend(::JdbcSpec::PostgreSQL::Column)}]
14
+ [/postgre/i, lambda {|cfg,col| col.extend(::ArJdbc::PostgreSQL::Column)}]
35
15
  end
36
16
 
37
17
  def self.jdbc_connection_class
@@ -188,9 +168,9 @@ module ::JdbcSpec
188
168
  end
189
169
 
190
170
  def quote_regclass(table_name)
191
- table_name.to_s.split('.').map do |part|
171
+ table_name.to_s.split('.').map do |part|
192
172
  part =~ /".*"/i ? part : quote_table_name(part)
193
- end.join('.')
173
+ end.join('.')
194
174
  end
195
175
 
196
176
  # Find a table's primary key and sequence.
@@ -381,15 +361,6 @@ module ::JdbcSpec
381
361
  end
382
362
  end
383
363
 
384
- def _execute(sql, name = nil)
385
- case sql.strip
386
- when /\A\(?\s*(select|show)/i then
387
- @connection.execute_query(sql)
388
- else
389
- @connection.execute_update(sql)
390
- end
391
- end
392
-
393
364
  # SELECT DISTINCT clause for a given set of columns and a given ORDER BY clause.
394
365
  #
395
366
  # PostgreSQL requires the ORDER BY columns in the select list for distinct queries, and
@@ -0,0 +1,21 @@
1
+ # Don't need to load native postgres adapter
2
+ $LOADED_FEATURES << "active_record/connection_adapters/postgresql_adapter.rb"
3
+
4
+ class ActiveRecord::Base
5
+ class << self
6
+ def postgresql_connection(config)
7
+ require "arjdbc/postgresql"
8
+ config[:host] ||= "localhost"
9
+ config[:port] ||= 5432
10
+ config[:url] ||= "jdbc:postgresql://#{config[:host]}:#{config[:port]}/#{config[:database]}"
11
+ config[:url] << config[:pg_params] if config[:pg_params]
12
+ config[:driver] ||= "org.postgresql.Driver"
13
+ conn = jdbc_connection(config)
14
+ conn.execute("SET SEARCH_PATH TO #{config[:schema_search_path]}") if config[:schema_search_path]
15
+ conn
16
+ end
17
+ alias_method :jdbcpostgresql_connection, :postgresql_connection
18
+ end
19
+ end
20
+
21
+
@@ -0,0 +1,4 @@
1
+ require 'arjdbc/jdbc'
2
+ jdbc_require_driver 'jdbc/postgres'
3
+ require 'arjdbc/postgresql/connection_methods'
4
+ require 'arjdbc/postgresql/adapter'