mirror of
https://github.com/rbock/sqlpp11.git
synced 2024-11-15 20:31:16 +08:00
Refactored of result and result row (clearer structure depending on connectors)
This commit is contained in:
parent
2b43d3bc15
commit
a915bd9e50
@ -40,21 +40,19 @@ namespace sqlpp
|
|||||||
using result_row_t = typename db_result_t::result_row_t;
|
using result_row_t = typename db_result_t::result_row_t;
|
||||||
|
|
||||||
db_result_t _db_result;
|
db_result_t _db_result;
|
||||||
result_row_t _result_row;
|
db_result_t _end;
|
||||||
result_row_t _end;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
result_t():
|
result_t():
|
||||||
_db_result(),
|
_db_result(),
|
||||||
_result_row(),
|
|
||||||
_end()
|
_end()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
result_t(db_result_t&& result):
|
result_t(db_result_t&& result):
|
||||||
_db_result(std::move(result)),
|
_db_result(std::move(result)),
|
||||||
_result_row(_db_result.next()),
|
_end()
|
||||||
_end({})
|
{
|
||||||
{}
|
}
|
||||||
|
|
||||||
result_t(const result_t&) = delete;
|
result_t(const result_t&) = delete;
|
||||||
result_t(result_t&&) = default;
|
result_t(result_t&&) = default;
|
||||||
@ -65,11 +63,9 @@ namespace sqlpp
|
|||||||
class iterator
|
class iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
iterator(result_t& result, result_row_t& result_row):
|
iterator(db_result_t& result):
|
||||||
_result(result),
|
_result(result)
|
||||||
_result_row(result_row)
|
|
||||||
{
|
{
|
||||||
//std::cerr << "result::iterator::constructor" << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const result_row_t& operator*() const
|
const result_row_t& operator*() const
|
||||||
@ -84,7 +80,7 @@ namespace sqlpp
|
|||||||
|
|
||||||
bool operator==(const iterator& rhs) const
|
bool operator==(const iterator& rhs) const
|
||||||
{
|
{
|
||||||
return _result_row == rhs._result_row;
|
return _result.front() == rhs._result.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const iterator& rhs) const
|
bool operator!=(const iterator& rhs) const
|
||||||
@ -97,33 +93,32 @@ namespace sqlpp
|
|||||||
_result.pop_front();
|
_result.pop_front();
|
||||||
}
|
}
|
||||||
|
|
||||||
result_t& _result;
|
db_result_t& _result;
|
||||||
result_row_t& _result_row;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
iterator begin()
|
iterator begin()
|
||||||
{
|
{
|
||||||
return iterator(*this, _result_row);
|
return iterator(_db_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator end()
|
iterator end()
|
||||||
{
|
{
|
||||||
return iterator(*this, _end);
|
return iterator(_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result_row_t& front() const
|
const result_row_t& front() const
|
||||||
{
|
{
|
||||||
return _result_row;
|
return _db_result.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool empty() const
|
bool empty() const
|
||||||
{
|
{
|
||||||
return _result_row == _end;
|
return _db_result.front() == _end.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pop_front()
|
void pop_front()
|
||||||
{
|
{
|
||||||
_result_row = _db_result.next();
|
_db_result.pop_front();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -106,20 +106,25 @@ namespace sqlpp
|
|||||||
raw_result_row_t _raw_result_row;
|
raw_result_row_t _raw_result_row;
|
||||||
|
|
||||||
result_row_t():
|
result_row_t():
|
||||||
_raw_result_row(),
|
_impl({}),
|
||||||
_impl(_raw_result_row),
|
_raw_result_row({}),
|
||||||
_is_row(false)
|
_is_row(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
result_row_t(const raw_result_row_t& raw_result_row, const T&):
|
result_row_t(const raw_result_row_t& raw_result_row, const T&):
|
||||||
|
_impl(raw_result_row),
|
||||||
_raw_result_row(raw_result_row),
|
_raw_result_row(raw_result_row),
|
||||||
_impl(_raw_result_row),
|
|
||||||
_is_row(_raw_result_row.data != nullptr)
|
_is_row(_raw_result_row.data != nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result_row_t(const result_row_t&) = delete;
|
||||||
|
result_row_t(result_row_t&&) = default;
|
||||||
|
result_row_t& operator=(const result_row_t&) = delete;
|
||||||
|
result_row_t& operator=(result_row_t&&) = default;
|
||||||
|
|
||||||
result_row_t& operator=(const raw_result_row_t& raw_result_row)
|
result_row_t& operator=(const raw_result_row_t& raw_result_row)
|
||||||
{
|
{
|
||||||
_impl::operator=(raw_result_row);
|
_impl::operator=(raw_result_row);
|
||||||
@ -128,7 +133,7 @@ namespace sqlpp
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const result_row_t& rhs)
|
bool operator==(const result_row_t& rhs) const
|
||||||
{
|
{
|
||||||
return _raw_result_row == rhs._raw_result_row;
|
return _raw_result_row == rhs._raw_result_row;
|
||||||
}
|
}
|
||||||
@ -146,12 +151,21 @@ namespace sqlpp
|
|||||||
using _field_type = detail::text::_result_entry_t<0>;
|
using _field_type = detail::text::_result_entry_t<0>;
|
||||||
static constexpr size_t _last_static_index = _impl::_last_index;
|
static constexpr size_t _last_static_index = _impl::_last_index;
|
||||||
|
|
||||||
|
raw_result_row_t _raw_result_row;
|
||||||
bool _is_row;
|
bool _is_row;
|
||||||
std::vector<std::string> _dynamic_columns;
|
std::vector<std::string> _dynamic_columns;
|
||||||
std::map<std::string, _field_type> _dynamic_fields;
|
std::map<std::string, _field_type> _dynamic_fields;
|
||||||
|
|
||||||
|
dynamic_result_row_t():
|
||||||
|
_impl({}),
|
||||||
|
_raw_result_row({}),
|
||||||
|
_is_row(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
dynamic_result_row_t(const raw_result_row_t& raw_result_row, std::vector<std::string> dynamic_columns):
|
dynamic_result_row_t(const raw_result_row_t& raw_result_row, std::vector<std::string> dynamic_columns):
|
||||||
detail::result_row_impl<0, 0, NamedExpr...>(raw_result_row),
|
_impl(raw_result_row),
|
||||||
|
_raw_result_row(raw_result_row),
|
||||||
_is_row(raw_result_row.data != nullptr)
|
_is_row(raw_result_row.data != nullptr)
|
||||||
{
|
{
|
||||||
raw_result_row_t dynamic_row = raw_result_row;
|
raw_result_row_t dynamic_row = raw_result_row;
|
||||||
@ -176,9 +190,15 @@ namespace sqlpp
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dynamic_result_row_t(const dynamic_result_row_t&) = delete;
|
||||||
|
dynamic_result_row_t(dynamic_result_row_t&&) = default;
|
||||||
|
dynamic_result_row_t& operator=(const dynamic_result_row_t&) = delete;
|
||||||
|
dynamic_result_row_t& operator=(dynamic_result_row_t&&) = default;
|
||||||
|
|
||||||
dynamic_result_row_t& operator=(const raw_result_row_t& raw_result_row)
|
dynamic_result_row_t& operator=(const raw_result_row_t& raw_result_row)
|
||||||
{
|
{
|
||||||
detail::result_row_impl<0, 0, NamedExpr...>::operator=(raw_result_row);
|
detail::result_row_impl<0, 0, NamedExpr...>::operator=(raw_result_row);
|
||||||
|
_raw_result_row = raw_result_row;
|
||||||
_is_row = raw_result_row.data != nullptr;
|
_is_row = raw_result_row.data != nullptr;
|
||||||
|
|
||||||
raw_result_row_t dynamic_row = raw_result_row;
|
raw_result_row_t dynamic_row = raw_result_row;
|
||||||
@ -204,6 +224,11 @@ namespace sqlpp
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator==(const dynamic_result_row_t& rhs) const
|
||||||
|
{
|
||||||
|
return _raw_result_row == rhs._raw_result_row;
|
||||||
|
}
|
||||||
|
|
||||||
const _field_type& at(const std::string& field_name) const
|
const _field_type& at(const std::string& field_name) const
|
||||||
{
|
{
|
||||||
return _dynamic_fields.at(field_name);
|
return _dynamic_fields.at(field_name);
|
||||||
|
@ -568,6 +568,11 @@ namespace sqlpp
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const typename ExpressionList::_dynamic_names_t& get_dynamic_names() const
|
||||||
|
{
|
||||||
|
return _expression_list._dynamic_expressions._dynamic_expression_names;
|
||||||
|
}
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
template<typename Db>
|
template<typename Db>
|
||||||
auto run(Db& db) const
|
auto run(Db& db) const
|
||||||
|
@ -51,6 +51,12 @@ namespace sqlpp
|
|||||||
template<size_t index>
|
template<size_t index>
|
||||||
struct _result_entry_t
|
struct _result_entry_t
|
||||||
{
|
{
|
||||||
|
_result_entry_t():
|
||||||
|
_is_valid(false),
|
||||||
|
_is_null(true),
|
||||||
|
_value("")
|
||||||
|
{}
|
||||||
|
|
||||||
_result_entry_t(const raw_result_row_t& row):
|
_result_entry_t(const raw_result_row_t& row):
|
||||||
_is_valid(row.data != nullptr),
|
_is_valid(row.data != nullptr),
|
||||||
_is_null(row.data == nullptr or row.data[index] == nullptr),
|
_is_null(row.data == nullptr or row.data[index] == nullptr),
|
||||||
|
@ -298,8 +298,6 @@ int main()
|
|||||||
decltype(t.alpha)::_value_type::_base_value_type,
|
decltype(t.alpha)::_value_type::_base_value_type,
|
||||||
decltype(f.epsilon)::_value_type::_base_value_type>::value, "Two bigint columns must have identical base_value_type");
|
decltype(f.epsilon)::_value_type::_base_value_type>::value, "Two bigint columns must have identical base_value_type");
|
||||||
static_assert(std::is_same<A, B>::value, "select with identical columns(name/value_type) need to have identical result_types");
|
static_assert(std::is_same<A, B>::value, "select with identical columns(name/value_type) need to have identical result_types");
|
||||||
static_assert(sqlpp::is_regular<A>::value, "type requirement");
|
|
||||||
static_assert(sqlpp::is_regular<B>::value, "type requirement");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user