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.



291
292
293
294
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 291

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

Instance Method Details

#bind_param(position, value) ⇒ Object



308
309
310
311
312
313
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
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 308

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



296
297
298
299
300
301
302
303
304
305
306
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 296

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



345
346
347
348
349
350
351
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 345

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



402
403
404
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 402

def close
  @raw_statement.close
end

#column_namesObject Also known as: get_col_names



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

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

#column_typesObject



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

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

#execObject



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

def exec
  @raw_result_set = @raw_statement.executeQuery
  true
end

#exec_updateObject



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

def exec_update
  @raw_statement.executeUpdate
end

#fetch(options = {}) ⇒ Object



375
376
377
378
379
380
381
382
383
384
385
386
387
388
# File 'lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 375

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



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

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



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

def 
  @metadata ||= @raw_result_set.
end