465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
|
# File 'lib/plsql/jdbc_connection.rb', line 465
def ora_value_to_ruby_value(value)
case value
when Float, BigDecimal
ora_number_to_ruby_number(value)
when Java::JavaMath::BigDecimal
value && ora_number_to_ruby_number(BigDecimal.new(value.to_s))
when Java::OracleSql::DATE
if value
d = value.dateValue
t = value.timeValue
Time.send(plsql.default_timezone, d.year + 1900, d.month + 1, d.date, t.hours, t.minutes, t.seconds)
end
when Java::JavaSql::Timestamp
if value
Time.send(plsql.default_timezone, value.year + 1900, value.month + 1, value.date, value.hours, value.minutes, value.seconds,
value.nanos / 1000)
end
when Java::OracleSql::CLOB
if value.isEmptyLob
nil
else
value.getSubString(1, value.length)
end
when Java::OracleSql::BLOB
if value.isEmptyLob
nil
else
String.from_java_bytes(value.getBytes(1, value.length))
end
when Java::OracleSql::ARRAY
value.getArray.map{|e| ora_value_to_ruby_value(e)}
when Java::OracleSql::STRUCT
descriptor = value.getDescriptor
struct_metadata = descriptor.getMetaData
field_names = (1..descriptor.getLength).map {|i| struct_metadata.getColumnName(i).downcase.to_sym}
field_values = value.getAttributes.map{|e| ora_value_to_ruby_value(e)}
ArrayHelpers::to_hash(field_names, field_values)
when Java::java.sql.ResultSet
Cursor.new(self, value)
else
value
end
end
|