mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-14 00:42:53 +00:00
row_view and row as_vector
This commit is contained in:
@@ -80,6 +80,11 @@ public:
|
||||
return row_view(fields_.data(), fields_.size());
|
||||
}
|
||||
|
||||
template <class Allocator>
|
||||
void as_vector(std::vector<field, Allocator>& out) const { out.assign(begin(), end()); }
|
||||
|
||||
std::vector<field> as_vector() const { return std::vector<field>(begin(), end()); }
|
||||
|
||||
// TODO: hide this
|
||||
using detail::row_base::clear;
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <cstddef>
|
||||
#include <iosfwd>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
namespace boost {
|
||||
namespace mysql {
|
||||
@@ -40,6 +41,11 @@ public:
|
||||
bool empty() const noexcept { return size_ == 0; }
|
||||
std::size_t size() const noexcept { return size_; }
|
||||
|
||||
template <class Allocator>
|
||||
void as_vector(std::vector<field, Allocator>& out) const { out.assign(begin(), end()); }
|
||||
|
||||
std::vector<field> as_vector() const { return std::vector<field>(begin(), end()); }
|
||||
|
||||
// Required by iterators
|
||||
const row_view* operator->() const noexcept { return this; }
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
using boost::mysql::row;
|
||||
using boost::mysql::row_view;
|
||||
using boost::mysql::field_view;
|
||||
using boost::mysql::field;
|
||||
using boost::mysql::make_field_views;
|
||||
using boost::mysql::test::makerow;
|
||||
using boost::mysql::detail::stringize;
|
||||
@@ -437,6 +438,35 @@ BOOST_AUTO_TEST_CASE(non_empty)
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(as_vector)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
std::vector<field> vec { field_view("abc") };
|
||||
row r;
|
||||
r.as_vector(vec);
|
||||
BOOST_TEST(vec.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_empty)
|
||||
{
|
||||
std::vector<field> vec { field_view("abc") };
|
||||
row r = makerow(42u, "abc");
|
||||
r.as_vector(vec);
|
||||
BOOST_TEST(vec.size() == 2);
|
||||
BOOST_TEST(vec[0].as_uint64() == 42u);
|
||||
BOOST_TEST(vec[1].as_string() == "abc");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(return_value)
|
||||
{
|
||||
auto vec = makerow(42u, "abc").as_vector();
|
||||
BOOST_TEST(vec.size() == 2);
|
||||
BOOST_TEST(vec[0].as_uint64() == 42u);
|
||||
BOOST_TEST(vec[1].as_string() == "abc");
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
// operator== relies on row_view's operator==, so only
|
||||
// a small subset of tests here
|
||||
BOOST_AUTO_TEST_SUITE(operator_equals)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <boost/mysql/row_view.hpp>
|
||||
#include <boost/mysql/field_view.hpp>
|
||||
#include <boost/mysql/field.hpp>
|
||||
#include <boost/mysql/detail/auxiliar/stringize.hpp>
|
||||
#include <boost/test/tools/context.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
@@ -17,6 +18,7 @@
|
||||
|
||||
using boost::mysql::row_view;
|
||||
using boost::mysql::field_view;
|
||||
using boost::mysql::field;
|
||||
using boost::mysql::detail::stringize;
|
||||
using boost::mysql::make_field_views;
|
||||
using boost::mysql::test::make_fv_vector;
|
||||
@@ -163,6 +165,36 @@ BOOST_AUTO_TEST_CASE(multiple_elms)
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(as_vector)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
std::vector<field> vec { field_view("abc") };
|
||||
row_view v;
|
||||
v.as_vector(vec);
|
||||
BOOST_TEST(vec.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_empty)
|
||||
{
|
||||
std::vector<field> vec { field_view("abc") };
|
||||
auto fields = make_field_views(42u, "abc");
|
||||
row_view v (fields.data(), fields.size());
|
||||
v.as_vector(vec);
|
||||
BOOST_TEST(vec.size() == 2);
|
||||
BOOST_TEST(vec[0].as_uint64() == 42u);
|
||||
BOOST_TEST(vec[1].as_string() == "abc");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(return_value)
|
||||
{
|
||||
auto fields = make_field_views(42u, "abc");
|
||||
row_view v (fields.data(), fields.size());
|
||||
auto vec = v.as_vector();
|
||||
BOOST_TEST(vec.size() == 2);
|
||||
BOOST_TEST(vec[0].as_uint64() == 42u);
|
||||
BOOST_TEST(vec[1].as_string() == "abc");
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
BOOST_AUTO_TEST_CASE(operator_equals)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user