From 16bab3c7af5502f6a32e896a2789cefb7ffcaa72 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 10 Mar 2011 14:39:24 +0200 Subject: Separate auto increment from database type --- odb/relational/mysql/context.cxx | 14 -------------- odb/relational/mysql/context.hxx | 7 ------- odb/relational/mysql/schema.cxx | 16 ++++++++++++++++ odb/relational/schema.hxx | 10 ++++++++-- 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_; + 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_; }; -- cgit v1.1