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.
215
216
217
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 215
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
304
305
306
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 304
def begin_db_transaction
@connection.begin
end
|
#commit_db_transaction ⇒ Object
308
309
310
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 308
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.
276
277
278
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 276
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.
269
270
271
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 269
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.
262
263
264
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 262
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.
283
284
285
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 283
def exec_update(sql, name, binds)
exec_query(sql, name, binds)
end
|
#execute(sql, name = nil, binds = []) ⇒ Object
203
204
205
206
207
208
209
210
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 203
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
300
301
302
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 300
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
252
253
254
255
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 252
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
287
288
289
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 287
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
219
220
221
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 219
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
226
227
228
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 226
def jdbc_select_all(sql, name = nil, binds = [])
select(sql, name, binds)
end
|
#jdbc_update(sql, name = nil, binds = []) ⇒ Object
223
224
225
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 223
def jdbc_update(sql, name = nil, binds = []) execute(sql, name, binds)
end
|
#last_inserted_id(result) ⇒ Object
242
243
244
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 242
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
320
321
322
323
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 320
def pk_and_sequence_for(table)
key = primary_key(table)
[key, nil] if key
end
|
#primary_key(table) ⇒ Object
325
326
327
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 325
def primary_key(table)
primary_keys(table).first
end
|
#primary_keys(table) ⇒ Object
329
330
331
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 329
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
312
313
314
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 312
def rollback_db_transaction
@connection.rollback
end
|
#select(*args) ⇒ Object
333
334
335
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 333
def select(*args)
execute(*args)
end
|
#select_one(sql, name = nil) ⇒ Object
Do we need this? Not in AR 3.
237
238
239
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 237
def select_one(sql, name = nil)
select(sql, name).first
end
|
#select_rows(sql, name = nil) ⇒ Object
246
247
248
249
250
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 246
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
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 194
def substitute_binds(manager, binds = [])
sql = (manager)
if binds.empty?
sql
else
sql.gsub('?') { quote(*binds.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
296
297
298
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 296
def table_exists?(name)
jdbc_columns(name) rescue nil
end
|
#tables(name = nil) ⇒ Object
292
293
294
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 292
def tables(name = nil)
@connection.tables
end
|
#write_large_object(*args) ⇒ Object
316
317
318
|
# File 'lib/arjdbc/jdbc/adapter.rb', line 316
def write_large_object(*args)
@connection.write_large_object(*args)
end
|