24#ifndef MYSQL_GTIDS_GTID_H
25#define MYSQL_GTIDS_GTID_H
53concept Is_gtid = std::derived_from<Test, detail::Gtid_base>;
59template <Is_ts
id Ts
id_tp>
108 [[nodiscard]]
const auto &
uuid()
const {
return m_tsid.uuid(); }
114 [[nodiscard]]
const auto &
tag()
const {
return m_tsid.tag(); }
137 return mysql::utils::call_and_catch([&sequence_number,
this] {
155 return tsid().assign(other.tsid());
164 throw std::domain_error{
"Out-of-range: sequence_number < minimum"};
167 throw std::domain_error{
"Out-of-range: sequence_number > maximum"};
324 return gtid1.tsid() == gtid2.tsid() &&
325 gtid1.get_sequence_number() == gtid2.get_sequence_number();
329 return !(gtid1 == gtid2);
333 auto tsid_cmp = gtid1.tsid() <=> gtid2.tsid();
334 if (tsid_cmp != 0)
return tsid_cmp;
335 return gtid1.get_sequence_number() <=> gtid2.get_sequence_number();
356template <mysql::gt
ids::Is_gt
id Gt
id_t>
359 return std::hash(gtid.tsid()) ^ std::hash(gtid.sequence_number());
Represents a single Gtid, consisting of a Tsid and a Sequence_number.
Definition: gtid.h:263
static Gtid_trivial throwing_make(const Is_tsid auto &tsid, Sequence_number sequence_number)
Return a new object constructed from the given Tsid and Sequence_number.
Definition: gtid.h:317
Gtid_trivial(const Is_gtid auto >id)
Construct a new object by copying the given Gtid.
Definition: gtid.h:292
Gtid_trivial(const mysql::uuids::Uuid &uuid, Sequence_number sequence_number)
Construct a new object from the given Uuid and Sequence_number, using an empty tag.
Definition: gtid.h:277
static Gtid_trivial throwing_make(const mysql::uuids::Uuid &uuid, Sequence_number sequence_number)
Return a new object constructed from the given Uuid and Sequence_number, using an empty tag.
Definition: gtid.h:308
Gtid_trivial()=default
Construct a new Gtid with all fields uninitialized.
static Gtid_trivial throwing_make(const mysql::uuids::Uuid &uuid, const Is_tag auto &tag, Sequence_number sequence_number)
Return a new object constructed from the given Uuid, Tag, and Sequence_number.
Definition: gtid.h:298
Gtid_trivial(const Is_tsid auto &tsid, Sequence_number sequence_number)
Construct a new object from the given Tsid and Sequence_number.
Definition: gtid.h:283
Gtid_trivial(const mysql::uuids::Uuid &uuid, const Is_tag auto &tag, Sequence_number sequence_number)
Construct a new object from the given Uuid, Tag, and Sequence_number.
Definition: gtid.h:270
Represents a single Gtid, consisting of a Tsid and a Sequence_number.
Definition: gtid.h:189
Gtid(const Is_tsid auto &tsid, Sequence_number sequence_number)
Construct a new object from the given Tsid and Sequence_number.
Definition: gtid.h:211
static Gtid throwing_make(const mysql::uuids::Uuid &uuid, Sequence_number sequence_number)
Return a new object constructed from the given Uuid and Sequence_number, using an empty tag.
Definition: gtid.h:242
static Gtid throwing_make(const Is_tsid auto &tsid, Sequence_number sequence_number)
Return a new object constructed from the given Tsid and Sequence_number.
Definition: gtid.h:253
Gtid(const mysql::uuids::Uuid &uuid, const Is_tag auto &tag, Sequence_number sequence_number)
Construct a new object from the given Uuid, Tag, and Sequence_number.
Definition: gtid.h:197
Gtid(const Is_gtid auto >id)
Construct a new object by copying the given Gtid.
Definition: gtid.h:220
Gtid()
Construct a new Gtid, leaving the UUID uninitialized, setting the tag to empty, and the sequence numb...
Definition: gtid.h:217
Gtid(const mysql::uuids::Uuid &uuid, Sequence_number sequence_number)
Construct a new object from the given Uuid and Sequence_number, using an empty tag.
Definition: gtid.h:205
static Gtid throwing_make(const mysql::uuids::Uuid &uuid, const Is_tag auto &tag, Sequence_number sequence_number)
Return a new object constructed from the given Uuid, Tag, and Sequence_number.
Definition: gtid.h:229
Top of the hierarchy.
Definition: gtid.h:49
Base class for classes representing a single Gtid, parameterized by the type of the Tsid.
Definition: gtid.h:60
auto & tsid()
Return non-const reference to the Tsid.
Definition: gtid.h:105
const auto & uuid() const
Return const reference to the Uuid.
Definition: gtid.h:108
void assert_sequence_number(Sequence_number sequence_number) const
Assert that the sequence number is in range.
Definition: gtid.h:162
void throwing_set_sequence_number(const Sequence_number &sequence_number)
Set and validate the Sequence_number.
Definition: gtid.h:127
Gtid_interface(const Is_tsid auto &tsid, Sequence_number sequence_number)
Construct a new object from the given Tsid and Sequence_number.
Definition: gtid.h:85
const auto & tsid() const
Return const reference to the Tsid.
Definition: gtid.h:102
const auto & tag() const
Return const reference to the Tag.
Definition: gtid.h:114
Tsid_tp m_tsid
The Tsid object.
Definition: gtid.h:172
auto & uuid()
Return non-const reference to the Uuid.
Definition: gtid.h:111
auto & tag()
Return non-const reference to the Tag.
Definition: gtid.h:117
Gtid_interface()=default
Construct a new, uninitialized object.
Gtid_interface(const mysql::uuids::Uuid &uuid, Sequence_number sequence_number)
Construct a new object from the given Uuid and Sequence_number, using an empty tag.
Definition: gtid.h:76
Gtid_interface(const mysql::uuids::Uuid &uuid, const Is_tag auto &tag, Sequence_number sequence_number)
Construct a new object from the given Uuid, Tag, and Sequence_number.
Definition: gtid.h:65
auto assign(const Is_gtid auto &other)
Copy from other to this.
Definition: gtid.h:146
Gtid_interface(const Is_gtid auto >id)
Construct a new object by copying the given Gtid.
Definition: gtid.h:98
auto set_sequence_number(const Sequence_number &sequence_number)
Set and validate the Sequence_number.
Definition: gtid.h:135
Sequence_number get_sequence_number() const
Return the Sequence_number.
Definition: gtid.h:120
Sequence_number m_sequence_number
The Sequence_number.
Definition: gtid.h:179
Holds data for a UUID.
Definition: uuid.h:49
True if Test is one of the tag classes.
Definition: tag.h:192
Definition: fts0fts.cc:236
uint64_t Sequence_number
The type of the sequence number component of a GTID.
Definition: sequence_number.h:39
constexpr Sequence_number sequence_number_max_inclusive
The largest allowed value for a GTID sequence number.
Definition: sequence_number.h:46
auto operator<=>(const Is_gtid auto >id1, const Is_gtid auto >id2)
Definition: gtid.h:332
constexpr Sequence_number sequence_number_min
The smallest allowed value for a GTID sequence number.
Definition: sequence_number.h:50
bool operator!=(const Is_gtid auto >id1, const Is_gtid auto >id2)
Definition: gtid.h:328
bool operator==(const Is_gtid auto >id1, const Is_gtid auto >id2)
Definition: gtid.h:323
Define std::hash<Gtid>.
Definition: gtid.h:355
std::size_t operator()(const Gtid_t >id) const
Definition: gtid.h:358