summaryrefslogtreecommitdiff
path: root/libodbcpp/column.h
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-02-02 10:49:10 +0000
committerrandomdan <randomdan@localhost>2011-02-02 10:49:10 +0000
commitb081a82d9348e3ac77b0a12c9c456f838a693f4a (patch)
tree39b52ea24ced19f596b047d69eaa9357feb1c28a /libodbcpp/column.h
parentFix type of rows counter (diff)
downloadlibdbpp-odbc-b081a82d9348e3ac77b0a12c9c456f838a693f4a.tar.bz2
libdbpp-odbc-b081a82d9348e3ac77b0a12c9c456f838a693f4a.tar.xz
libdbpp-odbc-b081a82d9348e3ac77b0a12c9c456f838a693f4a.zip
Remove compose functions on column data and add a handle function for type safe data passing
Use new handle function to get type safe data from ODBC Add a datetime option to variables
Diffstat (limited to 'libodbcpp/column.h')
-rw-r--r--libodbcpp/column.h38
1 files changed, 13 insertions, 25 deletions
diff --git a/libodbcpp/column.h b/libodbcpp/column.h
index 1ea4091..86d4507 100644
--- a/libodbcpp/column.h
+++ b/libodbcpp/column.h
@@ -8,6 +8,14 @@
namespace ODBC {
class SelectCommand;
+ class HandleField {
+ public:
+ virtual void null() = 0;
+ virtual void string(const std::vector<char> &) = 0;
+ virtual void integer(SQLINTEGER) = 0;
+ virtual void floatingpoint(SQLDOUBLE) = 0;
+ virtual void timestamp(const SQL_TIMESTAMP_STRUCT &) = 0;
+ };
class Column : public virtual Bind {
public:
Column(SelectCommand *, const Glib::ustring &, unsigned int);
@@ -34,18 +42,14 @@ namespace ODBC {
virtual operator struct tm () const { throw std::bad_cast(); }
virtual operator SQL_TIMESTAMP_STRUCT () const { throw std::bad_cast(); }
- virtual const Glib::ustring & compose() const = 0;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const = 0;
- virtual int writeToBuf(char ** buf) const = 0;
- virtual int writeToBuf(char ** buf, const char * fmt) const = 0;
bool isNull() const;
+ virtual void apply(HandleField &) const = 0;
const unsigned int colNo;
const Glib::ustring name;
const SelectCommand * selectCmd;
protected:
virtual const Param * meAsAParam() const = 0;
- mutable Glib::ustring * composeCache;
};
class CharArrayColumn : public Column, public Param {
public:
@@ -63,12 +67,9 @@ namespace ODBC {
virtual void * rwDataAddress() { return &data.front(); }
void operator=(const Glib::ustring & d);
void resize(SQLHANDLE);
- virtual const Glib::ustring & compose() const;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const;
- virtual int writeToBuf(char ** buf) const;
- virtual int writeToBuf(char ** buf, const char * fmt) const;
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(HandleField &) const;
protected:
virtual const Param * meAsAParam() const { return this; }
CharArray data;
@@ -80,24 +81,17 @@ namespace ODBC {
virtual SQLSMALLINT ctype() const { return SignedIntegerParam::ctype(); }
virtual SQLULEN size() const { return SignedIntegerParam::size(); }
virtual void * rwDataAddress() { return &data; }
- virtual const Glib::ustring & compose() const;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const;
- virtual int writeToBuf(char ** buf) const;
- virtual int writeToBuf(char ** buf, const char * fmt) const;
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(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 Glib::ustring & compose() const;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const;
- virtual int writeToBuf(char ** buf) const;
- virtual int writeToBuf(char ** buf, const char * fmt) const;
virtual const Param * meAsAParam() const { return this; }
};
#endif
@@ -108,13 +102,10 @@ namespace ODBC {
virtual SQLSMALLINT ctype() const { return FloatingPointParam::ctype(); }
virtual SQLULEN size() const { return FloatingPointParam::size(); }
virtual void * rwDataAddress() { return &data; }
- virtual const Glib::ustring & compose() const;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const;
- virtual int writeToBuf(char ** buf) const;
- virtual int writeToBuf(char ** buf, const char * fmt) const;
virtual operator double () const { return data; }
virtual operator float () const { return data; }
virtual const Param * meAsAParam() const { return this; }
+ virtual void apply(HandleField &) const;
};
class TimeStampColumn : public Column, public TimeStampParam {
public:
@@ -123,13 +114,10 @@ namespace ODBC {
virtual SQLSMALLINT ctype() const { return TimeStampParam::ctype(); }
virtual SQLULEN size() const { return TimeStampParam::size(); }
virtual void * rwDataAddress() { return &data; }
- virtual const Glib::ustring & compose() const;
- virtual Glib::ustring compose(const Glib::ustring & fmt) const;
- virtual int writeToBuf(char ** buf) const;
- virtual int writeToBuf(char ** buf, const char * fmt) const;
virtual operator struct tm () const;
virtual operator SQL_TIMESTAMP_STRUCT () const { return data; }
virtual const Param * meAsAParam() const { return this; }
+ virtual void apply(HandleField &) const;
};
}