diff options
author | Constantin Michael <constantin@codesynthesis.com> | 2011-10-28 14:10:36 +0200 |
---|---|---|
committer | Constantin Michael <constantin@codesynthesis.com> | 2011-11-01 13:14:54 +0200 |
commit | 1cc4eb4d11c08f986408c9b671840b6e077b42ff (patch) | |
tree | 921edc4bc088281127327bb10581737d2517c399 /odb/oracle/oracle-types.hxx | |
parent | 02e8f9f8d3276433398bc04bf66ff8e55e8d3d31 (diff) |
Implement lob_auto_descriptor
Diffstat (limited to 'odb/oracle/oracle-types.hxx')
-rw-r--r-- | odb/oracle/oracle-types.hxx | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/odb/oracle/oracle-types.hxx b/odb/oracle/oracle-types.hxx index 7f2c46d..1e94894 100644 --- a/odb/oracle/oracle-types.hxx +++ b/odb/oracle/oracle-types.hxx @@ -98,8 +98,7 @@ namespace odb buffer_type type; // The type stored by buffer. void* buffer; // Data buffer pointer. When result callbacks are in - // use, this is interpreted as an - // auto_descriptor<OCILobLocator>*. + // use, this is interpreted as an lob_auto_descriptor*. ub2* size; // The number of bytes in buffer. When parameter // callbacks are in use, this is interpreted as a ub4* // indicating the current position. @@ -117,7 +116,7 @@ namespace odb // An instance of this structure specifies the function to invoke and // the context to pass just prior to the image associated with a query - // is modified. + // being modified. // struct change_callback { @@ -126,6 +125,39 @@ namespace odb void (*callback) (void*); void* context; }; + + // The LOB specialization of auto_descriptor allows for transparent + // transferal of LOB descriptors between auto_descriptor instances. This + // simplifies the implementation of a private copy of the shared image + // associated with queries. + // + class LIBODB_ORACLE_EXPORT lob_auto_descriptor + : auto_descriptor<OCILobLocator> + { + public: + lob_auto_descriptor (OCILobLocator* l = 0) + : auto_descriptor<OCILobLocator> (l) + { + } + + lob_auto_descriptor (lob_auto_descriptor& x) + : auto_descriptor<OCILobLocator> (0) + { + OCILobLocator* l (x.d_); + x.d_ = 0; + reset (l); + } + + lob_auto_descriptor& + operator= (lob_auto_descriptor& x) + { + OCILobLocator* l (x.d_); + x.d_ = 0; + reset (l); + + return *this; + } + }; } } |