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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#ifndef ODBC_COLUMN_H
#define ODBC_COLUMN_H
#include "../libdbpp/column.h"
#include <typeinfo>
#include <glibmm/ustring.h>
#include "bind.h"
#include "param.h"
namespace ODBC {
class SelectCommand;
class Column : public virtual Bind, public virtual DB::Column {
public:
Column(SelectCommand *, const Glib::ustring & s, unsigned int i);
virtual ~Column() = 0;
void bind();
virtual void * rwDataAddress() = 0;
void rebind(DB::Command *, unsigned int idx) const;
virtual void resize(SQLHANDLE);
virtual void onScroll();
virtual operator int () const { throw std::bad_cast(); }
virtual operator long () const { throw std::bad_cast(); }
virtual operator long long () const { throw std::bad_cast(); }
virtual operator unsigned int () const { throw std::bad_cast(); }
virtual operator unsigned long () const { throw std::bad_cast(); }
virtual operator unsigned long long () const { throw std::bad_cast(); }
virtual operator double () const { throw std::bad_cast(); }
virtual operator float () const { throw std::bad_cast(); }
virtual operator std::string () const { throw std::bad_cast(); }
virtual operator Glib::ustring () const { throw std::bad_cast(); }
virtual operator struct tm () const { throw std::bad_cast(); }
virtual operator SQL_TIMESTAMP_STRUCT () const { throw std::bad_cast(); }
bool isNull() const;
virtual void apply(DB::HandleField &) const = 0;
const SelectCommand * selectCmd;
protected:
virtual const Param * meAsAParam() const = 0;
};
class CharArrayColumn : public Column, public Param {
public:
typedef std::vector<char> CharArray;
CharArrayColumn(SelectCommand * sc, const Glib::ustring & n, unsigned int i) :
DB::Column(n, i),
Column(sc, n, i)
{
data.resize(256);
}
virtual SQLSMALLINT ctype() const { return SQL_C_CHAR; }
virtual SQLSMALLINT stype() const { return SQL_CHAR; }
virtual SQLULEN size() const { return data.size(); }
virtual SQLINTEGER dp() const { return 0; }
virtual const void * dataAddress() const { return &data.front(); }
virtual void * rwDataAddress() { return &data.front(); }
void operator=(const Glib::ustring & d);
void resize(SQLHANDLE);
virtual operator std::string () const { return std::string(&data.front(), bindLen); }
virtual operator Glib::ustring () const { return std::string(&data.front(), bindLen); }
virtual void apply(DB::HandleField &) const;
protected:
virtual const Param * meAsAParam() const { return this; }
CharArray data;
};
class SignedIntegerColumn : public Column, public SignedIntegerParam {
public:
SignedIntegerColumn(SelectCommand * sc, const Glib::ustring & n, unsigned int i) :
DB::Column(n, i),
Column(sc, n, i) { }
virtual SQLSMALLINT ctype() const { return SignedIntegerParam::ctype(); }
virtual SQLULEN size() const { return SignedIntegerParam::size(); }
virtual void * rwDataAddress() { return &data; }
virtual operator int () const { return data; }
virtual operator long () const { return data; }
virtual operator long long () const { return data; }
virtual const Param * meAsAParam() const { return this; }
virtual void apply(DB::HandleField &) const;
};
#ifdef COMPLETENESS
class UnsignedIntegerColumn : public Column, public UnsignedIntegerParam {
public:
UnsignedIntegerColumn(SelectCommand * sc, const Glib::ustring & n, unsigned int i) :
Column(sc, n, i) { }
virtual const Param * meAsAParam() const { return this; }
};
#endif
class FloatingPointColumn : public Column, public FloatingPointParam {
public:
FloatingPointColumn(SelectCommand * sc, const Glib::ustring & n, unsigned int i) :
DB::Column(n, i),
Column(sc, n, i) { }
virtual SQLSMALLINT ctype() const { return FloatingPointParam::ctype(); }
virtual SQLULEN size() const { return FloatingPointParam::size(); }
virtual void * rwDataAddress() { return &data; }
virtual operator double () const { return data; }
virtual operator float () const { return data; }
virtual const Param * meAsAParam() const { return this; }
virtual void apply(DB::HandleField &) const;
};
class TimeStampColumn : public Column, public TimeStampParam {
public:
TimeStampColumn(SelectCommand * sc, const Glib::ustring & n, unsigned int i) :
DB::Column(n, i),
Column(sc, n, i) { }
virtual SQLSMALLINT ctype() const { return TimeStampParam::ctype(); }
virtual SQLULEN size() const { return TimeStampParam::size(); }
virtual void * rwDataAddress() { return &data; }
virtual operator struct tm () const;
virtual operator SQL_TIMESTAMP_STRUCT () const { return data; }
virtual const Param * meAsAParam() const { return this; }
virtual void apply(DB::HandleField &) const;
};
}
#endif
|