Class: PG::CompositeCoder
- 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
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
- #elements_type ⇒ Object readonly
Attributes inherited from Coder
Instance Method Summary collapse
-
#delimiter ⇒ String
The character that separates values within the composite type.
-
#delimiter=(String) ⇒ Object
Specifies the character that separates values within the composite type.
-
#elements_type(coder) ⇒ Object
readonly
Specifies the PG::Coder object that is used to encode or decode the single elementes of this composite type.
- #inspect ⇒ Object
-
#needs_quotation=(Boolean) ⇒ Object
Specifies whether the assigned #elements_type requires quotation marks to be transferred safely.
-
#needs_quotation ⇒ Boolean
Specifies whether the assigned #elements_type requires quotation marks to be transferred safely.
- #to_h ⇒ Object
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_type ⇒ Object (readonly)
Instance Method Details
#delimiter ⇒ String
The character that separates values within the composite type.
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;
}
|
#inspect ⇒ Object
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_quotation ⇒ Boolean
Specifies whether the assigned #elements_type requires quotation marks to be transferred safely.
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_h ⇒ Object
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 |