Class: PG::CompositeCoder

Inherits:
Coder
  • 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 classes of PostgreSQL types, that are made up of some sub type.

Direct Known Subclasses

CompositeDecoder, CompositeEncoder

Constant Summary

Constants inherited from Coder

PG::Coder::FORMAT_ERROR_MASK, PG::Coder::FORMAT_ERROR_TO_PARTIAL, PG::Coder::FORMAT_ERROR_TO_RAISE, PG::Coder::FORMAT_ERROR_TO_STRING, PG::Coder::TIMESTAMP_APP_LOCAL, PG::Coder::TIMESTAMP_APP_UTC, PG::Coder::TIMESTAMP_DB_LOCAL, PG::Coder::TIMESTAMP_DB_UTC

Instance Attribute Summary collapse

Attributes inherited from Coder

#name

Instance Method Summary collapse

Methods inherited from Coder

#==, #dup, #flags, #flags=, #format, #format=, #initialize, #inspect_short, #marshal_dump, #marshal_load, #oid, #oid=

Constructor Details

This class inherits a constructor from PG::Coder

Instance Attribute Details

#elements_typeObject (readonly)

Instance Method Details

#delimiterString

The character that separates values within the composite type.

Returns:

  • (String)


412
413
414
415
416
417
# File 'ext/pg_coder.c', line 412

static VALUE
pg_coder_delimiter_get(VALUE self)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA(self);
	return rb_str_new(&this->delimiter, 1);
}

#delimiter=(String) ⇒ Object

Specifies the character that separates values within the composite type. The default is a comma. This must be a single one-byte character.



395
396
397
398
399
400
401
402
403
404
# File 'ext/pg_coder.c', line 395

static VALUE
pg_coder_delimiter_set(VALUE self, VALUE delimiter)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA(self);
	StringValue(delimiter);
	if(RSTRING_LEN(delimiter) != 1)
		rb_raise( rb_eArgError, "delimiter size must be one byte");
	this->delimiter = *RSTRING_PTR(delimiter);
	return delimiter;
}

#elements_type=(coder) ⇒ Object (readonly)

Specifies the PG::Coder object that is used to encode or decode the single elementes of this composite type.

If set to nil all values are encoded and decoded as String objects.



428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
# File 'ext/pg_coder.c', line 428

static VALUE
pg_coder_elements_type_set(VALUE self, VALUE elem_type)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA( self );

	if ( NIL_P(elem_type) ){
		this->elem = NULL;
	} else if ( rb_obj_is_kind_of(elem_type, rb_cPG_Coder) ){
		this->elem = RTYPEDDATA_DATA( elem_type );
	} else {
		rb_raise( rb_eTypeError, "wrong elements type %s (expected some kind of PG::Coder)",
				rb_obj_classname( elem_type ) );
	}

	rb_iv_set( self, "@elements_type", elem_type );
	return elem_type;
}

#inspectObject



80
81
82
83
84
# File 'lib/pg/coder.rb', line 80

def inspect
	str = super
	str[-1,0] = " elements_type=#{elements_type.inspect} #{needs_quotation? ? 'needs' : 'no'} quotation"
	str
end

#needs_quotation=(Boolean) ⇒ Object

Specifies whether the assigned #elements_type requires quotation marks to be transferred safely. Encoding with #needs_quotation=false is somewhat faster.

The default is true. This option is ignored for decoding of values.



365
366
367
368
369
370
371
# File 'ext/pg_coder.c', line 365

static VALUE
pg_coder_needs_quotation_set(VALUE self, VALUE needs_quotation)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA(self);
	this->needs_quotation = RTEST(needs_quotation);
	return needs_quotation;
}

#needs_quotationBoolean

Specifies whether the assigned #elements_type requires quotation marks to be transferred safely.

Returns:

  • (Boolean)


380
381
382
383
384
385
# File 'ext/pg_coder.c', line 380

static VALUE
pg_coder_needs_quotation_get(VALUE self)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA(self);
	return this->needs_quotation ? Qtrue : Qfalse;
}

#to_hObject



72
73
74
75
76
77
78
# File 'lib/pg/coder.rb', line 72

def to_h
	super.merge!({
		elements_type: elements_type,
		needs_quotation: needs_quotation?,
		delimiter: delimiter,
	})
end