From 519010bb77f813971570dceba068272ca2f5b600 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 13 Sep 2012 12:21:06 +0200 Subject: Add --sql-interlude and --sql-interlude-file options --- odb/generator.cxx | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) (limited to 'odb/generator.cxx') diff --git a/odb/generator.cxx b/odb/generator.cxx index 630d320..8b03006 100644 --- a/odb/generator.cxx +++ b/odb/generator.cxx @@ -29,11 +29,16 @@ typedef vector paths; namespace { - static char const file_header[] = + static char const cxx_file_header[] = "// This file was generated by ODB, object-relational mapping (ORM)\n" "// compiler for C++.\n" "//\n\n"; + static char const sql_file_header[] = + "/* This file was generated by ODB, object-relational mapping (ORM)\n" + " * compiler for C++.\n" + " */\n\n"; + void open (ifstream& ifs, string const& path) { @@ -228,13 +233,16 @@ generate (options const& ops, // if (gen_cxx) { - hxx << file_header; - ixx << file_header; - cxx << file_header; + hxx << cxx_file_header; + ixx << cxx_file_header; + cxx << cxx_file_header; } if (gen_sep_schema) - sch << file_header; + sch << cxx_file_header; + + if (gen_sql_schema) + sql << sql_file_header; typedef compiler::ostream_filter ind_filter; typedef compiler::ostream_filter sloc_filter; @@ -529,10 +537,6 @@ generate (options const& ops, auto_ptr ctx ( create_context (sql, unit, ops, fts, model.get ())); - // Copy prologue. - // - append (sql, ops.sql_prologue (), ops.sql_prologue_file ()); - switch (ops.database ()) { case database::mssql: @@ -541,14 +545,37 @@ generate (options const& ops, case database::pgsql: case database::sqlite: { - relational::schema::generate (); + relational::schema::generate_prologue (); + + sql << "/* Begin prologue." << endl + << " */" << endl; + append (sql, ops.sql_prologue (), ops.sql_prologue_file ()); + sql << "/*" << endl + << " * End prologue. */" << endl + << endl; + + relational::schema::generate_drop (); + + sql << "/* Begin interlude." << endl + << " */" << endl; + append (sql, ops.sql_interlude (), ops.sql_interlude_file ()); + sql << "/*" << endl + << " * End interlude. */" << endl + << endl; + + relational::schema::generate_create (); + + sql << "/* Begin epilogue." << endl + << " */" << endl; + append (sql, ops.sql_epilogue (), ops.sql_epilogue_file ()); + sql << "/*" << endl + << " * End epilogue. */" << endl + << endl; + + relational::schema::generate_epilogue (); break; } } - - // Copy epilogue. - // - append (sql, ops.sql_epilogue (), ops.sql_epilogue_file ()); } // Communicate the sloc count to the driver. This is necessary to -- cgit v1.1