From f3f682c074117fda84bf51a4ce9a378d950a04de Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 30 Aug 2013 06:06:26 +0200 Subject: Statement processing/optimization base work --- odb/relational/pgsql/source.cxx | 42 +++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'odb/relational/pgsql') diff --git a/odb/relational/pgsql/source.cxx b/odb/relational/pgsql/source.cxx index d5fe8fd..7c5f2f6 100644 --- a/odb/relational/pgsql/source.cxx +++ b/odb/relational/pgsql/source.cxx @@ -631,28 +631,28 @@ namespace relational { class_ (base const& x): base (x) {} - virtual void + virtual string persist_statement_extra (type& c, relational::query_parameters&, persist_position p) { - if (p != persist_after_values) - return; + string r; - semantics::data_member* id (id_member (c)); + if (p == persist_after_values) + { + semantics::data_member* id (id_member (c)); - type* poly_root (polymorphic (c)); - bool poly_derived (poly_root != 0 && poly_root != &c); + type* poly_root (polymorphic (c)); + bool poly_derived (poly_root != 0 && poly_root != &c); - if (id != 0 && !poly_derived && id->count ("auto")) - { // Top-level auto id. // - os << endl - << strlit (" RETURNING " + - convert_from (column_qname (*id, column_prefix ()), - *id)); + if (id != 0 && !poly_derived && id->count ("auto")) + r = "RETURNING " + + convert_from (column_qname (*id, column_prefix ()), *id); } + + return r; } virtual void @@ -847,7 +847,10 @@ namespace relational } virtual void - object_query_statement_ctor_args (type&, string const& q, bool prep) + object_query_statement_ctor_args (type&, + string const& q, + bool process, + bool prep) { os << "sts.connection ()," << endl; @@ -856,7 +859,9 @@ namespace relational else os << "query_statement_name," << endl; - os << "query_statement + " << q << ".clause ()," << endl + os << "text," << endl + << process << "," << endl // Process. + << "true," << endl // Optimize. << q << ".parameter_types ()," << endl << q << ".parameter_count ()," << endl << q << ".parameters_binding ()," << endl @@ -868,14 +873,17 @@ namespace relational { os << "conn," << endl << "erase_query_statement_name," << endl - << "erase_query_statement + q.clause ()," << endl + << "text," << endl << "q.parameter_types ()," << endl << "q.parameter_count ()," << endl << "q.parameters_binding ()"; } virtual void - view_query_statement_ctor_args (type&, string const& q, bool prep) + view_query_statement_ctor_args (type&, + string const& q, + bool process, + bool prep) { os << "sts.connection ()," << endl; @@ -885,6 +893,8 @@ namespace relational os << "query_statement_name," << endl; os << q << ".clause ()," << endl + << process << "," << endl // Process. + << "true," << endl // Optimize. << q << ".parameter_types ()," << endl << q << ".parameter_count ()," << endl << q << ".parameters_binding ()," << endl -- cgit v1.1