Oracle ODB Runtime Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
container-statements.hxx
Go to the documentation of this file.
1 // file : odb/oracle/container-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_CONTAINER_STATEMENTS_HXX
6 #define ODB_ORACLE_CONTAINER_STATEMENTS_HXX
7 
8 #include <odb/pre.hxx>
9 
10 #include <cstddef> // std::size_t
11 
12 #include <odb/forward.hxx>
13 #include <odb/schema-version.hxx>
14 #include <odb/traits.hxx>
15 
16 #include <odb/oracle/version.hxx>
18 #include <odb/oracle/statement.hxx>
19 
20 #include <odb/oracle/details/export.hxx>
21 
22 namespace odb
23 {
24  namespace oracle
25  {
26  class connection;
27 
28  // Template argument is the generated abstract container traits type.
29  // That is, it doesn't need to provide column counts and statements.
30  //
31  template <typename T>
33  {
34  public:
35  typedef T traits;
36 
37  typedef typename traits::data_image_type data_image_type;
38  typedef typename traits::functions_type functions_type;
39 
43 
45 
47 
50  {
51  return conn_;
52  }
53 
54  // Functions.
55  //
58  {
59  return functions_;
60  }
61 
62  // Schema version.
63  //
65  version_migration () const {return *svm_;}
66 
67  void
69 
70  // Id image binding (external).
71  //
72  const binding&
74  {
75  return id_binding_;
76  }
77 
78  // Data image. The image is split into the id (that comes as a
79  // binding) and index/key plus value which are in data_image_type.
80  // The select binding is a subset of the full binding (no id).
81  //
84  {
85  return data_image_;
86  }
87 
88  bind*
90  {
92  }
93 
94  bool
96  {
98  data_image_version_ != data_image_.version ||
100  }
101 
102  void
104  {
109  }
110 
111  //
112  // Statements.
113  //
114 
117  {
118  if (insert_ == 0)
119  insert_.reset (
120  new (details::shared) insert_statement_type (
121  conn_,
122  insert_text_,
123  versioned_, // Process if versioned.
125  false));
126 
127  return *insert_;
128  }
129 
132  {
133  if (select_ == 0)
134  select_.reset (
135  new (details::shared) select_statement_type (
136  conn_,
137  select_text_,
138  versioned_, // Process if versioned.
139  false, // Don't optimize.
140  id_binding_,
142  4096)); // Hardcode a 4kB LOB prefetch size.
143 
144  return *select_;
145  }
146 
149  {
150  if (delete_ == 0)
151  delete_.reset (
152  new (details::shared) delete_statement_type (
154 
155  return *delete_;
156  }
157 
158  private:
160  container_statements& operator= (const container_statements&);
161 
162  protected:
165 
167 
169  std::size_t data_image_version_;
171 
174 
175  const char* insert_text_;
176  const char* select_text_;
177  const char* delete_text_;
178 
181 
182  details::shared_ptr<insert_statement_type> insert_;
183  details::shared_ptr<select_statement_type> select_;
184  details::shared_ptr<delete_statement_type> delete_;
185  };
186 
187  template <typename T>
189  {
190  public:
191  typedef T traits;
192  typedef typename traits::cond_image_type cond_image_type;
193 
196 
198 
200 
201  // Condition image. The image is split into the id (that comes as
202  // a binding) and index/key/value which is in cond_image_type.
203  //
206  {
207  return cond_image_;
208  }
209 
210  bind*
212  {
213  return cond_image_binding_.bind;
214  }
215 
216  bool
218  {
219  return cond_id_binding_version_ != this->id_binding_.version ||
220  cond_image_version_ != cond_image_.version ||
222  }
223 
224  void
226  {
230  }
231 
232  // Update image. The image is split as follows: value comes
233  // from the data image, id comes as binding, and index/key
234  // comes from the condition image.
235  //
236  bind*
238  {
240  }
241 
242  bool
244  {
247  update_data_image_version_ != this->data_image_.version ||
249  }
250 
251  void
253  {
256  update_data_image_version_ = this->data_image_.version;
258  }
259 
260  //
261  // Statements.
262  //
263 
266  {
267  if (this->delete_ == 0)
268  this->delete_.reset (
269  new (details::shared) delete_statement_type (
270  this->conn_, this->delete_text_, this->cond_image_binding_));
271 
272  return *this->delete_;
273  }
274 
277  {
278  if (update_ == 0)
279  update_.reset (
280  new (details::shared) update_statement_type (
281  this->conn_,
282  update_text_,
283  this->versioned_, // Process if versioned.
285 
286  return *update_;
287  }
288 
289  protected:
291  std::size_t cond_image_version_;
294 
299 
300  const char* update_text_;
301 
302  details::shared_ptr<update_statement_type> update_;
303  };
304 
305  // Template argument is the generated concrete container traits type.
306  //
307  template <typename T>
308  class container_statements_impl: public T::statements_type
309  {
310  public:
311  typedef T traits;
312  typedef typename T::statements_type base;
314 
316 
317  private:
320 
321  private:
322  bind data_image_bind_[traits::data_column_count];
323  };
324 
325  template <typename T>
327  {
328  public:
329  typedef T traits;
331 
333 
334  private:
335  bind cond_image_bind_[traits::cond_column_count];
336  bind update_image_bind_[traits::value_column_count +
337  traits::cond_column_count];
338  };
339  }
340 }
341 
342 #include <odb/oracle/container-statements.txx>
343 
344 #include <odb/post.hxx>
345 
346 #endif // ODB_ORACLE_CONTAINER_STATEMENTS_HXX
Definition: container-statements.hxx:308
T traits
Definition: container-statements.hxx:35
Definition: connection.hxx:35
T traits
Definition: container-statements.hxx:191
container_statements(connection_type &, binding &id_binding)
std::size_t data_image_version_
Definition: container-statements.hxx:169
oracle::connection connection_type
Definition: container-statements.hxx:330
const char * update_text_
Definition: container-statements.hxx:300
oracle::update_statement update_statement_type
Definition: container-statements.hxx:194
delete_statement_type & delete_statement()
Definition: container-statements.hxx:148
functions_type functions_
Definition: container-statements.hxx:166
cond_image_type & cond_image()
Definition: container-statements.hxx:205
const schema_version_migration * svm_
Definition: container-statements.hxx:180
select_statement_type & select_statement()
Definition: container-statements.hxx:131
std::size_t version
Definition: binding.hxx:36
traits::data_image_type data_image_type
Definition: container-statements.hxx:37
Definition: container-statements.hxx:188
oracle::connection connection_type
Definition: container-statements.hxx:197
void version_migration(const schema_version_migration &svm)
Definition: container-statements.hxx:68
Definition: statement.hxx:340
const char * insert_text_
Definition: container-statements.hxx:175
bind_type * bind
Definition: binding.hxx:34
const char * select_text_
Definition: container-statements.hxx:176
details::shared_ptr< delete_statement_type > delete_
Definition: container-statements.hxx:184
data_image_type & data_image()
Definition: container-statements.hxx:83
bind * cond_bind()
Definition: container-statements.hxx:211
void data_binding_update_version()
Definition: container-statements.hxx:103
void cond_binding_update_version()
Definition: container-statements.hxx:225
T traits
Definition: container-statements.hxx:311
std::size_t cond_id_binding_version_
Definition: container-statements.hxx:292
const schema_version_migration & version_migration() const
Definition: container-statements.hxx:65
Definition: statement.hxx:316
details::shared_ptr< update_statement_type > update_
Definition: container-statements.hxx:302
std::size_t update_id_binding_version_
Definition: container-statements.hxx:295
bind * update_bind()
Definition: container-statements.hxx:237
Definition: statement.hxx:169
std::size_t update_data_image_version_
Definition: container-statements.hxx:297
T traits
Definition: container-statements.hxx:329
Definition: binding.hxx:21
std::size_t data_id_binding_version_
Definition: container-statements.hxx:170
oracle::insert_statement insert_statement_type
Definition: container-statements.hxx:40
functions_type & functions()
Definition: container-statements.hxx:57
void update_binding_update_version()
Definition: container-statements.hxx:252
smart_container_statements(connection_type &, binding &id_binding)
oracle::delete_statement delete_statement_type
Definition: container-statements.hxx:195
Definition: oracle-types.hxx:78
binding update_image_binding_
Definition: container-statements.hxx:298
oracle::delete_statement delete_statement_type
Definition: container-statements.hxx:42
bool data_binding_test_version() const
Definition: container-statements.hxx:95
container_statements_impl(connection_type &, binding &)
T::statements_type base
Definition: container-statements.hxx:312
connection_type & connection()
Definition: container-statements.hxx:49
binding insert_image_binding_
Definition: container-statements.hxx:172
traits::cond_image_type cond_image_type
Definition: container-statements.hxx:192
Definition: container-statements.hxx:326
details::shared_ptr< insert_statement_type > insert_
Definition: container-statements.hxx:182
insert_statement_type & insert_statement()
Definition: container-statements.hxx:116
update_statement_type & update_statement()
Definition: container-statements.hxx:276
details::shared_ptr< select_statement_type > select_
Definition: container-statements.hxx:183
std::size_t cond_image_version_
Definition: container-statements.hxx:291
smart_container_statements_impl(connection_type &, binding &)
oracle::select_statement select_statement_type
Definition: container-statements.hxx:41
cond_image_type cond_image_
Definition: container-statements.hxx:290
Definition: statement.hxx:254
delete_statement_type & delete_statement()
Definition: container-statements.hxx:265
std::size_t update_cond_image_version_
Definition: container-statements.hxx:296
const binding & id_binding()
Definition: container-statements.hxx:73
connection_type & conn_
Definition: container-statements.hxx:163
bool update_binding_test_version() const
Definition: container-statements.hxx:243
oracle::connection connection_type
Definition: container-statements.hxx:313
binding select_image_binding_
Definition: container-statements.hxx:173
binding cond_image_binding_
Definition: container-statements.hxx:293
bool cond_binding_test_version() const
Definition: container-statements.hxx:217
bool versioned_
Definition: container-statements.hxx:179
oracle::connection connection_type
Definition: container-statements.hxx:44
Definition: container-statements.hxx:32
const char * delete_text_
Definition: container-statements.hxx:177
data_image_type data_image_
Definition: container-statements.hxx:168
traits::functions_type functions_type
Definition: container-statements.hxx:38
binding & id_binding_
Definition: container-statements.hxx:164
bind * data_bind()
Definition: container-statements.hxx:89