summaryrefslogtreecommitdiff
path: root/odb/relational/mysql/context.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/relational/mysql/context.hxx')
-rw-r--r--odb/relational/mysql/context.hxx127
1 files changed, 127 insertions, 0 deletions
diff --git a/odb/relational/mysql/context.hxx b/odb/relational/mysql/context.hxx
new file mode 100644
index 0000000..b1de84c
--- /dev/null
+++ b/odb/relational/mysql/context.hxx
@@ -0,0 +1,127 @@
+// file : odb/relational/mysql/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_MYSQL_CONTEXT_HXX
+#define ODB_RELATIONAL_MYSQL_CONTEXT_HXX
+
+#include <odb/relational/context.hxx>
+
+namespace relational
+{
+ namespace mysql
+ {
+ struct sql_type
+ {
+ // Keep the order in each block of types.
+ //
+ enum core_type
+ {
+ // Integral types.
+ //
+ TINYINT,
+ SMALLINT,
+ MEDIUMINT,
+ INT,
+ BIGINT,
+
+ // Float types.
+ //
+ FLOAT,
+ DOUBLE,
+ DECIMAL,
+
+ // Data-time types.
+ //
+ DATE,
+ TIME,
+ DATETIME,
+ TIMESTAMP,
+ YEAR,
+
+ // String and binary types.
+ //
+ CHAR,
+ BINARY,
+ VARCHAR,
+ VARBINARY,
+ TINYTEXT,
+ TINYBLOB,
+ TEXT,
+ BLOB,
+ MEDIUMTEXT,
+ MEDIUMBLOB,
+ LONGTEXT,
+ LONGBLOB,
+
+ // Other types.
+ //
+ BIT,
+ ENUM,
+ SET,
+
+ // Invalid type.
+ //
+ invalid
+ };
+
+ sql_type () : type (invalid), unsign (false), range (false) {}
+
+ core_type type;
+ bool unsign;
+ bool range;
+ unsigned int range_value; // MySQL max value is 2^32 - 1 (LONGBLOG/TEXT).
+ };
+
+ class context: public virtual relational::context
+ {
+ public:
+ sql_type const&
+ db_type (semantics::data_member&, string const& key_prefix = string ());
+
+ protected:
+ virtual bool
+ grow_impl (semantics::class_&);
+
+ virtual bool
+ grow_impl (semantics::data_member&);
+
+ virtual bool
+ grow_impl (semantics::data_member&, semantics::type&, string const&);
+
+ protected:
+ virtual string
+ quote_id_impl (string const&) const;
+
+ private:
+ struct data: base_context::data
+ {
+ data (std::ostream& os): base_context::data (os) {}
+
+ virtual string
+ column_type_impl (semantics::type&,
+ string const& type,
+ semantics::context&,
+ column_type_flags) const;
+ };
+
+ private:
+ data* data_;
+
+ public:
+ static context&
+ current ()
+ {
+ return dynamic_cast<context&> (base_context::current ());
+ }
+
+ context (std::ostream&, semantics::unit&, options_type const&);
+
+ protected:
+ context ();
+ };
+ }
+}
+
+#endif // ODB_RELATIONAL_MYSQL_CONTEXT_HXX