aboutsummaryrefslogtreecommitdiff
path: root/odb/oracle/oracle-types.hxx
blob: 45485c2a7da74804c6b33a0fc1c3ce21a30962c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// file      : odb/oracle/oracle-types.hxx
// author    : Constantin Michael <constantin@codesynthesis.com>
// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license   : ODB NCUEL; see accompanying LICENSE file

#ifndef ODB_ORACLE_ORACLE_TYPES_HXX
#define ODB_ORACLE_ORACLE_TYPES_HXX

#include <odb/pre.hxx>

#include <odb/oracle/version.hxx>
#include <odb/oracle/oracle-fwd.hxx>

namespace odb
{
  namespace oracle
  {
    enum chunk_position
    {
      one_chunk,
      first_chunk,
      next_chunk,
      last_chunk
    };

    // Callback function signature used to specify LOB parameters that are
    // passed to the database. If false is returned from the callback,
    // statement execution is aborted.
    //
    typedef bool (*param_callback_type) (
      void* context,         // [in] The user context.
      ub4* position_context, // [in] A positional context. A callback is free
                             // to use this to track positional information.
      void** buffer,         // [out] On return, a pointer to a buffer
                             // containing parameter data.
      ub4* size,             // [out] The parameter data size in bytes.
      chunk_position*,       // [out] The position of the chunk of data in
                             // buffer.
      void* temp_buffer,     // [in] A temporary buffer that may be used if
                             // required. The buffer argument should specify
                             // this buffer on return if it is used.
      ub4 capacity);         // [in] The temporary buffer length in bytes.

    // Callback function signature used to specify LOB values returned from
    // the database. If false is returned, database_exception is thrown.
    //
    typedef bool (*result_callback_type) (
      void* context,   // [in] The user context.
      void* buffer,    // [in] A buffer containing the result data.
      ub4 size,        // [in] The result data length in bytes.
      chunk_position); // [in] The position of this chunk.

    struct bind
    {
      ub2 type;       // The type stored by buffer. This must be an external
                      // OCI type identifier of the form SQLT_XXX.
      void* buffer;   // Data buffer pointer.
      ub2* size;      // The number of bytes in buffer. When parameter
                      // callbacks are in use, this is interpreted as a ub4*
                      // indicating the current position. When result
                      // callbacks are in use, this is interpreted as an
                      // OCILobLocator*.
      ub4 capacity;   // The maximum number of bytes that can be stored in
                      // buffer.
      sb2* indicator; // Pointer to an OCI indicator variable.

      union
      {
        param_callback_type param;
        result_callback_type result;
      } callback;

      // This pointer is provided to the user through the context argument
      // in both parameter and result callback functions.
      //
      void* callback_context;
    };
  }
}

#include <odb/post.hxx>

#endif // ODB_ORACLE_ORACLE_TYPES_HXX