From 8e69f40ab32dc8604b68f360ae30fa961ba036ee Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 4 Feb 2015 17:23:54 +0200 Subject: Implement object loading views See section 10.2 in the manual for details. --- odb/relational/oracle/common.cxx | 9 +++++++++ odb/relational/oracle/common.hxx | 6 ++++-- odb/relational/oracle/header.cxx | 42 ++++++---------------------------------- odb/relational/oracle/source.cxx | 4 ++-- 4 files changed, 21 insertions(+), 40 deletions(-) (limited to 'odb/relational/oracle') diff --git a/odb/relational/oracle/common.cxx b/odb/relational/oracle/common.cxx index 9bfafde..a4f89a4 100644 --- a/odb/relational/oracle/common.cxx +++ b/odb/relational/oracle/common.cxx @@ -170,6 +170,13 @@ namespace relational // member_image_type:: + member_image_type (base const& x) + : member_base::base (x), // virtual base + base (x) + { + } + + member_image_type:: member_image_type (semantics::type* type, string const& fq_type, string const& key_prefix) @@ -270,6 +277,8 @@ namespace relational type_ = "oracle::lob_callback"; } + entry member_image_type_; + // // member_database_type // diff --git a/odb/relational/oracle/common.hxx b/odb/relational/oracle/common.hxx index 7872e5a..fc21468 100644 --- a/odb/relational/oracle/common.hxx +++ b/odb/relational/oracle/common.hxx @@ -89,12 +89,14 @@ namespace relational } }; - struct member_image_type: member_base + struct member_image_type: relational::member_image_type, + member_base { + member_image_type (base const&); member_image_type (semantics::type* type = 0, string const& fq_type = string (), string const& key_prefix = string ()); - string + virtual string image_type (semantics::data_member&); virtual void diff --git a/odb/relational/oracle/header.cxx b/odb/relational/oracle/header.cxx index 055ef7b..8ce4a20 100644 --- a/odb/relational/oracle/header.cxx +++ b/odb/relational/oracle/header.cxx @@ -52,39 +52,14 @@ namespace relational }; entry image_type_; - struct image_member: relational::image_member, member_base + struct image_member: relational::image_member_impl, + member_base { image_member (base const& x) - : member_base::base (x), // virtual base - base (x), - member_base (x), - member_image_type_ (base::type_override_, - base::fq_type_override_, - base::key_prefix_) - { - } - - virtual bool - pre (member_info& mi) - { - if (container (mi)) - return false; - - image_type = member_image_type_.image_type (mi.m); - - if (var_override_.empty ()) - os << "// " << mi.m.name () << endl - << "//" << endl; - - return true; - } - - virtual void - traverse_composite (member_info& mi) - { - os << image_type << " " << mi.var << "value;" - << endl; - } + : member_base::base (x), // virtual base + member_base::base_impl (x), // virtual base + base_impl (x), + member_base (x) {} virtual void traverse_int32 (member_info& mi) @@ -219,11 +194,6 @@ namespace relational << "oracle::lob " << mi.var << "lob;" << endl; } - - private: - string image_type; - - member_image_type member_image_type_; }; entry image_member_; diff --git a/odb/relational/oracle/source.cxx b/odb/relational/oracle/source.cxx index 2a795e2..ea4a14b 100644 --- a/odb/relational/oracle/source.cxx +++ b/odb/relational/oracle/source.cxx @@ -375,9 +375,9 @@ namespace relational } virtual void - get_null (member_info& mi) + get_null (string const& var) const { - os << "i." << mi.var << "indicator == -1"; + os << "i." << var << "indicator == -1"; } virtual void -- cgit v1.1