class Vertica::DataType

Class that represents a data type of a column.

This gem is only able to handle registered types. Types are registered using {.register}. If an unregistered type is encountered, the library will raise {Vertica::Error::UnknownTypeError}.

@example Handling an unknown OID:

Vertica::DataType.register 12345, 'fancy_type', lambda { |bytes| ... }

@attr_reader oid [Integer] The object ID of the type. @attr_reader name [String] The name of the type as it can be used in SQL. @attr_reader size [Integer] The size of the type. @attr_reader modifier [Integer] A modifier of the type. @attr_reader format [Integer] The serialization format of this type. @attr_reader deserializer [Proc] Proc that can deserialize values of this type coming from the database.

@see Vertica::Column

Constants

TYPE_DESERIALIZERS

Attributes

registered_types[RW]

@return [Hash<Integer, Hash>] The Vertica types that are registered with this library, indexed by OID. @see .register

deserializer[R]
format[R]
modifier[R]
name[R]
oid[R]
size[R]

Public Class Methods

build(oid: nil, **kwargs) click to toggle source

Builds a new type instance based on an OID. @param (see Vertica::DataType#initialize) @return [Vertica::DataType] @raise [Vertica::Error::UnknownTypeError] if the OID is not registered.

# File lib/vertica/data_type.rb, line 40
def build(oid: nil, **kwargs)
  args = registered_types.fetch(oid) do |unknown_oid|
    raise Vertica::Error::UnknownTypeError, "Unknown type OID: #{unknown_oid}"
  end

  new(args.merge(kwargs))
end
default_deserializer() click to toggle source

The name of the default deserializer proc. @return [Symbol]

# File lib/vertica/data_type.rb, line 50
def default_deserializer
  :generic
end
new(oid: nil, name: nil, size: nil, modifier: nil, format: 0, deserializer: nil) click to toggle source

Instantiates a new DataType.

@param oid [Integer] The object ID of the type. @param name [String] The name of the type as it can be used in SQL. @param size [Integer] The size of the type. @param modifier [Integer] A modifier of the type. @param format [Integer] The serialization format of this type. @param deserializer [Proc] Proc that can deserialize values of this type coming

from the database.

@see .build

# File lib/vertica/data_type.rb, line 67
def initialize(oid: nil, name: nil, size: nil, modifier: nil, format: 0, deserializer: nil)
  @oid, @name, @size, @modifier, @format, @deserializer = oid, name, size, modifier, format, deserializer
end
register(oid, name, deserializer = self.default_deserializer) click to toggle source

Registers a new type by OID.

@param oid [Integer] The object ID of the type. @param name [String] The name of the type as it can be used in SQL. @param deserializer [Proc] Proc that can deserialize values of this type coming

from the database.

@return [void]

# File lib/vertica/data_type.rb, line 31
def register(oid, name, deserializer = self.default_deserializer)
  self.registered_types ||= {}
  self.registered_types[oid] = { oid: oid, name: name, deserializer: TYPE_DESERIALIZERS.fetch(deserializer) }
end

Public Instance Methods

==(other)
Alias for: eql?
deserialize(bytes) click to toggle source

Deserializes a value of this type as returned by the server. @param bytes [String, nil] The representation of the value returned by the server. @return [Object] The Ruby-value taht repesents the value returned from the DB. @see Vertica::Protocol::DataRow

# File lib/vertica/data_type.rb, line 88
def deserialize(bytes)
  return nil if bytes.nil?
  deserializer.call(bytes)
end
eql?(other) click to toggle source

@return [Boolean] Returns true iff this record is equal to the other provided object

# File lib/vertica/data_type.rb, line 77
def eql?(other)
  other.kind_of?(Vertica::DataType) && oid == other.oid && size == other.size &&
    modifier == other.modifier && other.format == format
end
Also aliased as: ==
hash() click to toggle source

@return [Integer] Returns a hash digtest of this object.

# File lib/vertica/data_type.rb, line 72
def hash
  [oid, size, modifier, format].hash
end
inspect() click to toggle source

@return [String] Returns a user-consumable string representation of this type.

# File lib/vertica/data_type.rb, line 94
def inspect
  "#<#{self.class.name}:#{oid} #{sql.inspect}>"
end
sql() click to toggle source

Returns a SQL representation of this type. @return [String] @todo Take size and modifier into account.

# File lib/vertica/data_type.rb, line 101
def sql
  name
end