Class: Vertica::DataType
- Inherits:
-
Object
- Object
- Vertica::DataType
- Defined in:
- lib/vertica/data_type.rb
Overview
Class that represents a data type of a column.
This gem is only able to handle registered types. Types are registered using DataType.register. If an unregistered type is encountered, the library will raise Error::UnknownTypeError.
Class Attribute Summary collapse
-
.registered_types ⇒ Hash<Integer, Hash>
The Vertica types that are registered with this library, indexed by OID.
Instance Attribute Summary collapse
-
#deserializer ⇒ Proc
readonly
Proc that can deserialize values of this type coming from the database.
-
#format ⇒ Integer
readonly
The serialization format of this type.
-
#modifier ⇒ Integer
readonly
A modifier of the type.
-
#name ⇒ String
readonly
The name of the type as it can be used in SQL.
-
#oid ⇒ Integer
readonly
The object ID of the type.
-
#size ⇒ Integer
readonly
The size of the type.
Class Method Summary collapse
-
.build(oid: nil, **kwargs) ⇒ Vertica::DataType
Builds a new type instance based on an OID.
-
.default_deserializer ⇒ Symbol
The name of the default deserializer proc.
-
.register(oid, name, deserializer = self.default_deserializer)
Registers a new type by OID.
Instance Method Summary collapse
-
#deserialize(bytes) ⇒ Object
Deserializes a value of this type as returned by the server.
-
#eql?(other) ⇒ Boolean
(also: #==)
Returns true iff this record is equal to the other provided object.
-
#hash ⇒ Integer
Returns a hash digtest of this object.
-
#initialize(oid: nil, name: nil, size: nil, modifier: nil, format: 0, deserializer: nil) ⇒ DataType
constructor
Instantiates a new DataType.
-
#inspect ⇒ String
Returns a user-consumable string representation of this type.
-
#sql ⇒ String
Returns a SQL representation of this type.
Constructor Details
#initialize(oid: nil, name: nil, size: nil, modifier: nil, format: 0, deserializer: nil) ⇒ DataType
Instantiates a new DataType.
67 68 69 |
# 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 |
Class Attribute Details
.registered_types ⇒ Hash<Integer, Hash>
Returns The Vertica types that are registered with this library, indexed by OID.
22 23 24 |
# File 'lib/vertica/data_type.rb', line 22 def registered_types @registered_types end |
Instance Attribute Details
#deserializer ⇒ Proc (readonly)
Proc that can deserialize values of this type coming from the database.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def deserializer @deserializer end |
#format ⇒ Integer (readonly)
The serialization format of this type.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def format @format end |
#modifier ⇒ Integer (readonly)
A modifier of the type.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def modifier @modifier end |
#name ⇒ String (readonly)
The name of the type as it can be used in SQL.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def name @name end |
#oid ⇒ Integer (readonly)
The object ID of the type.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def oid @oid end |
#size ⇒ Integer (readonly)
The size of the type.
17 18 19 |
# File 'lib/vertica/data_type.rb', line 17 def size @size end |
Class Method Details
.build(oid: nil, **kwargs) ⇒ Vertica::DataType
Builds a new type instance based on an OID.
40 41 42 43 44 45 46 |
# 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 ⇒ Symbol
The name of the default deserializer proc.
50 51 52 |
# File 'lib/vertica/data_type.rb', line 50 def default_deserializer :generic end |
.register(oid, name, deserializer = self.default_deserializer)
This method returns an undefined value.
Registers a new type by OID.
31 32 33 34 |
# 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 |
Instance Method Details
#deserialize(bytes) ⇒ Object
Deserializes a value of this type as returned by the server.
88 89 90 91 |
# File 'lib/vertica/data_type.rb', line 88 def deserialize(bytes) return nil if bytes.nil? deserializer.call(bytes) end |
#eql?(other) ⇒ Boolean Also known as: ==
Returns true iff this record is equal to the other provided object
77 78 79 80 |
# 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 |
#hash ⇒ Integer
Returns a hash digtest of this object.
72 73 74 |
# File 'lib/vertica/data_type.rb', line 72 def hash [oid, size, modifier, format].hash end |
#inspect ⇒ String
Returns a user-consumable string representation of this type.
94 95 96 |
# File 'lib/vertica/data_type.rb', line 94 def inspect "#<#{self.class.name}:#{oid} #{sql.inspect}>" end |
#sql ⇒ String
Take size and modifier into account.
Returns a SQL representation of this type.
101 102 103 |
# File 'lib/vertica/data_type.rb', line 101 def sql name end |