Class: Rooq::TypeCoercer

Inherits:
Object
  • Object
show all
Defined in:
lib/rooq/result.rb

Overview

TypeCoercer converts PostgreSQL values to Ruby types based on OID.

Constant Summary collapse

OID_BOOL =

PostgreSQL type OIDs

16
OID_INT2 =
21
OID_INT4 =
23
OID_INT8 =
20
OID_FLOAT4 =
700
OID_FLOAT8 =
701
OID_NUMERIC =
1700
OID_TEXT =
25
OID_VARCHAR =
1043
OID_DATE =
1082
OID_TIMESTAMP =
1114
OID_TIMESTAMPTZ =
1184
OID_JSON =
114
OID_JSONB =
3802
OID_INT4_ARRAY =
1007
OID_INT8_ARRAY =
1016
OID_TEXT_ARRAY =
1009
OID_VARCHAR_ARRAY =
1015
OID_FLOAT4_ARRAY =
1021
OID_FLOAT8_ARRAY =
1022
OID_BOOL_ARRAY =
1000
OID_UUID =
2950

Instance Method Summary collapse

Instance Method Details

#coerce(value, oid) ⇒ Object

Coerce a value based on its PostgreSQL OID.

Parameters:

  • value (String, nil)

    the raw value from the database

  • oid (Integer)

    the PostgreSQL type OID

Returns:

  • (Object)

    the coerced value



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/rooq/result.rb', line 125

def coerce(value, oid)
  return nil if value.nil?

  case oid
  when OID_JSON, OID_JSONB
    coerce_json(value)
  when OID_INT4_ARRAY, OID_INT8_ARRAY
    coerce_int_array(value)
  when OID_TEXT_ARRAY, OID_VARCHAR_ARRAY
    coerce_text_array(value)
  when OID_FLOAT4_ARRAY, OID_FLOAT8_ARRAY
    coerce_float_array(value)
  when OID_BOOL_ARRAY
    coerce_bool_array(value)
  when OID_TIMESTAMP, OID_TIMESTAMPTZ
    coerce_timestamp(value)
  when OID_DATE
    coerce_date(value)
  when OID_BOOL
    coerce_bool(value)
  when OID_INT2, OID_INT4, OID_INT8
    coerce_integer(value)
  when OID_FLOAT4, OID_FLOAT8, OID_NUMERIC
    coerce_float(value)
  else
    value
  end
end