summaryrefslogtreecommitdiff
path: root/odb
diff options
context:
space:
mode:
authorConstantin Michael <constantin@codesynthesis.com>2011-10-20 20:46:48 +0200
committerConstantin Michael <constantin@codesynthesis.com>2011-10-21 11:47:15 +0200
commit050822b74f51a339501970f21f00916f4deb8836 (patch)
tree254a48704b67ceafb6e324abb6916379bf49317c /odb
parentbdf1df065820d84747f9b183306d30a55c60f98f (diff)
Refactor persist statement hook
Diffstat (limited to 'odb')
-rw-r--r--odb/relational/oracle/source.cxx20
-rw-r--r--odb/relational/source.hxx43
2 files changed, 22 insertions, 41 deletions
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<relational::object_columns> ct (false);
- ct->traverse (c);
-
- string values;
- instance<relational::persist_statement_params> 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<query_parameters> 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<object_columns> ct (false);
- ct->traverse (c);
-
- string values;
- instance<persist_statement_params> 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<object_columns> ct (false);
+ ct->traverse (c);
+
+ string values;
+ instance<query_parameters> qp;
+ instance<persist_statement_params> pt (values, *qp);
+ pt->traverse (c);
+
+ os << strlit (") VALUES (" + values + ")");
- persist_stmt (c);
+ persist_stmt_extra (c, *qp);
os << ";"
<< endl;