activerecord-jdbc-adapter 0.9.0.1 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|