summaryrefslogtreecommitdiff
path: root/libdbpp/selectcommand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libdbpp/selectcommand.cpp')
-rw-r--r--libdbpp/selectcommand.cpp48
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();
+}
+