summaryrefslogtreecommitdiff
path: root/odb/mysql-schema.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-07-22 14:33:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-07-22 14:33:21 +0200
commitcea6fb57ac8c9a893c0f404fef6c1469f0b6222b (patch)
treefed8b6ffa8ea2cb6347ece69c0cb81003d0ccbf6 /odb/mysql-schema.cxx
parent5f71c55a1c24c23af1eeb0d664922497a0e5c071 (diff)
Next chunk of functionality
Add SQL language lexer. Implement MySQL type declaration parser. Create sub-directories for databases, currently mysql and tracer. Create MySQL-specific context.
Diffstat (limited to 'odb/mysql-schema.cxx')
-rw-r--r--odb/mysql-schema.cxx141
1 files changed, 0 insertions, 141 deletions
diff --git a/odb/mysql-schema.cxx b/odb/mysql-schema.cxx
deleted file mode 100644
index ea3fece..0000000
--- a/odb/mysql-schema.cxx
+++ /dev/null
@@ -1,141 +0,0 @@
-// file : odb/mysql-schema.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
-// license : GNU GPL v2; see accompanying LICENSE file
-
-#include <odb/mysql-schema.hxx>
-
-namespace
-{
- struct data_member: traversal::data_member, context
- {
- data_member (context& c)
- : context (c), first_ (true)
- {
- }
-
- virtual void
- traverse (type& m)
- {
- if (first_)
- first_ = false;
- else
- os << "," << endl;
-
- os << " `" << column_name (m) << "` " << db_type (m) <<
- " NOT NULL";
-
- if (m.count ("id"))
- os << " PRIMARY KEY";
- }
-
- private:
- bool first_;
- };
-
- struct class_create: traversal::class_, context
- {
- class_create (context& c)
- : context (c)
- {
- }
-
- virtual void
- traverse (type& c)
- {
- if (c.file () != unit.file ())
- return;
-
- if (!c.count ("object"))
- return;
-
- os << "CREATE TABLE `" << table_name (c) << "` (" << endl;
-
- {
- data_member m (*this);
- traversal::names n (m);
- names (c, n);
- }
-
- os << ")";
-
- string const& engine (options.mysql_engine ());
-
- if (engine != "default")
- os << endl
- << " ENGINE=" << engine;
-
- os << ";" << endl
- << endl;
- }
- };
-
- struct class_drop: traversal::class_, context
- {
- class_drop (context& c)
- : context (c)
- {
- }
-
- virtual void
- traverse (type& c)
- {
- if (c.file () != unit.file ())
- return;
-
- if (!c.count ("object"))
- return;
-
- os << "DROP TABLE IF EXISTS `" << table_name (c) << "`;" << endl;
- }
- };
-}
-
-static char const file_header[] =
- "/* This file was generated by CodeSynthesis ODB object persistence\n"
- " * compiler for C++.\n"
- " */\n\n";
-
-void
-generate_mysql_schema (context& ctx)
-{
- ctx.os << file_header;
-
- // Drop.
- //
- {
- traversal::unit unit;
- traversal::defines unit_defines;
- traversal::namespace_ ns;
- class_drop c (ctx);
-
- 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);
-
- unit >> unit_defines >> ns;
- unit_defines >> c;
-
- traversal::defines ns_defines;
-
- ns >> ns_defines >> ns;
- ns_defines >> c;
- unit.dispatch (ctx.unit);
- }
-}