read_some_rows_dynamic.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //
  2. // Copyright (c) 2019-2024 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. #ifndef BOOST_MYSQL_IMPL_INTERNAL_SANSIO_READ_SOME_ROWS_DYNAMIC_HPP
  8. #define BOOST_MYSQL_IMPL_INTERNAL_SANSIO_READ_SOME_ROWS_DYNAMIC_HPP
  9. #include <boost/mysql/diagnostics.hpp>
  10. #include <boost/mysql/error_code.hpp>
  11. #include <boost/mysql/rows_view.hpp>
  12. #include <boost/mysql/detail/access.hpp>
  13. #include <boost/mysql/detail/algo_params.hpp>
  14. #include <boost/mysql/detail/execution_processor/execution_processor.hpp>
  15. #include <boost/mysql/detail/execution_processor/execution_state_impl.hpp>
  16. #include <boost/mysql/impl/internal/sansio/connection_state_data.hpp>
  17. #include <boost/mysql/impl/internal/sansio/read_some_rows.hpp>
  18. #include <cstddef>
  19. namespace boost {
  20. namespace mysql {
  21. namespace detail {
  22. class read_some_rows_dynamic_algo : public read_some_rows_algo
  23. {
  24. public:
  25. read_some_rows_dynamic_algo(read_some_rows_dynamic_algo_params params) noexcept
  26. : read_some_rows_algo(read_some_rows_algo_params{params.diag, params.exec_st, output_ref()})
  27. {
  28. }
  29. rows_view result(const connection_state_data& st) const
  30. {
  31. std::size_t num_rows = read_some_rows_algo::result(st);
  32. std::size_t num_cols = static_cast<const execution_state_impl&>(processor()).meta().size();
  33. return access::construct<rows_view>(st.shared_fields.data(), num_rows * num_cols, num_cols);
  34. }
  35. };
  36. } // namespace detail
  37. } // namespace mysql
  38. } // namespace boost
  39. #endif