diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-10 14:39:24 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-21 15:40:00 +0200 |
commit | 16bab3c7af5502f6a32e896a2789cefb7ffcaa72 (patch) | |
tree | 48c85a8985c6015b4278cc6a6a2c795316cc3cdd | |
parent | 63403a8a095ceba0ad9a17e46013a46918726181 (diff) |
Separate auto increment from database type
-rw-r--r-- | odb/relational/mysql/context.cxx | 14 | ||||
-rw-r--r-- | odb/relational/mysql/context.hxx | 7 | ||||
-rw-r--r-- | odb/relational/mysql/schema.cxx | 16 | ||||
-rw-r--r-- | 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> 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_; }; |