activerecord-jdbc-adapter 0.9.0.1 → 0.9.1
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.
- data/History.txt +31 -0
- data/Manifest.txt +7 -0
- data/README.txt +15 -2
- data/Rakefile +28 -30
- data/lib/active_record/connection_adapters/h2_adapter.rb +13 -1
- data/lib/active_record/connection_adapters/jdbc_adapter.rb +78 -96
- data/lib/jdbc_adapter/jdbc.rake +15 -5
- data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
- data/lib/jdbc_adapter/jdbc_cachedb.rb +4 -4
- data/lib/jdbc_adapter/jdbc_db2.rb +5 -7
- data/lib/jdbc_adapter/jdbc_derby.rb +57 -30
- data/lib/jdbc_adapter/jdbc_firebird.rb +2 -2
- data/lib/jdbc_adapter/jdbc_hsqldb.rb +53 -46
- data/lib/jdbc_adapter/jdbc_informix.rb +4 -5
- data/lib/jdbc_adapter/jdbc_mimer.rb +2 -2
- data/lib/jdbc_adapter/jdbc_mssql.rb +25 -23
- data/lib/jdbc_adapter/jdbc_mysql.rb +20 -22
- data/lib/jdbc_adapter/jdbc_oracle.rb +115 -117
- data/lib/jdbc_adapter/jdbc_postgre.rb +129 -59
- data/lib/jdbc_adapter/jdbc_sqlite3.rb +149 -28
- data/lib/jdbc_adapter/jdbc_sybase.rb +13 -2
- data/lib/jdbc_adapter/missing_functionality_helper.rb +12 -3
- data/lib/jdbc_adapter/version.rb +1 -1
- data/src/java/jdbc_adapter/JdbcAdapterInternalService.java +6 -1101
- data/src/java/jdbc_adapter/JdbcDerbySpec.java +26 -23
- data/src/java/jdbc_adapter/JdbcMySQLSpec.java +79 -28
- data/src/java/jdbc_adapter/PostgresRubyJdbcConnection.java +35 -0
- data/src/java/jdbc_adapter/RubyJdbcConnection.java +1149 -0
- data/src/java/jdbc_adapter/SQLBlock.java +12 -3
- data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +41 -0
- data/test/activerecord/connection_adapters/type_conversion_test.rb +1 -1
- data/test/db/derby.rb +0 -3
- data/test/db/h2.rb +0 -3
- data/test/db/hsqldb.rb +1 -4
- data/test/db/mysql.rb +1 -0
- data/test/db/oracle.rb +5 -0
- data/test/db/sqlite3.rb +7 -3
- data/test/derby_migration_test.rb +21 -0
- data/test/has_many_through.rb +11 -4
- data/test/jdbc_common.rb +13 -1
- data/test/models/data_types.rb +11 -1
- data/test/models/mixed_case.rb +20 -0
- data/test/mysql_multibyte_test.rb +4 -0
- data/test/oracle_simple_test.rb +1 -1
- data/test/postgres_mixed_case_test.rb +19 -0
- data/test/simple.rb +220 -41
- data/test/sqlite3_simple_test.rb +83 -0
- data/test/sybase_jtds_simple_test.rb +6 -0
- metadata +12 -10
data/History.txt
CHANGED
@@ -1,3 +1,34 @@
|
|
1
|
+
== 0.9.1
|
2
|
+
|
3
|
+
- We did a lot of internal cleanup this release in the hopes of
|
4
|
+
simplifying the code and increasing performance.
|
5
|
+
- Many SQLite updates (thanks Nils Christian Haugen)
|
6
|
+
- JRUBY-2912: Fix MSSQL create/drop database (Joern Hartmann)
|
7
|
+
- JRUBY-2767: Mistake in selecting identity with H2/HSQLDB
|
8
|
+
- JRUBY-2884: jdbc_postgre.rb issue handling nil booleans (also a fix
|
9
|
+
for hsqldb/h2) + tests
|
10
|
+
- JRUBY-2995: activerecord jdbc derby adapter should quote columns
|
11
|
+
called 'year'
|
12
|
+
- JRUBY-2897: jdbc_postgre.rb needs microsecond support
|
13
|
+
- JRUBY-3282: Upgrade to derby 10.4.2.0 to allow unique constraints
|
14
|
+
with nullable columns
|
15
|
+
- Update h2 from 1.0.63 to 1.1.107 in driver
|
16
|
+
- JRUBY-3026: [Derby] Allow select/delete/update conditions with
|
17
|
+
comparison to NULL using '='
|
18
|
+
- JRUBY-2996: ...(actually this fixes only remaining issue of this bug
|
19
|
+
which was symbols making into quote were exploding
|
20
|
+
- JRUBY-2691: Update sybase driver to pass simple unit tests with jtds
|
21
|
+
and verify it works with the new dialect keyword. patch by Leigh
|
22
|
+
Kennedy
|
23
|
+
- Make :float type work on h2,hsql [returned as string]. Make :float
|
24
|
+
work on hsqldb (no paren value supported). Make REAL_TYPE just
|
25
|
+
return RubyFloat
|
26
|
+
- JRUBY-3222: Upgrade #type_to_sql to variation of AR 2.1.2 version
|
27
|
+
- Add patch supplied in JRUBY-3489 (patch by Jean-Dominique Morani)
|
28
|
+
- Various Oracle fixes by edsono
|
29
|
+
- JRUBY-2688: Don't hard-code MySQL connection character encoding to
|
30
|
+
utf8
|
31
|
+
|
1
32
|
== 0.9
|
2
33
|
|
3
34
|
- Now updated to support ActiveRecord 2.2. JNDI-based connections will
|
data/Manifest.txt
CHANGED
@@ -52,6 +52,7 @@ test/db/oracle.rb
|
|
52
52
|
test/db/postgres.rb
|
53
53
|
test/db/sqlite3.rb
|
54
54
|
test/db2_simple_test.rb
|
55
|
+
test/derby_migration_test.rb
|
55
56
|
test/derby_multibyte_test.rb
|
56
57
|
test/derby_simple_test.rb
|
57
58
|
test/generic_jdbc_connection_test.rb
|
@@ -76,18 +77,24 @@ test/models/add_not_null_column_to_table.rb
|
|
76
77
|
test/models/auto_id.rb
|
77
78
|
test/models/data_types.rb
|
78
79
|
test/models/entry.rb
|
80
|
+
test/models/mixed_case.rb
|
79
81
|
test/models/reserved_word.rb
|
80
82
|
test/mssql_simple_test.rb
|
81
83
|
test/mysql_multibyte_test.rb
|
82
84
|
test/mysql_simple_test.rb
|
83
85
|
test/oracle_simple_test.rb
|
86
|
+
test/postgres_mixed_case_test.rb
|
84
87
|
test/postgres_reserved_test.rb
|
85
88
|
test/postgres_simple_test.rb
|
86
89
|
test/simple.rb
|
87
90
|
test/sqlite3_simple_test.rb
|
91
|
+
test/sybase_jtds_simple_test.rb
|
88
92
|
lib/jdbc_adapter/jdbc.rake
|
89
93
|
src/java/jdbc_adapter/JdbcAdapterInternalService.java
|
90
94
|
src/java/jdbc_adapter/JdbcConnectionFactory.java
|
91
95
|
src/java/jdbc_adapter/JdbcDerbySpec.java
|
92
96
|
src/java/jdbc_adapter/JdbcMySQLSpec.java
|
97
|
+
src/java/jdbc_adapter/PostgresRubyJdbcConnection.java
|
98
|
+
src/java/jdbc_adapter/RubyJdbcConnection.java
|
93
99
|
src/java/jdbc_adapter/SQLBlock.java
|
100
|
+
src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java
|
data/README.txt
CHANGED
@@ -30,8 +30,8 @@ What's there, and what is not there:
|
|
30
30
|
* Informix - Fairly complete support, all tests pass and migrations appear to work. Comments welcome.
|
31
31
|
|
32
32
|
Other databases will require testing and likely a custom configuration module.
|
33
|
-
Please join the
|
34
|
-
mailing-
|
33
|
+
Please join the activerecord-jdbc
|
34
|
+
mailing-lists[http://kenai.com/projects/activerecord-jdbc/lists] to help us discover
|
35
35
|
support for more databases.
|
36
36
|
|
37
37
|
== Using ActiveRecord JDBC
|
@@ -133,6 +133,19 @@ installed, you can simply type <tt>jruby -S rake</tt> to run the tests. A
|
|
133
133
|
database named <tt>weblog_development</tt> is needed beforehand with a
|
134
134
|
connection user of "blog" and password empty.
|
135
135
|
|
136
|
+
If you want rails logging enabled during these test runs you can edit
|
137
|
+
test/jdbc_common.rb and add the following line:
|
138
|
+
|
139
|
+
require 'db/logger'
|
140
|
+
|
141
|
+
== Running AR Tests
|
142
|
+
|
143
|
+
# If you want to run MRI against Rails remember to re-export RUBYLIB to be
|
144
|
+
# empty (or whatever you normally have it set to when you are done).
|
145
|
+
export RUBYLIB=$(find $HOME/NetbeansProjects/activerecord-jdbc-adapter -name lib -type d | grep -v pkg | ruby -e 'puts $stdin.readlines.map{|l| l.chomp}.join(":")')
|
146
|
+
cd active_record_source_dir
|
147
|
+
jruby -S rake test_jdbcmysql (or specific adapter you want to test)
|
148
|
+
|
136
149
|
== Authors
|
137
150
|
|
138
151
|
This project was written by Nick Sieger <nick@nicksieger.com> and Ola Bini
|
data/Rakefile
CHANGED
@@ -31,7 +31,7 @@ task :filelist do
|
|
31
31
|
puts FileList['pkg/**/*'].inspect
|
32
32
|
end
|
33
33
|
|
34
|
-
if
|
34
|
+
if defined?(JRUBY_VERSION)
|
35
35
|
# TODO: add more databases into the standard tests here.
|
36
36
|
task :test => [:test_mysql, :test_jdbc, :test_derby, :test_hsqldb, :test_h2, :test_sqlite3]
|
37
37
|
else
|
@@ -46,9 +46,15 @@ FileList['drivers/*'].each do |d|
|
|
46
46
|
if driver == "derby"
|
47
47
|
files << 'test/activerecord/connection_adapters/type_conversion_test.rb'
|
48
48
|
end
|
49
|
-
t.ruby_opts << "-rjdbc/#{driver}"
|
50
49
|
t.test_files = files
|
51
|
-
t.libs
|
50
|
+
t.libs = []
|
51
|
+
if defined?(JRUBY_VERSION)
|
52
|
+
t.ruby_opts << "-rjdbc/#{driver}"
|
53
|
+
t.libs << "lib" << "#{d}/lib"
|
54
|
+
t.libs.push *FileList["adapters/#{driver}*/lib"]
|
55
|
+
end
|
56
|
+
t.libs << "test"
|
57
|
+
t.verbose = true
|
52
58
|
end
|
53
59
|
end
|
54
60
|
|
@@ -65,40 +71,32 @@ end
|
|
65
71
|
task :test_postgresql => [:test_postgres]
|
66
72
|
task :test_pgsql => [:test_postgres]
|
67
73
|
|
68
|
-
# Ensure
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
t.test_files = FileList['test/db2_simple_test.rb']
|
77
|
-
t.libs << 'test'
|
78
|
-
end
|
79
|
-
|
80
|
-
# Ensure InterSystems CacheDB driver is on your classpath before launching rake
|
81
|
-
Rake::TestTask.new(:test_cachedb) do | t |
|
82
|
-
t.test_files = FileList[ 'test/cachedb_simple_test.rb' ]
|
83
|
-
t.libs << 'test'
|
74
|
+
# Ensure driver for these DBs is on your classpath
|
75
|
+
%w(oracle db2 cachedb mssql informix).each do |d|
|
76
|
+
Rake::TestTask.new("test_#{d}") do |t|
|
77
|
+
t.test_files = FileList["test/#{d}_simple_test.rb"]
|
78
|
+
t.libs = []
|
79
|
+
t.libs << 'lib' if defined?(JRUBY_VERSION)
|
80
|
+
t.libs << 'test'
|
81
|
+
end
|
84
82
|
end
|
85
83
|
|
86
|
-
#
|
87
|
-
Rake::TestTask.new(:
|
88
|
-
t.test_files = FileList[ 'test/
|
84
|
+
# Tests for JDBC adapters that don't require a database.
|
85
|
+
Rake::TestTask.new(:test_jdbc_adapters) do | t |
|
86
|
+
t.test_files = FileList[ 'test/jdbc_adapter/jdbc_sybase_test.rb' ]
|
89
87
|
t.libs << 'test'
|
90
88
|
end
|
91
89
|
|
92
|
-
# Ensure that the
|
93
|
-
Rake::TestTask.new(:
|
94
|
-
t.test_files = FileList[
|
95
|
-
t.libs << 'test'
|
90
|
+
# Ensure that the jTDS driver is in your classpath before launching rake
|
91
|
+
Rake::TestTask.new(:test_sybase_jtds) do |t|
|
92
|
+
t.test_files = FileList['test/sybase_jtds_simple_test.rb']
|
93
|
+
t.libs << 'test'
|
96
94
|
end
|
97
95
|
|
98
|
-
#
|
99
|
-
Rake::TestTask.new(:
|
100
|
-
t.test_files = FileList[
|
101
|
-
t.libs << 'test'
|
96
|
+
# Ensure that the jConnect driver is in your classpath before launching rake
|
97
|
+
Rake::TestTask.new(:test_sybase_jconnect) do |t|
|
98
|
+
t.test_files = FileList['test/sybase_jconnect_simple_test.rb']
|
99
|
+
t.libs << 'test'
|
102
100
|
end
|
103
101
|
|
104
102
|
MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt",
|
@@ -1 +1,13 @@
|
|
1
|
-
|
1
|
+
tried_gem = false
|
2
|
+
begin
|
3
|
+
require "jdbc/h2"
|
4
|
+
rescue LoadError
|
5
|
+
unless tried_gem
|
6
|
+
require 'rubygems'
|
7
|
+
gem "jdbc-h2"
|
8
|
+
tried_gem = true
|
9
|
+
retry
|
10
|
+
end
|
11
|
+
# trust that the hsqldb jar is already present
|
12
|
+
end
|
13
|
+
require 'active_record/connection_adapters/jdbc_adapter'
|
@@ -9,31 +9,38 @@ begin
|
|
9
9
|
rescue LoadError
|
10
10
|
end if defined?(RAILS_ROOT)
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
12
|
+
# AR's 2.2 version of this method is sufficient, but we need it for
|
13
|
+
# older versions
|
14
|
+
if ActiveRecord::VERSION::MAJOR <= 2 && ActiveRecord::VERSION::MINOR < 2
|
15
|
+
module ActiveRecord
|
16
|
+
module ConnectionAdapters # :nodoc:
|
17
|
+
module SchemaStatements
|
18
|
+
# Convert the speficied column type to a SQL string.
|
19
|
+
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
|
20
|
+
if native = native_database_types[type]
|
21
|
+
column_type_sql = (native.is_a?(Hash) ? native[:name] : native).dup
|
22
|
+
|
23
|
+
if type == :decimal # ignore limit, use precision and scale
|
24
|
+
scale ||= native[:scale]
|
25
|
+
|
26
|
+
if precision ||= native[:precision]
|
27
|
+
if scale
|
28
|
+
column_type_sql << "(#{precision},#{scale})"
|
29
|
+
else
|
30
|
+
column_type_sql << "(#{precision})"
|
31
|
+
end
|
32
|
+
elsif scale
|
33
|
+
raise ArgumentError, "Error adding decimal column: precision cannot be empty if scale if specified"
|
34
|
+
end
|
35
|
+
|
36
|
+
elsif limit ||= native.is_a?(Hash) && native[:limit]
|
37
|
+
column_type_sql << "(#{limit})"
|
28
38
|
end
|
39
|
+
|
40
|
+
column_type_sql
|
29
41
|
else
|
30
|
-
|
42
|
+
type
|
31
43
|
end
|
32
|
-
column_type_sql
|
33
|
-
else
|
34
|
-
limit ||= native[:limit]
|
35
|
-
column_type_sql += "(#{limit})" if limit
|
36
|
-
column_type_sql
|
37
44
|
end
|
38
45
|
end
|
39
46
|
end
|
@@ -43,8 +50,7 @@ end
|
|
43
50
|
module JdbcSpec
|
44
51
|
module ActiveRecordExtensions
|
45
52
|
def jdbc_connection(config)
|
46
|
-
|
47
|
-
::ActiveRecord::ConnectionAdapters::JdbcAdapter.new(connection, logger, config)
|
53
|
+
::ActiveRecord::ConnectionAdapters::JdbcAdapter.new(nil, logger, config)
|
48
54
|
end
|
49
55
|
alias jndi_connection jdbc_connection
|
50
56
|
|
@@ -208,7 +214,8 @@ module ActiveRecord
|
|
208
214
|
procs = AR_TO_JDBC_TYPES[ar_type]
|
209
215
|
types = @types
|
210
216
|
procs.each do |p|
|
211
|
-
new_types = types.
|
217
|
+
new_types = types.reject {|r| r["data_type"].to_i == Jdbc::Types::OTHER}
|
218
|
+
new_types = new_types.select(&p)
|
212
219
|
new_types = new_types.inject([]) do |typs,t|
|
213
220
|
typs << t unless typs.detect {|el| el['type_name'] == t['type_name']}
|
214
221
|
typs
|
@@ -294,6 +301,14 @@ module ActiveRecord
|
|
294
301
|
class JdbcConnection
|
295
302
|
attr_reader :adapter, :connection_factory
|
296
303
|
|
304
|
+
# @native_database_types - setup properly by adapter= versus set_native_database_types.
|
305
|
+
# This contains type information for the adapter. Individual adapters can make tweaks
|
306
|
+
# by defined modify_types
|
307
|
+
#
|
308
|
+
# @native_types - This is the default type settings sans any modifications by the
|
309
|
+
# individual adapter. My guess is that if we loaded two adapters of different types
|
310
|
+
# then this is used as a base to be tweaked by each adapter to create @native_database_types
|
311
|
+
|
297
312
|
def initialize(config)
|
298
313
|
@config = config.symbolize_keys!
|
299
314
|
@config[:retry_count] ||= 5
|
@@ -315,64 +330,25 @@ module ActiveRecord
|
|
315
330
|
raise "The driver encountered an error: #{e}"
|
316
331
|
end
|
317
332
|
|
318
|
-
def adapter=(
|
319
|
-
@adapter =
|
320
|
-
@
|
321
|
-
@
|
322
|
-
adapt.modify_types(@tps)
|
333
|
+
def adapter=(adapter)
|
334
|
+
@adapter = adapter
|
335
|
+
@native_database_types = dup_native_types
|
336
|
+
@adapter.modify_types(@native_database_types)
|
323
337
|
end
|
324
338
|
|
325
|
-
#
|
326
|
-
#
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
def indexes(table_name, name = nil, schema_name = nil)
|
334
|
-
with_connection_retry_guard do |conn|
|
335
|
-
metadata = conn.getMetaData
|
336
|
-
begin
|
337
|
-
unless String === table_name
|
338
|
-
table_name = table_name.to_s
|
339
|
-
else
|
340
|
-
table_name = table_name.dup
|
341
|
-
end
|
342
|
-
table_name.upcase! if metadata.storesUpperCaseIdentifiers
|
343
|
-
table_name.downcase! if metadata.storesLowerCaseIdentifiers
|
344
|
-
resultset = metadata.getIndexInfo(nil, schema_name, table_name, false, false)
|
345
|
-
primary_keys = primary_keys(table_name)
|
346
|
-
indexes = []
|
347
|
-
current_index = nil
|
348
|
-
while resultset.next
|
349
|
-
index_name = resultset.get_string(Jdbc::IndexMetaData::INDEX_NAME)
|
350
|
-
next unless index_name
|
351
|
-
index_name.downcase!
|
352
|
-
column_name = resultset.get_string(Jdbc::IndexMetaData::COLUMN_NAME).downcase
|
353
|
-
|
354
|
-
next if primary_keys.include? column_name
|
355
|
-
|
356
|
-
# We are working on a new index
|
357
|
-
if current_index != index_name
|
358
|
-
current_index = index_name
|
359
|
-
table_name = resultset.get_string(Jdbc::IndexMetaData::TABLE_NAME).downcase
|
360
|
-
non_unique = resultset.get_boolean(Jdbc::IndexMetaData::NON_UNIQUE)
|
361
|
-
|
362
|
-
# empty list for column names, we'll add to that in just a bit
|
363
|
-
indexes << IndexDefinition.new(table_name, index_name, !non_unique, [])
|
364
|
-
end
|
365
|
-
|
366
|
-
# One or more columns can be associated with an index
|
367
|
-
indexes.last.columns << column_name
|
368
|
-
end
|
369
|
-
resultset.close
|
370
|
-
indexes
|
371
|
-
ensure
|
372
|
-
metadata.close rescue nil
|
339
|
+
# Duplicate all native types into new hash structure so it can be modified
|
340
|
+
# without destroying original structure.
|
341
|
+
def dup_native_types
|
342
|
+
types = {}
|
343
|
+
@native_types.each_pair do |k, v|
|
344
|
+
types[k] = v.inject({}) do |memo, kv|
|
345
|
+
memo[kv.first] = begin kv.last.dup rescue kv.last end
|
346
|
+
memo
|
373
347
|
end
|
374
348
|
end
|
349
|
+
types
|
375
350
|
end
|
351
|
+
private :dup_native_types
|
376
352
|
|
377
353
|
def jndi_connection?
|
378
354
|
@jndi_connection
|
@@ -402,12 +378,6 @@ module ActiveRecord
|
|
402
378
|
raise ::ActiveRecord::ConnectionFailed, "jdbc adapter requires driver class and url"
|
403
379
|
end
|
404
380
|
|
405
|
-
if driver =~ /mysql/i && url !~ /#{Regexp.quote(JdbcSpec::MySQL::URL_OPTIONS)}/
|
406
|
-
div = url =~ /\?/ ? '&' : '?'
|
407
|
-
url = "#{url}#{div}#{JdbcSpec::MySQL::URL_OPTIONS}"
|
408
|
-
@config[:url] = url
|
409
|
-
end
|
410
|
-
|
411
381
|
jdbc_driver = JdbcDriver.new(driver)
|
412
382
|
jdbc_driver.load
|
413
383
|
@connection_factory = JdbcConnectionFactory.impl do
|
@@ -479,25 +449,37 @@ module ActiveRecord
|
|
479
449
|
|
480
450
|
attr_reader :config
|
481
451
|
|
482
|
-
ADAPTER_TYPES = ::JdbcSpec.constants.map{|c|
|
483
|
-
::JdbcSpec.const_get c }.select{ |c|
|
484
|
-
c.respond_to? :adapter_selector }.map{|c|
|
485
|
-
c.adapter_selector }.inject({}) { |h,val|
|
486
|
-
h[val[0]] = val[1]; h }
|
487
|
-
|
488
452
|
def initialize(connection, logger, config)
|
489
|
-
super(connection, logger)
|
490
453
|
@config = config
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
end
|
454
|
+
spec = adapter_spec config
|
455
|
+
unless connection
|
456
|
+
connection_class = jdbc_connection_class spec
|
457
|
+
connection = connection_class.new config
|
496
458
|
end
|
459
|
+
super(connection, logger)
|
460
|
+
extend spec if spec
|
497
461
|
connection.adapter = self
|
498
462
|
JndiConnectionPoolCallbacks.prepare(self, connection)
|
499
463
|
end
|
500
464
|
|
465
|
+
def jdbc_connection_class(spec)
|
466
|
+
connection_class = spec.jdbc_connection_class if spec && spec.respond_to?(:jdbc_connection_class)
|
467
|
+
connection_class = ::ActiveRecord::ConnectionAdapters::JdbcConnection unless connection_class
|
468
|
+
connection_class
|
469
|
+
end
|
470
|
+
|
471
|
+
# Locate specialized adapter specification if one exists based on config data
|
472
|
+
def adapter_spec(config)
|
473
|
+
dialect = (config[:dialect] || config[:driver]).to_s
|
474
|
+
::JdbcSpec.constants.map { |name| ::JdbcSpec.const_get name }.each do |constant|
|
475
|
+
if constant.respond_to? :adapter_matcher
|
476
|
+
spec = constant.adapter_matcher(dialect, config)
|
477
|
+
return spec if spec
|
478
|
+
end
|
479
|
+
end
|
480
|
+
nil
|
481
|
+
end
|
482
|
+
|
501
483
|
def modify_types(tp)
|
502
484
|
tp
|
503
485
|
end
|
data/lib/jdbc_adapter/jdbc.rake
CHANGED
@@ -2,11 +2,17 @@ def redefine_task(*args, &block)
|
|
2
2
|
task_name = Hash === args.first ? args.first.keys[0] : args.first
|
3
3
|
existing_task = Rake.application.lookup task_name
|
4
4
|
if existing_task
|
5
|
-
class << existing_task
|
6
|
-
|
5
|
+
class << existing_task
|
6
|
+
public :instance_variable_set
|
7
|
+
attr_reader :actions
|
8
|
+
end
|
9
|
+
existing_task.instance_variable_set "@prerequisites", FileList[]
|
10
|
+
existing_task.actions.shift
|
11
|
+
enhancements = existing_task.actions
|
7
12
|
existing_task.instance_variable_set "@actions", []
|
8
13
|
end
|
9
|
-
task(*args, &block)
|
14
|
+
redefined_task = task(*args, &block)
|
15
|
+
enhancements.each {|enhancement| redefined_task.actions << enhancement}
|
10
16
|
end
|
11
17
|
|
12
18
|
namespace :db do
|
@@ -68,7 +74,11 @@ namespace :db do
|
|
68
74
|
ActiveRecord::Base.establish_connection(abcs["test"])
|
69
75
|
ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0') if abcs["test"]["adapter"] =~ /mysql/i
|
70
76
|
IO.readlines("db/#{RAILS_ENV}_structure.sql").join.split(";\n\n").each do |ddl|
|
71
|
-
|
77
|
+
begin
|
78
|
+
ActiveRecord::Base.connection.execute(ddl.chomp(';'))
|
79
|
+
rescue Exception => ex
|
80
|
+
puts ex.message
|
81
|
+
end
|
72
82
|
end
|
73
83
|
end
|
74
84
|
|
@@ -78,7 +88,7 @@ namespace :db do
|
|
78
88
|
if config['adapter'] =~ /postgresql/i
|
79
89
|
if config['url']
|
80
90
|
db = config['url'][/\/([^\/]*)$/, 1]
|
81
|
-
config['url'][/\/([^\/]*)$/, 1] if
|
91
|
+
config['url'][/\/([^\/]*)$/, 1] = 'postgres' if db
|
82
92
|
else
|
83
93
|
db = config['database']
|
84
94
|
config['database'] = 'postgres'
|