aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/pgsql/context.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-02-17 10:08:18 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-02-22 12:29:43 +0200
commit3a1eed21d4d5d0e7f6a9f400420fdc28d7be9b61 (patch)
tree97ba7338fb804c264c9eaaaa41085b08f6483c68 /odb/relational/pgsql/context.cxx
parent3f73cc933b64d7d9a88325d33a3c33a0e28720c6 (diff)
Add support for composite object ids
New pragma id_type (member). New test: common/composite-id. The composite example has also been updated.
Diffstat (limited to 'odb/relational/pgsql/context.cxx')
-rw-r--r--odb/relational/pgsql/context.cxx17
1 files changed, 9 insertions, 8 deletions
diff --git a/odb/relational/pgsql/context.cxx b/odb/relational/pgsql/context.cxx
index 8cc4eca..17ceaaa 100644
--- a/odb/relational/pgsql/context.cxx
+++ b/odb/relational/pgsql/context.cxx
@@ -236,17 +236,20 @@ namespace relational
//
sql_type const& context::
- column_sql_type (semantics::data_member& m, string const& kp)
+ parse_sql_type (string const& t, semantics::data_member& m)
{
- string key (kp.empty ()
- ? string ("pgsql-column-sql-type")
- : "pgsql-" + kp + "-column-sql-type");
+ // If this proves to be too expensive, we can maintain a
+ // cache of parsed types.
+ //
+ data::sql_type_cache::iterator i (data_->sql_type_cache_.find (t));
- if (!m.count (key))
+ if (i != data_->sql_type_cache_.end ())
+ return i->second;
+ else
{
try
{
- m.set (key, parse_sql_type (column_type (m, kp)));
+ return (data_->sql_type_cache_[t] = parse_sql_type (t));
}
catch (invalid_sql_type const& e)
{
@@ -256,8 +259,6 @@ namespace relational
throw operation_failed ();
}
}
-
- return m.get<sql_type> (key);
}
sql_type context::