From 3e4e38efb15ef11d228995a70a38b23dd0445246 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 21 Dec 2011 15:35:52 +0200 Subject: Do not select object id in container SELECT statement --- odb/relational/header.hxx | 13 +++++++++---- odb/relational/source.hxx | 15 ++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) (limited to 'odb') diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx index ee6cecf..427b008 100644 --- a/odb/relational/header.hxx +++ b/odb/relational/header.hxx @@ -406,16 +406,18 @@ namespace relational // Figure out column counts. // - size_t data_columns, cond_columns; + size_t id_columns, data_columns, cond_columns; if (!abst) { type& idt (container_idt (m)); if (class_* idc = composite_wrapper (idt)) - data_columns = cond_columns = column_count (*idc).total; + id_columns = column_count (*idc).total; else - data_columns = cond_columns = 1; + id_columns = 1; + + data_columns = cond_columns = id_columns; switch (ck) { @@ -476,6 +478,7 @@ namespace relational // Store column counts for the source generator. // + m.set ("id-column-count", id_columns); m.set ("cond-column-count", cond_columns); m.set ("data-column-count", data_columns); } @@ -504,7 +507,9 @@ namespace relational { // column_count // - os << "static const std::size_t cond_column_count = " << + os << "static const std::size_t id_column_count = " << + id_columns << "UL;" + << "static const std::size_t cond_column_count = " << cond_columns << "UL;" << "static const std::size_t data_column_count = " << data_columns << "UL;" diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index ecdd5d1..3d3ea07 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -948,8 +948,6 @@ namespace relational inv_fid = column_qname (*im, "value", "value"); sc.push_back (statement_column ( - inv_table + "." + inv_fid, *im, "value")); - sc.push_back (statement_column ( inv_table + "." + inv_id, *im, "id")); } else @@ -962,7 +960,6 @@ namespace relational inv_id = column_qname (id); inv_fid = column_qname (*im); - sc.push_back (statement_column (inv_table + "." + inv_fid, *im)); sc.push_back (statement_column (inv_table + "." + inv_id, id)); } @@ -984,11 +981,7 @@ namespace relational } else { - string const& id_col (column_qname (m, "id", "object_id")); - statement_columns sc; - sc.push_back (statement_column (table + "." + id_col, m, "id")); - statement_kind sk (statement_select); // Imperfect forwarding. instance t (table, sk, sc); @@ -1042,6 +1035,7 @@ namespace relational } instance qp; + string const& id_col (column_qname (m, "id", "object_id")); os << strlit (" FROM " + table + " WHERE " + table + "." + id_col + "=" + @@ -1597,6 +1591,7 @@ namespace relational << "bind (b.bind, 0, sts.id_binding ().count, di);" << "sts.data_image_version (di.version);" << "b.version++;" + << "sts.select_image_binding ().version++;" << "}" << "if (!sts.insert_one_statement ().execute ())" << endl << "throw object_already_persistent ();"; @@ -1684,6 +1679,7 @@ namespace relational << "sts.data_image_version (di.version);" << "sts.data_id_binding_version (idb.version);" << "b.version++;" + << "sts.select_image_binding ().version++;" << "}"; } @@ -1704,6 +1700,7 @@ namespace relational << "bind (b.bind, 0, sts.id_binding ().count, di);" << "sts.data_image_version (di.version);" << "b.version++;" + << "sts.select_image_binding ().version++;" << "st.refetch ();" << "}" << "}"; @@ -1748,6 +1745,7 @@ namespace relational << "bind (b.bind, id.bind, id.count, sts.data_image ());" << "sts.data_id_binding_version (id.version);" << "b.version++;" + << "sts.select_image_binding ().version++;" << "}" << "sts.id_binding (id);" << "functions_type& fs (sts.functions ());"; @@ -1775,6 +1773,7 @@ namespace relational << "bind (db.bind, id.bind, id.count, sts.data_image ());" << "sts.data_id_binding_version (id.version);" << "db.version++;" + << "sts.select_image_binding ().version++;" << "}" << "binding& cb (sts.cond_image_binding ());" << "if (id.version != sts.cond_id_binding_version () || " << @@ -1807,6 +1806,7 @@ namespace relational << "bind (db.bind, 0, id.count, sts.data_image ());" << "sts.data_image_version (di.version);" << "db.version++;" + << "sts.select_image_binding ().version++;" << "st.refetch ();" << "}" << "}"; @@ -1843,6 +1843,7 @@ namespace relational << "bind (db.bind, id.bind, id.count, sts.data_image ());" << "sts.data_id_binding_version (id.version);" << "db.version++;" + << "sts.select_image_binding ().version++;" << "}" // // We may need cond if the specialization calls delete_all. -- cgit v1.1