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)


294
295
296
297
298
299
# File 'ext/pg_coder.c', line 294

static VALUE
pg_coder_flags_get(VALUE self)
{
	t_pg_coder *this = DATA_PTR(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.



280
281
282
283
284
285
286
# File 'ext/pg_coder.c', line 280

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

#formatInteger

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

Returns:

  • (Integer)


264
265
266
267
268
269
# File 'ext/pg_coder.c', line 264

static VALUE
pg_coder_format_get(VALUE self)
{
	t_pg_coder *this = DATA_PTR(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.



249
250
251
252
253
254
255
# File 'ext/pg_coder.c', line 249

static VALUE
pg_coder_format_set(VALUE self, VALUE format)
{
	t_pg_coder *this = DATA_PTR(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)


233
234
235
236
237
238
# File 'ext/pg_coder.c', line 233

static VALUE
pg_coder_oid_get(VALUE self)
{
	t_pg_coder *this = DATA_PTR(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.



218
219
220
221
222
223
224
# File 'ext/pg_coder.c', line 218

static VALUE
pg_coder_oid_set(VALUE self, VALUE oid)
{
	t_pg_coder *this = DATA_PTR(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