You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

56 lines
1.8 KiB

  1. #pragma once
  2. #include "field_value.h"
  3. namespace cpphibernate {
  4. namespace mariadb {
  5. /* field_value_t */
  6. template<
  7. typename T_field>
  8. template<
  9. typename T_schema,
  10. typename T_table>
  11. field_value_t<T_field>::field_value_t(
  12. const table_t& p_owner,
  13. const T_schema& p_schema,
  14. const T_table& p_table,
  15. const T_field& p_field)
  16. : field_simple_t<T_field>::field_simple_t(
  17. p_owner,
  18. p_schema,
  19. p_table,
  20. p_field)
  21. {
  22. this->type = value_props.type();
  23. if (value_props.convert_to_open())
  24. this->convert_to_open = this->convert_to_open + value_props.convert_to_open();
  25. if (value_props.convert_to_close())
  26. this->convert_to_close = value_props.convert_to_close() + this->convert_to_close;
  27. if (value_props.convert_from_open())
  28. this->convert_from_open = this->convert_from_open + value_props.convert_from_open();
  29. if (value_props.convert_from_close())
  30. this->convert_from_close = value_props.convert_from_close() + this->convert_from_close;
  31. }
  32. template<typename T_field>
  33. value_t field_value_t<T_field>::
  34. get(const data_context& context) const
  35. {
  36. using dataset_type = typename mp::decay_t<T_field>::dataset_type;
  37. auto& dataset = context.get<dataset_type>();
  38. return value_props.convert_from(this->_field.getter(dataset));
  39. }
  40. template<typename T_field>
  41. void field_value_t<T_field>
  42. ::set(const data_context& context, const value_t& value) const
  43. {
  44. using dataset_type = typename mp::decay_t<T_field>::dataset_type;
  45. auto& dataset = context.get<dataset_type>();
  46. this->_field.setter(dataset, value_props.convert_to(value));
  47. }
  48. } }