// file : odb/mysql/sql-schema.cxx // author : Boris Kolpackov // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC // license : GNU GPL v3; see accompanying LICENSE file #include #include #include using namespace std; namespace mysql { namespace { struct schema_emitter: emitter, context { schema_emitter (context& c): context (c) {} virtual void pre () { first_ = true; } virtual void line (const std::string& l) { if (first_) first_ = false; else os << endl; os << l; } virtual void post () { os << ';' << endl << endl; } private: bool first_; }; static char const file_header[] = "/* This file was generated by ODB, object-relational mapping (ORM)\n" " * compiler for C++.\n" " */\n\n"; } void generate_schema (context& ctx) { ctx.os << file_header; schema_emitter emitter (ctx); // Drop. // { traversal::unit unit; traversal::defines unit_defines; traversal::namespace_ ns; class_drop c (ctx, emitter); unit >> unit_defines >> ns; unit_defines >> c; traversal::defines ns_defines; ns >> ns_defines >> ns; ns_defines >> c; unit.dispatch (ctx.unit); } ctx.os << endl; // Create. // { traversal::unit unit; traversal::defines unit_defines; traversal::namespace_ ns; class_create c (ctx, emitter); unit >> unit_defines >> ns; unit_defines >> c; traversal::defines ns_defines; ns >> ns_defines >> ns; ns_defines >> c; unit.dispatch (ctx.unit); } } }