summaryrefslogtreecommitdiff
path: root/odb/relational/context.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/relational/context.hxx')
-rw-r--r--odb/relational/context.hxx81
1 files changed, 81 insertions, 0 deletions
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 <boris@codesynthesis.com>
+// 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 <odb/context.hxx>
+
+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<context&> (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 <odb/relational/context.ixx>
+
+#endif // ODB_RELATIONAL_CONTEXT_HXX