20#include "big_decimal.h"
21#include "big_integer.h"
22#include "ignite_date.h"
23#include "ignite_date_time.h"
24#include "ignite_duration.h"
25#include "ignite_error.h"
26#include "ignite_period.h"
27#include "ignite_time.h"
28#include "ignite_timestamp.h"
29#include "ignite_type.h"
46 primitive() =
default;
128 : m_value(std::move(value)) {}
136 : m_value(std::string(value)) {}
144 : m_value(std::string(value)) {}
152 : m_value(std::move(value)) {}
161 : m_value(std::vector<std::byte>(buf, buf + len)) {}
169 : m_value(std::move(value)) {}
227 [[nodiscard]]
const T &
get()
const {
228 if constexpr (std::is_same_v<T, bool>
229 || std::is_same_v<T, std::int8_t>
230 || std::is_same_v<T, std::int16_t>
231 || std::is_same_v<T, std::int32_t>
232 || std::is_same_v<T, std::int64_t>
233 || std::is_same_v<T, float>
234 || std::is_same_v<T, double>
235 || std::is_same_v<T, uuid>
236 || std::is_same_v<T, std::string>
237 || std::is_same_v<T, std::vector<std::byte>>
238 || std::is_same_v<T, big_decimal>
239 || std::is_same_v<T, ignite_date>
240 || std::is_same_v<T, ignite_date_time>
241 || std::is_same_v<T, ignite_time>
242 || std::is_same_v<T, ignite_timestamp>
243 || std::is_same_v<T, ignite_period>
244 || std::is_same_v<T, ignite_duration>
246 return std::get<T>(m_value);
248 static_assert(
sizeof(T) == 0,
"Type is not an Ignite primitive type or is not yet supported");
257 [[nodiscard]]
bool is_null() const noexcept {
return m_value.index() == 0; }
264 [[nodiscard]] ignite_type
get_type() const noexcept {
265 auto type_idx = m_value.index();
266 type_idx = type_idx <= 13 ? type_idx : type_idx + 1;
267 return static_cast<ignite_type
>(type_idx);
277 friend constexpr bool operator==(
const primitive &lhs,
const primitive &rhs)
noexcept {
278 return lhs.m_value == rhs.m_value;
288 friend constexpr bool operator!=(
const primitive &lhs,
const primitive &rhs)
noexcept {
289 return lhs.m_value != rhs.m_value;
294 typedef std::variant<std::nullptr_t,
309 std::vector<std::byte>,
Definition big_decimal.h:35
A date together with time of day with nanosecond precision.
Definition ignite_date_time.h:32
A date.
Definition ignite_date.h:29
A time-based amount of time.
Definition ignite_duration.h:29
A date-based amount of time.
Definition ignite_period.h:29
A time of day with nanosecond precision.
Definition ignite_time.h:29
A moment of time.
Definition ignite_timestamp.h:29
primitive(std::int8_t value)
Definition primitive.h:71
bool is_null() const noexcept
Definition primitive.h:257
primitive(std::string value)
Definition primitive.h:127
primitive(uuid value)
Definition primitive.h:119
primitive(std::int64_t value)
Definition primitive.h:95
ignite_type get_type() const noexcept
Definition primitive.h:264
primitive(ignite_timestamp value)
Definition primitive.h:200
const T & get() const
Definition primitive.h:227
primitive(ignite_date_time value)
Definition primitive.h:184
primitive(std::int32_t value)
Definition primitive.h:87
primitive(big_decimal value)
Definition primitive.h:168
primitive(std::nullopt_t)
Definition primitive.h:56
primitive(ignite_period value)
Definition primitive.h:208
primitive(double value)
Definition primitive.h:111
primitive(ignite_date value)
Definition primitive.h:176
friend constexpr bool operator==(const primitive &lhs, const primitive &rhs) noexcept
Comparison operator.
Definition primitive.h:277
primitive(std::nullptr_t)
Definition primitive.h:51
primitive(std::string_view value)
Definition primitive.h:135
primitive(std::byte *buf, std::size_t len)
Definition primitive.h:160
primitive(const char *value)
Definition primitive.h:143
primitive(ignite_duration value)
Definition primitive.h:216
primitive(float value)
Definition primitive.h:103
primitive(bool value)
Definition primitive.h:63
primitive(ignite_time value)
Definition primitive.h:192
friend constexpr bool operator!=(const primitive &lhs, const primitive &rhs) noexcept
Comparison operator.
Definition primitive.h:288
primitive(std::vector< std::byte > value)
Definition primitive.h:151
primitive(std::int16_t value)
Definition primitive.h:79
Universally unique identifier (UUID).
Definition uuid.h:32