From 7ae497743c7b042904fe1f6b4153ab3f4763ff2b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 10 Mar 2011 08:44:28 +0200 Subject: Split MySQL code generator into common and db-specific parts The common part (in relational/) still has some MySQL-specific parts. Also, add the notion of the current context which is used to avoid explicitly passing the context object to every generator's c-tor. --- odb/relational/inline.hxx | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 odb/relational/inline.hxx (limited to 'odb/relational/inline.hxx') diff --git a/odb/relational/inline.hxx b/odb/relational/inline.hxx new file mode 100644 index 0000000..ef0e32e --- /dev/null +++ b/odb/relational/inline.hxx @@ -0,0 +1,107 @@ +// file : odb/relational/inline.hxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +// license : GNU GPL v3; see accompanying LICENSE file + +#ifndef ODB_RELATIONAL_INLINE_HXX +#define ODB_RELATIONAL_INLINE_HXX + +#include +#include + +namespace relational +{ + namespace inline_ + { + struct class_: traversal::class_, virtual context + { + typedef class_ base; + + virtual void + traverse (type& c) + { + if (c.file () != unit.file ()) + return; + + if (c.count ("object")) + traverse_object (c); + else if (comp_value (c)) + traverse_value (c); + } + + virtual void + traverse_object (type& c) + { + string const& type (c.fq_name ()); + string traits ("access::object_traits< " + type + " >"); + semantics::data_member& id (id_member (c)); + + os << "// " << c.name () << endl + << "//" << endl + << endl; + + // query_type + // + if (options.generate_query ()) + { + os << "inline" << endl + << traits << "::query_type::" << endl + << "query_type ()" + << "{" + << "}"; + + os << "inline" << endl + << traits << "::query_type::" << endl + << "query_type (const std::string& q)" << endl + << " : query_base_type (q)" + << "{" + << "}"; + + os << "inline" << endl + << traits << "::query_type::" << endl + << "query_type (const query_base_type& q)" << endl + << " : query_base_type (q)" + << "{" + << "}"; + } + + // id () + // + os << "inline" << endl + << traits << "::id_type" << endl + << traits << "::" << endl + << "id (const object_type& obj)" + << "{" + << "return obj." << id.name () << ";" << endl + << "}"; + + // load_() + // + if (!has_a (c, test_container)) + { + os << "inline" << endl + << "void " << traits << "::" << endl + << "load_ (mysql::object_statements< object_type >&, object_type&)" + << "{" + << "}"; + } + } + + virtual void + traverse_value (type&) + { + /* + string const& type (c.fq_name ()); + string traits ("access::composite_value_traits< " + type + " >"); + + os << "// " << c.name () << endl + << "//" << endl + << endl; + + */ + } + }; + } +} + +#endif // ODB_RELATIONAL_INLINE_HXX -- cgit v1.1