From 6fc9edcb2c54d395ea5d9a77bde882cd8ba9ec03 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 14 Aug 2014 09:37:06 +0200 Subject: Draft implementation for INSERT --- odb/relational/header.cxx | 5 +++++ odb/relational/inline.hxx | 15 +++++++++++++++ odb/relational/source.cxx | 19 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/odb/relational/header.cxx b/odb/relational/header.cxx index 476aad3..41fdd26 100644 --- a/odb/relational/header.cxx +++ b/odb/relational/header.cxx @@ -208,6 +208,11 @@ traverse_object (type& c) if (!poly_derived && id != 0) { + if (auto_id) + os << "static id_type" << endl + << "id (const id_image_type&);" + << endl; + if (options.generate_query ()) os << "static id_type" << endl << "id (const image_type&);" diff --git a/odb/relational/inline.hxx b/odb/relational/inline.hxx index ed10e09..76a6763 100644 --- a/odb/relational/inline.hxx +++ b/odb/relational/inline.hxx @@ -217,6 +217,7 @@ namespace relational using semantics::data_member; data_member* id (id_member (c)); + bool auto_id (id && auto_ (*id)); bool base_id (id && &id->scope () != &c); // Comes from base. data_member* optimistic (context::optimistic (c)); @@ -251,6 +252,20 @@ namespace relational { if (!poly_derived) { + // id (id_image_type) + // + if (auto_id) + { + os << "inline" << endl + << traits << "::id_type" << endl + << traits << "::" << endl + << "id (const id_image_type& i)" + << "{" + << "return object_traits_impl< " << class_fq_name (*base) << + ", id_" << db << " >::id (i);" + << "}"; + } + // id (image_type) // if (options.generate_query ()) diff --git a/odb/relational/source.cxx b/odb/relational/source.cxx index 33bda4b..6e7ff34 100644 --- a/odb/relational/source.cxx +++ b/odb/relational/source.cxx @@ -174,10 +174,27 @@ traverse_object (type& c) // Functions (abstract and concrete). // - // id (image_type) + // id(), version() // if (!poly_derived && id != 0 && !base_id) { + // id (id_image_type) + // + if (auto_id) + { + os << traits << "::id_type" << endl + << traits << "::" << endl + << "id (const id_image_type& i)" + << "{" + << db << "::database* db (0);" + << "ODB_POTENTIALLY_UNUSED (db);" + << endl + << "id_type id;"; + init_id_value_member_->traverse (*id); + os << "return id;" + << "}"; + } + // id (image) // if (options.generate_query ()) -- cgit v1.1