execution_state.hpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // Copyright (c) 2019-2023 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_EXECUTION_STATE_HPP
  8. #define BOOST_MYSQL_IMPL_EXECUTION_STATE_HPP
  9. #pragma once
  10. #include <boost/mysql/execution_state.hpp>
  11. #include <boost/mysql/metadata.hpp>
  12. #include <boost/mysql/metadata_mode.hpp>
  13. #include <boost/mysql/detail/auxiliar/access_fwd.hpp>
  14. struct boost::mysql::detail::execution_state_access
  15. {
  16. static void reset(execution_state& st, detail::resultset_encoding encoding) noexcept
  17. {
  18. st.seqnum_ = 0;
  19. st.encoding_ = encoding;
  20. st.meta_.clear();
  21. st.eof_received_ = false;
  22. }
  23. static void complete(execution_state& st, const detail::ok_packet& pack)
  24. {
  25. st.affected_rows_ = pack.affected_rows.value;
  26. st.last_insert_id_ = pack.last_insert_id.value;
  27. st.warnings_ = pack.warnings;
  28. st.info_.assign(pack.info.value.begin(), pack.info.value.end());
  29. st.eof_received_ = true;
  30. }
  31. static void prepare_meta(execution_state& st, std::size_t num_fields) { st.meta_.reserve(num_fields); }
  32. static void add_meta(
  33. execution_state& st,
  34. const detail::column_definition_packet& pack,
  35. metadata_mode mode
  36. )
  37. {
  38. st.meta_.push_back(metadata_access::construct(pack, mode == metadata_mode::full));
  39. }
  40. static resultset_encoding get_encoding(const execution_state& st) noexcept { return st.encoding_; }
  41. static std::uint8_t& get_sequence_number(execution_state& st) noexcept { return st.seqnum_; }
  42. static std::vector<metadata>& get_metadata(execution_state& st) noexcept { return st.meta_; }
  43. };
  44. #endif