diff options
Diffstat (limited to 'libdbpp/selectcommand.cpp')
-rw-r--r-- | libdbpp/selectcommand.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libdbpp/selectcommand.cpp b/libdbpp/selectcommand.cpp index 662ced4..6cb8759 100644 --- a/libdbpp/selectcommand.cpp +++ b/libdbpp/selectcommand.cpp @@ -1,4 +1,20 @@ #include "selectcommand.h" +#include "error.h" + +namespace DB { + class ColumnIndexOutOfRange : public Error { + public: + ColumnIndexOutOfRange(unsigned int n) : colNo(n) { } + + const unsigned int colNo; + }; + class ColumnDoesNotExist : public Error { + public: + ColumnDoesNotExist(const Glib::ustring & n) : colName(n) { } + + const Glib::ustring colName; + }; +}; DB::SelectCommand::SelectCommand(const std::string & sql) : DB::Command(sql) @@ -9,3 +25,35 @@ DB::SelectCommand::~SelectCommand() { } +const DB::Column& +DB::SelectCommand::operator[](unsigned int n) const +{ + if (n < columns.size()) { + return **columns.get<0>().find(n); + } + throw ColumnIndexOutOfRange(n); +} + +const DB::Column& +DB::SelectCommand::operator[](const Glib::ustring & n) const +{ + typedef Columns::nth_index<1>::type CbyName; + CbyName::iterator i = columns.get<1>().find(n); + if (i != columns.get<1>().end()) { + return **i; + } + throw ColumnDoesNotExist(n); +} + +unsigned int +DB::SelectCommand::getOrdinal(const Glib::ustring & n) const +{ + return operator[](n).colNo; +} + +unsigned int +DB::SelectCommand::columnCount() const +{ + return columns.size(); +} + |