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
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
#==, #decode, #dup, #encode, #format, #format=, #initialize, #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.
325 326 327 328 329 330 |
# File 'ext/pg_coder.c', line 325
static VALUE
pg_coder_delimiter_get(VALUE self)
{
t_pg_composite_coder *this = DATA_PTR(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.
308 309 310 311 312 313 314 315 316 317 |
# File 'ext/pg_coder.c', line 308
static VALUE
pg_coder_delimiter_set(VALUE self, VALUE delimiter)
{
t_pg_composite_coder *this = DATA_PTR(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.
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 |
# File 'ext/pg_coder.c', line 341
static VALUE
pg_coder_elements_type_set(VALUE self, VALUE elem_type)
{
t_pg_composite_coder *this = DATA_PTR( self );
if ( NIL_P(elem_type) ){
this->elem = NULL;
} else if ( rb_obj_is_kind_of(elem_type, rb_cPG_Coder) ){
this->elem = DATA_PTR( 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
66 67 68 69 70 |
# File 'lib/pg/coder.rb', line 66 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.
278 279 280 281 282 283 284 |
# File 'ext/pg_coder.c', line 278
static VALUE
pg_coder_needs_quotation_set(VALUE self, VALUE needs_quotation)
{
t_pg_composite_coder *this = DATA_PTR(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.
293 294 295 296 297 298 |
# File 'ext/pg_coder.c', line 293
static VALUE
pg_coder_needs_quotation_get(VALUE self)
{
t_pg_composite_coder *this = DATA_PTR(self);
return this->needs_quotation ? Qtrue : Qfalse;
}
|
#to_h ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/pg/coder.rb', line 58 def to_h super.merge!({ elements_type: elements_type, needs_quotation: needs_quotation?, delimiter: delimiter, }) end |