#include #include #include using namespace ::cpphibernate; using namespace ::cpphibernate::mariadb; /* table_t */ table_t::~table_t() { } std::ostream& table_t::print(std::ostream& os) const { using namespace ::cppcore; os << indent << '{' << incindent << indent << "\"id\": " << id << "," // TODO << indent << "\"dataset_id\": " << dataset_id << "," << indent << "\"base_dataset_id\": " << base_dataset_id << "," << indent << "\"derived_dataset_ids\": " << make_print_container(derived_dataset_ids, false) << "," // TODO // << indent << "\"schema_name\": \"" << schema_name << "\"," // << indent << "\"table_name\": \"" << table_name << "\"," << indent << "\"name\": \"" << name << "\"," << indent << "\"base_table\": " << (base_table ? std::string("\"") + base_table->name + "\"" : "null") << "," << indent << "\"derived_tables\":" << make_print_container(derived_tables, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '"'; }) << "," << indent << "\"primary_key_field\": " << (primary_key_field ? std::string("\"") + primary_key_field->name + "\"" : "null") << "," << indent << "\"foreign_key_fields\": " << make_print_container(foreign_key_fields, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '.' << ptr->name << '"'; }) << "," << indent << "\"foreign_table_fields\": " << make_print_container(foreign_table_fields, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '"'; }) << "," << indent << "\"foreign_table_one_fields\": " << make_print_container(foreign_table_one_fields, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '"'; }) << "," << indent << "\"foreign_table_many_fields\": " << make_print_container(foreign_table_many_fields, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '"'; }) << "," << indent << "\"data_fields\": " << make_print_container(data_fields, true, [](auto& s, auto& ptr){ s << indent << '"' << ptr->name << '"'; }) << "," << indent << "\"fields\":" << make_print_container(fields, true, [](auto& s, auto& field) { field->print(s); }) << decindent << indent << '}'; return os; } void table_t::init() { /* build field lookup */ for (auto& f : fields) { assert(static_cast(f)); _lookup.emplace(f->id, f.get()); } }