aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-03-10 14:39:24 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-03-21 15:40:00 +0200
commit16bab3c7af5502f6a32e896a2789cefb7ffcaa72 (patch)
tree48c85a8985c6015b4278cc6a6a2c795316cc3cdd
parent63403a8a095ceba0ad9a17e46013a46918726181 (diff)
Separate auto increment from database type
-rw-r--r--odb/relational/mysql/context.cxx14
-rw-r--r--odb/relational/mysql/context.hxx7
-rw-r--r--odb/relational/mysql/schema.cxx16
-rw-r--r--odb/relational/schema.hxx10
4 files changed, 24 insertions, 23 deletions
diff --git a/odb/relational/mysql/context.cxx b/odb/relational/mysql/context.cxx
index 90f5766..e241691 100644
--- a/odb/relational/mysql/context.cxx
+++ b/odb/relational/mysql/context.cxx
@@ -231,20 +231,6 @@ namespace relational
// SQL type parsing.
//
- string context::
- database_type_impl (semantics::type& t,
- string const& type,
- semantics::context& ctx,
- column_type_flags f)
- {
- string r (::context::database_type_impl (t, type, ctx, f));
-
- if (!r.empty () && ctx.count ("auto") && (f & ctf_object_id_ref) == 0)
- r += " AUTO_INCREMENT";
-
- return r;
- }
-
static sql_type
parse_sql_type (semantics::data_member& m, std::string const& sql);
diff --git a/odb/relational/mysql/context.hxx b/odb/relational/mysql/context.hxx
index 159fe46..60d2905 100644
--- a/odb/relational/mysql/context.hxx
+++ b/odb/relational/mysql/context.hxx
@@ -95,13 +95,6 @@ namespace relational
virtual string
quote_id_impl (string const&) const;
- protected:
- virtual string
- database_type_impl (semantics::type&,
- string const& type,
- semantics::context&,
- column_type_flags);
-
public:
virtual
~context ();
diff --git a/odb/relational/mysql/schema.cxx b/odb/relational/mysql/schema.cxx
index 19569e4..37f3412 100644
--- a/odb/relational/mysql/schema.cxx
+++ b/odb/relational/mysql/schema.cxx
@@ -37,6 +37,22 @@ namespace relational
}
};
+ struct object_columns: relational::object_columns
+ {
+ object_columns (base const& x): base (x) {}
+
+ virtual void
+ constraints (semantics::data_member& m)
+ {
+ base::constraints (m);
+
+ if (m.count ("auto"))
+ os << " AUTO_INCREMENT";
+ }
+
+ };
+ entry<object_columns> object_columns_;
+
struct member_create: relational::member_create, create_common
{
member_create (base const& x): base (x) {}
diff --git a/odb/relational/schema.hxx b/odb/relational/schema.hxx
index bccb2a9..9da6624 100644
--- a/odb/relational/schema.hxx
+++ b/odb/relational/schema.hxx
@@ -162,8 +162,7 @@ namespace relational
os << " " << quote_id (name) << " " << column_type (m, prefix_);
- if (m.count ("id"))
- os << " PRIMARY KEY";
+ constraints (m);
if (semantics::class_* c = object_pointer (member_type (m, prefix_)))
{
@@ -174,6 +173,13 @@ namespace relational
return true;
}
+ virtual void
+ constraints (semantics::data_member& m)
+ {
+ if (m.count ("id"))
+ os << " PRIMARY KEY";
+ }
+
protected:
string prefix_;
};