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
@return [Hash<Integer, Hash>] The Vertica
types that are registered with this library, indexed by OID. @see .register
Public Class Methods
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
The name of the default deserializer proc. @return [Symbol]
# File lib/vertica/data_type.rb, line 50 def default_deserializer :generic end
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
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
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
@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
@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
@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
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