123456789_123456789_123456789_123456789_123456789_

Class: PG::CompositeCoder

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Coder
Instance Chain:
self, Coder
Inherits: PG::Coder
Defined in: ext/pg_coder.c,
ext/pg_coder.c,
lib/pg/coder.rb

Overview

This is the base class for all type cast classes of PostgreSQL types, that are made up of some sub type.

Constant Summary

Coder - Inherited

FORMAT_ERROR_MASK, FORMAT_ERROR_TO_PARTIAL, FORMAT_ERROR_TO_RAISE, FORMAT_ERROR_TO_STRING, TIMESTAMP_APP_LOCAL, TIMESTAMP_APP_UTC, TIMESTAMP_DB_LOCAL, TIMESTAMP_DB_UTC

Class Method Summary

Coder - Inherited

.new

Create a new coder object based on the attribute Hash.

Instance Attribute Summary

Coder - Inherited

#flags

Get current bitwise OR-ed coder flags.

#flags=

Set coder specific bitwise OR-ed flags.

#format

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

#format=

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

#name

Name of the coder or the corresponding data type.

#oid

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

#oid=

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

Instance Method Summary

Coder - Inherited

#==, #dup, #inspect, #inspect_short, #marshal_dump, #marshal_load,
#to_h

Returns coder attributes as Hash.

Constructor Details

This class inherits a constructor from PG::Coder

Instance Attribute Details

#delimiterString (rw)

The character that separates values within the composite type.

[ GitHub ]

  
# File 'ext/pg_coder.c', line 419

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) (rw)

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

[ GitHub ]

  
# File 'ext/pg_coder.c', line 401

static VALUE
pg_coder_delimiter_set(VALUE self, VALUE delimiter)
{
	t_pg_composite_coder *this = RTYPEDDATA_DATA(self);
	rb_check_frozen(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 (readonly)

[ GitHub ]

#needs_quotation=(Boolean) (rw)

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.

[ GitHub ]

  
# File 'ext/pg_coder.c', line 370

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

#needs_quotationBoolean (rw)

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

[ GitHub ]

  
# File 'ext/pg_coder.c', line 386

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

Instance Method Details

#elements_type=(coder) (readonly)

Specifies the 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.

[ GitHub ]

  
# File 'ext/pg_coder.c', line 435

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

	rb_check_frozen(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;
}

#inspect

[ GitHub ]

  
# File 'lib/pg/coder.rb', line 82

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

#to_h

[ GitHub ]

  
# File 'lib/pg/coder.rb', line 74

def to_h
	{ **super,
		elements_type: elements_type,
		needs_quotation: needs_quotation?,
		delimiter: delimiter,
	}
end