Fractional seconds ignored for Time/DateTime query parameters

Issue #111 resolved
Anonymous created an issue
c.exec("SELECT $1::timestamp", [Time.now]).getvalue(0, 0)
=> "2012-03-01 19:53:37"

c.exec("SELECT '#{Time.now.strftime('%F %T.%N')}'::timestamp").getvalue(0, 0)
=> "2012-03-01 19:53:40.036878"

c.exec("SELECT $1::timestamp", [DateTime.now]).getvalue(0, 0)
=> "2012-03-01 19:53:57"

c.exec("SELECT '#{DateTime.now.strftime('%F %T.%N')}'::timestamp").getvalue(0, 0)
=> "2012-03-01 19:54:06.082495"

Comments (5)

  1. Michael Granger repo owner

    All the parameter values get squashed into Strings before they're used:

    // pg_connection.c:845
    param_value = rb_obj_as_string(param_value_tmp);
    

    I'll have to special-case objects whose #to_s loses information like Time and DateTime.

  2. Lars Kanis

    Fractional seconds are respected by the Timestamp encoder and decoder classes. So this is solved with the introduction of type maps in pg-0.18.0.

    For the TIME column type, there is no proper Ruby class which handles time without date. So this can be used as string only.

  3. Log in to comment