diff options
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | odb/mysql/header.cxx | 10 | ||||
-rw-r--r-- | odb/mysql/source.cxx | 49 |
3 files changed, 41 insertions, 26 deletions
@@ -1,3 +1,11 @@ +Version 1.1.0 + + * Add support for persistent classes without default constructors. For + objects of such classes only the load() and find() database functions + that populate an existing instance can be used. Similarly, only the + load() query result iterator function which populates an existing + instance can be used. + Version 1.0.0 * Initial release. diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx index b22efbb..cc13264 100644 --- a/odb/mysql/header.cxx +++ b/odb/mysql/header.cxx @@ -3,6 +3,8 @@ // copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // license : GNU GPL v3; see accompanying LICENSE file +#include <odb/gcc.hxx> + #include <odb/mysql/common.hxx> #include <odb/mysql/header.hxx> @@ -207,6 +209,7 @@ namespace mysql return; string const& type (c.fq_name ()); + bool def_ctor (TYPE_HAS_DEFAULT_CONSTRUCTOR (c.tree_node ())); id_member_.traverse (c); semantics::data_member& id (*id_member_.member ()); @@ -340,9 +343,10 @@ namespace mysql // find () // - os << "static pointer_type" << endl - << "find (database&, const id_type&);" - << endl; + if (def_ctor) + os << "static pointer_type" << endl + << "find (database&, const id_type&);" + << endl; os << "static bool" << endl << "find (database&, const id_type&, object_type&);" diff --git a/odb/mysql/source.cxx b/odb/mysql/source.cxx index e2cf0e8..c0ce773 100644 --- a/odb/mysql/source.cxx +++ b/odb/mysql/source.cxx @@ -3,7 +3,8 @@ // copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // license : GNU GPL v3; see accompanying LICENSE file -#include <cstddef> // std::size_t +#include <odb/gcc.hxx> + #include <sstream> #include <odb/mysql/common.hxx> @@ -697,6 +698,7 @@ namespace mysql string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); + bool def_ctor (TYPE_HAS_DEFAULT_CONSTRUCTOR (c.tree_node ())); id_member_.traverse (c); semantics::data_member& id (*id_member_.member ()); @@ -950,28 +952,29 @@ namespace mysql // find () // - os << traits << "::pointer_type" << endl - << traits << "::" << endl - << "find (database&, const id_type& id)" - << "{" - << "using namespace mysql;" - << endl - << "connection& conn (mysql::transaction::current ().connection ());" - << "object_statements<object_type>& sts (" << endl - << "conn.statement_cache ().find<object_type> ());" - << endl - << "if (find (sts, id))" - << "{" - << "pointer_type p (access::object_factory< " << type << - " >::create ());" - << "pointer_traits< pointer_type >::guard g (p);" - << "init (pointer_traits< pointer_type >::get_ref (p), " << - "sts.image ());" - << "g.release ();" - << "return p;" - << "}" - << "return pointer_type ();" - << "}"; + if (def_ctor) + os << traits << "::pointer_type" << endl + << traits << "::" << endl + << "find (database&, const id_type& id)" + << "{" + << "using namespace mysql;" + << endl + << "connection& conn (mysql::transaction::current ().connection ());" + << "object_statements<object_type>& sts (" << endl + << "conn.statement_cache ().find<object_type> ());" + << endl + << "if (find (sts, id))" + << "{" + << "pointer_type p (access::object_factory< " << type << + " >::create ());" + << "pointer_traits< pointer_type >::guard g (p);" + << "init (pointer_traits< pointer_type >::get_ref (p), " << + "sts.image ());" + << "g.release ();" + << "return p;" + << "}" + << "return pointer_type ();" + << "}"; os << "bool " << traits << "::" << endl << "find (database&, const id_type& id, object_type& obj)" |