Class: OCI8::TDO

Inherits:
Object
  • Object
show all
Defined in:
lib/oci8/object.rb,
ext/oci8/object.c

Overview

OCI8::TDO is the class for Type Descriptor Object, which describe Oracle’s object type.

An instance of OCI8::TDO is specific to the connection. This means One TDO instance for a connection is not available to another connection.

Defined Under Namespace

Classes: Attr

Constant Summary collapse

@@result_type_to_bindtype =
{
  'FLOAT'                   => Float,
  'INTEGER'                 => Integer,
  'NUMBER'                  => OraNumber,
  'BINARY_FLOAT'            => :binary_float,
  'BINARY_DOUBLE'           => :binary_double,
  'TIMESTAMP'               => :timestamp,
  'TIMESTAMP WITH TZ'       => :timestamp_tz,
  'TIMESTAMP WITH LOCAL TZ' => :timestamp_ltz,
  'INTERVAL YEAR TO MONTH'  => :interval_ym,
  'INTERVAL DAY TO SECOND'  => :interval_ds,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(con, metadata, klass) ⇒ TDO

Returns a new instance of TDO.



326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
# File 'lib/oci8/object.rb', line 326

def initialize(con, , klass)
  @ruby_class = klass
  @typename = .schema_name + '.' + .name

  setup(con, )
  con.instance_variable_get(:@id_to_tdo)[.tdo_id] = self
  con.instance_variable_get(:@name_to_tdo)[@typename] = self
  con.instance_variable_get(:@name_to_tdo)[klass.typename] = self
  if .schema_name == con.username
    con.instance_variable_get(:@name_to_tdo)[.name] = self
  end

  case .typecode
  when :named_type
    initialize_named_type(con, )
  when :named_collection
    initialize_named_collection(con, )
  end
end

Instance Attribute Details

#alignmentObject (readonly)

Returns the value of attribute alignment.



297
298
299
# File 'lib/oci8/object.rb', line 297

def alignment
  @alignment
end

#attr_gettersObject (readonly)

Returns the value of attribute attr_getters.



301
302
303
# File 'lib/oci8/object.rb', line 301

def attr_getters
  @attr_getters
end

#attr_settersObject (readonly)

Returns the value of attribute attr_setters.



302
303
304
# File 'lib/oci8/object.rb', line 302

def attr_setters
  @attr_setters
end

#attributesObject (readonly)

Returns the value of attribute attributes.



299
300
301
# File 'lib/oci8/object.rb', line 299

def attributes
  @attributes
end

#class_methodsObject (readonly)

mapping between class method’s ids and their return types. :none means a procedure.

  CREATE OR REPLACE TYPE foo AS OBJECT (
    STATIC FUNCTION bar RETURN INTEGER,
    STATIC PROCEDURE baz,
  );
=> {:bar => Integer, :baz => :none}


312
313
314
# File 'lib/oci8/object.rb', line 312

def class_methods
  @class_methods
end

#coll_attrObject (readonly)

Returns the value of attribute coll_attr.



300
301
302
# File 'lib/oci8/object.rb', line 300

def coll_attr
  @coll_attr
end

#ind_sizeObject (readonly)

Returns the value of attribute ind_size.



296
297
298
# File 'lib/oci8/object.rb', line 296

def ind_size
  @ind_size
end

#instance_methodsObject (readonly)

mapping between instance method’s ids and their return types. :none means a procedure.

  CREATE OR REPLACE TYPE foo AS OBJECT (
    MEMBER FUNCTION bar RETURN INTEGER,
    MEMBER PROCEDURE baz,
  );
=> {:bar => Integer, :baz => :none}


320
321
322
# File 'lib/oci8/object.rb', line 320

def instance_methods
  @instance_methods
end

#ruby_classObject (readonly)

named_type



293
294
295
# File 'lib/oci8/object.rb', line 293

def ruby_class
  @ruby_class
end

#typenameObject (readonly)

full-qualified object type name.

e.g.
 MDSYS.SDO_GEOMETRY


290
291
292
# File 'lib/oci8/object.rb', line 290

def typename
  @typename
end

#val_sizeObject (readonly)

Returns the value of attribute val_size.



295
296
297
# File 'lib/oci8/object.rb', line 295

def val_size
  @val_size
end

Class Method Details

.check_metadata(con, metadata) ⇒ Object



428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
# File 'lib/oci8/object.rb', line 428

def self.(con, )
  case .typecode
  when :char, :varchar, :varchar2
    [ATTR_STRING,    nil, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
  when :raw
    [ATTR_RAW,       nil, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
  when :number, :decimal
    [ATTR_OCINUMBER, nil, SIZE_OF_OCINUMBER, 2, ALIGNMENT_OF_OCINUMBER]
  when :integer, :smallint
    [ATTR_INTEGER,   nil, SIZE_OF_OCINUMBER, 2, ALIGNMENT_OF_OCINUMBER]
  when :real, :double, :float
    [ATTR_FLOAT,     nil, SIZE_OF_OCINUMBER, 2, ALIGNMENT_OF_OCINUMBER]
  when :binary_double
    [ATTR_BINARY_DOUBLE, nil, SIZE_OF_DOUBLE, 2, ALIGNMENT_OF_DOUBLE]
  when :binary_float
    [ATTR_BINARY_FLOAT, nil, SIZE_OF_FLOAT, 2, ALIGNMENT_OF_FLOAT]
  when :named_type
    tdo = con.(.)
    [ATTR_NAMED_TYPE, tdo, tdo.val_size, tdo.ind_size, tdo.alignment]
  when :named_collection
    #datatype, typeinfo, = OCI8::TDO.check_metadata(con, metadata.type_metadata.collection_element)
    #[ATTR_NAMED_COLLECTION, [datatype, typeinfo], SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
    tdo = con.(.)
    [ATTR_NAMED_COLLECTION, tdo, tdo.val_size, tdo.ind_size, tdo.alignment]
  else
    raise "unsupported typecode #{.typecode}"
  end
end

Instance Method Details

#inspectObject



411
412
413
# File 'lib/oci8/object.rb', line 411

def inspect
  "#<#{self.class}:#@typename>"
end

#is_collection?Boolean

Returns:

  • (Boolean)


322
323
324
# File 'lib/oci8/object.rb', line 322

def is_collection?
  @coll_attr ? true : false
end