81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
#include "matador/object/schema.hpp"
|
|
|
|
#include "matador/logger/log_manager.hpp"
|
|
|
|
#include "author.hpp"
|
|
#include "book.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
/*
|
|
* node author
|
|
*
|
|
* relation_endpoints
|
|
* 1. - field_name "books"
|
|
* - type "has_many"
|
|
* - node <author>
|
|
* - foreign endpoint (1) "author"
|
|
*
|
|
* node book
|
|
* 2. - field_name "author_id"
|
|
* - type "belongs_to"
|
|
* - node <book>
|
|
* - foreign endpoint (2) "books"
|
|
*
|
|
* Attach process:
|
|
*
|
|
* attach<author>
|
|
* - relation completer detects "has_many<book>"
|
|
* - has_many<book> doesn't find <book> (not yet attached)
|
|
* - create endpoint (1) without foreign endpoint
|
|
* - create node many_to_many_relation<author, book>("author_id", "id")
|
|
* - 3. create endpoint
|
|
* - field name "author_id"
|
|
* - type "belongs_to"
|
|
* - node <many_to_many_relation<author, book>>
|
|
* - foreign endpoint (1) "author
|
|
* - set foreign endpoint of (1) to endpoint (3)
|
|
* - register endpoint in authors node by type book
|
|
* - attach (internal) node<many_to_many_relation<author, book>>
|
|
*
|
|
* attach<book>
|
|
* - relation completer detects "belongs_to<author>"
|
|
* - belongs_to<author> finds <book>
|
|
* - try to find relation endpoint of type book in authors node
|
|
* - if endpoint was found
|
|
* - validate node in endpoint
|
|
* - if node is of type many_to_many_relation
|
|
* - detach node of endpoint
|
|
* - update node in endpoint to <book>
|
|
* - else
|
|
* - create endpoint <book> (1)
|
|
* - create endpoint <author> (2)
|
|
* - set foreign endpoint of (1) to endpoint (2)
|
|
* - set foreign endpoint of (2) to endpoint (1)
|
|
* - check relation endpoints...
|
|
*/
|
|
using namespace demo;
|
|
using namespace matador;
|
|
|
|
int main() {
|
|
logger::default_min_log_level(logger::log_level::LVL_DEBUG);
|
|
logger::add_log_sink(logger::create_stdout_sink());
|
|
|
|
{
|
|
object::schema schema;
|
|
|
|
auto result = schema.attach<author>("authors")
|
|
.and_then([&schema] { return schema.attach<book>("books"); });
|
|
|
|
schema.dump(std::cout);
|
|
}
|
|
{
|
|
object::schema schema;
|
|
|
|
auto result = schema.attach<book>("books")
|
|
.and_then([&schema] { return schema.attach<author>("authors"); });
|
|
|
|
schema.dump(std::cout);
|
|
}
|
|
}
|