summaryrefslogtreecommitdiff
path: root/ADBC/adbc/ODBC/ODBC_Record.h
blob: 2f935aa2c76d4efdbf220beb78d250f684973220 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// -*- C++ -*-

//=============================================================================
/**
 * @file      ODBC_Record.h
 *
 * $Id$
 *
 * @author    James H. Hill
 */
//=============================================================================

#ifndef _ADBC_ODBC_RECORD_H_
#define _ADBC_ODBC_RECORD_H_

#include "adbc/Record.h"
#include "ODBC.h"

namespace ADBC
{
namespace ODBC
{
// Forward decl.
class Query;

/**
 * @class ODBC_Record
 *
 * Implementation of the ::ADBC::Record for ODBC.
 */
class ADBC_ODBC_Export Record : public ::ADBC::Record
{
public:
  /**
   * Initializing constructor.
   *
   * @param[in]     handle      Statement handle.
   */
  Record (const Query & query);

  /// Destructor.
  virtual ~Record (void);

  // Move to the next record.
  virtual void advance (void);

  // Test if the iterator is done.
  virtual bool done (void) const;

  virtual void reset (void);

  /**
   * Get the number of columns in the result.
   *
   * @return Number of columns.
   */
  virtual size_t columns (void) const;

  virtual void get_data (size_t column, char * buffer, size_t bufsize);

  virtual void get_data (size_t column, char & value);

  virtual void get_data (size_t column, unsigned char & value);

  virtual void get_data (size_t column, short & value);

  virtual void get_data (size_t column, unsigned short & value);

  virtual void get_data (size_t column, long & value);

  virtual void get_data (size_t column, unsigned long & value);

  virtual void get_data (size_t column, float & value);

  virtual void get_data (size_t column, double & value);

  virtual void get_data (size_t column, ACE_Date_Time & datetime);

private:
  /// Help method that wraps the SQLGetData method.
  void get_data_i (SQLUSMALLINT column,
                   SQLSMALLINT target_type,
                   SQLPOINTER target,
                   SQLINTEGER bufsize,
                   SQLINTEGER * result);

  /// Parent of the record.
  const Query & query_;

  /// Number of columns in the record set.
  size_t columns_;

  /// State of the iterator.
  SQLRETURN state_;
};
}
}

#if defined (__ADBC_INLINE__)
#include "ODBC_Record.inl"
#endif

#endif  // !defined _ADBC_ODBC_RECORD_H_