Class: ActiveRecord::ConnectionAdapters::JdbcAdapter
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#_execute(sql, name = nil) ⇒ Object
we need to do it this way, to allow Rails stupid tests to always work even if we define a new execute method.
-
#active? ⇒ Boolean
-
#adapter_name ⇒ Object
-
#adapter_spec(config) ⇒ Object
Locate specialized adapter specification if one exists based on config data.
-
#begin_db_transaction ⇒ Object
-
#commit_db_transaction ⇒ Object
-
#configure_arel2_visitors(config) ⇒ Object
-
#database_name ⇒ Object
-
#disconnect! ⇒ Object
-
#exec_delete(sql, name, binds) ⇒ Object
Executes delete sql
statement in the context of this connection using binds
as the bind substitutes.
-
#exec_insert(sql, name, binds) ⇒ Object
Executes insert sql
statement in the context of this connection using binds
as the bind substitutes.
-
#exec_query(sql, name = 'SQL', binds = []) ⇒ Object
Executes sql
statement in the context of this connection using binds
as the bind substitutes.
-
#exec_update(sql, name, binds) ⇒ Object
Executes update sql
statement in the context of this connection using binds
as the bind substitutes.
-
#execute(sql, name = nil, binds = []) ⇒ Object
-
#indexes(table_name, name = nil, schema_name = nil) ⇒ Object
-
#initialize(connection, logger, config) ⇒ JdbcAdapter
constructor
A new instance of JdbcAdapter.
-
#insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = []) ⇒ Object
-
#is_a?(klass) ⇒ Boolean
-
#jdbc_column_class ⇒ Object
-
#jdbc_columns(table_name, name = nil) ⇒ Object
-
#jdbc_connection ⇒ Object
Retrieve the raw java.sql.Connection object.
-
#jdbc_connection_class(spec) ⇒ Object
-
#jdbc_insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = []) ⇒ Object
-
#jdbc_select_all(sql, name = nil, binds = []) ⇒ Object
-
#jdbc_update(sql, name = nil, binds = []) ⇒ Object
-
#last_inserted_id(result) ⇒ Object
-
#modify_types(tp) ⇒ Object
-
#native_database_types ⇒ Object
-
#native_sql_to_type(tp) ⇒ Object
-
#pk_and_sequence_for(table) ⇒ Object
-
#primary_key(table) ⇒ Object
-
#primary_keys(table) ⇒ Object
-
#reconnect! ⇒ Object
-
#rollback_db_transaction ⇒ Object
-
#select(*args) ⇒ Object
-
#select_one(sql, name = nil) ⇒ Object
Do we need this? Not in AR 3.
-
#select_rows(sql, name = nil) ⇒ Object
-
#substitute_binds(manager, binds = []) ⇒ Object
-
#supports_migrations? ⇒ Boolean
-
#table_exists?(name) ⇒ Boolean
-
#tables(name = nil) ⇒ Object
-
#write_large_object(*args) ⇒ Object
alias_chained_method
included, needed?, #on_checkin, #on_checkout
needed?, #quote_table_name
Constructor Details
#initialize(connection, logger, config) ⇒ JdbcAdapter
Returns a new instance of JdbcAdapter.
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 26
def initialize(connection, logger, config)
@config = config
spec = config[:adapter_spec] || adapter_spec(config)
config[:adapter_spec] ||= spec
unless connection
connection_class = jdbc_connection_class spec
connection = connection_class.new config
end
super(connection, logger)
if spec && (config[:adapter_class].nil? || config[:adapter_class] == JdbcAdapter)
extend spec
end
configure_arel2_visitors(config)
connection.adapter = self
JndiConnectionPoolCallbacks.prepare(self, connection)
end
|
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
24
25
26
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 24
def config
@config
end
|
Class Method Details
.arel2_visitors(config) ⇒ Object
106
107
108
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 106
def self.arel2_visitors(config)
{ 'jdbc' => ::Arel::Visitors::ToSql }
end
|
.visitor_for(pool) ⇒ Object
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 95
def self.visitor_for(pool)
config = pool.spec.config
adapter = config[:adapter]
adapter_spec = config[:adapter_spec] || self
if adapter =~ /^(jdbc|jndi)$/
adapter_spec.arel2_visitors(config).values.first.new(pool)
else
adapter_spec.arel2_visitors(config)[adapter].new(pool)
end
end
|
Instance Method Details
#_execute(sql, name = nil) ⇒ Object
we need to do it this way, to allow Rails stupid tests to always work even if we define a new execute method. Instead of mixing in a new execute, an _execute should be mixed in.
216
217
218
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 216
def _execute(sql, name = nil)
@connection.execute(sql)
end
|
#active? ⇒ Boolean
181
182
183
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 181
def active?
@connection.active?
end
|
#adapter_name ⇒ Object
91
92
93
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 91
def adapter_name 'JDBC'
end
|
#adapter_spec(config) ⇒ Object
Locate specialized adapter specification if one exists based on config data
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 59
def adapter_spec(config)
2.times do
dialect = (config[:dialect] || config[:driver]).to_s
::ArJdbc.constants.map { |name| ::ArJdbc.const_get name }.each do |constant|
if constant.respond_to? :adapter_matcher
spec = constant.adapter_matcher(dialect, config)
return spec if spec
end
end
break unless config[:jndi] and !config[:dialect]
begin
conn = Java::javax.naming.InitialContext.new.lookup(config[:jndi]).getConnection
config[:dialect] = conn.getMetaData.getDatabaseProductName
if ::ArJdbc::Derby.adapter_matcher(config[:dialect], config)
config[:username] ||= conn.getMetaData.getUserName
end
rescue
conn.close if conn
end
end
nil
end
|
#begin_db_transaction ⇒ Object
305
306
307
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 305
def begin_db_transaction
@connection.begin
end
|
#commit_db_transaction ⇒ Object
309
310
311
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 309
def commit_db_transaction
@connection.commit
end
|
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 110
def configure_arel2_visitors(config)
if defined?(::Arel::Visitors::VISITORS)
visitors = ::Arel::Visitors::VISITORS
visitor = nil
adapter_spec = config[:adapter_spec] || self
adapter_spec.arel2_visitors(config).each do |k,v|
visitor = v
visitors[k] = v
end
if visitor && config[:adapter] =~ /^(jdbc|jndi)$/
visitors[config[:adapter]] = visitor
end
end
end
|
#database_name ⇒ Object
142
143
144
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 142
def database_name @connection.database_name
end
|
#disconnect! ⇒ Object
190
191
192
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 190
def disconnect!
@connection.disconnect!
end
|
#exec_delete(sql, name, binds) ⇒ Object
Executes delete sql
statement in the context of this connection using binds
as the bind substitutes. name
is the logged along with the executed sql
statement.
277
278
279
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 277
def exec_delete(sql, name, binds)
exec_query(sql, name, binds)
end
|
#exec_insert(sql, name, binds) ⇒ Object
Executes insert sql
statement in the context of this connection using binds
as the bind substitutes. name
is the logged along with the executed sql
statement.
270
271
272
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 270
def exec_insert(sql, name, binds)
exec_query(sql, name, binds)
end
|
#exec_query(sql, name = 'SQL', binds = []) ⇒ Object
Executes sql
statement in the context of this connection using binds
as the bind substitutes. name
is logged along with the executed sql
statement.
263
264
265
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 263
def exec_query(sql, name = 'SQL', binds = [])
execute(sql, name, binds)
end
|
#exec_update(sql, name, binds) ⇒ Object
Executes update sql
statement in the context of this connection using binds
as the bind substitutes. name
is the logged along with the executed sql
statement.
284
285
286
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 284
def exec_update(sql, name, binds)
exec_query(sql, name, binds)
end
|
#execute(sql, name = nil, binds = []) ⇒ Object
204
205
206
207
208
209
210
211
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 204
def execute(sql, name = nil, binds = [])
sql = substitute_binds(sql, binds)
if name == :skip_logging
_execute(sql)
else
log(sql, name) { _execute(sql) }
end
end
|
#indexes(table_name, name = nil, schema_name = nil) ⇒ Object
301
302
303
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 301
def indexes(table_name, name = nil, schema_name = nil)
@connection.indexes(table_name, name, schema_name)
end
|
#insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = []) ⇒ Object
253
254
255
256
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 253
def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])
id = execute(sql, name = nil, binds)
id_value || id
end
|
#is_a?(klass) ⇒ Boolean
125
126
127
128
129
130
131
132
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 125
def is_a?(klass) if Class === klass && klass.name =~ /#{adapter_name}Adapter$/i
true
else
super
end
end
|
#jdbc_column_class ⇒ Object
#jdbc_columns(table_name, name = nil) ⇒ Object
288
289
290
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 288
def jdbc_columns(table_name, name = nil)
@connection.columns(table_name.to_s)
end
|
#jdbc_connection ⇒ Object
Retrieve the raw java.sql.Connection object.
54
55
56
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 54
def jdbc_connection
raw_connection.connection
end
|
#jdbc_connection_class(spec) ⇒ Object
43
44
45
46
47
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 43
def jdbc_connection_class(spec)
connection_class = spec.jdbc_connection_class if spec && spec.respond_to?(:jdbc_connection_class)
connection_class = ::ActiveRecord::ConnectionAdapters::JdbcConnection unless connection_class
connection_class
end
|
#jdbc_insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = []) ⇒ Object
220
221
222
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 220
def jdbc_insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])
insert_sql(sql, name, pk, id_value, sequence_name, binds)
end
|
#jdbc_select_all(sql, name = nil, binds = []) ⇒ Object
227
228
229
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 227
def jdbc_select_all(sql, name = nil, binds = [])
select(sql, name, binds)
end
|
#jdbc_update(sql, name = nil, binds = []) ⇒ Object
224
225
226
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 224
def jdbc_update(sql, name = nil, binds = []) execute(sql, name, binds)
end
|
#last_inserted_id(result) ⇒ Object
243
244
245
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 243
def last_inserted_id(result)
result
end
|
#modify_types(tp) ⇒ Object
87
88
89
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 87
def modify_types(tp)
tp
end
|
#native_database_types ⇒ Object
138
139
140
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 138
def native_database_types @connection.native_database_types
end
|
#native_sql_to_type(tp) ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 146
def native_sql_to_type(tp)
if /^(.*?)\(([0-9]+)\)/ =~ tp
tname = $1
limit = $2.to_i
ntype = native_database_types
if ntype[:primary_key] == tp
return :primary_key,nil
else
ntype.each do |name,val|
if name == :primary_key
next
end
if val[:name].downcase == tname.downcase && (val[:limit].nil? || val[:limit].to_i == limit)
return name,limit
end
end
end
elsif /^(.*?)/ =~ tp
tname = $1
ntype = native_database_types
if ntype[:primary_key] == tp
return :primary_key,nil
else
ntype.each do |name,val|
if val[:name].downcase == tname.downcase && val[:limit].nil?
return name,nil
end
end
end
else
return :string,255
end
return nil,nil
end
|
#pk_and_sequence_for(table) ⇒ Object
321
322
323
324
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 321
def pk_and_sequence_for(table)
key = primary_key(table)
[key, nil] if key
end
|
#primary_key(table) ⇒ Object
326
327
328
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 326
def primary_key(table)
primary_keys(table).first
end
|
#primary_keys(table) ⇒ Object
330
331
332
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 330
def primary_keys(table)
@connection.primary_keys(table)
end
|
#reconnect! ⇒ Object
185
186
187
188
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 185
def reconnect!
@connection.reconnect!
@connection
end
|
#rollback_db_transaction ⇒ Object
313
314
315
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 313
def rollback_db_transaction
@connection.rollback
end
|
#select(*args) ⇒ Object
334
335
336
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 334
def select(*args)
execute(*args)
end
|
#select_one(sql, name = nil) ⇒ Object
Do we need this? Not in AR 3.
238
239
240
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 238
def select_one(sql, name = nil)
select(sql, name).first
end
|
#select_rows(sql, name = nil) ⇒ Object
247
248
249
250
251
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 247
def select_rows(sql, name = nil)
rows = []
select(sql, name).each {|row| rows << row.values }
rows
end
|
#substitute_binds(manager, binds = []) ⇒ Object
194
195
196
197
198
199
200
201
202
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 194
def substitute_binds(manager, binds = [])
sql = (manager)
if binds.empty?
sql
else
copy = binds.dup
sql.gsub('?') { quote(*copy.shift.reverse) }
end
end
|
#supports_migrations? ⇒ Boolean
134
135
136
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 134
def supports_migrations?
true
end
|
#table_exists?(name) ⇒ Boolean
297
298
299
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 297
def table_exists?(name)
jdbc_columns(name) rescue nil
end
|
#tables(name = nil) ⇒ Object
293
294
295
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 293
def tables(name = nil)
@connection.tables
end
|
#write_large_object(*args) ⇒ Object
317
318
319
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 317
def write_large_object(*args)
@connection.write_large_object(*args)
end
|