aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/oracle
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-02-04 17:23:54 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-02-04 17:23:54 +0200
commit8e69f40ab32dc8604b68f360ae30fa961ba036ee (patch)
tree5448cea6c20f7e6c5cd80ae752b49e1a696bcd6e /odb/relational/oracle
parent36920a538c7b207c0b36b2270108a717479e0ed1 (diff)
Implement object loading views
See section 10.2 in the manual for details.
Diffstat (limited to 'odb/relational/oracle')
-rw-r--r--odb/relational/oracle/common.cxx9
-rw-r--r--odb/relational/oracle/common.hxx6
-rw-r--r--odb/relational/oracle/header.cxx42
-rw-r--r--odb/relational/oracle/source.cxx4
4 files changed, 21 insertions, 40 deletions
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_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> image_type_;
- struct image_member: relational::image_member, member_base
+ struct image_member: relational::image_member_impl<sql_type>,
+ 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> 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