diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-03 18:23:51 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-03 18:23:51 +0200 |
commit | 80b868be1e7c249daa714b0c7a5f87694edb8664 (patch) | |
tree | d8e0dd6eca09d33d70224f7289ae096a0976cd6b /odb/relational/mssql | |
parent | 89ba09f073b103953c53e63bd78f644973d9154e (diff) |
Implement nested id support
Now the 'id' specifier can optionally include the data member path
to the id inside the composite value. For example:
#pragma db id(first)
std::pair<int, int> p;
Note that one somewhat counter-intuitive aspect of this new feature
is that the whole member marked with id ('p' in the above example)
and not just the actual id member ('p.first' in the above example)
is treated as readonly.
Such nested id also cannot be automatically assigned (auto specifier).
Diffstat (limited to 'odb/relational/mssql')
-rw-r--r-- | odb/relational/mssql/source.cxx | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/odb/relational/mssql/source.cxx b/odb/relational/mssql/source.cxx index 89b5702..42c29a7 100644 --- a/odb/relational/mssql/source.cxx +++ b/odb/relational/mssql/source.cxx @@ -44,10 +44,9 @@ namespace relational string const& column) { // Don't add a column for auto id in the INSERT statement. + // Only simple, direct id can be auto. // - if (sk_ == statement_insert && - key_prefix_.empty () && - context::id (m) && auto_(m)) // Only simple id can be auto. + if (sk_ == statement_insert && key_prefix_.empty () && auto_ (m)) return false; // Don't update the ROWVERSION column explicitly. @@ -987,7 +986,7 @@ namespace relational // See if we have auto id or ROWVERSION version. // - semantics::data_member* id (id_member (c)); + data_member_path* id (id_member (c)); semantics::data_member* ver (optimistic (c)); if (id != 0 && !auto_ (*id)) @@ -1047,7 +1046,8 @@ namespace relational throw operation_failed (); } - r = "; SELECT " + convert_from ("SCOPE_IDENTITY()", *id); + r = "; SELECT " + + convert_from ("SCOPE_IDENTITY()", *id->back ()); } return r; @@ -1061,8 +1061,8 @@ namespace relational // Top-level auto id column. // if (id != 0) - r += "INSERTED." + convert_from ( - column_qname (*id, column_prefix ()), *id); + r += "INSERTED." + + convert_from (column_qname (*id), *id->back ()); // Top-level version column. // |