[odb-users] time_point to timestamp - pgsql?
Anurag Gupta
anuragg at miltenyi.com
Wed Sep 6 20:30:48 EDT 2023
Hello,
I read somewhere that odb natively supports std::chrono::system_clock::time_point but can't find the reference anywhere. I am trying to save date time using time_point as following:
using datetime = std::chrono::system_clock::time_point;
#pragma db value (datetime) type ("timestamp") // Is this correct?
#pragma db object
someClass {
...
...
private:
datetime last_modified;
datetime created_date_time;
...
}
And after generating odb support code (using odb CLI) - here is the code snippet from someClass-odb.cxx:
// last_modified
//
{
::datetime const& v =
o.last_modified;
bool is_null (false);
pgsql::value_traits<
::datetime,
pgsql::id_timestamp >::set_image ( //***** HERE I GET THE ERROR
i.last_modified_value, is_null, v);
i.last_modified_null = is_null;
}
// created_date_and_time
//
{
::datetime const& v =
o.created_date_and_time;
bool is_null (false);
pgsql::value_traits<
::datetime,
pgsql::id_timestamp >::set_image (
i.created_date_and_time_value, is_null, v);
i.created_date_and_time_null = is_null;
}
Right when building it shows error:
/usr/local/include/odb/pgsql/traits.hxx: In instantiation of ‘static void odb::pgsql::default_value_traits<T, <anonymous> >::set_image(image_type&, bool&, T) [with T = std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >; odb::pgsql::database_type_id ID = odb::pgsql::id_timestamp; image_type = long long int]’:
....../build/odb_gen/mbom_classes-odb.cxx:414:44: required from here //****** THIS LINE POINTS TO ABOVE SOURCE LINE
/usr/local/include/odb/pgsql/traits.hxx:373:43: error: invalid cast from type ‘std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >’ to type ‘odb::pgsql::default_value_traits<std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >, odb::pgsql::id_timestamp>::image_type’ {aka ‘long long int’}
373 | i = details::endian_traits::hton (image_type (v));
| ^~~~~~~~~~~~~~
What am I doing wrong? How can I use std::chrono::system_clock::time_point in my code that can be persisted to PGSQL?
Thank you!
Anurag Gupta
More information about the odb-users
mailing list