diff options
-rw-r--r-- | libdbpp/selectcommand.cpp | 22 | ||||
-rw-r--r-- | libdbpp/selectcommand.h | 7 |
2 files changed, 20 insertions, 9 deletions
diff --git a/libdbpp/selectcommand.cpp b/libdbpp/selectcommand.cpp index 6cb8759..f6b1d33 100644 --- a/libdbpp/selectcommand.cpp +++ b/libdbpp/selectcommand.cpp @@ -1,5 +1,7 @@ #include "selectcommand.h" #include "error.h" +#include <boost/multi_index_container.hpp> +#include <boost/multi_index/ordered_index.hpp> namespace DB { class ColumnIndexOutOfRange : public Error { @@ -17,19 +19,21 @@ namespace DB { }; DB::SelectCommand::SelectCommand(const std::string & sql) : - DB::Command(sql) + DB::Command(sql), + columns(new Columns) { } DB::SelectCommand::~SelectCommand() { + delete columns; } const DB::Column& DB::SelectCommand::operator[](unsigned int n) const { - if (n < columns.size()) { - return **columns.get<0>().find(n); + if (n < columns->size()) { + return **columns->get<0>().find(n); } throw ColumnIndexOutOfRange(n); } @@ -38,8 +42,8 @@ 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()) { + CbyName::iterator i = columns->get<1>().find(n); + if (i != columns->get<1>().end()) { return **i; } throw ColumnDoesNotExist(n); @@ -54,6 +58,12 @@ DB::SelectCommand::getOrdinal(const Glib::ustring & n) const unsigned int DB::SelectCommand::columnCount() const { - return columns.size(); + return columns->size(); +} + +void +DB::SelectCommand::insertColumn(ColumnPtr col) +{ + columns->insert(col); } diff --git a/libdbpp/selectcommand.h b/libdbpp/selectcommand.h index a5788ea..8ebaf9c 100644 --- a/libdbpp/selectcommand.h +++ b/libdbpp/selectcommand.h @@ -3,9 +3,9 @@ #include "command.h" #include "column.h" -#include <boost/multi_index_container.hpp> +#include <boost/multi_index_container_fwd.hpp> #include <boost/multi_index/indexed_by.hpp> -#include <boost/multi_index/ordered_index.hpp> +#include <boost/multi_index/ordered_index_fwd.hpp> #include <boost/multi_index/member.hpp> #include <visibility.h> @@ -21,6 +21,7 @@ namespace DB { const Column & operator[](const Glib::ustring &) const; unsigned int columnCount() const; unsigned int getOrdinal(const Glib::ustring &) const; + void insertColumn(ColumnPtr); typedef boost::multi_index_container<ColumnPtr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique<boost::multi_index::member<DB::Column, const unsigned int, &DB::Column::colNo>>, @@ -28,7 +29,7 @@ namespace DB { >> Columns; protected: - Columns columns; + Columns * columns; }; } |