From 050822b74f51a339501970f21f00916f4deb8836 Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Thu, 20 Oct 2011 20:46:48 +0200 Subject: Refactor persist statement hook --- odb/relational/oracle/source.cxx | 20 +++---------------- odb/relational/source.hxx | 43 ++++++++++++++++++---------------------- 2 files changed, 22 insertions(+), 41 deletions(-) (limited to 'odb/relational') diff --git a/odb/relational/oracle/source.cxx b/odb/relational/oracle/source.cxx index 39805e9..e026214 100644 --- a/odb/relational/oracle/source.cxx +++ b/odb/relational/oracle/source.cxx @@ -765,31 +765,17 @@ namespace relational } virtual void - persist_stmt (type& c) + persist_stmt_extra (type& c, relational::query_parameters& qp) { - os << strlit ("INSERT INTO " + table_qname (c) + " (") << endl; - - instance ct (false); - ct->traverse (c); - - string values; - instance pt (values); - pt->traverse (c); - - os << strlit (") VALUES (" + values + ")"); - semantics::data_member* id (id_member (c)); if (id->count ("auto")) { - ostringstream n; - n << pt->count () + 1; - os << endl << strlit (" RETURNING " + column_qname (*id) + - " INTO :" + - n.str ()); + " INTO " + + qp.next ()); } } }; diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index 7a3a695..99f6073 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -1955,8 +1955,8 @@ namespace relational // struct persist_statement_params: object_members_base, virtual context { - persist_statement_params (string& params) - : params_ (params), count_ (0) + persist_statement_params (string& params, query_parameters& qp) + : params_ (params), count_ (0), qp_ (qp) { } @@ -1969,22 +1969,16 @@ namespace relational params_ += ','; if (m.count ("id") && m.count ("auto")) - params_ += qp->auto_id (); + params_ += qp_.auto_id (); else - params_ += qp->next (); + params_ += qp_.next (); } } - size_t - count () const - { - return count_; - } - private: string& params_; size_t count_; - instance qp; + query_parameters& qp_; }; // @@ -2069,18 +2063,8 @@ namespace relational // virtual void - persist_stmt (type& c) + persist_stmt_extra (type&, query_parameters&) { - os << strlit ("INSERT INTO " + table_qname(c) + " (") << endl; - - instance ct (false); - ct->traverse (c); - - string values; - instance pt (values); - pt->traverse (c); - - os << strlit (") VALUES (" + values + ")"); } // @@ -2334,9 +2318,20 @@ namespace relational // { os << "const char " << traits << "::persist_statement[] " << - "=" << endl; + "=" << endl + << strlit ("INSERT INTO " + table_qname(c) + " (") << endl; + + instance ct (false); + ct->traverse (c); + + string values; + instance qp; + instance pt (values, *qp); + pt->traverse (c); + + os << strlit (") VALUES (" + values + ")"); - persist_stmt (c); + persist_stmt_extra (c, *qp); os << ";" << endl; -- cgit v1.1