summaryrefslogtreecommitdiff
path: root/odb/mysql/sql-schema.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/mysql/sql-schema.cxx')
-rw-r--r--odb/mysql/sql-schema.cxx98
1 files changed, 98 insertions, 0 deletions
diff --git a/odb/mysql/sql-schema.cxx b/odb/mysql/sql-schema.cxx
new file mode 100644
index 0000000..7c71b24
--- /dev/null
+++ b/odb/mysql/sql-schema.cxx
@@ -0,0 +1,98 @@
+// file : odb/mysql/sql-schema.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : GNU GPL v3; see accompanying LICENSE file
+
+#include <odb/mysql/common.hxx>
+#include <odb/mysql/schema.hxx>
+#include <odb/mysql/sql-schema.hxx>
+
+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);
+ }
+ }
+}