// // Copyright (c) 2019-2023 Ruben Perez Hidalgo (rubenperez038 at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #ifndef BHO_MYSQL_IMPL_FIELD_VIEW_HPP #define BHO_MYSQL_IMPL_FIELD_VIEW_HPP #pragma once #include #include #include #include #include #include namespace bho { namespace mysql { namespace detail { inline bool blobs_equal(blob_view b1, blob_view b2) { if (b1.size() != b2.size()) return false; return b1.empty() || std::memcmp(b1.data(), b2.data(), b2.size()) == 0; } } // namespace detail } // namespace mysql } // namespace bho BHO_CXX14_CONSTEXPR inline bho::mysql::field_kind bho::mysql::field_view::kind() const noexcept { switch (impl_.ikind) { case internal_kind::null: return field_kind::null; case internal_kind::int64: return field_kind::int64; case internal_kind::uint64: return field_kind::uint64; case internal_kind::string: return field_kind::string; case internal_kind::blob: return field_kind::blob; case internal_kind::float_: return field_kind::float_; case internal_kind::double_: return field_kind::double_; case internal_kind::date: return field_kind::date; case internal_kind::datetime: return field_kind::datetime; case internal_kind::time: return field_kind::time; case internal_kind::field_ptr: return impl_.repr.field_ptr->kind(); // sv_offset values must be converted via offset_to_string_view before calling any other fn default: return field_kind::null; } } BHO_CXX14_CONSTEXPR std::int64_t bho::mysql::field_view::as_int64() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::int64); return impl_.repr.int64; } BHO_CXX14_CONSTEXPR std::uint64_t bho::mysql::field_view::as_uint64() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::uint64); return impl_.repr.uint64; } BHO_CXX14_CONSTEXPR bho::mysql::string_view bho::mysql::field_view::as_string() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::string); return impl_.repr.string; } BHO_CXX14_CONSTEXPR bho::mysql::blob_view bho::mysql::field_view::as_blob() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::blob); return impl_.repr.blob; } BHO_CXX14_CONSTEXPR float bho::mysql::field_view::as_float() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::float_); return impl_.repr.float_; } BHO_CXX14_CONSTEXPR double bho::mysql::field_view::as_double() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::double_); return impl_.repr.double_; } BHO_CXX14_CONSTEXPR bho::mysql::date bho::mysql::field_view::as_date() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::date); return impl_.repr.date_; } BHO_CXX14_CONSTEXPR bho::mysql::datetime bho::mysql::field_view::as_datetime() const { if (is_field_ptr()) return impl_.repr.field_ptr->as(); check_kind(internal_kind::datetime); return impl_.repr.datetime_; } BHO_CXX14_CONSTEXPR bho::mysql::time bho::mysql::field_view::as_time() const { if (is_field_ptr()) return impl_.repr.field_ptr->as