Oracle ODB Runtime Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
no-id-object-statements.hxx
Go to the documentation of this file.
1 // file : odb/oracle/no-id-object-statements.hxx
2 // copyright : Copyright (c) 2005-2013 Code Synthesis Tools CC
3 // license : ODB NCUEL; see accompanying LICENSE file
4 
5 #ifndef ODB_ORACLE_NO_ID_OBJECT_STATEMENTS_HXX
6 #define ODB_ORACLE_NO_ID_OBJECT_STATEMENTS_HXX
7 
8 #include <odb/pre.hxx>
9 
10 #include <cstddef> // std::size_t
11 
12 #include <odb/forward.hxx>
13 #include <odb/traits.hxx>
14 
15 #include <odb/details/shared-ptr.hxx>
16 
17 #include <odb/oracle/version.hxx>
18 #include <odb/oracle/forward.hxx>
20 #include <odb/oracle/binding.hxx>
21 #include <odb/oracle/statement.hxx>
23 
24 namespace odb
25 {
26  namespace oracle
27  {
28  //
29  // Implementation for objects without object id.
30  //
31 
32  template <typename T>
33  class no_id_object_statements: public statements_base
34  {
35  public:
36  typedef T object_type;
39  typedef typename object_traits::image_type image_type;
40 
42 
43  public:
45 
46  virtual
48 
49  // Object image.
50  //
51  image_type&
52  image ()
53  {
54  return image_;
55  }
56 
57  // Insert binding.
58  //
59  std::size_t
60  insert_image_version () const { return insert_image_version_;}
61 
62  void
63  insert_image_version (std::size_t v) {insert_image_version_ = v;}
64 
65  binding&
66  insert_image_binding () {return insert_image_binding_;}
67 
68  // Select binding (needed for query support).
69  //
70  std::size_t
71  select_image_version () const { return select_image_version_;}
72 
73  void
74  select_image_version (std::size_t v) {select_image_version_ = v;}
75 
76  binding&
77  select_image_binding () {return select_image_binding_;}
78 
79  // Statements.
80  //
83  {
84  if (persist_ == 0)
85  persist_.reset (
86  new (details::shared) insert_statement_type (
87  conn_,
88  object_traits::persist_statement,
89  object_traits::versioned, // Process if versioned.
90  insert_image_binding_,
91  false));
92 
93  return *persist_;
94  }
95 
96  public:
97  // select = total
98  // insert = total - inverse; inverse == 0 for object without id
99  //
100  static const std::size_t insert_column_count =
101  object_traits::column_count;
102 
103  static const std::size_t select_column_count =
104  object_traits::column_count;
105 
106  private:
109 
110  private:
111  image_type image_;
112 
113  // Select binding.
114  //
115  std::size_t select_image_version_;
116  binding select_image_binding_;
117  bind select_image_bind_[select_column_count];
118 
119  // Insert binding.
120  //
121  std::size_t insert_image_version_;
122  binding insert_image_binding_;
123  bind insert_image_bind_[insert_column_count];
124 
125  details::shared_ptr<insert_statement_type> persist_;
126  };
127  }
128 }
129 
130 #include <odb/oracle/no-id-object-statements.txx>
131 
132 #include <odb/post.hxx>
133 
134 #endif // ODB_ORACLE_NO_ID_OBJECT_STATEMENTS_HXX
Definition: connection.hxx:35
Definition: forward.hxx:64
image_type & image()
Definition: no-id-object-statements.hxx:52
std::size_t insert_image_version() const
Definition: no-id-object-statements.hxx:60
no_id_object_statements(connection_type &)
binding & insert_image_binding()
Definition: no-id-object-statements.hxx:66
access::object_traits< T >::pointer_type pointer_type
connection_type & conn_
Definition: statements-base.hxx:56
Definition: binding.hxx:21
object_traits::image_type image_type
Definition: no-id-object-statements.hxx:39
binding & select_image_binding()
Definition: no-id-object-statements.hxx:77
insert_statement_type & persist_statement()
Definition: no-id-object-statements.hxx:82
Definition: oracle-types.hxx:78
object_traits_impl< object_type, id_oracle > object_traits
Definition: no-id-object-statements.hxx:37
std::size_t select_image_version() const
Definition: no-id-object-statements.hxx:71
static const std::size_t select_column_count
Definition: no-id-object-statements.hxx:103
void insert_image_version(std::size_t v)
Definition: no-id-object-statements.hxx:63
Definition: statement.hxx:254
object_traits::pointer_type pointer_type
Definition: no-id-object-statements.hxx:38
oracle::insert_statement insert_statement_type
Definition: no-id-object-statements.hxx:41
void select_image_version(std::size_t v)
Definition: no-id-object-statements.hxx:74
static const std::size_t insert_column_count
Definition: no-id-object-statements.hxx:100
T object_type
Definition: no-id-object-statements.hxx:36