34 #include <drizzled/sql/exception.h>
35 #include <drizzled/sql/result_set.h>
42 static Exception exception_unknown_column(
"Unknown Column",
"S0022", ER_BAD_FIELD_ERROR);
43 static Exception exception_no_more_results(
"No additional rows founds",
"S0022", ER_BAD_FIELD_ERROR);
45 ResultSet::~ResultSet()
49 const std::string ResultSet::getString(
size_t column_number)
const
51 if (not isMore(column_number))
54 return (*_current_row)[column_number].value();
57 bool ResultSet::isNull(
size_t column_number)
const
59 return (*_current_row)[column_number].isNull();
62 void ResultSet::pushException(
const Exception &arg)
const
64 if (_exceptions.empty())
66 _exceptions.push(arg);
70 _exceptions.front().setNextException(arg);
73 bool ResultSet::isMore()
const
75 if (_current_row == _results.end())
77 pushException(exception_no_more_results);
84 bool ResultSet::isMore(
size_t column_number)
const
86 if (column_number >= _meta_data.getColumnCount())
88 pushException(exception_unknown_column);
96 bool ResultSet::error()
const
98 return not _exceptions.empty();
101 sql::Exception ResultSet::getException()
const
103 return _exceptions.empty() ? sql::Exception() : _exceptions.front();
106 const ResultSetMetaData &ResultSet::getMetaData()
const
111 void ResultSet::createRow()
113 assert(_meta_data.getColumnCount());
114 _results.resize(_results.size() +1);
115 _results.back().resize(_meta_data.getColumnCount());
118 void ResultSet::setColumn(
size_t column_number,
const std::string &arg)
120 assert(column_number < _meta_data.getColumnCount());
121 assert(_results.back().at(column_number).isNull() ==
false);
122 assert(_results.back().at(column_number).value().empty() ==
true);
123 _results.back().at(column_number).set_value(arg);
126 void ResultSet::setColumnNull(
size_t column_number)
128 assert(column_number < _meta_data.getColumnCount());
129 assert(_results.back().at(column_number).isNull() ==
false);
130 assert(_results.back().at(column_number).value().empty() ==
true);
131 _results.back().at(column_number).set_null();
134 bool ResultSet::next()
const
136 if (not _has_next_been_called)
138 _current_row= _results.begin();
139 _has_next_been_called=
true;
146 if (_current_row == _results.end())
152 std::ostream& operator<<(std::ostream& output,
const ResultSet &result_set)
154 while (result_set.next())
156 for (
size_t x= 0; x < result_set.getMetaData().getColumnCount(); x++)
158 if (result_set.isNull(x))
160 output <<
"<null>" <<
'\t';
164 output << result_set.getString(x) <<
'\t';