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.



304
305
306
307
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 304

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

Instance Method Details

#bind_param(position, value) ⇒ Object



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
350
351
352
353
354
355
356
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 321

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



309
310
311
312
313
314
315
316
317
318
319
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 309

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



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

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



415
416
417
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 415

def close
  @raw_statement.close
end

#column_namesObject Also known as: get_col_names



383
384
385
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 383

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

#column_typesObject



379
380
381
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 379

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

#execObject



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

def exec
  @raw_result_set = @raw_statement.executeQuery
  true
end

#exec_updateObject



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

def exec_update
  @raw_statement.executeUpdate
end

#fetch(options = {}) ⇒ Object



388
389
390
391
392
393
394
395
396
397
398
399
400
401
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 388

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 <<
        @raw_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



403
404
405
406
407
408
409
410
411
412
413
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 403

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



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

def 
  @metadata ||= @raw_result_set.
end