Class: PG::Coder

Inherits:
Object
  • Object
show all
Defined in:
ext/pg_coder.c,
lib/pg/coder.rb,
ext/pg_coder.c

Overview

This is the base class for all type cast encoder and decoder classes.

It can be used for implicit type casts by a PG::TypeMap or to convert single values to/from their string representation by #encode and #decode.

Ruby nil values are not handled by encoders, but are always transmitted as SQL NULL value. Vice versa SQL NULL values are not handled by decoders, but are always returned as a nil value.

Direct Known Subclasses

CompositeCoder, CopyCoder, RecordCoder, SimpleCoder

Defined Under Namespace

Modules: BinaryFormatting

Constant Summary collapse

TIMESTAMP_DB_UTC =

:Coder#flags=

define flags to be used with PG
TIMESTAMP_DB_LOCAL =
INT2NUM(PG_CODER_TIMESTAMP_DB_LOCAL)
TIMESTAMP_APP_UTC =
INT2NUM(PG_CODER_TIMESTAMP_APP_UTC)
TIMESTAMP_APP_LOCAL =
INT2NUM(PG_CODER_TIMESTAMP_APP_LOCAL)
FORMAT_ERROR_MASK =
INT2NUM(PG_CODER_FORMAT_ERROR_MASK)
FORMAT_ERROR_TO_RAISE =
INT2NUM(PG_CODER_FORMAT_ERROR_TO_RAISE)
FORMAT_ERROR_TO_STRING =
INT2NUM(PG_CODER_FORMAT_ERROR_TO_STRING)
FORMAT_ERROR_TO_PARTIAL =
INT2NUM(PG_CODER_FORMAT_ERROR_TO_PARTIAL)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Coder

Create a new coder object based on the attribute Hash.



17
18
19
20
21
# File 'lib/pg/coder.rb', line 17

def initialize(params={})
	params.each do |key, val|
		send("#{key}=", val)
	end
end

Instance Attribute Details

#nameObject

Name of the coder or the corresponding data type.

This accessor is only used in PG::Coder#inspect .

Instance Method Details

#==(v) ⇒ Object



37
38
39
# File 'lib/pg/coder.rb', line 37

def ==(v)
	self.class == v.class && to_h == v.to_h
end

#dupObject



23
24
25
# File 'lib/pg/coder.rb', line 23

def dup
	self.class.new(to_h)
end

#flagsInteger

Get current bitwise OR-ed coder flags.

Returns:

  • (Integer)


348
349
350
351
352
353
# File 'ext/pg_coder.c', line 348

static VALUE
pg_coder_flags_get(VALUE self)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	return INT2NUM(this->flags);
}

#flags=(Integer) ⇒ Object

Set coder specific bitwise OR-ed flags. See the particular en- or decoder description for available flags.

The default is 0.



334
335
336
337
338
339
340
# File 'ext/pg_coder.c', line 334

static VALUE
pg_coder_flags_set(VALUE self, VALUE flags)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	this->flags = NUM2INT(flags);
	return flags;
}

#formatInteger

The format code that is sent alongside with an encoded query parameter value.

Returns:

  • (Integer)


318
319
320
321
322
323
# File 'ext/pg_coder.c', line 318

static VALUE
pg_coder_format_get(VALUE self)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	return INT2NUM(this->format);
}

#format=(Integer) ⇒ Object

Specifies the format code that is sent alongside with an encoded query parameter value.

The default is 0.



303
304
305
306
307
308
309
# File 'ext/pg_coder.c', line 303

static VALUE
pg_coder_format_set(VALUE self, VALUE format)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	this->format = NUM2INT(format);
	return format;
}

#inspectObject



49
50
51
52
53
54
55
56
# File 'lib/pg/coder.rb', line 49

def inspect
	str = self.to_s
	oid_str = " oid=#{oid}" unless oid==0
	format_str = " format=#{format}" unless format==0
	name_str = " #{name.inspect}" if name
	str[-1,0] = "#{name_str} #{oid_str}#{format_str}"
	str
end

#inspect_shortObject



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/pg/coder.rb', line 58

def inspect_short
	str = case format
		when 0 then "T"
		when 1 then "B"
		else format.to_s
	end
	str += "E" if respond_to?(:encode)
	str += "D" if respond_to?(:decode)

	"#{name || self.class.name}:#{str}"
end

#marshal_dumpObject



41
42
43
# File 'lib/pg/coder.rb', line 41

def marshal_dump
	Marshal.dump(to_h)
end

#marshal_load(str) ⇒ Object



45
46
47
# File 'lib/pg/coder.rb', line 45

def marshal_load(str)
	initialize Marshal.load(str)
end

#oidInteger

The type OID that is sent alongside with an encoded query parameter value.

Returns:

  • (Integer)


287
288
289
290
291
292
# File 'ext/pg_coder.c', line 287

static VALUE
pg_coder_oid_get(VALUE self)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	return UINT2NUM(this->oid);
}

#oid=(Integer) ⇒ Object

Specifies the type OID that is sent alongside with an encoded query parameter value.

The default is 0.



272
273
274
275
276
277
278
# File 'ext/pg_coder.c', line 272

static VALUE
pg_coder_oid_set(VALUE self, VALUE oid)
{
	t_pg_coder *this = RTYPEDDATA_DATA(self);
	this->oid = NUM2UINT(oid);
	return oid;
}

#to_hObject

Returns coder attributes as Hash.



28
29
30
31
32
33
34
35
# File 'lib/pg/coder.rb', line 28

def to_h
	{
		oid: oid,
		format: format,
		flags: flags,
		name: name,
	}
end