Oracle ODB Runtime Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
database.hxx
Go to the documentation of this file.
1 // file : odb/oracle/database.hxx
2 // copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
3 // license : ODB NCUEL; see accompanying LICENSE file
4 
5 #ifndef ODB_ORACLE_DATABASE_HXX
6 #define ODB_ORACLE_DATABASE_HXX
7 
8 #include <odb/pre.hxx>
9 
10 #include <string>
11 #include <memory> // std::auto_ptr, std::unique_ptr
12 #include <iosfwd> // std::ostream
13 
14 #include <odb/database.hxx>
15 #include <odb/details/unique-ptr.hxx>
16 #include <odb/details/transfer-ptr.hxx>
17 
18 #include <odb/oracle/version.hxx>
19 #include <odb/oracle/forward.hxx>
20 #include <odb/oracle/query.hxx>
21 #include <odb/oracle/tracer.hxx>
26 
27 #include <odb/oracle/details/export.hxx>
28 
29 namespace odb
30 {
31  namespace oracle
32  {
33  class transaction_impl;
34 
35  class LIBODB_ORACLE_EXPORT database: public odb::database
36  {
37  public:
38  database (const std::string& user,
39  const std::string& password,
40  const std::string& db,
41  ub2 charset = 0,
42  ub2 ncharset = 0,
43  OCIEnv* environment = 0,
44  details::transfer_ptr<connection_factory> =
45  details::transfer_ptr<connection_factory> ());
46 
47  database (const std::string& user,
48  const std::string& password,
49  const std::string& service,
50  const std::string& host,
51  unsigned int port = 0,
52  ub2 charset = 0,
53  ub2 ncharset = 0,
54  OCIEnv* environment = 0,
55  details::transfer_ptr<connection_factory> =
56  details::transfer_ptr<connection_factory> ());
57 
58  // Extract the database parameters from the command line. The
59  // following options are recognized:
60  //
61  // --user
62  // --password
63  // --database
64  // --service
65  // --host
66  // --port
67  // --options-file
68  //
69  // For more information, see the output of the print_usage() function
70  // below. If erase is true, the above options are removed from the
71  // argv array and the argc count is updated accordingly. This
72  // constructor may throw the cli_exception exception.
73  //
74  database (int& argc,
75  char* argv[],
76  bool erase = false,
77  ub2 charset = 0,
78  ub2 ncharset = 0,
79  OCIEnv* environment = 0,
80  details::transfer_ptr<connection_factory> =
81  details::transfer_ptr<connection_factory> ());
82 
83  static void
84  print_usage (std::ostream&);
85 
86  // Object persistence API.
87  //
88  public:
89 
90  // Make the object persistent.
91  //
92  template <typename T>
94  persist (T& object);
95 
96  template <typename T>
98  persist (T* obj_ptr);
99 
100  template <typename T, template <typename> class P>
102  persist (const P<T>& obj_ptr);
103 
104  template <typename T, typename A1, template <typename, typename> class P>
106  persist (const P<T, A1>& obj_ptr);
107 
108  template <typename T, template <typename> class P>
110  persist (P<T>& obj_ptr);
111 
112  template <typename T, typename A1, template <typename, typename> class P>
114  persist (P<T, A1>& obj_ptr);
115 
116  template <typename T>
118  persist (const typename object_traits<T>::pointer_type& obj_ptr);
119 
120  // Load an object. Throw object_not_persistent if not found.
121  //
122  template <typename T>
124  load (const typename object_traits<T>::id_type& id);
125 
126  template <typename T>
127  void
128  load (const typename object_traits<T>::id_type& id, T& object);
129 
130  // Load (or reload, if it is already loaded) a section of an object.
131  //
132  template <typename T>
133  void
134  load (T& object, section&);
135 
136  // Reload an object.
137  //
138  template <typename T>
139  void
140  reload (T& object);
141 
142  template <typename T>
143  void
144  reload (T* obj_ptr);
145 
146  template <typename T, template <typename> class P>
147  void
148  reload (const P<T>& obj_ptr);
149 
150  template <typename T, typename A1, template <typename, typename> class P>
151  void
152  reload (const P<T, A1>& obj_ptr);
153 
154  template <typename T, template <typename> class P>
155  void
156  reload (P<T>& obj_ptr);
157 
158  template <typename T, typename A1, template <typename, typename> class P>
159  void
160  reload (P<T, A1>& obj_ptr);
161 
162  template <typename T>
163  void
164  reload (const typename object_traits<T>::pointer_type& obj_ptr);
165 
166  // Loan an object if found. Return NULL/false if not found.
167  //
168  template <typename T>
170  find (const typename object_traits<T>::id_type& id);
171 
172  template <typename T>
173  bool
174  find (const typename object_traits<T>::id_type& id, T& object);
175 
176  // Update the state of a modified objects.
177  //
178  template <typename T>
179  void
180  update (T& object);
181 
182  template <typename T>
183  void
184  update (T* obj_ptr);
185 
186  template <typename T, template <typename> class P>
187  void
188  update (const P<T>& obj_ptr);
189 
190  template <typename T, typename A1, template <typename, typename> class P>
191  void
192  update (const P<T, A1>& obj_ptr);
193 
194  template <typename T, template <typename> class P>
195  void
196  update (P<T>& obj_ptr);
197 
198  template <typename T, typename A1, template <typename, typename> class P>
199  void
200  update (P<T, A1>& obj_ptr);
201 
202  template <typename T>
203  void
204  update (const typename object_traits<T>::pointer_type& obj_ptr);
205 
206  // Update a section of an object. Throws the section_not_loaded
207  // exception if the section is not loaded. Note also that this
208  // function does not clear the changed flag if it is set.
209  //
210  template <typename T>
211  void
212  update (const T& object, const section&);
213 
214  // Make the object transient. Throw object_not_persistent if not
215  // found.
216  //
217  template <typename T>
218  void
219  erase (const typename object_traits<T>::id_type& id);
220 
221  template <typename T>
222  void
223  erase (T& object);
224 
225  template <typename T>
226  void
227  erase (T* obj_ptr);
228 
229  template <typename T, template <typename> class P>
230  void
231  erase (const P<T>& obj_ptr);
232 
233  template <typename T, typename A1, template <typename, typename> class P>
234  void
235  erase (const P<T, A1>& obj_ptr);
236 
237  template <typename T, template <typename> class P>
238  void
239  erase (P<T>& obj_ptr);
240 
241  template <typename T, typename A1, template <typename, typename> class P>
242  void
243  erase (P<T, A1>& obj_ptr);
244 
245  template <typename T>
246  void
247  erase (const typename object_traits<T>::pointer_type& obj_ptr);
248 
249  // Erase multiple objects matching a query predicate.
250  //
251  template <typename T>
252  unsigned long long
253  erase_query ();
254 
255  template <typename T>
256  unsigned long long
257  erase_query (const char*);
258 
259  template <typename T>
260  unsigned long long
261  erase_query (const std::string&);
262 
263  template <typename T>
264  unsigned long long
265  erase_query (const oracle::query_base&);
266 
267  template <typename T>
268  unsigned long long
269  erase_query (const odb::query_base&);
270 
271  // Query API.
272  //
273  template <typename T>
274  result<T>
275  query ();
276 
277  template <typename T>
278  result<T>
279  query (const char*);
280 
281  template <typename T>
282  result<T>
283  query (const std::string&);
284 
285  template <typename T>
286  result<T>
287  query (const oracle::query_base&);
288 
289  template <typename T>
290  result<T>
291  query (const odb::query_base&);
292 
293  // Query preparation.
294  //
295  template <typename T>
297  prepare_query (const char* name, const char*);
298 
299  template <typename T>
301  prepare_query (const char* name, const std::string&);
302 
303  template <typename T>
305  prepare_query (const char* name, const oracle::query_base&);
306 
307  template <typename T>
309  prepare_query (const char* name, const odb::query_base&);
310 
311  // Transactions.
312  //
313  public:
314  virtual transaction_impl*
315  begin ();
316 
317  public:
319  connection ();
320 
321  public:
322  const std::string&
323  user () const
324  {
325  return user_;
326  }
327 
328  const std::string&
329  password () const
330  {
331  return password_;
332  }
333 
334  const std::string&
335  db () const
336  {
337  return db_;
338  }
339 
340  const std::string&
341  service () const
342  {
343  return service_;
344  }
345 
346  const std::string&
347  host () const
348  {
349  return host_;
350  }
351 
352  unsigned int
353  port () const
354  {
355  return port_;
356  }
357 
358  ub2
359  charset () const
360  {
361  return charset_;
362  }
363 
364  ub2
365  ncharset () const
366  {
367  return ncharset_;
368  }
369 
370  OCIEnv*
372  {
373  return environment_;
374  }
375 
376  // SQL statement tracing.
377  //
378  public:
380 
381  void
383  {
385  }
386 
387  void
389  {
391  }
392 
393  using odb::database::tracer;
394 
395  // Database schema version.
396  //
397  protected:
398  virtual const schema_version_info&
399  load_schema_version (const std::string& schema_name) const;
400 
401  public:
402  // Database id constant (useful for meta-programming).
403  //
405 
406  public:
407  virtual
408  ~database ();
409 
410  protected:
411  virtual odb::connection*
412  connection_ ();
413 
414  private:
415  std::string user_;
416  std::string password_;
417 
418  std::string db_;
419 
420  std::string service_;
421  std::string host_;
422  unsigned int port_;
423 
424  ub2 charset_;
425  ub2 ncharset_;
426 
427  auto_handle<OCIEnv> auto_environment_;
428  OCIEnv* environment_;
429 
430  details::unique_ptr<connection_factory> factory_;
431  };
432  }
433 }
434 
435 #include <odb/oracle/database.ixx>
436 
437 #include <odb/post.hxx>
438 
439 #endif // ODB_ORACLE_DATABASE_HXX
Definition: transaction-impl.hxx:22
Definition: connection.hxx:35
details::shared_ptr< connection > connection_ptr
Definition: connection.hxx:32
Definition: tracer.hxx:20
Definition: query.hxx:165
const std::string & db() const
Definition: database.hxx:335
OCIEnv * environment()
Definition: database.hxx:371
tracer_type * tracer() const
ub2 charset() const
Definition: database.hxx:359
const std::string & user() const
Definition: database.hxx:323
oracle::tracer tracer_type
Definition: database.hxx:379
unsigned int port() const
Definition: database.hxx:353
Definition: database.hxx:35
void tracer(tracer_type *t)
Definition: database.hxx:388
const std::string & host() const
Definition: database.hxx:347
const std::string & password() const
Definition: database.hxx:329
unsigned short ub2
Definition: oracle-fwd.hxx:18
database_id
void tracer(tracer_type &t)
Definition: database.hxx:382
struct OCIEnv OCIEnv
Definition: oracle-fwd.hxx:22
ub2 ncharset() const
Definition: database.hxx:365
access::object_traits< T >::pointer_type pointer_type
Definition: query.hxx:2129