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/context.hxx | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 odb/relational/context.hxx (limited to 'odb/relational/context.hxx') diff --git a/odb/relational/context.hxx b/odb/relational/context.hxx new file mode 100644 index 0000000..fbd6059 --- /dev/null +++ b/odb/relational/context.hxx @@ -0,0 +1,81 @@ +// file : odb/relational/context.hxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +// license : GNU GPL v3; see accompanying LICENSE file + +#ifndef ODB_RELATIONAL_CONTEXT_HXX +#define ODB_RELATIONAL_CONTEXT_HXX + +#include + +namespace relational +{ + class context: public virtual ::context + { + public: + // Return true if an object or value type has members for which + // the image can grow. + // + bool + grow (semantics::class_&); + + // The same for a member's value type. + // + bool + grow (semantics::data_member&); + + bool + grow (semantics::data_member&, semantics::type&, string const& key_prefix); + + public: + // Quote SQL identifier. + // + string + quote_id (string const&) const; + + public: + context (); + + static context& + current () + { + return dynamic_cast (root_context::current ()); + } + + protected: + // The default implementation returns false. + // + virtual bool + grow_impl (semantics::class_&); + + virtual bool + grow_impl (semantics::data_member&); + + virtual bool + grow_impl (semantics::data_member&, + semantics::type&, + string const&); + + // The default implementation uses the ISO quoting (""). + // + virtual string + quote_id_impl (string const&) const; + + protected: + struct data; + typedef context base_context; + + context (data*); + + protected: + struct data: root_context::data + { + data (std::ostream& os): root_context::data (os) {} + }; + data* data_; + }; +} + +#include + +#endif // ODB_RELATIONAL_CONTEXT_HXX -- cgit v1.1