Class: ActiveRecord::ConnectionAdapters::OracleEnhanced::JDBCConnection::Cursor

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb

Instance Method Summary collapse

Constructor Details

#initialize(connection, raw_statement) ⇒ Cursor

Returns a new instance of Cursor.



297
298
299
300
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 297

def initialize(connection, raw_statement)
  @connection = connection
  @raw_statement = raw_statement
end

Instance Method Details

#bind_param(position, value) ⇒ Object



314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 314

def bind_param(position, value)
  case value
  when Integer
    @raw_statement.setLong(position, value)
  when Float
    @raw_statement.setFloat(position, value)
  when BigDecimal
    @raw_statement.setBigDecimal(position, value)
  when Java::OracleSql::BLOB
    @raw_statement.setBlob(position, value)
  when Java::OracleSql::CLOB
    @raw_statement.setClob(position, value)
  when Java::OracleSql::NCLOB
    @raw_statement.setClob(position, value)
  when Type::OracleEnhanced::Raw
    @raw_statement.setString(position, OracleEnhanced::Quoting.encode_raw(value))
  when Type::OracleEnhanced::CharacterString::Data
    @raw_statement.setFixedCHAR(position, value.to_s)
  when String
    @raw_statement.setString(position, value)
  when Java::OracleSql::DATE
    @raw_statement.setDATE(position, value)
  when Java::JavaSql::Timestamp
    @raw_statement.setTimestamp(position, value)
  when Time
    new_value = Java::java.sql.Timestamp.new(value.year - 1900, value.month - 1, value.day, value.hour, value.min, value.sec, value.usec * 1000)
    @raw_statement.setTimestamp(position, new_value)
  when NilClass
    # TODO: currently nil is always bound as NULL with VARCHAR type.
    # When nils will actually be used by ActiveRecord as bound parameters
    # then need to pass actual column type.
    @raw_statement.setNull(position, java.sql.Types::VARCHAR)
  else
    raise ArgumentError, "Don't know how to bind variable with type #{value.class}"
  end
end

#bind_params(*bind_vars) ⇒ Object



302
303
304
305
306
307
308
309
310
311
312
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 302

def bind_params(*bind_vars)
  index = 1
  bind_vars.flatten.each do |var|
    if Hash === var
      var.each { |key, val| bind_param key, val }
    else
      bind_param index, var
      index += 1
    end
  end
end

#bind_returning_param(position, bind_type) ⇒ Object



351
352
353
354
355
356
357
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 351

def bind_returning_param(position, bind_type)
  @returning_positions ||= []
  @returning_positions << position
  if bind_type == Integer
    @raw_statement.registerReturnParameter(position, java.sql.Types::BIGINT)
  end
end

#closeObject



408
409
410
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 408

def close
  @raw_statement.close
end

#column_namesObject Also known as: get_col_names



376
377
378
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 376

def column_names
  @column_names ||= (1...getColumnCount).map { |i| .getColumnName(i) }
end

#column_typesObject



372
373
374
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 372

def column_types
  @column_types ||= (1...getColumnCount).map { |i| .getColumnTypeName(i).to_sym }
end

#execObject



359
360
361
362
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 359

def exec
  @raw_result_set = @raw_statement.executeQuery
  true
end

#exec_updateObject



364
365
366
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 364

def exec_update
  @raw_statement.executeUpdate
end

#fetch(options = {}) ⇒ Object



381
382
383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 381

def fetch(options = {})
  if @raw_result_set.next
    get_lob_value = options[:get_lob_value]
    row_values = []
    column_types.each_with_index do |column_type, i|
      row_values <<
        @connection.get_ruby_value_from_result_set(@raw_result_set, i + 1, column_type, get_lob_value)
    end
    row_values
  else
    @raw_result_set.close
    nil
  end
end

#get_returning_param(position, type) ⇒ Object



396
397
398
399
400
401
402
403
404
405
406
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 396

def get_returning_param(position, type)
  rs_position = @returning_positions.index(position) + 1
  rs = @raw_statement.getReturnResultSet
  if rs.next
    # Assuming that primary key will not be larger as long max value
    returning_id = rs.getLong(rs_position)
    rs.wasNull ? nil : returning_id
  else
    nil
  end
end

#metadataObject



368
369
370
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 368

def 
  @metadata ||= @raw_result_set.
end