activerecord-jdbc-adapter 70.0.pre-java → 70.1-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.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/activerecord-jdbc-adapter.gemspec +1 -3
- data/lib/arel/visitors/compat.rb +5 -33
- data/lib/arel/visitors/h2.rb +1 -13
- data/lib/arel/visitors/hsqldb.rb +1 -21
- data/lib/arel/visitors/sql_server.rb +2 -103
- data/lib/arjdbc/abstract/core.rb +8 -9
- data/lib/arjdbc/abstract/database_statements.rb +8 -0
- data/lib/arjdbc/discover.rb +0 -67
- data/lib/arjdbc/jdbc/adapter.rb +1 -1
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/column.rb +1 -26
- data/lib/arjdbc/jdbc.rb +0 -7
- data/lib/arjdbc/mysql/adapter.rb +2 -1
- data/lib/arjdbc/oracle/adapter.rb +4 -23
- data/lib/arjdbc/postgresql/adapter.rb +152 -3
- data/lib/arjdbc/postgresql/oid_types.rb +155 -108
- data/lib/arjdbc/sqlite3/adapter.rb +54 -36
- data/lib/arjdbc/tasks/database_tasks.rb +0 -15
- data/lib/arjdbc/util/serialized_attributes.rb +0 -22
- data/lib/arjdbc/util/table_copier.rb +2 -1
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/02-test.rake +3 -18
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +5 -0
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +5 -0
- metadata +5 -38
- data/lib/active_record/connection_adapters/as400_adapter.rb +0 -2
- data/lib/active_record/connection_adapters/db2_adapter.rb +0 -1
- data/lib/active_record/connection_adapters/derby_adapter.rb +0 -1
- data/lib/active_record/connection_adapters/informix_adapter.rb +0 -1
- data/lib/arel/visitors/db2.rb +0 -137
- data/lib/arel/visitors/derby.rb +0 -112
- data/lib/arel/visitors/firebird.rb +0 -79
- data/lib/arjdbc/db2/adapter.rb +0 -808
- data/lib/arjdbc/db2/as400.rb +0 -142
- data/lib/arjdbc/db2/column.rb +0 -131
- data/lib/arjdbc/db2/connection_methods.rb +0 -48
- data/lib/arjdbc/db2.rb +0 -4
- data/lib/arjdbc/derby/active_record_patch.rb +0 -13
- data/lib/arjdbc/derby/adapter.rb +0 -521
- data/lib/arjdbc/derby/connection_methods.rb +0 -20
- data/lib/arjdbc/derby/schema_creation.rb +0 -15
- data/lib/arjdbc/derby.rb +0 -3
- data/lib/arjdbc/firebird/adapter.rb +0 -413
- data/lib/arjdbc/firebird/connection_methods.rb +0 -23
- data/lib/arjdbc/firebird.rb +0 -4
- data/lib/arjdbc/informix/adapter.rb +0 -139
- data/lib/arjdbc/informix/connection_methods.rb +0 -9
- data/lib/arjdbc/sybase/adapter.rb +0 -47
- data/lib/arjdbc/sybase.rb +0 -2
- data/lib/arjdbc/tasks/db2_database_tasks.rb +0 -104
- data/lib/arjdbc/tasks/derby_database_tasks.rb +0 -95
- data/src/java/arjdbc/derby/DerbyModule.java +0 -178
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +0 -152
- data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +0 -174
- data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +0 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '095c3d28051b253315cdd1bec95a83683f3240b0f3315cfb8f9c3c4c0d124f41'
|
4
|
+
data.tar.gz: 13b5d48e4c1b0b16811da5a361cfd9bb687727b5bbad2f5b750540b0232408ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc4801f970c8651e0ce8076b6544bf56d0e4decd77a9463439a8d5692f767aab896786680197c25b52d510465837290604970689b1b6cba26708385038f1fa39
|
7
|
+
data.tar.gz: 47e1df847914baefffadb80537b1ffd9dfcb218b2f5bfd26addefad934be7b31a0ade446c5838bea88b81897c34b13a7cef8e6b840540e89f4627f950949549c
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
require 'rake/clean'
|
28
28
|
|
29
|
-
CLEAN.include '
|
29
|
+
CLEAN.include 'test.db.*', '*test.sqlite3', 'test/reports'
|
30
30
|
CLEAN.include 'lib/**/*.jar', 'MANIFEST.MF', '*.log', 'target/*'
|
31
31
|
|
32
32
|
task :default => :jar # RubyGems extention will do a bare `rake' e.g. :
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
path = File.expand_path('lib/arjdbc/version.rb', File.dirname(__FILE__))
|
4
|
-
puts "VERSION: #{File.read(path).match( /.*VERSION\s*=\s*['"](.*)['"]/m )[1]}"
|
5
3
|
Gem::Specification.new do |gem|
|
6
4
|
gem.name = 'activerecord-jdbc-adapter'
|
7
5
|
path = File.expand_path('lib/arjdbc/version.rb', File.dirname(__FILE__))
|
@@ -49,6 +47,6 @@ Gem::Specification.new do |gem|
|
|
49
47
|
#gem.add_development_dependency 'test-unit-context', '>= 0.3.0'
|
50
48
|
#gem.add_development_dependency 'mocha', '~> 0.13.1'
|
51
49
|
|
52
|
-
gem.rdoc_options = ["--main", "README.md"
|
50
|
+
gem.rdoc_options = ["--main", "README.md"]
|
53
51
|
end
|
54
52
|
|
data/lib/arel/visitors/compat.rb
CHANGED
@@ -4,44 +4,16 @@ module Arel
|
|
4
4
|
|
5
5
|
protected
|
6
6
|
|
7
|
-
|
8
|
-
def do_visit(x, a); visit(x); end # a = nil
|
9
|
-
else # > AREL 4.0
|
10
|
-
def do_visit(x, a); visit(x, a); end
|
11
|
-
end
|
7
|
+
def do_visit(x, a); visit(x, a); end
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
visit_Arel_Nodes_SelectCore(x)
|
16
|
-
end
|
17
|
-
else # > AREL 4.0
|
18
|
-
def do_visit_select_core(x, a)
|
19
|
-
visit_Arel_Nodes_SelectCore(x, a)
|
20
|
-
end
|
9
|
+
def do_visit_select_core(x, a)
|
10
|
+
visit_Arel_Nodes_SelectCore(x, a)
|
21
11
|
end
|
22
12
|
|
23
13
|
private
|
24
14
|
|
25
|
-
|
26
|
-
|
27
|
-
def limit_for(limit_or_node)
|
28
|
-
if limit_or_node.respond_to?(:expr)
|
29
|
-
expr = limit_or_node.expr
|
30
|
-
# NOTE(uwe): Different behavior for Arel 6.0.0 and 6.0.2
|
31
|
-
expr.respond_to?(:value) ? expr.value.to_i : expr.to_i
|
32
|
-
else
|
33
|
-
limit_or_node
|
34
|
-
end
|
35
|
-
end
|
36
|
-
else
|
37
|
-
def limit_for(limit_or_node)
|
38
|
-
limit_or_node.respond_to?(:expr) ? limit_or_node.expr.to_i : limit_or_node
|
39
|
-
end
|
40
|
-
end
|
41
|
-
else
|
42
|
-
def limit_for(limit_or_node)
|
43
|
-
limit_or_node.respond_to?(:expr) ? limit_or_node.expr.to_i : limit_or_node
|
44
|
-
end
|
15
|
+
def limit_for(limit_or_node)
|
16
|
+
limit_or_node.respond_to?(:expr) ? limit_or_node.expr.to_i : limit_or_node
|
45
17
|
end
|
46
18
|
module_function :limit_for
|
47
19
|
|
data/lib/arel/visitors/h2.rb
CHANGED
@@ -7,19 +7,7 @@ module Arel
|
|
7
7
|
def visit_Arel_Nodes_SelectStatement(o, *)
|
8
8
|
o.limit ||= Arel::Nodes::Limit.new(-1) if o.offset
|
9
9
|
super
|
10
|
-
end
|
11
|
-
|
12
|
-
def limit_offset sql, o
|
13
|
-
offset = o.offset || 0
|
14
|
-
offset = offset.expr unless (offset.nil? || offset == 0)
|
15
|
-
if limit = o.limit
|
16
|
-
"SELECT LIMIT #{offset} #{limit_for(limit)} #{sql[7..-1]}"
|
17
|
-
elsif offset > 0
|
18
|
-
"SELECT LIMIT #{offset} -1 #{sql[7..-1]}" # removes "SELECT "
|
19
|
-
else
|
20
|
-
sql
|
21
|
-
end
|
22
|
-
end unless ArJdbc::AR42
|
10
|
+
end
|
23
11
|
end
|
24
12
|
end
|
25
13
|
end
|
data/lib/arel/visitors/hsqldb.rb
CHANGED
@@ -6,27 +6,7 @@ module Arel
|
|
6
6
|
def visit_Arel_Nodes_SelectStatement(o, *)
|
7
7
|
o.limit ||= Arel::Nodes::Limit.new(0) if o.offset
|
8
8
|
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def visit_Arel_Nodes_SelectStatement o, a = nil
|
12
|
-
sql = limit_offset(o.cores.map { |x| do_visit_select_core x, a }.join, o)
|
13
|
-
sql << " ORDER BY #{o.orders.map { |x| do_visit x, a }.join(', ')}" unless o.orders.empty?
|
14
|
-
sql
|
15
|
-
end unless ArJdbc::AR42
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def limit_offset sql, o
|
20
|
-
offset = o.offset || 0
|
21
|
-
offset = offset.expr unless (offset.nil? || offset == 0)
|
22
|
-
if limit = o.limit
|
23
|
-
"SELECT LIMIT #{offset} #{limit_for(limit)} #{sql[7..-1]}"
|
24
|
-
elsif offset > 0
|
25
|
-
"SELECT LIMIT #{offset} 0 #{sql[7..-1]}" # removes "SELECT "
|
26
|
-
else
|
27
|
-
sql
|
28
|
-
end
|
29
|
-
end unless ArJdbc::AR42
|
9
|
+
end
|
30
10
|
end
|
31
11
|
end
|
32
12
|
end
|
@@ -11,44 +11,6 @@ module Arel
|
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
def visit_Arel_Nodes_SelectStatement(*args) # [o] AR <= 4.0 [o, a] on 4.1
|
15
|
-
o, a = args.first, args.last
|
16
|
-
|
17
|
-
return _visit_Arel_Nodes_SelectStatement(*args) if ! o.limit && ! o.offset
|
18
|
-
|
19
|
-
unless o.orders.empty?
|
20
|
-
select_order_by = do_visit_columns o.orders, a, 'ORDER BY '
|
21
|
-
end
|
22
|
-
|
23
|
-
select_count = false; sql = ''
|
24
|
-
o.cores.each do |x|
|
25
|
-
x = x.dup
|
26
|
-
core_order_by = select_order_by || determine_order_by(x, a)
|
27
|
-
if select_count? x
|
28
|
-
x.projections = [
|
29
|
-
Arel::Nodes::SqlLiteral.new(core_order_by ? over_row_num(core_order_by) : '*')
|
30
|
-
]
|
31
|
-
select_count = true
|
32
|
-
else
|
33
|
-
# NOTE: this should really be added here and we should built the
|
34
|
-
# wrapping SQL but than #replace_limit_offset! assumes it does that
|
35
|
-
# ... MS-SQL adapter code seems to be 'hacked' by a lot of people
|
36
|
-
#x.projections << Arel::Nodes::SqlLiteral.new over_row_num(order_by)
|
37
|
-
end
|
38
|
-
sql << do_visit_select_core(x, a)
|
39
|
-
end
|
40
|
-
|
41
|
-
#sql = "SELECT _t.* FROM (#{sql}) as _t WHERE #{get_offset_limit_clause(o)}"
|
42
|
-
select_order_by ||= "ORDER BY #{@connection.determine_order_clause(sql)}"
|
43
|
-
replace_limit_offset!(sql, limit_for(o.limit), o.offset && o.offset.value.to_i, select_order_by)
|
44
|
-
|
45
|
-
sql = "SELECT COUNT(*) AS count_id FROM (#{sql}) AS subquery" if select_count
|
46
|
-
|
47
|
-
add_lock!(sql, :lock => o.lock && true)
|
48
|
-
|
49
|
-
sql
|
50
|
-
end unless ArJdbc::AR42
|
51
|
-
|
52
14
|
# @private
|
53
15
|
MAX_LIMIT_VALUE = 9_223_372_036_854_775_807
|
54
16
|
|
@@ -60,14 +22,6 @@ module Arel
|
|
60
22
|
super
|
61
23
|
end
|
62
24
|
|
63
|
-
def visit_Arel_Nodes_Lock o, a = nil
|
64
|
-
# MS-SQL doesn't support "SELECT...FOR UPDATE". Instead, it needs
|
65
|
-
# WITH(ROWLOCK,UPDLOCK) specified after each table in the FROM clause.
|
66
|
-
#
|
67
|
-
# we return nothing here and add the appropriate stuff with #add_lock!
|
68
|
-
#do_visit o.expr, a
|
69
|
-
end unless ArJdbc::AR42
|
70
|
-
|
71
25
|
def visit_Arel_Nodes_Top o, a = nil
|
72
26
|
# `top` wouldn't really work here:
|
73
27
|
# User.select("distinct first_name").limit(10)
|
@@ -76,29 +30,6 @@ module Arel
|
|
76
30
|
a || ''
|
77
31
|
end
|
78
32
|
|
79
|
-
def visit_Arel_Nodes_Limit o, a = nil
|
80
|
-
"TOP (#{do_visit o.expr, a})"
|
81
|
-
end unless ArJdbc::AR42
|
82
|
-
|
83
|
-
def visit_Arel_Nodes_Ordering o, a = nil
|
84
|
-
expr = do_visit o.expr, a
|
85
|
-
if o.respond_to?(:direction)
|
86
|
-
"#{expr} #{o.ascending? ? 'ASC' : 'DESC'}"
|
87
|
-
else
|
88
|
-
expr
|
89
|
-
end
|
90
|
-
end unless ArJdbc::AR42
|
91
|
-
|
92
|
-
def visit_Arel_Nodes_Bin o, a = nil
|
93
|
-
expr = o.expr; sql = do_visit expr, a
|
94
|
-
if expr.respond_to?(:val) && expr.val.is_a?(Numeric)
|
95
|
-
sql
|
96
|
-
else
|
97
|
-
sql << " #{::ArJdbc::MSSQL.cs_equality_operator} "
|
98
|
-
sql
|
99
|
-
end
|
100
|
-
end unless ArJdbc::AR42
|
101
|
-
|
102
33
|
private
|
103
34
|
|
104
35
|
def self.possibly_private_method_defined?(name)
|
@@ -140,25 +71,7 @@ module Arel
|
|
140
71
|
visit(x, sql); sql << ', ' unless i == last
|
141
72
|
end
|
142
73
|
sql.value
|
143
|
-
end
|
144
|
-
|
145
|
-
def do_visit_columns(colls, a, sql)
|
146
|
-
non_simple_order = /\sASC|\sDESC|\sCASE|\sCOLLATE|[\.,\[\(]/i # MIN(width)
|
147
|
-
|
148
|
-
last = colls.size - 1
|
149
|
-
colls.each_with_index do |x, i|
|
150
|
-
coll = do_visit(x, a)
|
151
|
-
|
152
|
-
if coll !~ non_simple_order && coll.to_i == 0
|
153
|
-
sql << @connection.quote_column_name(coll)
|
154
|
-
else
|
155
|
-
sql << coll
|
156
|
-
end
|
157
|
-
|
158
|
-
sql << ', ' unless i == last
|
159
|
-
end
|
160
|
-
sql
|
161
|
-
end if Arel::VERSION < '4.0.0'
|
74
|
+
end
|
162
75
|
|
163
76
|
def over_row_num order_by
|
164
77
|
"ROW_NUMBER() OVER (#{order_by}) as _row_num"
|
@@ -174,20 +87,6 @@ module Arel
|
|
174
87
|
end
|
175
88
|
end
|
176
89
|
|
177
|
-
def table_from_select_core core
|
178
|
-
table_finder = lambda do |x|
|
179
|
-
case x
|
180
|
-
when Arel::Table
|
181
|
-
x
|
182
|
-
when Arel::Nodes::SqlLiteral
|
183
|
-
Arel::Table.new(x, @engine)
|
184
|
-
when Arel::Nodes::Join
|
185
|
-
table_finder.call(x.left)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
table_finder.call(core.froms)
|
189
|
-
end if ActiveRecord::VERSION::STRING < '3.2'
|
190
|
-
|
191
90
|
def primary_key_from_table t
|
192
91
|
return unless t
|
193
92
|
return t.primary_key if t.primary_key
|
@@ -219,7 +118,7 @@ module Arel
|
|
219
118
|
include ArJdbc::MSSQL::LimitHelpers::SqlServer2000ReplaceLimitOffset
|
220
119
|
end
|
221
120
|
|
222
|
-
load 'arel/visitors/sql_server/ng42.rb'
|
121
|
+
load 'arel/visitors/sql_server/ng42.rb'
|
223
122
|
|
224
123
|
end
|
225
124
|
end
|
data/lib/arjdbc/abstract/core.rb
CHANGED
@@ -34,7 +34,7 @@ module ArJdbc
|
|
34
34
|
raw_connection.jdbc_connection(unwrap)
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
private
|
38
38
|
|
39
39
|
def translate_exception_class(e, sql, binds)
|
40
40
|
message = "#{e.class.name}: #{e.message}"
|
@@ -42,16 +42,19 @@ module ArJdbc
|
|
42
42
|
exception = translate_exception(
|
43
43
|
e, message: message, sql: sql, binds: binds
|
44
44
|
)
|
45
|
-
exception.set_backtrace e.backtrace
|
45
|
+
exception.set_backtrace e.backtrace unless exception.equal?(e)
|
46
46
|
exception
|
47
47
|
end
|
48
48
|
|
49
|
+
Throwable = java.lang.Throwable
|
50
|
+
private_constant :Throwable
|
51
|
+
|
49
52
|
def translate_exception(exception, message:, sql:, binds:)
|
50
53
|
# override in derived class
|
51
54
|
|
52
55
|
# we shall not translate native "Java" exceptions as they might
|
53
56
|
# swallow an ArJdbc / driver bug into an AR::StatementInvalid !
|
54
|
-
return exception if exception.is_a?(
|
57
|
+
return exception if exception.is_a?(Throwable)
|
55
58
|
|
56
59
|
case exception
|
57
60
|
when SystemExit, SignalException, NoMemoryError then exception
|
@@ -61,14 +64,10 @@ module ArJdbc
|
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
64
|
-
def extract_raw_bind_values(binds)
|
65
|
-
binds.map(&:value_for_database)
|
66
|
-
end
|
67
|
-
|
68
67
|
# this version of log() automatically fills type_casted_binds from binds if necessary
|
69
|
-
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil)
|
68
|
+
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false)
|
70
69
|
if binds.any? && (type_casted_binds.nil? || type_casted_binds.empty?)
|
71
|
-
type_casted_binds = ->{
|
70
|
+
type_casted_binds = ->{ binds.map(&:value_for_database) } # extract_raw_bind_values
|
72
71
|
end
|
73
72
|
super
|
74
73
|
end
|
@@ -10,6 +10,8 @@ module ArJdbc
|
|
10
10
|
NO_BINDS = [].freeze
|
11
11
|
|
12
12
|
def exec_insert(sql, name = nil, binds = NO_BINDS, pk = nil, sequence_name = nil)
|
13
|
+
sql = transform_query(sql)
|
14
|
+
|
13
15
|
if preventing_writes?
|
14
16
|
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
|
15
17
|
end
|
@@ -31,6 +33,8 @@ module ArJdbc
|
|
31
33
|
# It appears that at this point (AR 5.0) "prepare" should only ever be true
|
32
34
|
# if prepared statements are enabled
|
33
35
|
def exec_query(sql, name = nil, binds = NO_BINDS, prepare: false, async: false)
|
36
|
+
sql = transform_query(sql)
|
37
|
+
|
34
38
|
if preventing_writes? && write_query?(sql)
|
35
39
|
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
|
36
40
|
end
|
@@ -52,6 +56,8 @@ module ArJdbc
|
|
52
56
|
end
|
53
57
|
|
54
58
|
def exec_update(sql, name = nil, binds = NO_BINDS)
|
59
|
+
sql = transform_query(sql)
|
60
|
+
|
55
61
|
if preventing_writes?
|
56
62
|
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
|
57
63
|
end
|
@@ -70,6 +76,8 @@ module ArJdbc
|
|
70
76
|
alias :exec_delete :exec_update
|
71
77
|
|
72
78
|
def execute(sql, name = nil, async: false)
|
79
|
+
sql = transform_query(sql)
|
80
|
+
|
73
81
|
if preventing_writes? && write_query?(sql)
|
74
82
|
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
|
75
83
|
end
|
data/lib/arjdbc/discover.rb
CHANGED
@@ -23,26 +23,6 @@ module ArJdbc
|
|
23
23
|
require('arjdbc/sqlite3') || true if name =~ /sqlite/i
|
24
24
|
end
|
25
25
|
|
26
|
-
# Other supported adapters :
|
27
|
-
|
28
|
-
extension :Derby do |name, config|
|
29
|
-
if name =~ /derby/i
|
30
|
-
require 'arjdbc/derby'
|
31
|
-
|
32
|
-
if config && config[:username].nil? # set the database schema name (:username) :
|
33
|
-
begin
|
34
|
-
ArJdbc.with_meta_data_from_data_source_if_any(config) do
|
35
|
-
|meta_data| config[:username] = meta_data.getUserName
|
36
|
-
end
|
37
|
-
rescue => e
|
38
|
-
ArJdbc.warn("failed to set :username from (Derby) database meda-data: #{e.inspect}")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
true
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
26
|
extension :H2 do |name|
|
47
27
|
require('arjdbc/h2') || true if name =~ /\.h2\./i
|
48
28
|
end
|
@@ -54,51 +34,4 @@ module ArJdbc
|
|
54
34
|
extension :MSSQL do |name|
|
55
35
|
require('arjdbc/mssql') || true if name =~ /sqlserver|tds|Microsoft SQL/i
|
56
36
|
end
|
57
|
-
|
58
|
-
extension :DB2 do |name, config|
|
59
|
-
if name =~ /db2/i && name !~ /as\/?400/i && config[:url] !~ /^jdbc:derby:net:/
|
60
|
-
require 'arjdbc/db2'
|
61
|
-
true
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
extension :AS400 do |name, config|
|
66
|
-
# The native JDBC driver always returns "DB2 UDB for AS/400"
|
67
|
-
if name =~ /as\/?400/i
|
68
|
-
require 'arjdbc/db2'
|
69
|
-
require 'arjdbc/db2/as400'
|
70
|
-
true
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# NOTE: following ones are likely getting deprecated :
|
75
|
-
|
76
|
-
extension :FireBird do |name|
|
77
|
-
if name =~ /firebird/i
|
78
|
-
require 'arjdbc/firebird'
|
79
|
-
true
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
extension :Sybase do |name|
|
84
|
-
if name =~ /sybase|tds/i
|
85
|
-
require 'arjdbc/sybase'
|
86
|
-
true
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
extension :Informix do |name|
|
91
|
-
if name =~ /informix/i
|
92
|
-
require 'arjdbc/informix'
|
93
|
-
true
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
extension :Mimer do |name|
|
98
|
-
if name =~ /mimer/i
|
99
|
-
require 'arjdbc/mimer'
|
100
|
-
true
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
37
|
end
|
data/lib/arjdbc/jdbc/adapter.rb
CHANGED
@@ -431,7 +431,7 @@ module ActiveRecord
|
|
431
431
|
private
|
432
432
|
|
433
433
|
# Helper useful during {#quote} since AREL might pass in it's literals
|
434
|
-
# to be quoted, fixed since AREL 4.0.0.beta1 :
|
434
|
+
# to be quoted, fixed since AREL 4.0.0.beta1 : https://github.com/rails/arel/commit/9c514f3
|
435
435
|
def sql_literal?(value); ::Arel::Nodes::SqlLiteral === value; end
|
436
436
|
|
437
437
|
# Helper to get local/UTC time (based on `ActiveRecord::default_timezone`).
|
Binary file
|
data/lib/arjdbc/jdbc/column.rb
CHANGED
@@ -28,21 +28,6 @@ module ActiveRecord
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
if ArJdbc::AR52
|
32
|
-
# undefined method `cast' for #<ActiveRecord::ConnectionAdapters::SqlTypeMetadata> on AR52
|
33
|
-
else
|
34
|
-
default = args[0].cast(default)
|
35
|
-
|
36
|
-
sql_type = args.delete_at(1)
|
37
|
-
type = args.delete_at(0)
|
38
|
-
|
39
|
-
args.unshift(SqlTypeMetadata.new(:sql_type => sql_type, :type => type))
|
40
|
-
end
|
41
|
-
|
42
|
-
# super <= 4.1: (name, default, sql_type = nil, null = true)
|
43
|
-
# super >= 4.2: (name, default, cast_type, sql_type = nil, null = true)
|
44
|
-
# super >= 5.0: (name, default, sql_type_metadata = nil, null = true)
|
45
|
-
|
46
31
|
super(name, default, *args)
|
47
32
|
init_column(name, default, *args)
|
48
33
|
end
|
@@ -80,18 +65,8 @@ module ActiveRecord
|
|
80
65
|
end
|
81
66
|
|
82
67
|
class << self
|
83
|
-
|
84
|
-
include Jdbc::TypeCast if ::ActiveRecord::VERSION::STRING >= '4.2'
|
85
|
-
|
86
|
-
if ActiveRecord::VERSION::MAJOR > 3 && ActiveRecord::VERSION::STRING < '4.2'
|
87
|
-
|
88
|
-
# @private provides compatibility between AR 3.x/4.0 API
|
89
|
-
def string_to_date(value); value_to_date(value) end
|
90
|
-
|
91
|
-
end
|
92
|
-
|
68
|
+
include Jdbc::TypeCast
|
93
69
|
end
|
94
|
-
|
95
70
|
end
|
96
71
|
end
|
97
72
|
end
|
data/lib/arjdbc/jdbc.rb
CHANGED
data/lib/arjdbc/mysql/adapter.rb
CHANGED
@@ -40,7 +40,7 @@ module ArJdbc
|
|
40
40
|
return if @@_initialized; @@_initialized = true
|
41
41
|
|
42
42
|
require 'arjdbc/util/serialized_attributes'
|
43
|
-
Util::SerializedAttributes.setup
|
43
|
+
Util::SerializedAttributes.setup %r{LOB\(|LOB$}i, 'after_save_with_oracle_lob'
|
44
44
|
|
45
45
|
unless ActiveRecord::ConnectionAdapters::AbstractAdapter.
|
46
46
|
instance_methods(false).detect { |m| m.to_s == "prefetch_primary_key?" }
|
@@ -285,7 +285,7 @@ module ArJdbc
|
|
285
285
|
execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{quote_column_name(index_name)} #{index_type} (#{quoted_column_names})"
|
286
286
|
end
|
287
287
|
end
|
288
|
-
end
|
288
|
+
end
|
289
289
|
|
290
290
|
# @private
|
291
291
|
def add_index_options(table_name, column_name, options = {})
|
@@ -309,7 +309,7 @@ module ArJdbc
|
|
309
309
|
|
310
310
|
quoted_column_names = column_names.map { |e| quote_column_name_or_expression(e) }.join(", ")
|
311
311
|
[ index_name, index_type, quoted_column_names, tablespace, index_options ]
|
312
|
-
end
|
312
|
+
end
|
313
313
|
|
314
314
|
# @override
|
315
315
|
def remove_index(table_name, options = {})
|
@@ -327,12 +327,7 @@ module ArJdbc
|
|
327
327
|
end
|
328
328
|
execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(index_name)}" rescue nil
|
329
329
|
execute "DROP INDEX #{quote_column_name(index_name)}"
|
330
|
-
end
|
331
|
-
|
332
|
-
# @private
|
333
|
-
def remove_index(table_name, options = {})
|
334
|
-
execute "DROP INDEX #{index_name(table_name, options)}"
|
335
|
-
end unless AR42
|
330
|
+
end
|
336
331
|
|
337
332
|
def change_column_default(table_name, column_name, default)
|
338
333
|
execute "ALTER TABLE #{quote_table_name(table_name)} MODIFY #{quote_column_name(column_name)} DEFAULT #{quote(default)}"
|
@@ -361,25 +356,11 @@ module ArJdbc
|
|
361
356
|
"RENAME COLUMN #{quote_column_name(column_name)} TO #{quote_column_name(new_column_name)}"
|
362
357
|
end
|
363
358
|
|
364
|
-
if ActiveRecord::VERSION::MAJOR >= 4
|
365
|
-
|
366
359
|
# @override
|
367
360
|
def remove_column(table_name, column_name, type = nil, options = {})
|
368
361
|
do_remove_column(table_name, column_name)
|
369
362
|
end
|
370
363
|
|
371
|
-
else
|
372
|
-
|
373
|
-
# @override
|
374
|
-
def remove_column(table_name, *column_names)
|
375
|
-
for column_name in column_names.flatten
|
376
|
-
do_remove_column(table_name, column_name)
|
377
|
-
end
|
378
|
-
end
|
379
|
-
alias remove_columns remove_column
|
380
|
-
|
381
|
-
end
|
382
|
-
|
383
364
|
def do_remove_column(table_name, column_name)
|
384
365
|
execute "ALTER TABLE #{quote_table_name(table_name)} DROP COLUMN #{quote_column_name(column_name)}"
|
385
366
|
end
|