From 89ddd6821bb7ecb0c29077ea427df0cd86017e38 Mon Sep 17 00:00:00 2001 From: randomdan Date: Sun, 13 Jun 2010 15:25:33 +0000 Subject: Add support for composing Glib::ustrings from columns Break Project2 components down into generalised classes Tidy up code --- libodbcpp/column.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++-- libodbcpp/column.h | 4 ++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/libodbcpp/column.cpp b/libodbcpp/column.cpp index 386cbfd..c94c25d 100644 --- a/libodbcpp/column.cpp +++ b/libodbcpp/column.cpp @@ -91,6 +91,18 @@ namespace ODBC { return writeToBuf(buf, "%g"); } template <> + Glib::ustring + _Column::compose() const + { + return Glib::ustring::compose("%1", value); + } + template <> + Glib::ustring + _Column::compose(const Glib::ustring & fmt) const + { + return Glib::ustring::compose(fmt, value); + } + template <> int _Column::writeToBuf(char ** buf, const char * fmt) const { @@ -103,6 +115,18 @@ namespace ODBC { return writeToBuf(buf, "%ld"); } template <> + Glib::ustring + _Column::compose() const + { + return Glib::ustring::compose("%1", value); + } + template <> + Glib::ustring + _Column::compose(const Glib::ustring & fmt) const + { + return Glib::ustring::compose(fmt, value); + } + template <> int _Column::writeToBuf(char ** buf, const char * fmt) const { @@ -115,13 +139,25 @@ namespace ODBC { return writeToBuf(buf, "%s"); } template <> + Glib::ustring + _Column::compose() const + { + return Glib::ustring::compose("%1", value); + } + template <> + Glib::ustring + _Column::compose(const Glib::ustring & fmt) const + { + return Glib::ustring::compose(fmt, value); + } + template <> int _Column::writeToBuf(char ** buf, const char * fmt) const { - *buf = (char *)malloc(30); + *buf = (char *)malloc(300); struct tm t; t << value; - return strftime(*buf, 30, fmt, &t); + return strftime(*buf, sizeof(*buf), fmt, &t); } template <> int @@ -129,6 +165,22 @@ namespace ODBC { { return writeToBuf(buf, "%F %T"); } + template <> + Glib::ustring + _Column::compose(const Glib::ustring & fmt) const + { + char buf[300]; + struct tm t; + t << value; + int len = strftime(buf, sizeof(buf), fmt.c_str(), &t); + return Glib::ustring(buf, len); + } + template <> + Glib::ustring + _Column::compose() const + { + return compose("%F %T"); + } } void operator << (SQL_TIMESTAMP_STRUCT & target, const struct tm & src) diff --git a/libodbcpp/column.h b/libodbcpp/column.h index 9f3b93d..3b3370f 100644 --- a/libodbcpp/column.h +++ b/libodbcpp/column.h @@ -22,6 +22,8 @@ namespace ODBC { operator Glib::ustring () const; operator struct tm () const; virtual void rebind(Command *, unsigned int col) const = 0; + virtual 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; @@ -38,6 +40,8 @@ namespace ODBC { _Column(const Glib::ustring &, unsigned int); ~_Column() {} void rebind(Command *, unsigned int col) const; + Glib::ustring compose() const; + Glib::ustring compose(const Glib::ustring & fmt) const; int writeToBuf(char ** buf) const; int writeToBuf(char ** buf, const char * fmt) const; }; -- cgit v1.2.3