// file : odb/relational/schema.cxx // copyright : Copyright (c) 2009-2018 Code Synthesis Tools CC // license : GNU GPL v3; see accompanying LICENSE file #include #include #include #include #include using namespace std; namespace relational { namespace schema { void generate_prologue () { instance file; file->prologue (); } void generate_epilogue () { instance file; file->epilogue (); } void generate_drop () { context ctx; instance em; emitter_ostream emos (*em); schema_format f (schema_format::sql); instance model (*em, emos, f); instance table (*em, emos, f); trav_rel::qnames names; model >> names >> table; // Pass 1 and 2. // for (unsigned short pass (1); pass < 3; ++pass) { model->pass (pass); table->pass (pass); model->traverse (*ctx.model); } if (ctx.model->version () != 0 && !ctx.options.suppress_schema_version ()) { instance vt (*em, emos, f); vt->create_table (); vt->drop (); } } void generate_create () { context ctx; instance em; emitter_ostream emos (*em); schema_format f (schema_format::sql); instance model (*em, emos, f); instance table (*em, emos, f); trav_rel::qnames names; model >> names >> table; // Pass 1 and 2. // for (unsigned short pass (1); pass < 3; ++pass) { model->pass (pass); table->pass (pass); model->traverse (*ctx.model); } if (ctx.model->version () != 0 && !ctx.options.suppress_schema_version ()) { instance vt (*em, emos, f); if (ctx.options.omit_drop ()) vt->create_table (); vt->create (ctx.model->version ()); } } void generate_migrate_pre (sema_rel::changeset& cs) { context ctx; instance em; emitter_ostream emos (*em); schema_format f (schema_format::sql); instance changeset (*em, emos, f); instance ctable (*em, emos, f); instance atable (*em, emos, f); trav_rel::qnames names; changeset >> names; names >> ctable; names >> atable; // Pass 1 and 2. // for (unsigned short pass (1); pass < 3; ++pass) { changeset->pass (pass); ctable->pass (pass); atable->pass (pass); changeset->traverse (cs); } if (!ctx.options.suppress_schema_version ()) { instance vt (*em, emos, f); vt->migrate_pre (cs.version ()); } } void generate_migrate_post (sema_rel::changeset& cs) { context ctx; instance em; emitter_ostream emos (*em); schema_format f (schema_format::sql); instance changeset (*em, emos, f); instance dtable (*em, emos, f); instance atable (*em, emos, f); trav_rel::qnames names; changeset >> names; names >> dtable; names >> atable; // Pass 1 and 2. // for (unsigned short pass (1); pass < 3; ++pass) { changeset->pass (pass); dtable->pass (pass); atable->pass (pass); changeset->traverse (cs); } if (!ctx.options.suppress_schema_version ()) { instance vt (*em, emos, f); vt->migrate_post (); } } } }