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.
 
 
 

67 lines
3.7 KiB

  1. #include <cpphibernate/misc/print_container.h>
  2. #include <cpphibernate/driver/mariadb/classes/tables/table.h>
  3. #include <cppcore/misc/indent.h>
  4. using namespace ::cpphibernate;
  5. using namespace ::cpphibernate::mariadb;
  6. /* table_t */
  7. table_t::~table_t()
  8. { }
  9. std::ostream& table_t::print(std::ostream& os) const
  10. {
  11. using namespace ::cppcore;
  12. os << indent << '{'
  13. << incindent
  14. << indent << "\"id\": " << id << ","
  15. // TODO
  16. << indent << "\"dataset_id\": " << dataset_id << ","
  17. << indent << "\"base_dataset_id\": " << base_dataset_id << ","
  18. << indent << "\"derived_dataset_ids\": " << make_print_container(derived_dataset_ids, false) << ","
  19. // TODO
  20. // << indent << "\"schema_name\": \"" << schema_name << "\","
  21. // << indent << "\"table_name\": \"" << table_name << "\","
  22. << indent << "\"name\": \"" << name << "\","
  23. << indent << "\"base_table\": " << (base_table ? std::string("\"") + base_table->name + "\"" : "null") << ","
  24. << indent << "\"derived_tables\":" << make_print_container(derived_tables, true, [](auto& s, auto& ptr){
  25. s << indent << '"' << ptr->name << '"';
  26. }) << ","
  27. << indent << "\"primary_key_field\": " << (primary_key_field ? std::string("\"") + primary_key_field->name + "\"" : "null") << ","
  28. << indent << "\"foreign_key_fields\": " << make_print_container(foreign_key_fields, true, [](auto& s, auto& ptr){
  29. s << indent << '"' << ptr->name << '.' << ptr->name << '"';
  30. }) << ","
  31. << indent << "\"foreign_table_fields\": " << make_print_container(foreign_table_fields, true, [](auto& s, auto& ptr){
  32. s << indent << '"' << ptr->name << '"';
  33. }) << ","
  34. << indent << "\"foreign_table_one_fields\": " << make_print_container(foreign_table_one_fields, true, [](auto& s, auto& ptr){
  35. s << indent << '"' << ptr->name << '"';
  36. }) << ","
  37. << indent << "\"foreign_table_many_fields\": " << make_print_container(foreign_table_many_fields, true, [](auto& s, auto& ptr){
  38. s << indent << '"' << ptr->name << '"';
  39. }) << ","
  40. << indent << "\"data_fields\": " << make_print_container(data_fields, true, [](auto& s, auto& ptr){
  41. s << indent << '"' << ptr->name << '"';
  42. }) << ","
  43. << indent << "\"fields\":" << make_print_container(fields, true, [](auto& s, auto& field) {
  44. field->print(s);
  45. })
  46. << decindent
  47. << indent << '}';
  48. return os;
  49. }
  50. void table_t::init()
  51. {
  52. /* build field lookup */
  53. for (auto& f : fields)
  54. {
  55. assert(static_cast<bool>(f));
  56. _lookup.emplace(f->id, f.get());
  57. }
  58. }