# Range types (tsrange) and micro seconds precision

**URL:** <https://discourse.rom-rb.org/t/range-types-tsrange-and-micro-seconds-precision/509>\
**Category:** Issues\
**Created:** [March 16, 2022, 3:42pm UTC](https://discourse.rom-rb.org/t/range-types-tsrange-and-micro-seconds-precision/509 "2022-03-16T15:42:12Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![DangerDawson](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.rom-rb.org/dangerdawson/32/237_2.png) [@DangerDawson](https://discourse.rom-rb.org/u/DangerDawson)\
**Post date:** [March 16, 2022, 3:42pm UTC](https://discourse.rom-rb.org/t/range-types-tsrange-and-micro-seconds-precision/509/1 "2022-03-16T15:42:12Z")

</div>

Currently if you create record that contains a value which is `Values::Range` of type `tsrange` then you lose the micro second precision on the lower and upper values.

This is because the object is being serialised into a string [rom-sql/range.rb at master · rom-rb/rom-sql · GitHub](https://github.com/rom-rb/rom-sql/blob/master/lib/rom/sql/extensions/postgres/types/range.rb#L81)

```auto
        def self.range(name, read_type)
          Type(name) do
            type = SQL::Types.Nominal(Values::Range).constructor do |range|
              format("%s%s,%s%s",
                     range.exclude_begin? ? :'(' : :'[',
                     range.lower,
                     range.upper,
                     range.exclude_end? ? :')' : :']')
            end

            type.meta(read: read_type)
          end
        end

```

This can be solved by casting the range object to a `Sequel::Postgres::PGRange` instead e.g.

```auto
        def self.range(name, read_type)
          Type(name) do
            type = SQL::Types.Nominal(Values::Range).constructor do |range|
               Sequel::Postgres::PGRange.new(range.lower, range.upper, exclude_begin: range.exclude_begin?, exclude_end: range.exclude_end?)
            end

            type.meta(read: read_type)
          end
        end

```

Or is there good reason we do not take this approach?

---

<div class="post-metadata">

**Author:** ![solnic](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.rom-rb.org/solnic/32/279_2.png) [@solnic](https://discourse.rom-rb.org/u/solnic)\
**Post date:** [March 18, 2022, 9:52am UTC](https://discourse.rom-rb.org/t/range-types-tsrange-and-micro-seconds-precision/509/2 "2022-03-18T09:52:19Z")

</div>

Please report an issue about it. This should definitely use `PGRange` under the hood.

---

<div class="post-metadata">

**Author:** ![DangerDawson](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.rom-rb.org/dangerdawson/32/237_2.png) [@DangerDawson](https://discourse.rom-rb.org/u/DangerDawson)\
**Post date:** [March 18, 2022, 10:10am UTC](https://discourse.rom-rb.org/t/range-types-tsrange-and-micro-seconds-precision/509/3 "2022-03-18T10:10:53Z")

</div>

@solnic will do, will put together a PR for you
