|
- #include <cpphibernate/misc/print_container.h>
- #include <cpphibernate/driver/mariadb/classes/tables/table.h>
-
- #include <cppcore/misc/indent.h>
-
- 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<bool>(f));
- _lookup.emplace(f->id, f.get());
- }
- }
|