aboutsummaryrefslogtreecommitdiff
path: root/odb/generator.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-09-13 12:21:06 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-09-13 12:21:06 +0200
commit519010bb77f813971570dceba068272ca2f5b600 (patch)
treec95fd514295184a88d4caf62ded3de78ba8f579c /odb/generator.cxx
parentdce27fe8994e819a463e83212779d3d43bd2ba2e (diff)
Add --sql-interlude and --sql-interlude-file options
Diffstat (limited to 'odb/generator.cxx')
-rw-r--r--odb/generator.cxx55
1 files changed, 41 insertions, 14 deletions
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<path> 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<compiler::cxx_indenter, char> ind_filter;
typedef compiler::ostream_filter<compiler::sloc_counter, char> sloc_filter;
@@ -529,10 +537,6 @@ generate (options const& ops,
auto_ptr<context> 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