pgx/pgtype/range_types.go.erb

57 lines
1.2 KiB
Plaintext

package pgtype
<%
[
["Int4range", "Int4"],
["Int8range", "Int8"],
["Numrange", "Numeric"],
["Tsrange", "Timestamp"],
["Tstzrange", "Timestamptz"],
["Daterange", "Date"],
["Float8range", "Float8"]
].each do |range_type, element_type|
%>
type <%= range_type %> struct {
Lower <%= element_type %>
Upper <%= element_type %>
LowerType BoundType
UpperType BoundType
Valid bool
}
func (r <%= range_type %>) IsNull() bool {
return !r.Valid
}
func (r <%= range_type %>) BoundTypes() (lower, upper BoundType) {
return r.LowerType, r.UpperType
}
func (r <%= range_type %>) Bounds() (lower, upper interface{}) {
return &r.Lower, &r.Upper
}
func (r *<%= range_type %>) ScanNull() error {
*r = <%= range_type %>{}
return nil
}
func (r *<%= range_type %>) ScanBounds() (lowerTarget, upperTarget interface{}) {
return &r.Lower, &r.Upper
}
func (r *<%= range_type %>) SetBoundTypes(lower, upper BoundType) error {
if lower == Unbounded || lower == Empty {
r.Lower = <%= element_type %>{}
}
if upper == Unbounded || upper == Empty {
r.Upper = <%= element_type %>{}
}
r.LowerType = lower
r.UpperType = upper
r.Valid = true
return nil
}
<% end %>