aboutsummaryrefslogtreecommitdiff
path: root/odb
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-12-21 15:35:52 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-20 15:43:45 +0200
commit3e4e38efb15ef11d228995a70a38b23dd0445246 (patch)
treeba2d55363c0adfbecf6d424d4999df3d64c82643 /odb
parentc6d92f2f979eae471f49d9af1768b7b05f3a6f6f (diff)
Do not select object id in container SELECT statement
Diffstat (limited to 'odb')
-rw-r--r--odb/relational/header.hxx13
-rw-r--r--odb/relational/source.hxx15
2 files changed, 17 insertions, 11 deletions
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<object_columns> t (table, sk, sc);
@@ -1042,6 +1035,7 @@ namespace relational
}
instance<query_parameters> 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.